XSITransform.h

Go to the documentation of this file.
00001 //***************************************************************************************
00002 // File supervisor: Crosswalk team
00013 //***************************************************************************************
00014 #ifndef _XSITRANSFORM_H
00015 #define _XSITRANSFORM_H
00016 
00017 #include "Template.h"
00018 #include "XSILimit.h"
00019 
00025 class XSIEXPORT CSLXSITranslate
00026     : public CSLTemplate
00027 {
00028 public:
00029     CSLXSITranslate(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00030     virtual ~CSLXSITranslate();
00031 
00032     virtual ETemplateType Type();
00033 
00034     virtual SI_Error Synchronize();
00035 
00036     CSIBCVector3D       GetTranslation();
00037     CSLVector3DProxy&   GetTranslationProxy();
00038     void                SetTranslation(CSIBCVector3D& in_Translation);
00039 
00040     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00041     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00042 
00047     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00048 private:
00049     CSLVector3DProxy    m_Translation;
00050 };
00051 
00057 class XSIEXPORT CSLXSIRotate
00058     : public CSLTemplate
00059 {
00060 public:
00061     CSLXSIRotate(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00062     virtual ~CSLXSIRotate();
00063 
00067     virtual ETemplateType Type();
00068 
00069     virtual SI_Error Synchronize();
00070 
00071     CSIBCVector3D       GetAxis();
00072     CSLVector3DProxy&   GetAxisProxy();
00073     void                SetAxis(CSIBCVector3D& in_Axis);
00074 
00075     float               GetAngle();
00076     CSLFloatProxy&      GetAngleProxy();
00077     void                SetAngle(float in_Angle);
00078 
00079     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00080     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00081 
00086     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00087 private:
00088     CSLVector3DProxy    m_Axis;
00089     CSLFloatProxy       m_Angle;
00090 };
00091 
00097 class XSIEXPORT CSLXSIScale
00098     : public CSLTemplate
00099 {
00100 public:
00101     CSLXSIScale(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00102     virtual ~CSLXSIScale();
00103 
00107     virtual ETemplateType Type();
00108 
00109     virtual SI_Error Synchronize();
00110 
00111     CSIBCVector3D       GetScale();
00112     CSLVector3DProxy&   GetScaleProxy();
00113     void                SetScale(CSIBCVector3D& in_Scale);
00114 
00115     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00116     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00117 
00122     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00123 private:
00124     CSLVector3DProxy    m_Scale;
00125 };
00126 
00132 class XSIEXPORT CSLXSIShear
00133     : public CSLTemplate
00134 {
00135 public:
00136     CSLXSIShear(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00137     virtual ~CSLXSIShear();
00138 
00142     virtual ETemplateType Type();
00143 
00144     virtual SI_Error Synchronize();
00145 
00146     CSIBCVector3D       GetFirstAxis();
00147     CSLVector3DProxy&   GetFirstAxisProxy();
00148     void                SetFirstAxis(CSIBCVector3D& in_Axis);
00149 
00150     CSIBCVector3D       GetSecondAxis();
00151     CSLVector3DProxy&   GetSecondAxisProxy();
00152     void                SetSecondAxis(CSIBCVector3D& in_Axis);
00153 
00154     float               GetAngle();
00155     CSLFloatProxy&      GetAngleProxy();
00156     void                SetAngle(float in_Angle);
00157 
00158     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00159     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00160 
00165     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00166 private:
00167     CSLVector3DProxy    m_Axis1;
00168     CSLVector3DProxy    m_Axis2;
00169     CSLFloatProxy       m_Angle;
00170 };
00171 
00177 class XSIEXPORT CSLXSILookat
00178     : public CSLTemplate
00179 {
00180 public:
00181     CSLXSILookat(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00182     virtual ~CSLXSILookat();
00183 
00187     virtual ETemplateType Type();
00188 
00189     virtual SI_Error Synchronize();
00190 
00191     CSIBCVector3D       GetPosition();
00192     CSLVector3DProxy&   GetPositionProxy();
00193     void                SetPosition(CSIBCVector3D& in_Position);
00194     CSIBCVector3D       GetInterest();
00195     CSLVector3DProxy&   GetInterestProxy();
00196     void                SetInterest(CSIBCVector3D& in_Interest);
00197     CSIBCVector3D       GetUpvector();
00198     CSLVector3DProxy&   GetUpvectorProxy();
00199     void                SetUpvector(CSIBCVector3D& in_Upvector);
00200 
00201     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00202     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00207     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00208 
00209 private:
00210     CSLVector3DProxy    m_Position;
00211     CSLVector3DProxy    m_Interest;
00212     CSLVector3DProxy    m_Upvector;
00213 };
00214 
00220 class XSIEXPORT CSLXSIMatrix
00221     : public CSLTemplate
00222 {
00223 public:
00224     CSLXSIMatrix(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00225     virtual ~CSLXSIMatrix();
00226 
00230     virtual ETemplateType Type();
00231 
00232     virtual SI_Error Synchronize();
00233 
00234     CSIBCMatrix4x4      GetMatrix();
00235     void                SetMatrix(CSIBCMatrix4x4& in_Matrix);
00236 
00237     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00238     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00239 
00244     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00245 private:
00246     CSLMatrix4x4Proxy   m_Matrix;
00247 };
00248 
00254 class XSIEXPORT CSLXSIPolymatricks
00255     : public CSLTemplate
00256 {
00257 public:
00258     CSLXSIPolymatricks(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00259     virtual ~CSLXSIPolymatricks();
00260 
00264     virtual ETemplateType Type();
00265 
00266     virtual SI_Error Synchronize();
00267 
00268     CSLTemplate**               GetTransformNodes();
00269     int                         GetTransformNodeCount();
00270     SI_Error                    RemoveTransformNode(CSLTemplate *in_pNode);
00271     SI_Error                    RemoveTransformNode(int index);
00272     SI_Error                    ClearTransformNodes();
00273 
00274     CSLXSITranslate*            AddXSITranslate();
00275     CSLXSIRotate*               AddXSIRotate();
00276     CSLXSIScale*                AddXSIScale();
00277     CSLXSIShear*                AddXSIShear();
00278     CSLXSILookat*               AddXSILookat();
00279     CSLXSIMatrix*               AddXSIMatrix();
00280 
00281     CSLXSITranslate*            ConnectXSITranslate(CSLXSITranslate *in_pNode);
00282     CSLXSIRotate*               ConnectXSIRotate(CSLXSIRotate *in_pNode);
00283     CSLXSIScale*                ConnectXSIScale(CSLXSIScale *in_pNode);
00284     CSLXSIShear*                ConnectXSIShear(CSLXSIShear *in_pNode);
00285     CSLXSILookat*               ConnectXSILookat(CSLXSILookat *in_pNode);
00286     CSLXSIMatrix*               ConnectXSIMatrix(CSLXSIMatrix *in_pNode);
00287 
00288     virtual const SI_Char*      GetParameterName(CSLAnimatableType* in_pParameter);
00289 
00290 private:
00291     CSIBCArray<CSLTemplate*>    m_TransformNodes;
00292 };
00293 
00300 class XSIEXPORT CSLXSITransform
00301     : public CSLTemplate
00302 {
00303 public:
00304     CSLXSITransform(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00305     virtual ~CSLXSITransform();
00306 
00310     CSIBCMatrix4x4 GetMatrix();
00311 
00315     CSIBCVector3D GetEulerRotation();
00316 
00320     SI_Void SetEulerRotation(CSIBCVector3D &in_rValue);
00321 
00325     CSIBCVector3D GetScale();
00326 
00330     SI_Void SetScale(CSIBCVector3D &in_rValue);
00331 
00335     CSIBCVector3D GetTranslation();
00336 
00340     SI_Void SetTranslation(CSIBCVector3D &in_rValue);
00341 
00345     CSIBCVector3D GetShear();
00346 
00350     SI_Void SetShear(CSIBCVector3D &in_rValue);
00351 
00355     CSIBCVector3D GetPivotPosition();
00356 
00360     SI_Void SetPivotPosition(CSIBCVector3D &in_rValue);
00361 
00365     CSIBCVector3D GetPivotRotation();
00366 
00370     SI_Void SetPivotRotation(CSIBCVector3D &in_rValue);
00371 
00375     CSIBCVector3D GetPivotScale();
00376 
00380     SI_Void SetPivotScale(CSIBCVector3D &in_rValue);
00381 
00385     CSIBCVector3D GetPivotCompPosition();
00386 
00390     SI_Void SetPivotCompPosition(CSIBCVector3D &in_rValue);
00391 
00395     CSIBCVector3D GetPivotCompRotation();
00396 
00400     SI_Void SetPivotCompRotation(CSIBCVector3D &in_rValue);
00401 
00405     CSIBCVector3D GetPivotCompScale();
00406 
00410     SI_Void SetPivotCompScale(CSIBCVector3D &in_rValue);
00411 
00415     CSIBCVector3D GetNeutralPosePosition();
00416 
00420     SI_Void SetNeutralPosePosition(CSIBCVector3D &in_rValue);
00421 
00425     CSIBCVector3D GetNeutralPoseRotation();
00426 
00430     SI_Void SetNeutralPoseRotation(CSIBCVector3D &in_rValue);
00431 
00435     CSIBCVector3D GetNeutralPoseScale();
00436 
00440     SI_Void SetNeutralPoseScale(CSIBCVector3D &in_rValue);
00441 
00445     CSIBCVector3D GetNeutralPoseShear();
00446 
00450     SI_Void SetNeutralPoseShear(CSIBCVector3D &in_rValue);
00451 
00455     SI_Bool GetHierarchicalScaling();
00456 
00460     SI_Void SetHierarchicalScaling(SI_Bool in_bValue);
00461 
00465     CSLTemplate::ERotationOrder GetRotationOrder();
00466 
00470     const SI_Char*              GetRotationOrderAsString();
00471 
00475     SI_Error                    SetRotationOrder(CSLTemplate::ERotationOrder );
00476 
00480     SI_Error                    SetRotationOrderAsString(const SI_Char* );
00481 
00482 
00486     SI_Error ComputeLocalMatrix();
00487 
00491     SI_Error ComputeGlobalMatrix();
00492 
00496     CSIBCMatrix4x4 &GetGlobalMatrix();
00497 
00502     SI_Error ComputeLocalMatrix( SI_Float in_fTime );
00503 
00509     SI_Error ComputeGlobalMatrix( SI_Float in_fTime );
00510 
00511 
00512 
00513     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00514     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00515 
00519     virtual ETemplateType Type();
00520 
00521     virtual SI_Error Synchronize();
00522 
00527     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00528 
00532     CSLVector3DProxy*   ScaleProxy() { return &m_Scale;};
00533 
00537     CSLBoolProxy*       HierarchicalScalingProxy() { return &m_HierarchicalScaling;};
00538 
00542     CSLVector3DProxy*   RotationProxy() { return &m_Rotation;};
00546     CSLVector3DProxy*   TranslationProxy() { return &m_Translation;};
00550     CSLVector3DProxy*   ShearProxy() { return &m_Shear;};
00551 
00555     CSLVector3DProxy*   PivotPositionProxy() { return &m_PivotPosition;};
00559     CSLVector3DProxy*   PivotRotationProxy() { return &m_PivotRotation;};
00563     CSLVector3DProxy*   PivotScaleProxy() { return &m_PivotScale;};
00564 
00568     CSLVector3DProxy*   PivotCompPositionProxy() { return &m_PivotCompPosition;};
00572     CSLVector3DProxy*   PivotCompRotationProxy() { return &m_PivotCompRotation;};
00576     CSLVector3DProxy*   PivotCompScaleProxy() { return &m_PivotCompScale;};
00577 
00581     CSLVector3DProxy*   NeutralPoseScaleProxy() { return &m_NeutralPoseScale;};
00585     CSLVector3DProxy*   NeutralPoseRotationProxy() { return &m_NeutralPoseRotation;};
00589     CSLVector3DProxy*   NeutralPosePositionProxy() { return &m_NeutralPosePosition;};
00593     CSLVector3DProxy*   NeutralPoseShearProxy() { return &m_NeutralPoseShear;};
00597     CSLStrEnumProxy<ERotationOrder, SI_ZYX>* RotationOrderProxy() { return &m_RotationOrder;};
00598 
00599     SI_Void SetMatrix ( CSIBCMatrix4x4& in_mMatrix ) { m_TransformMatrix = in_mMatrix;  m_bCanDecompose = false; };
00600     bool    CanDecompose ( ) { return m_bCanDecompose; };
00601 
00603 
00607     CSLXSILimit *ConnectXSILimit(CSLXSILimit *in_pXSILimit);
00608 
00609 
00614     CSLXSILimit* AddXSILimit(CSLAnimatableType* in_pParameter);
00615 
00619     SI_Error ClearXSILimits();
00620 
00624     CSLXSILimit** GetXSILimitList();
00625 
00629     SI_Int GetXSILimitCount();
00630 
00635     SI_Error RemoveXSILimit(SI_Int in_nIndex);
00636 
00641     SI_Error RemoveXSILimit(CSLXSILimit *in_pToRemove);
00642 
00643     CSLXSIPolymatricks* CreatePolymatricks();
00644     CSLXSIPolymatricks* GetPolymatricks();
00645     void                ConnectPolymatricks(CSLXSIPolymatricks* in_pPolymatricks);
00646     bool                CollapsePolymatricks();
00647 
00648 private:
00649     void                                        MoveAnimation(CSLTemplate* in_pFrom, CSLAnimatableType *in_pOldParam, CSLAnimatableType *in_pNewParam, const char* in_pNewName);
00650 
00651 private:
00652     CSLStrEnumProxy<ERotationOrder, SI_ZYX>     m_RotationOrder;
00653 
00654     CSLVector3DProxy                            m_Scale;
00655     CSLBoolProxy                                m_HierarchicalScaling;
00656     CSLVector3DProxy                            m_Rotation;
00657     CSLVector3DProxy                            m_Translation;
00658     CSLVector3DProxy                            m_Shear;
00659 
00660     CSLVector3DProxy                            m_PivotPosition;
00661     CSLVector3DProxy                            m_PivotRotation;
00662     CSLVector3DProxy                            m_PivotScale;
00663 
00664     CSLVector3DProxy                            m_PivotCompPosition;
00665     CSLVector3DProxy                            m_PivotCompRotation;
00666     CSLVector3DProxy                            m_PivotCompScale;
00667 
00668     CSLVector3DProxy                            m_NeutralPoseScale;
00669     CSLVector3DProxy                            m_NeutralPoseRotation;
00670     CSLVector3DProxy                            m_NeutralPosePosition;
00671     CSLVector3DProxy                            m_NeutralPoseShear;
00672 
00673     CSIBCMatrix4x4                              m_TransformMatrix;
00674     CSIBCMatrix4x4                              m_GlobalMatrix;
00675     bool                                        m_bCanDecompose;
00676 
00677     CSIBCArray<CSLXSILimit *>                   m_XSILimits;
00678     CSLXSIPolymatricks*                         m_pPolymatricks;
00679     void *                                      m_pReserved;    // reserved for future extension
00680 };
00681 
00688 class XSIEXPORT CSLXSIBasePose
00689     : public CSLTemplate
00690 {
00691 public:
00692     CSLXSIBasePose(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00693     virtual ~CSLXSIBasePose();
00694 
00698     CSIBCMatrix4x4 GetMatrix();
00699 
00703     CSIBCVector3D GetEulerRotation();
00704 
00708     SI_Void SetEulerRotation(const CSIBCVector3D &in_rValue);
00709 
00713     CSIBCVector3D GetScale();
00714 
00718     SI_Void SetScale(CSIBCVector3D &in_rValue);
00719 
00723     CSIBCVector3D GetTranslation();
00724 
00728     SI_Void SetTranslation(CSIBCVector3D &in_rValue);
00729 
00730     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00731     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00732 
00736     virtual ETemplateType Type();
00737 
00738     virtual SI_Error Synchronize();
00739 
00744     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00745 
00749     SI_Error ComputeMatrix();
00750 
00754     CSLVector3DProxy& GetScaleProxy();
00755 
00759     CSLVector3DProxy& GetRotationProxy();
00760 
00764     CSLVector3DProxy& GetTranslationProxy();
00765 
00769     SI_Void SetMatrix( CSIBCMatrix4x4 &in_Matrix );
00770 
00771 private:
00772     CSLVector3DProxy m_Scale;
00773     CSLVector3DProxy m_Rotation;
00774     CSLVector3DProxy m_Translation;
00775     CSIBCMatrix4x4 m_BasePoseMatrix;
00776 
00777     void *m_pReserved;  // reserved for future extension
00778 };
00779 
00780 
00781 #endif