00001
00002
00003
00004
00005
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;
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;
00755 };
00756
00757
00758 #endif