Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __CS_IMESH_ANIMNODE_IK_H__
00022 #define __CS_IMESH_ANIMNODE_IK_H__
00023
00028 #include "csutil/scf_interface.h"
00029 #include "imesh/animnode/skeleton2anim.h"
00030
00031 struct iMovable;
00032 struct iCamera;
00033 class csOrthoTransform;
00034
00035 namespace CS {
00036 namespace Mesh {
00037
00038 struct iAnimatedMesh;
00039
00040 }
00041 }
00042
00046 namespace CS {
00047 namespace Animation {
00048
00049 struct iBodyChain;
00050 struct iBodySkeleton;
00051 struct iSkeletonRagdollNode;
00052
00054 typedef unsigned int EffectorID;
00055
00056 struct iSkeletonIKNodeFactory;
00057
00062 struct iSkeletonIKNodeManager
00063 : public virtual CS::Animation::iSkeletonAnimNodeManager<CS::Animation::iSkeletonIKNodeFactory>
00064 {
00065 SCF_ISKELETONANIMNODEMANAGER_INTERFACE (CS::Animation::iSkeletonIKNodeManager, 1, 0, 0);
00066 };
00067
00081 struct iSkeletonIKNodeFactory : public virtual iSkeletonAnimNodeFactory
00082 {
00083 SCF_INTERFACE(CS::Animation::iSkeletonIKNodeFactory, 2, 0, 0);
00084
00088 virtual void SetBodySkeleton (CS::Animation::iBodySkeleton* skeleton) = 0;
00089
00093 virtual CS::Animation::iBodySkeleton* GetBodySkeleton () const = 0;
00094
00102 virtual void SetChildNode (CS::Animation::iSkeletonAnimNodeFactory* node) = 0;
00103
00107 virtual CS::Animation::iSkeletonAnimNodeFactory* GetChildNode () const = 0;
00108
00116 virtual CS::Animation::EffectorID AddEffector (CS::Animation::iBodyChain* chain,
00117 BoneID bone,
00118 csOrthoTransform& transform) = 0;
00119
00123 virtual void RemoveEffector (CS::Animation::EffectorID effector) = 0;
00124
00125
00126 };
00127
00138 struct iSkeletonIKNode : public virtual iSkeletonAnimNode
00139 {
00140 SCF_INTERFACE(CS::Animation::iSkeletonIKNode, 2, 0, 0);
00141
00147 virtual void AddConstraint (CS::Animation::EffectorID effector,
00148 csOrthoTransform& transform) = 0;
00149
00157 virtual void AddConstraint (CS::Animation::EffectorID effector,
00158 iMovable* target, const csOrthoTransform& offset) = 0;
00159
00167 virtual void AddConstraint (CS::Animation::EffectorID effector,
00168 iCamera* target, const csOrthoTransform& offset) = 0;
00169
00174 virtual void RemoveConstraint (CS::Animation::EffectorID effector) = 0;
00175 };
00176
00193 struct iSkeletonIKPhysicalNodeFactory : public iSkeletonIKNodeFactory
00194 {
00195 SCF_INTERFACE(CS::Animation::iSkeletonIKPhysicalNodeFactory, 1, 0, 0);
00196
00205 virtual void SetChainAutoReset (bool reset) = 0;
00206
00214 virtual bool GetChainAutoReset () const = 0;
00215 };
00216
00233 struct iSkeletonIKPhysicalNode : public iSkeletonIKNode
00234 {
00235 SCF_INTERFACE(CS::Animation::iSkeletonIKPhysicalNode, 1, 0, 0);
00236
00241 virtual void SetRagdollNode (CS::Animation::iSkeletonRagdollNode* ragdollNode) = 0;
00242
00246 virtual CS::Animation::iSkeletonRagdollNode* GetRagdollNode () const = 0;
00247 };
00248
00268 struct iSkeletonIKCCDNodeFactory : public iSkeletonIKNodeFactory
00269 {
00270 SCF_INTERFACE(CS::Animation::iSkeletonIKCCDNodeFactory, 1, 0, 0);
00271
00276 virtual void SetMaximumIterations (size_t max) = 0;
00277
00281 virtual size_t GetMaximumIterations () = 0;
00282
00287 virtual void SetTargetDistance (float distance) = 0;
00288
00293 virtual float GetTargetDistance () = 0;
00294
00300 virtual void SetMotionRatio (float ratio) = 0;
00301
00306 virtual float GetMotionRatio () = 0;
00307
00313 virtual void SetJointInitialization (bool initialized) = 0;
00314
00320 virtual bool GetJointInitialization () = 0;
00321
00327 virtual void SetUpwardIterations (bool upward) = 0;
00328
00334 virtual bool GetUpwardIterations () = 0;
00335 };
00336
00356 struct iSkeletonIKCCDNode : public iSkeletonIKNode
00357 {
00358 SCF_INTERFACE(CS::Animation::iSkeletonIKCCDNode, 1, 0, 0);
00359
00360 };
00361
00362 }
00363 }
00364
00367 #endif //__CS_IMESH_ANIMNODE_IK_H__