XSITransform.h

00001 //***************************************************************************************
00002 //
00003 // File supervisor: Crosswalk team
00004 //
00005 // Copyright 2008 Autodesk, Inc.  All rights reserved.
00006 // Use of this software is subject to the terms of the Autodesk license agreement
00007 // provided at the time of installation or download, or which otherwise accompanies
00008 // this software in either electronic or hard copy form.
00009 //
00010 //***************************************************************************************
00011 #ifndef _XSITRANSFORM_H
00012 #define _XSITRANSFORM_H
00013 
00014 #include "Template.h"
00015 #include "XSILimit.h"
00016 
00020 class XSIEXPORT CSLXSITranslate
00021     : public CSLTemplate
00022 {
00023 public:
00024     CSLXSITranslate(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00025     virtual ~CSLXSITranslate();
00026 
00027     virtual ETemplateType Type();
00028 
00029     virtual SI_Error Synchronize();
00030 
00031     CSIBCVector3D       GetTranslation();
00032     CSLVector3DProxy&   GetTranslationProxy();
00033     void                SetTranslation(CSIBCVector3D& in_Translation);
00034 
00035     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00036     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00037 
00042     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00043 private:
00044     CSLVector3DProxy    m_Translation;
00045 };
00046 
00050 class XSIEXPORT CSLXSIRotate
00051     : public CSLTemplate
00052 {
00053 public:
00054     CSLXSIRotate(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00055     virtual ~CSLXSIRotate();
00056 
00057     virtual ETemplateType Type();
00058 
00059     virtual SI_Error Synchronize();
00060 
00061     CSIBCVector3D       GetAxis();
00062     CSLVector3DProxy&   GetAxisProxy();
00063     void                SetAxis(CSIBCVector3D& in_Axis);
00064 
00065     float               GetAngle();
00066     CSLFloatProxy&      GetAngleProxy();
00067     void                SetAngle(float in_Angle);
00068 
00069     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00070     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00071 
00076     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00077 private:
00078     CSLVector3DProxy    m_Axis;
00079     CSLFloatProxy       m_Angle;
00080 };
00081 
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 
00115 class XSIEXPORT CSLXSIShear
00116     : public CSLTemplate
00117 {
00118 public:
00119     CSLXSIShear(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00120     virtual ~CSLXSIShear();
00121 
00122     virtual ETemplateType Type();
00123 
00124     virtual SI_Error Synchronize();
00125 
00126     CSIBCVector3D       GetFirstAxis();
00127     CSLVector3DProxy&   GetFirstAxisProxy();
00128     void                SetFirstAxis(CSIBCVector3D& in_Axis);
00129 
00130     CSIBCVector3D       GetSecondAxis();
00131     CSLVector3DProxy&   GetSecondAxisProxy();
00132     void                SetSecondAxis(CSIBCVector3D& in_Axis);
00133 
00134     float               GetAngle();
00135     CSLFloatProxy&      GetAngleProxy();
00136     void                SetAngle(float in_Angle);
00137 
00138     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00139     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00140 
00145     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00146 private:
00147     CSLVector3DProxy    m_Axis1;
00148     CSLVector3DProxy    m_Axis2;
00149     CSLFloatProxy       m_Angle;
00150 };
00151 
00155 class XSIEXPORT CSLXSILookat
00156     : public CSLTemplate
00157 {
00158 public:
00159     CSLXSILookat(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00160     virtual ~CSLXSILookat();
00161 
00162     virtual ETemplateType Type();
00163 
00164     virtual SI_Error Synchronize();
00165 
00166     CSIBCVector3D       GetPosition();
00167     CSLVector3DProxy&   GetPositionProxy();
00168     void                SetPosition(CSIBCVector3D& in_Position);
00169     CSIBCVector3D       GetInterest();
00170     CSLVector3DProxy&   GetInterestProxy();
00171     void                SetInterest(CSIBCVector3D& in_Interest);
00172     CSIBCVector3D       GetUpvector();
00173     CSLVector3DProxy&   GetUpvectorProxy();
00174     void                SetUpvector(CSIBCVector3D& in_Upvector);
00175 
00176     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00177     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00182     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00183 
00184 private:
00185     CSLVector3DProxy    m_Position;
00186     CSLVector3DProxy    m_Interest;
00187     CSLVector3DProxy    m_Upvector;
00188 };
00189 
00193 class XSIEXPORT CSLXSIMatrix
00194     : public CSLTemplate
00195 {
00196 public:
00197     CSLXSIMatrix(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00198     virtual ~CSLXSIMatrix();
00199 
00200     virtual ETemplateType Type();
00201 
00202     virtual SI_Error Synchronize();
00203 
00204     CSIBCMatrix4x4      GetMatrix();
00205     void                SetMatrix(CSIBCMatrix4x4& in_Matrix);
00206 
00207     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00208     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00209 
00214     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00215 private:
00216     CSLMatrix4x4Proxy   m_Matrix;
00217 };
00218 
00222 class XSIEXPORT CSLXSIPolymatricks
00223     : public CSLTemplate
00224 {
00225 public:
00226     CSLXSIPolymatricks(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00227     virtual ~CSLXSIPolymatricks();
00228 
00229     virtual ETemplateType Type();
00230 
00231     virtual SI_Error Synchronize();
00232 
00233     CSLTemplate**               GetTransformNodes();
00234     int                         GetTransformNodeCount();
00235     SI_Error                    RemoveTransformNode(CSLTemplate *in_pNode);
00236     SI_Error                    RemoveTransformNode(int index);
00237     SI_Error                    ClearTransformNodes();
00238 
00239     CSLXSITranslate*            AddXSITranslate();
00240     CSLXSIRotate*               AddXSIRotate();
00241     CSLXSIScale*                AddXSIScale();
00242     CSLXSIShear*                AddXSIShear();
00243     CSLXSILookat*               AddXSILookat();
00244     CSLXSIMatrix*               AddXSIMatrix();
00245 
00246     CSLXSITranslate*            ConnectXSITranslate(CSLXSITranslate *in_pNode);
00247     CSLXSIRotate*               ConnectXSIRotate(CSLXSIRotate *in_pNode);
00248     CSLXSIScale*                ConnectXSIScale(CSLXSIScale *in_pNode);
00249     CSLXSIShear*                ConnectXSIShear(CSLXSIShear *in_pNode);
00250     CSLXSILookat*               ConnectXSILookat(CSLXSILookat *in_pNode);
00251     CSLXSIMatrix*               ConnectXSIMatrix(CSLXSIMatrix *in_pNode);
00252 
00253     virtual const SI_Char*      GetParameterName(CSLAnimatableType* in_pParameter);
00254 
00255 private:
00256     CSIBCArray<CSLTemplate*>    m_TransformNodes;
00257 };
00258 
00263 class XSIEXPORT CSLXSITransform
00264     : public CSLTemplate
00265 {
00266 public:
00267     CSLXSITransform(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00268     virtual ~CSLXSITransform();
00269 
00273     CSIBCMatrix4x4 GetMatrix();
00274 
00278     CSIBCVector3D GetEulerRotation();
00279 
00284     SI_Void SetEulerRotation(CSIBCVector3D &in_rValue);
00285 
00289     CSIBCVector3D GetScale();
00290 
00295     SI_Void SetScale(CSIBCVector3D &in_rValue);
00296 
00300     CSIBCVector3D GetTranslation();
00301 
00306     SI_Void SetTranslation(CSIBCVector3D &in_rValue);
00307 
00311     CSIBCVector3D GetShear();
00312 
00317     SI_Void SetShear(CSIBCVector3D &in_rValue);
00318 
00322     CSIBCVector3D GetPivotPosition();
00323 
00328     SI_Void SetPivotPosition(CSIBCVector3D &in_rValue);
00329 
00333     CSIBCVector3D GetPivotRotation();
00334 
00339     SI_Void SetPivotRotation(CSIBCVector3D &in_rValue);
00340 
00344     CSIBCVector3D GetPivotScale();
00345 
00350     SI_Void SetPivotScale(CSIBCVector3D &in_rValue);
00351 
00355     CSIBCVector3D GetPivotCompPosition();
00356 
00361     SI_Void SetPivotCompPosition(CSIBCVector3D &in_rValue);
00362 
00366     CSIBCVector3D GetPivotCompRotation();
00367 
00372     SI_Void SetPivotCompRotation(CSIBCVector3D &in_rValue);
00373 
00377     CSIBCVector3D GetPivotCompScale();
00378 
00383     SI_Void SetPivotCompScale(CSIBCVector3D &in_rValue);
00384 
00388     CSIBCVector3D GetNeutralPosePosition();
00389 
00394     SI_Void SetNeutralPosePosition(CSIBCVector3D &in_rValue);
00395 
00399     CSIBCVector3D GetNeutralPoseRotation();
00400 
00405     SI_Void SetNeutralPoseRotation(CSIBCVector3D &in_rValue);
00406 
00410     CSIBCVector3D GetNeutralPoseScale();
00411 
00416     SI_Void SetNeutralPoseScale(CSIBCVector3D &in_rValue);
00417 
00421     CSIBCVector3D GetNeutralPoseShear();
00422 
00427     SI_Void SetNeutralPoseShear(CSIBCVector3D &in_rValue);
00428 
00432     SI_Bool GetHierarchicalScaling();
00433 
00438     SI_Void SetHierarchicalScaling(SI_Bool in_bValue);
00439 
00443     CSLTemplate::ERotationOrder GetRotationOrder();
00444 
00448     const SI_Char*              GetRotationOrderAsString();
00449 
00454     SI_Error                    SetRotationOrder(CSLTemplate::ERotationOrder);
00455 
00460     SI_Error                    SetRotationOrderAsString(const SI_Char*);
00461 
00462 
00466     SI_Error ComputeLocalMatrix();
00467 
00471     SI_Error ComputeGlobalMatrix();
00472 
00476     CSIBCMatrix4x4 &GetGlobalMatrix();
00477 
00482     SI_Error ComputeLocalMatrix( SI_Float in_fTime );
00483 
00489     SI_Error ComputeGlobalMatrix( SI_Float in_fTime );
00490 
00491 
00492 
00493     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00494     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00495     virtual ETemplateType Type();
00496 
00497     virtual SI_Error Synchronize();
00498 
00503     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00504 
00508     CSLVector3DProxy*   ScaleProxy() { return &m_Scale;};
00509 
00513     CSLBoolProxy*       HierarchicalScalingProxy() { return &m_HierarchicalScaling;};
00514 
00518     CSLVector3DProxy*   RotationProxy() { return &m_Rotation;};
00522     CSLVector3DProxy*   TranslationProxy() { return &m_Translation;};
00526     CSLVector3DProxy*   ShearProxy() { return &m_Shear;};
00527 
00531     CSLVector3DProxy*   PivotPositionProxy() { return &m_PivotPosition;};
00535     CSLVector3DProxy*   PivotRotationProxy() { return &m_PivotRotation;};
00539     CSLVector3DProxy*   PivotScaleProxy() { return &m_PivotScale;};
00540 
00544     CSLVector3DProxy*   PivotCompPositionProxy() { return &m_PivotCompPosition;};
00548     CSLVector3DProxy*   PivotCompRotationProxy() { return &m_PivotCompRotation;};
00552     CSLVector3DProxy*   PivotCompScaleProxy() { return &m_PivotCompScale;};
00553 
00557     CSLVector3DProxy*   NeutralPoseScaleProxy() { return &m_NeutralPoseScale;};
00561     CSLVector3DProxy*   NeutralPoseRotationProxy() { return &m_NeutralPoseRotation;};
00565     CSLVector3DProxy*   NeutralPosePositionProxy() { return &m_NeutralPosePosition;};
00569     CSLVector3DProxy*   NeutralPoseShearProxy() { return &m_NeutralPoseShear;};
00573     CSLStrEnumProxy<ERotationOrder, SI_ZYX>* RotationOrderProxy() { return &m_RotationOrder;};
00574 
00575     SI_Void SetMatrix ( CSIBCMatrix4x4& in_mMatrix ) { m_TransformMatrix = in_mMatrix;  m_bCanDecompose = false; };
00576     bool    CanDecompose ( ) { return m_bCanDecompose; };
00577 
00579 
00583     CSLXSILimit *ConnectXSILimit(CSLXSILimit *in_pXSILimit);
00584 
00585 
00589     CSLXSILimit* AddXSILimit(CSLAnimatableType* in_pParameter);
00590 
00594     SI_Error ClearXSILimits();
00595 
00599     CSLXSILimit** GetXSILimitList();
00600 
00604     SI_Int GetXSILimitCount();
00605 
00609     SI_Error RemoveXSILimit(SI_Int in_nIndex);
00610 
00614     SI_Error RemoveXSILimit(CSLXSILimit *in_pToRemove);
00615 
00616     CSLXSIPolymatricks* CreatePolymatricks();
00617     CSLXSIPolymatricks* GetPolymatricks();
00618     void                ConnectPolymatricks(CSLXSIPolymatricks* in_pPolymatricks);
00619     bool                CollapsePolymatricks();
00620 
00621 private:
00622     void                                        MoveAnimation(CSLTemplate* in_pFrom, CSLAnimatableType *in_pOldParam, CSLAnimatableType *in_pNewParam, const char* in_pNewName);
00623 
00624 private:
00625     CSLStrEnumProxy<ERotationOrder, SI_ZYX>     m_RotationOrder;
00626 
00627     CSLVector3DProxy                            m_Scale;
00628     CSLBoolProxy                                m_HierarchicalScaling;
00629     CSLVector3DProxy                            m_Rotation;
00630     CSLVector3DProxy                            m_Translation;
00631     CSLVector3DProxy                            m_Shear;
00632 
00633     CSLVector3DProxy                            m_PivotPosition;
00634     CSLVector3DProxy                            m_PivotRotation;
00635     CSLVector3DProxy                            m_PivotScale;
00636 
00637     CSLVector3DProxy                            m_PivotCompPosition;
00638     CSLVector3DProxy                            m_PivotCompRotation;
00639     CSLVector3DProxy                            m_PivotCompScale;
00640 
00641     CSLVector3DProxy                            m_NeutralPoseScale;
00642     CSLVector3DProxy                            m_NeutralPoseRotation;
00643     CSLVector3DProxy                            m_NeutralPosePosition;
00644     CSLVector3DProxy                            m_NeutralPoseShear;
00645 
00646     CSIBCMatrix4x4                              m_TransformMatrix;
00647     CSIBCMatrix4x4                              m_GlobalMatrix;
00648     bool                                        m_bCanDecompose;
00649 
00650     CSIBCArray<CSLXSILimit *>                   m_XSILimits;
00651     CSLXSIPolymatricks*                         m_pPolymatricks;
00652     void *                                      m_pReserved;    // reserved for future extension
00653 };
00654 
00659 class XSIEXPORT CSLXSIBasePose
00660     : public CSLTemplate
00661 {
00662 public:
00663     CSLXSIBasePose(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00664     virtual ~CSLXSIBasePose();
00665 
00669     CSIBCMatrix4x4 GetMatrix();
00670 
00674     CSIBCVector3D GetEulerRotation();
00675 
00680     SI_Void SetEulerRotation(const CSIBCVector3D &in_rValue);
00681 
00685     CSIBCVector3D GetScale();
00686 
00691     SI_Void SetScale(CSIBCVector3D &in_rValue);
00692 
00696     CSIBCVector3D GetTranslation();
00697 
00702     SI_Void SetTranslation(CSIBCVector3D &in_rValue);
00703 
00704     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00705     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00706     virtual ETemplateType Type();
00707 
00708     virtual SI_Error Synchronize();
00709 
00714     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00715 
00719     SI_Error ComputeMatrix();
00720 
00724     CSLVector3DProxy& GetScaleProxy();
00725 
00729     CSLVector3DProxy& GetRotationProxy();
00730 
00734     CSLVector3DProxy& GetTranslationProxy();
00735 
00740     SI_Void SetMatrix( CSIBCMatrix4x4 &in_Matrix );
00741 
00742 private:
00743     CSLVector3DProxy m_Scale;
00744     CSLVector3DProxy m_Rotation;
00745     CSLVector3DProxy m_Translation;
00746     CSIBCMatrix4x4 m_BasePoseMatrix;
00747 
00748     void *m_pReserved;  // reserved for future extension
00749 };
00750 
00751 
00752 #endif