XSITransform.h

00001 /******************************************************************************\
00002 *
00003 * File:          Transform.h
00004 * Creation date: January 15, 2002
00005 * Purpose:       Declaration of class 'Transform'
00006 *
00007 \******************************************************************************/
00008 #ifndef _XSITRANSFORM_H
00009 #define _XSITRANSFORM_H
00010 
00011 #include "Template.h"
00012 #include "XSILimit.h"
00013 
00018 class XSIEXPORT CSLXSITranslate
00019     : public CSLTemplate
00020 {
00021 public:
00022     CSLXSITranslate(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00023     virtual ~CSLXSITranslate();
00024 
00025     virtual ETemplateType Type();
00026 
00027     virtual SI_Error Synchronize();
00028 
00029     CSIBCVector3D       GetTranslation();
00030     CSLVector3DProxy&   GetTranslationProxy();
00031     void                SetTranslation(CSIBCVector3D& in_Translation);
00032 
00033     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00034     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00035 
00040     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00041 private:
00042     CSLVector3DProxy    m_Translation;
00043 };
00044 
00049 class XSIEXPORT CSLXSIRotate
00050     : public CSLTemplate
00051 {
00052 public:
00053     CSLXSIRotate(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00054     virtual ~CSLXSIRotate();
00055 
00056     virtual ETemplateType Type();
00057 
00058     virtual SI_Error Synchronize();
00059 
00060     CSIBCVector3D       GetAxis();
00061     CSLVector3DProxy&   GetAxisProxy();
00062     void                SetAxis(CSIBCVector3D& in_Axis);
00063 
00064     float               GetAngle();
00065     CSLFloatProxy&      GetAngleProxy();
00066     void                SetAngle(float in_Angle);
00067 
00068     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00069     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00070 
00075     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00076 private:
00077     CSLVector3DProxy    m_Axis;
00078     CSLFloatProxy       m_Angle;
00079 };
00080 
00085 class XSIEXPORT CSLXSIScale
00086     : public CSLTemplate
00087 {
00088 public:
00089     CSLXSIScale(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00090     virtual ~CSLXSIScale();
00091 
00092     virtual ETemplateType Type();
00093 
00094     virtual SI_Error Synchronize();
00095 
00096     CSIBCVector3D       GetScale();
00097     CSLVector3DProxy&   GetScaleProxy();
00098     void                SetScale(CSIBCVector3D& in_Scale);
00099 
00100     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00101     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00102 
00107     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00108 private:
00109     CSLVector3DProxy    m_Scale;
00110 };
00111 
00116 class XSIEXPORT CSLXSIShear
00117     : public CSLTemplate
00118 {
00119 public:
00120     CSLXSIShear(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00121     virtual ~CSLXSIShear();
00122 
00123     virtual ETemplateType Type();
00124 
00125     virtual SI_Error Synchronize();
00126 
00127     CSIBCVector3D       GetFirstAxis();
00128     CSLVector3DProxy&   GetFirstAxisProxy();
00129     void                SetFirstAxis(CSIBCVector3D& in_Axis);
00130 
00131     CSIBCVector3D       GetSecondAxis();
00132     CSLVector3DProxy&   GetSecondAxisProxy();
00133     void                SetSecondAxis(CSIBCVector3D& in_Axis);
00134 
00135     float               GetAngle();
00136     CSLFloatProxy&      GetAngleProxy();
00137     void                SetAngle(float in_Angle);
00138 
00139     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00140     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00141 
00146     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00147 private:
00148     CSLVector3DProxy    m_Axis1;
00149     CSLVector3DProxy    m_Axis2;
00150     CSLFloatProxy       m_Angle;
00151 };
00152 
00157 class XSIEXPORT CSLXSILookat
00158     : public CSLTemplate
00159 {
00160 public:
00161     CSLXSILookat(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00162     virtual ~CSLXSILookat();
00163 
00164     virtual ETemplateType Type();
00165 
00166     virtual SI_Error Synchronize();
00167 
00168     CSIBCVector3D       GetPosition();
00169     CSLVector3DProxy&   GetPositionProxy();
00170     void                SetPosition(CSIBCVector3D& in_Position);
00171     CSIBCVector3D       GetInterest();
00172     CSLVector3DProxy&   GetInterestProxy();
00173     void                SetInterest(CSIBCVector3D& in_Interest);
00174     CSIBCVector3D       GetUpvector();
00175     CSLVector3DProxy&   GetUpvectorProxy();
00176     void                SetUpvector(CSIBCVector3D& in_Upvector);
00177 
00178     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00179     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00184     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00185 
00186 private:
00187     CSLVector3DProxy    m_Position;
00188     CSLVector3DProxy    m_Interest;
00189     CSLVector3DProxy    m_Upvector;
00190 };
00191 
00196 class XSIEXPORT CSLXSIMatrix
00197     : public CSLTemplate
00198 {
00199 public:
00200     CSLXSIMatrix(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00201     virtual ~CSLXSIMatrix();
00202 
00203     virtual ETemplateType Type();
00204 
00205     virtual SI_Error Synchronize();
00206 
00207     CSIBCMatrix4x4      GetMatrix();
00208     void                SetMatrix(CSIBCMatrix4x4& in_Matrix);
00209 
00210     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00211     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00212 
00217     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00218 private:
00219     CSLMatrix4x4Proxy   m_Matrix;
00220 };
00221 
00226 class XSIEXPORT CSLXSIPolymatricks
00227     : public CSLTemplate
00228 {
00229 public:
00230     CSLXSIPolymatricks(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00231     virtual ~CSLXSIPolymatricks();
00232 
00233     virtual ETemplateType Type();
00234 
00235     virtual SI_Error Synchronize();
00236 
00237     CSLTemplate**               GetTransformNodes();
00238     int                         GetTransformNodeCount();
00239     SI_Error                    RemoveTransformNode(CSLTemplate *in_pNode);
00240     SI_Error                    RemoveTransformNode(int index);
00241     SI_Error                    ClearTransformNodes();
00242 
00243     CSLXSITranslate*            AddXSITranslate();
00244     CSLXSIRotate*               AddXSIRotate();
00245     CSLXSIScale*                AddXSIScale();
00246     CSLXSIShear*                AddXSIShear();
00247     CSLXSILookat*               AddXSILookat();
00248     CSLXSIMatrix*               AddXSIMatrix();
00249 
00250     CSLXSITranslate*            ConnectXSITranslate(CSLXSITranslate *in_pNode);
00251     CSLXSIRotate*               ConnectXSIRotate(CSLXSIRotate *in_pNode);
00252     CSLXSIScale*                ConnectXSIScale(CSLXSIScale *in_pNode);
00253     CSLXSIShear*                ConnectXSIShear(CSLXSIShear *in_pNode);
00254     CSLXSILookat*               ConnectXSILookat(CSLXSILookat *in_pNode);
00255     CSLXSIMatrix*               ConnectXSIMatrix(CSLXSIMatrix *in_pNode);
00256 
00257     virtual const SI_Char*      GetParameterName(CSLAnimatableType* in_pParameter);
00258 
00259 private:
00260     CSIBCArray<CSLTemplate*>    m_TransformNodes;
00261 };
00262 
00268 class XSIEXPORT CSLXSITransform
00269     : public CSLTemplate
00270 {
00271 public:
00272     CSLXSITransform(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00273     virtual ~CSLXSITransform();
00274 
00278     CSIBCMatrix4x4 GetMatrix();
00279 
00283     CSIBCVector3D GetEulerRotation();
00284 
00289     SI_Void SetEulerRotation(CSIBCVector3D &in_rValue);
00290 
00294     CSIBCVector3D GetScale();
00295 
00300     SI_Void SetScale(CSIBCVector3D &in_rValue);
00301 
00305     CSIBCVector3D GetTranslation();
00306 
00311     SI_Void SetTranslation(CSIBCVector3D &in_rValue);
00312 
00316     CSIBCVector3D GetShear();
00317 
00322     SI_Void SetShear(CSIBCVector3D &in_rValue);
00323 
00327     CSIBCVector3D GetPivotPosition();
00328 
00333     SI_Void SetPivotPosition(CSIBCVector3D &in_rValue);
00334 
00338     CSIBCVector3D GetPivotRotation();
00339 
00344     SI_Void SetPivotRotation(CSIBCVector3D &in_rValue);
00345 
00349     CSIBCVector3D GetPivotScale();
00350 
00355     SI_Void SetPivotScale(CSIBCVector3D &in_rValue);
00356 
00360     CSIBCVector3D GetPivotCompPosition();
00361 
00366     SI_Void SetPivotCompPosition(CSIBCVector3D &in_rValue);
00367 
00371     CSIBCVector3D GetPivotCompRotation();
00372 
00377     SI_Void SetPivotCompRotation(CSIBCVector3D &in_rValue);
00378 
00382     CSIBCVector3D GetPivotCompScale();
00383 
00388     SI_Void SetPivotCompScale(CSIBCVector3D &in_rValue);
00389 
00393     CSIBCVector3D GetNeutralPosePosition();
00394 
00399     SI_Void SetNeutralPosePosition(CSIBCVector3D &in_rValue);
00400 
00404     CSIBCVector3D GetNeutralPoseRotation();
00405 
00410     SI_Void SetNeutralPoseRotation(CSIBCVector3D &in_rValue);
00411 
00415     CSIBCVector3D GetNeutralPoseScale();
00416 
00421     SI_Void SetNeutralPoseScale(CSIBCVector3D &in_rValue);
00422 
00426     CSIBCVector3D GetNeutralPoseShear();
00427 
00432     SI_Void SetNeutralPoseShear(CSIBCVector3D &in_rValue);
00433 
00437     SI_Bool GetHierarchicalScaling();
00438 
00443     SI_Void SetHierarchicalScaling(SI_Bool in_bValue);
00444 
00448     CSLTemplate::ERotationOrder GetRotationOrder();
00449 
00453     const SI_Char*              GetRotationOrderAsString();
00454 
00459     SI_Error                    SetRotationOrder(CSLTemplate::ERotationOrder);
00460 
00465     SI_Error                    SetRotationOrderAsString(const SI_Char*);
00466 
00467 
00471     SI_Error ComputeLocalMatrix();
00472 
00476     SI_Error ComputeGlobalMatrix();
00477 
00481     CSIBCMatrix4x4 &GetGlobalMatrix();
00482 
00487     SI_Error ComputeLocalMatrix( SI_Float in_fTime );
00488 
00494     SI_Error ComputeGlobalMatrix( SI_Float in_fTime );
00495 
00496 
00497 
00498     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00499     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00500     virtual ETemplateType Type();
00501 
00502     virtual SI_Error Synchronize();
00503 
00508     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00509 
00513     CSLVector3DProxy*   ScaleProxy() { return &m_Scale;};
00514 
00518     CSLBoolProxy*       HierarchicalScalingProxy() { return &m_HierarchicalScaling;};
00519 
00523     CSLVector3DProxy*   RotationProxy() { return &m_Rotation;};
00527     CSLVector3DProxy*   TranslationProxy() { return &m_Translation;};
00531     CSLVector3DProxy*   ShearProxy() { return &m_Shear;};
00532     
00536     CSLVector3DProxy*   PivotPositionProxy() { return &m_PivotPosition;};
00540     CSLVector3DProxy*   PivotRotationProxy() { return &m_PivotRotation;};
00544     CSLVector3DProxy*   PivotScaleProxy() { return &m_PivotScale;};
00545 
00549     CSLVector3DProxy*   PivotCompPositionProxy() { return &m_PivotCompPosition;};
00553     CSLVector3DProxy*   PivotCompRotationProxy() { return &m_PivotCompRotation;};
00557     CSLVector3DProxy*   PivotCompScaleProxy() { return &m_PivotCompScale;};
00558 
00562     CSLVector3DProxy*   NeutralPoseScaleProxy() { return &m_NeutralPoseScale;};
00566     CSLVector3DProxy*   NeutralPoseRotationProxy() { return &m_NeutralPoseRotation;};
00570     CSLVector3DProxy*   NeutralPosePositionProxy() { return &m_NeutralPosePosition;};
00574     CSLVector3DProxy*   NeutralPoseShearProxy() { return &m_NeutralPoseShear;};
00578     CSLStrEnumProxy<ERotationOrder, SI_ZYX>* RotationOrderProxy() { return &m_RotationOrder;};
00579 
00580     SI_Void SetMatrix ( CSIBCMatrix4x4& in_mMatrix ) { m_TransformMatrix = in_mMatrix;  m_bCanDecompose = false; };
00581     bool    CanDecompose ( ) { return m_bCanDecompose; };
00582 
00584 
00588     CSLXSILimit *ConnectXSILimit(CSLXSILimit *in_pXSILimit);
00589 
00590 
00594     CSLXSILimit* AddXSILimit(CSLAnimatableType* in_pParameter);
00595 
00599     SI_Error ClearXSILimits();
00600 
00604     CSLXSILimit** GetXSILimitList();
00605 
00609     SI_Int GetXSILimitCount();
00610 
00614     SI_Error RemoveXSILimit(SI_Int in_nIndex);
00615 
00619     SI_Error RemoveXSILimit(CSLXSILimit *in_pToRemove);
00620 
00621     CSLXSIPolymatricks* CreatePolymatricks();
00622     CSLXSIPolymatricks* GetPolymatricks();
00623     void                ConnectPolymatricks(CSLXSIPolymatricks* in_pPolymatricks);
00624     bool                CollapsePolymatricks();
00625 
00626 private:
00627     void                                        MoveAnimation(CSLTemplate* in_pFrom, CSLAnimatableType *in_pParam, char* in_pNewName);
00628 
00629 private:
00630     CSLStrEnumProxy<ERotationOrder, SI_ZYX>     m_RotationOrder;
00631 
00632     CSLVector3DProxy                            m_Scale;
00633     CSLBoolProxy                                m_HierarchicalScaling;
00634     CSLVector3DProxy                            m_Rotation;
00635     CSLVector3DProxy                            m_Translation;
00636     CSLVector3DProxy                            m_Shear;
00637     
00638     CSLVector3DProxy                            m_PivotPosition;
00639     CSLVector3DProxy                            m_PivotRotation;
00640     CSLVector3DProxy                            m_PivotScale;
00641 
00642     CSLVector3DProxy                            m_PivotCompPosition;
00643     CSLVector3DProxy                            m_PivotCompRotation;
00644     CSLVector3DProxy                            m_PivotCompScale;
00645 
00646     CSLVector3DProxy                            m_NeutralPoseScale;
00647     CSLVector3DProxy                            m_NeutralPoseRotation;
00648     CSLVector3DProxy                            m_NeutralPosePosition;
00649     CSLVector3DProxy                            m_NeutralPoseShear;
00650 
00651     CSIBCMatrix4x4                              m_TransformMatrix;
00652     CSIBCMatrix4x4                              m_GlobalMatrix;
00653     bool                                        m_bCanDecompose;
00654 
00655     CSIBCArray<CSLXSILimit *>                   m_XSILimits;
00656     CSLXSIPolymatricks*                         m_pPolymatricks;
00657     void *                                      m_pReserved;    // reserved for future extension
00658 };
00659 
00665 class XSIEXPORT CSLXSIBasePose
00666     : public CSLTemplate
00667 {
00668 public:
00669     CSLXSIBasePose(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00670     virtual ~CSLXSIBasePose();
00671 
00675     CSIBCMatrix4x4 GetMatrix();
00676 
00680     CSIBCVector3D GetEulerRotation();
00681 
00686     SI_Void SetEulerRotation(const CSIBCVector3D &in_rValue);
00687 
00691     CSIBCVector3D GetScale();
00692 
00697     SI_Void SetScale(CSIBCVector3D &in_rValue);
00698 
00702     CSIBCVector3D GetTranslation();
00703 
00708     SI_Void SetTranslation(CSIBCVector3D &in_rValue);
00709 
00710     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00711     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00712     virtual ETemplateType Type();
00713 
00714     virtual SI_Error Synchronize();
00715 
00720     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00721 
00725     SI_Error ComputeMatrix();
00726 
00730     CSLVector3DProxy& GetScaleProxy();
00731 
00735     CSLVector3DProxy& GetRotationProxy();
00736 
00740     CSLVector3DProxy& GetTranslationProxy();
00741 
00746     SI_Void SetMatrix( CSIBCMatrix4x4 &in_Matrix );
00747 
00748 private:
00749     CSLVector3DProxy m_Scale;
00750     CSLVector3DProxy m_Rotation;
00751     CSLVector3DProxy m_Translation;
00752     CSIBCMatrix4x4 m_BasePoseMatrix;
00753 
00754     void *m_pReserved;  // reserved for future extension
00755 };
00756 
00757 
00758 #endif