00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef _IKJOINT_H
00013 #define _IKJOINT_H
00014
00015 #include "IK.h"
00016
00017
00021 class XSIEXPORT CSLIKResolutionPlane
00022 : public CSLTemplate
00023 {
00024 public:
00026 enum EIKResPlaneType
00027 {
00028 SI_IKRPTYPE_DEFAULT,
00029 SI_IKRPTYPE_PREFAXIS,
00030 SI_IKRPTYPE_UPVECTOR,
00031 };
00032
00039 CSLIKResolutionPlane(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00040
00043 virtual ~CSLIKResolutionPlane();
00044
00048 EIKResPlaneType GetResolutionPlaneType();
00049
00054 SI_Void SetResolutionPlaneType(EIKResPlaneType in_Type);
00055
00059 SI_Float GetRoll();
00060
00065 SI_Void SetRoll(SI_Float in_fValue);
00066
00070 SI_Bool GetPrefRotXAsRoll();
00071
00076 SI_Void SetPrefRotXAsRoll(SI_Bool in_bValue);
00077
00081 CSIBCVector3D GetUpVector();
00082
00087 SI_Void SetUpVector(CSIBCVector3D &in_rValue);
00088
00092 SI_Bool GetUpVectorRelativeToRoot();
00093
00098 SI_Void SetUpVectorRelativeToRoot(SI_Bool in_bValue);
00099
00100
00104 CSIBCVector3D GetPreferredRotation();
00105
00110 SI_Void SetPreferredRotation(CSIBCVector3D &in_rValue);
00111
00115 SI_Bool GetPreferredRotationRelativeToRoot();
00116
00121 SI_Void SetPreferredRotationRelativeToRoot(SI_Bool in_bValue);
00122
00127 virtual SI_Error Synchronize();
00128
00132 virtual ETemplateType Type();
00133
00138 virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00139
00144 virtual SI_Bool ValidateParent(CSLModel *in_pNewParent);
00145
00146 CSLIntProxy* GetTypeProxy() { return &m_Type; };
00147 CSLFloatProxy* GetRollProxy() { return & m_Roll; };
00148 CSLBoolProxy* GetPrefRotXAsRollProxy() { return & m_PrefRotXAsRoll; };
00149 CSLVector3DProxy* GetUpVectorProxy() { return & m_UpVector; };
00150 CSLBoolProxy* GetUpVectorRelativeToRootProxy() { return & m_UpVectorRelativeToRoot; };
00151 CSLVector3DProxy* GetPreferredRotationProxy() { return & m_PreferredRotation; };
00152 CSLBoolProxy* GetPrefRotRelativeToRootProxy() { return & m_PrefRotRelativeToRoot; };
00153
00154 private:
00155
00156 CSLIntProxy m_Type;
00157 CSLFloatProxy m_Roll;
00158 CSLBoolProxy m_PrefRotXAsRoll;
00159 CSLVector3DProxy m_UpVector;
00160 CSLBoolProxy m_UpVectorRelativeToRoot;
00161 CSLVector3DProxy m_PreferredRotation;
00162 CSLBoolProxy m_PrefRotRelativeToRoot;
00163
00164 void *m_pReserved;
00165 };
00166
00167
00171 class XSIEXPORT CSLIKJoint
00172 : public CSLIK
00173 {
00174 public:
00176 enum EJointSolverType
00177 {
00178 SI_DEFAULT,
00179 SI_2D,
00180 SI_3D,
00181 };
00182
00190 CSLIKJoint(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate, CSLModel* in_pRoot);
00191
00194 virtual ~CSLIKJoint();
00195
00199 SI_Float GetLength();
00200
00205 SI_Void SetLength(SI_Float in_fValue);
00206
00210 CSIBCVector3D GetPreferredRotation();
00211
00216 SI_Void SetPreferredRotation(CSIBCVector3D &in_rValue);
00217
00221 SI_Bool GetPseudoRoot();
00222
00227 SI_Void SetPseudoRoot(SI_Bool in_bValue);
00228
00232 SI_Bool GetRotationLimitActivation();
00233
00238 SI_Void SetRotationLimitActivation(SI_Bool in_bValue);
00239
00243 CSIBCVector3D GetRotationLimitMaximum();
00244
00249 SI_Void SetRotationLimitMaximum(CSIBCVector3D &in_rValue);
00250
00254 CSIBCVector3D GetRotationLimitMinimum();
00255
00260 SI_Void SetRotationLimitMinimum(CSIBCVector3D &in_rValue);
00261
00265 EJointSolverType GetSolverType();
00266
00271 SI_Void SetSolverType(EJointSolverType in_Type);
00272
00276 SI_Float GetStiffness();
00277
00282 SI_Void SetStiffness(SI_Float in_fValue);
00283
00287 SI_Bool GetStiffnessActivation();
00288
00293 SI_Void SetStiffnessActivation(SI_Bool in_bValue);
00294
00298 CSLIKResolutionPlane* GetResolutionPlane();
00299
00303 CSLIKResolutionPlane* CreateResolutionPlane();
00304
00309 SI_Void ConnectResolutionPlane(CSLIKResolutionPlane *in_pResPlane);
00310
00315 virtual SI_Error Synchronize();
00316
00320 virtual ETemplateType Type();
00321
00326 virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00327
00332 virtual SI_Bool ValidateParent(CSLModel *in_pNewParent);
00333
00334 CSLVector3DProxy* GetPreferredRotationProxy(){ return &m_PreferredRotation;};
00335 CSLBoolProxy* GetLimitActivationProxy(){ return &m_RotationLimitActivation;};
00336 CSLVector3DProxy* GetRotationLimitMinimumProxy(){ return &m_RotationLimitMinimum;};
00337 CSLVector3DProxy* GetRotationLimitMaximumProxy(){ return &m_RotationLimitMaximum;};
00338 CSLBoolProxy* GetPseudoRootProxy(){ return &m_PseudoRoot;};
00339 CSLBoolProxy* GetStiffnessActivationProxy(){ return &m_StiffnessActivation;};
00340 CSLFloatProxy* GetStiffnessProxy(){ return &m_Stiffness;};
00341 CSLFloatProxy* GetLengthProxy(){ return &m_Length;};
00342
00343 private:
00344 CSLStrEnumProxy<EJointSolverType, SI_3D> m_SolverType;
00345 CSLVector3DProxy m_PreferredRotation;
00346 CSLBoolProxy m_RotationLimitActivation;
00347 CSLVector3DProxy m_RotationLimitMinimum;
00348 CSLVector3DProxy m_RotationLimitMaximum;
00349 CSLBoolProxy m_PseudoRoot;
00350 CSLBoolProxy m_StiffnessActivation;
00351 CSLFloatProxy m_Stiffness;
00352 CSLFloatProxy m_Length;
00353
00354 CSLIKResolutionPlane *m_pResolutionPlane;
00355
00356 void *m_pReserved;
00357 };
00358
00359 #endif