00001
00002
00003
00004
00005
00006
00007
00008
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;
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;
00749 };
00750
00751
00752 #endif