00001
00002
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;
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;
00778 };
00779
00780
00781 #endif