SIMatrix4
 
 
 

SIMatrix4

Object Hierarchy | Related C++ Class: CMatrix4

Description

A double precision floating point 4 by 4 matrix. Where the translation values are found in m12, m13, m14, m15.

| m0 m1 m2 m3 |

| m4 m5 m6 m7 |

| m8 m9 m10 m11 |

| m12 m13 m14 m15 |

Methods

Get Get2 Invert InvertInPlace
Mul MulInPlace Set SetIdentity
Transpose TransposeInPlace TransposeInverse TransposeInverseInPlace

Properties

Value      
       

Examples

1. JScript Example

/*
        Demonstration of the Matrix4 object used to 
        print the contents of a Transformation
*/
var oNull = ActiveSceneRoot.AddNull() ;
var oSITransformation = oNull.Kinematics.Local.Transform ;
Application.LogMessage( "Default Transformation Matrix" ) ;
PrintTransformationAsMatrix( oSITransformation ) ; 
oSITransformation.SetTranslationFromValues( 5, 6, 7) ;
oSITransformation.SetScalingFromValues( 1, 4, 1) ;
Application.LogMessage( "Transformation with scaling and translation" ) ;
PrintTransformationAsMatrix( oSITransformation ) ; 
function PrintTransformationAsMatrix( in_Transform )
{
        var oMatrix4 = XSIMath.CreateMatrix4(); 
        oSITransformation.GetMatrix4(oMatrix4) ;
        for ( var row = 0 ; row < 4 ; row++ )
        {       
                strLine = "" ;
                for( var col = 0 ; col < 4 ; col++ )
                {
                        strLine += oMatrix4.Value( row, col ) + "\t\t";
                }
                Application.LogMessage( strLine ) ;
        }
}
//Output:
//INFO : Default Transformation Matrix
//INFO : 1              0               0               0               
//INFO : 0              1               0               0               
//INFO : 0              0               1               0               
//INFO : 0              0               0               1               
//INFO : Transformation with scaling and translation
//INFO : 1              0               0               0               
//INFO : 0              4               0               0               
//INFO : 0              0               1               0               
//INFO : 5              6               7               1

2. VBScript Example

'
' This illustrates how to convert a position from local coordinates
' to global coordinates
'
set oRoot = Application.ActiveProject.ActiveScene.Root
if Selection.Count = 0 then
        ' create a sample scene
        set oModel = oRoot.AddModel
        oModel.posx.value = 5
        set oObject = oModel.AddNull
        oObject.posx.value = 5
else
        set oObject = Selection(0)
end if
'
' Create transformation matrix4 from global transform
'
set oGlobalParameters = oObject.kinematics.global.parameters
Set globalScl = XSIMath.CreateVector3
call globalScl.Set( _
        oGlobalParameters("sclx").value, _
        oGlobalParameters("scly").value, _
        oGlobalParameters("sclz").value )
Set globalRot = XSIMath.CreateVector3
call globalRot.Set( _
        oGlobalParameters("rotx").value, _
        oGlobalParameters("roty").value, _
        oGlobalParameters("rotz").value )
Set globalTrs = XSIMath.CreateVector3
call globalTrs.Set( _
        oGlobalParameters("posx").value, _
        oGlobalParameters("posy").value, _
        oGlobalParameters("posz").value )
set m4Global = CreateMatrix4(globalScl,globalRot,globalTrs)
'
' get local position
'
Set v3Pos = XSIMath.CreateVector3
call v3Pos.Set( oObject.posx.value, oObject.posy.value, oObject.posz.value )
Application.LogMessage "local position = " & v3Pos.x & ", " & v3Pos.y & ", " & v3Pos.z
'
' transform local to global position
'
Set v3Pos = XSIMath.CreateVector3
call v3Pos.MulByMatrix4( v3Pos, m4Global )
Application.LogMessage "global position = " & v3Pos.x & ", " & v3Pos.y & ", " & v3Pos.z
'
' Create and initialize SIMatrix4 using from the scaling, rotation and
' translation values (SIVector3)
'
Function CreateMatrix4( inv3Scl, inv3Rot, inv3Pos )
        Dim l_Rot, l_Trs, l_Matrix, l_RadToDeg, l_DegToRad
        Set l_Rot = XSIMath.CreateVector3
        Set l_Trs = XSIMath.CreateTransform
        Set l_Matrix = XSIMath.CreateMatrix4
        l_RadToDeg = 180.0 / 3.1415926535897932
        l_DegToRad = 3.1415926535897932 / 180.0
        'Conversion of the rotation angles into radians
        l_Rot.Copy inv3Rot
        l_Rot.ScaleInPlace l_DegToRad
        'Create an SI Transform first.
        l_Trs.SetScaling inv3Scl
        l_Trs.SetTranslation inv3Pos
        l_Trs.SetRotationFromXYZAngles l_Rot
        'Extract a Matrix from that transform.
        l_Trs.GetMatrix4 l_Matrix
        Set CreateMatrix4 = l_Matrix
End Function

See Also

SIMatrix4.Set SIVector3 SIMatrix3 SIMatrix4 SIRotation SITransformation.GetMatrix4 SIQuaternion