imesh/bodymesh.h
Go to the documentation of this file.00001 /* 00002 Copyright (C) 2009-10 Christian Van Brussel, Institute of Information 00003 and Communication Technologies, Electronics and Applied Mathematics 00004 at Universite catholique de Louvain, Belgium 00005 http://www.uclouvain.be/en-icteam.html 00006 00007 This library is free software; you can redistribute it and/or 00008 modify it under the terms of the GNU Library General Public 00009 License as published by the Free Software Foundation; either 00010 version 2 of the License, or (at your option) any later version. 00011 00012 This library is distributed in the hope that it will be useful, 00013 but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 Library General Public License for more details. 00016 00017 You should have received a copy of the GNU Library General Public 00018 License along with this library; if not, write to the Free 00019 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00020 */ 00021 #ifndef __CS_IMESH_BODYMESH_H__ 00022 #define __CS_IMESH_BODYMESH_H__ 00023 00028 #include "csutil/scf_interface.h" 00029 00030 #include "imesh/animnode/skeleton2anim.h" 00031 #include "ivaria/dynamics.h" 00032 00036 namespace CS { 00037 namespace Mesh { 00038 00039 struct iAnimatedMeshFactory; 00040 00041 } // namespace Mesh 00042 } // namespace CS 00043 00044 namespace CS { 00045 namespace Animation { 00046 00047 struct iSkeletonFactory; 00048 struct iBodySkeleton; 00049 struct iBodyBone; 00050 struct iBodyChain; 00051 struct iBodyChainNode; 00052 struct iBodyBoneProperties; 00053 struct iBodyBoneJoint; 00054 struct iBodyBoneCollider; 00055 00059 enum ColliderType 00060 { 00061 COLLIDER_BOX = 0, 00062 COLLIDER_SPHERE, 00063 COLLIDER_CYLINDER, 00064 COLLIDER_CAPSULE 00065 }; 00066 00070 struct iBodyManager : public virtual iBase 00071 { 00072 SCF_INTERFACE(CS::Animation::iBodyManager, 2, 0, 0); 00073 00077 virtual iBodySkeleton* CreateBodySkeleton 00078 (const char *name, iSkeletonFactory* skeletonFactory) = 0; 00079 00083 virtual iBodySkeleton* FindBodySkeleton (const char *name) = 0; 00084 00088 virtual void ClearBodySkeletons () = 0; 00089 }; 00090 00091 00095 struct iBoneIDIterator : public virtual iBase 00096 { 00097 SCF_INTERFACE(iBoneIDIterator,0,0,1); 00098 00099 virtual bool HasNext () const = 0; 00100 virtual BoneID Next () = 0; 00101 }; 00102 00103 00107 struct iBodyChainIterator : public virtual iBase 00108 { 00109 SCF_INTERFACE(iBodyChainIterator,0,0,1); 00110 00111 virtual bool HasNext () const = 0; 00112 virtual iBodyChain* Next () = 0; 00113 }; 00114 00115 00122 struct iBodySkeleton : public virtual iBase 00123 { 00124 SCF_INTERFACE(CS::Animation::iBodySkeleton, 3, 0, 1); 00125 00129 virtual const char* GetName () const = 0; 00130 00134 virtual iSkeletonFactory* GetSkeletonFactory () const = 0; 00135 00139 virtual void ClearAll () = 0; 00140 00145 virtual iBodyBone* CreateBodyBone (BoneID boneID) = 0; 00146 00150 virtual iBodyBone* FindBodyBone (const char *name) const = 0; 00151 00155 virtual iBodyBone* FindBodyBone (BoneID bone) const = 0; 00156 00160 virtual csPtr<iBoneIDIterator> GetBodyBones () const = 0; 00161 00165 virtual void RemoveBodyBone (BoneID bone) = 0; 00166 00170 virtual void ClearBodyBones () = 0; 00171 00178 virtual iBodyChain* CreateBodyChain (const char *name, BoneID rootBone) = 0; 00179 00183 virtual iBodyChain* FindBodyChain (const char *name) const = 0; 00184 00188 virtual csPtr<iBodyChainIterator> GetBodyChains () const = 0; 00189 00193 virtual void RemoveBodyChain (const char* name) = 0; 00194 00198 virtual void ClearBodyChains () = 0; 00199 00212 virtual void PopulateDefaultColliders 00213 (const CS::Mesh::iAnimatedMeshFactory* animeshFactory, 00214 ColliderType colliderType = COLLIDER_CAPSULE) = 0; 00215 00225 virtual void PopulateDefaultBodyChains () = 0; 00226 }; 00227 00231 struct iBodyBone : public virtual iBase 00232 { 00233 SCF_INTERFACE(CS::Animation::iBodyBone, 1, 0, 0); 00234 00238 virtual BoneID GetAnimeshBone () const = 0; 00239 00245 virtual iBodyBoneProperties* CreateBoneProperties () = 0; 00246 00251 virtual iBodyBoneProperties* GetBoneProperties () const = 0; 00252 00257 virtual iBodyBoneJoint* CreateBoneJoint () = 0; 00258 00263 virtual iBodyBoneJoint* GetBoneJoint () const = 0; 00264 00268 virtual iBodyBoneCollider* CreateBoneCollider () = 0; 00269 00273 virtual size_t GetBoneColliderCount () const = 0; 00274 00278 virtual iBodyBoneCollider* GetBoneCollider (size_t index) const = 0; 00279 }; 00280 00285 struct iBodyChain : public virtual iBase 00286 { 00287 SCF_INTERFACE(CS::Animation::iBodyChain, 2, 0, 0); 00288 00292 virtual const char* GetName () const = 0; 00293 00297 virtual iBodySkeleton* GetBodySkeleton () = 0; 00298 00302 virtual iBodyChainNode* GetRootNode () = 0; 00303 00312 virtual bool AddSubChain (CS::Animation::BoneID subBone) = 0; 00313 00318 virtual bool AddAllSubChains () = 0; 00319 00323 virtual void DebugPrint () const = 0; 00324 00330 virtual void PopulateBoneMask (csBitArray& boneMask) const = 0; 00331 }; 00332 00337 struct iBodyChainNode : public virtual iBase 00338 { 00339 SCF_INTERFACE(CS::Animation::iBodyChainNode, 2, 0, 1); 00340 00345 virtual BoneID GetAnimeshBone () const = 0; 00346 00350 virtual size_t GetChildCount () const = 0; 00351 00355 virtual iBodyChainNode* GetChild (size_t index) const = 0; 00356 00361 virtual iBodyChainNode* GetParent () const = 0; 00362 00367 virtual iBodyChainNode* FindSubChild (CS::Animation::BoneID child) const = 0; 00368 00372 virtual void DebugPrint () const = 0; 00373 }; 00374 00378 struct iBodyBoneProperties : public virtual iBase 00379 { 00380 SCF_INTERFACE(CS::Animation::iBodyBoneProperties, 1, 0, 0); 00381 00385 virtual void SetMass (float mass) = 0; 00386 00390 virtual float GetMass () const = 0; 00391 00396 virtual void SetCenter (const csVector3 ¢er) = 0; 00397 00402 virtual csVector3 GetCenter () const = 0; 00403 00408 virtual void SetInertia (const csMatrix3 &inertia) = 0; 00409 00414 virtual csMatrix3 GetInertia () const = 0; 00415 }; 00416 00421 struct iBodyBoneJoint : public virtual iBase 00422 { 00423 SCF_INTERFACE(CS::Animation::iBodyBoneJoint, 1, 0, 0); 00424 00428 virtual void SetBounce (const csVector3 &bounce) = 0; 00429 00433 virtual void SetMaximumAngle (const csVector3 &max) = 0; 00434 00438 virtual void SetMaximumDistance (const csVector3 &max) = 0; 00439 00443 virtual void SetMinimumAngle (const csVector3 &min) = 0; 00444 00448 virtual void SetMinimumDistance (const csVector3 &min) = 0; 00449 00453 virtual void SetRotConstraints (bool X, bool Y, bool Z) = 0; 00454 00458 virtual void SetTransConstraints (bool X, bool Y, bool Z) = 0; 00459 00463 virtual void SetTransform (const csOrthoTransform &transform) = 0; 00464 00468 virtual csVector3 GetBounce () const = 0; 00469 00473 virtual csVector3 GetMaximumAngle () const = 0; 00474 00478 virtual csVector3 GetMaximumDistance () const = 0; 00479 00483 virtual csVector3 GetMinimumAngle () const = 0; 00484 00488 virtual csVector3 GetMinimumDistance () const = 0; 00489 00493 virtual bool IsXRotConstrained () const = 0; 00494 00498 virtual bool IsXTransConstrained () const = 0; 00499 00503 virtual bool IsYRotConstrained () const = 0; 00504 00508 virtual bool IsYTransConstrained () const = 0; 00509 00513 virtual bool IsZRotConstrained () const = 0; 00514 00518 virtual bool IsZTransConstrained () const = 0; 00519 00523 virtual csOrthoTransform GetTransform () const = 0; 00524 }; 00525 00531 struct iBodyBoneCollider : public virtual iBase 00532 { 00533 SCF_INTERFACE(CS::Animation::iBodyBoneCollider, 2, 0, 1); 00534 00538 virtual bool SetBoxGeometry (const csVector3 &box_size) = 0; 00539 00543 virtual bool SetCapsuleGeometry (float length, float radius) = 0; 00544 00548 virtual bool SetConvexMeshGeometry (iMeshWrapper *mesh) = 0; 00549 00553 virtual bool SetCylinderGeometry (float length, float radius) = 0; 00554 00558 virtual bool SetMeshGeometry (iMeshWrapper *mesh) = 0; 00559 00563 virtual bool SetPlaneGeometry (const csPlane3 &plane) = 0; 00564 00568 virtual bool SetSphereGeometry (float radius) = 0; 00569 00573 virtual csColliderGeometryType GetGeometryType () const = 0; 00574 00579 virtual bool GetBoxGeometry (csVector3 &box_size) const = 0; 00580 00585 virtual bool GetCapsuleGeometry (float &length, float &radius) const = 0; 00586 00591 virtual bool GetConvexMeshGeometry (iMeshWrapper *&mesh) const = 0; 00592 00597 virtual bool GetCylinderGeometry (float &length, float &radius) const = 0; 00598 00603 virtual bool GetMeshGeometry (iMeshWrapper *&mesh) const = 0; 00604 00609 virtual bool GetPlaneGeometry (csPlane3 &plane) const = 0; 00610 00615 virtual bool GetSphereGeometry (float &radius) const = 0; 00616 00620 virtual void SetTransform (const csOrthoTransform &transform) = 0; 00621 00625 virtual csOrthoTransform GetTransform () const = 0; 00626 00630 virtual void SetFriction (float friction) = 0; 00631 00635 virtual float GetFriction () const = 0; 00636 00640 virtual void SetSoftness (float softness) = 0; 00641 00645 virtual float GetSoftness () const = 0; 00646 00650 virtual void SetElasticity (float elasticity) = 0; 00651 00655 virtual float GetElasticity () const = 0; 00656 00660 virtual void SetDensity (float density) = 0; 00661 00665 virtual float GetDensity () const = 0; 00666 }; 00667 00668 } // namespace Animation 00669 } // namespace CS 00670 00673 #endif // __CS_IMESH_BODYMESH_H__
Generated for Crystal Space 2.1 by doxygen 1.6.1
