00001
00011 #ifndef __TVU_HUMAN_BODY_H__
00012 #define __TVU_HUMAN_BODY_H__
00013
00014 #ifndef __TVU_3DOBJECT_H__
00015 #include "tvu_3dobject.h"
00016 #endif
00017
00018 #ifndef __TVU_VISU3D_APPLICATION_H__
00019 #include "tvu_visu3d.application.h"
00020 #endif
00021
00022
00023 class CTScenario;
00024
00026 #define CLASSNAME_HUMAN_BODYPART "BodyPart"
00027 #define CLASSNAME_HUMAN_BODYPART_ID 10400
00028 #define CLASSNAME_HUMAN_BODY "HumanBody"
00029 #define CLASSNAME_HUMAN_BODY_ID 10401
00030
00031 #define ENAME_HUMAN_PART "human_part"
00032 #define ENAME_HUMAN_PERSON "human_person"
00033 #define ENAME_HUMAN_ARTICULATION "human_articulation"
00034 #define ENAME_HUMAN_HEAD "human_head"
00035 #define ENAME_HUMAN_NECK "human_neck"
00036 #define ENAME_HUMAN_BODY "human_body"
00037 #define ENAME_HUMAN_SHOULDER "human_shoulder"
00038 #define ENAME_HUMAN_ARM "human_arm"
00039 #define ENAME_HUMAN_ARM1 "human_arm1"
00040 #define ENAME_HUMAN_ARM2 "human_arm2"
00041 #define ENAME_HUMAN_HAND "human_hand"
00042 #define ENAME_HUMAN_LEFTARM "human_leftarm"
00043 #define ENAME_HUMAN_RIGHTARM "human_rightarm"
00044 #define ENAME_HUMAN_LEG "human_leg"
00045 #define ENAME_HUMAN_THIGH "human_thigh"
00046 #define ENAME_HUMAN_LEG2 "human_leg2"
00047 #define ENAME_HUMAN_FOOT "human_foot"
00048 #define ENAME_HUMAN_LEFTLEG "human_leftleg"
00049 #define ENAME_HUMAN_RIGHTLEG "human_rightleg"
00050
00051 #define ENAME_HUMAN_PART_STATICPRIMITIVE "static_primitive"
00052 #define ENAME_HUMAN_PART_STATICPOINT "static_point"
00053
00054 class CTHumanAction;
00055
00058 class CTBodyPart : public CT3DObject
00059 {
00060 public:
00062 CTBodyPart();
00063 virtual ~CTBodyPart() { Delete(); };
00064 DEFINE_ID_FUNCTIONS(CTBodyPart, CT3DObject, CLASSNAME_HUMAN_BODYPART_ID, CLASSNAME_HUMAN_BODYPART)
00065 public:
00067 virtual TBOOL IsMobileObject() { return TTRUE; };
00068 public:
00070 virtual TBOOL OnPostLoad(LPTBYTE* lpBuffers);
00072 virtual CTList GetSaveLoadObjects(TBOOL bOnLoad = TTRUE);
00074 virtual TBOOL ReferTo(CTReferableObject* lpObject);
00075 public:
00077 virtual TBOOL SetAction(CTHumanAction* pAction);
00079 virtual TBOOL Action(CTHumanAction* pAction, TINT tTime);
00081 virtual TBOOL Actions(TINT tTime);
00083 virtual TBOOL Init();
00084 public:
00086 virtual void Delete();
00087 public:
00089 virtual CTBodyPart& operator = (CTBodyPart& APart);
00090 public:
00093 CTString& GetStaticPrimitive() { return m_StaticPrimitive; };
00094 CTInt& GetStaticPointIndex() { return m_StaticPointIndex; };
00095 TBOOL GetStaticPoint(LPTPOINT3D lpPoint);
00096 CTBodyPart* GetStaticPoint(LPTPOINT3D lpPoint, TINT tTime);
00097 protected:
00100 CTString m_StaticPrimitive;
00101 CTInt m_StaticPointIndex;
00103 CTList m_Actions;
00106 TINT m_OldTime;
00107 };
00109 typedef CTBodyPart* LPCTBodyPart;
00110
00112 class CTHumanBody : public CTBodyPart
00113 {
00114 public:
00116 CTHumanBody();
00117 ~CTHumanBody();
00118 DEFINE_ID_FUNCTIONS(CTHumanBody, CTBodyPart, CLASSNAME_HUMAN_BODY_ID, CLASSNAME_HUMAN_BODY)
00119 public:
00121 virtual TBOOL BuildObject();
00122 public:
00124 typedef enum
00125 {
00126 POSTURE_UNKNOWN,
00127 POSTURE_STANDING,
00128 POSTURE_LYING,
00129 POSTURE_WALKING,
00130 POSTURE_SITTING,
00131
00132 POSTURE_RUNNING
00133 } POSTURETYPE;
00135 typedef enum
00136 {
00137 ACTION_ARMS_STRAIGHT,
00138
00139 ACTION_ARM_UP,
00140 ACTION_LEFTHAND_UP,
00141 ACTION_RIGHTHAND_UP,
00142 ACTION_HAND_DOWN,
00143 ACTION_LEFTHAND_DOWN,
00144 ACTION_RIGHTHAND_DOWN,
00145 ACTION_MOVE_FORWARD,
00146 ACTION_MOVE_BACKWARD,
00147 ACTION_TURNLEFT,
00148 ACTION_TURNRIGHT,
00149 ACTION_FALLED,
00150 ACTION_SIT,
00151 ACTION_JUMP
00152 } ACTIONTYPE;
00153 public:
00155 virtual CTList GetSaveLoadObjects(TBOOL bOnLoad = TTRUE);
00158 virtual TBOOL OnDisplaying(THFILE lpDevice);
00160 virtual BOUNDARY GetBoundary();
00161 public:
00165 TANGLES GetArmAngles(TLPCSTR lpArm);
00166 void SetArmAngles(TLPCSTR lpArm, double Alpha = 0., double Beta = 0., double Gamma = 0.);
00167 TANGLES GetArm2Angles(TLPCSTR lpArm);
00168 void SetArm2Angles(TLPCSTR lpArm, double Alpha = 0., double Beta = 0., double Gamma = 0.);
00170 TANGLES GetLegAngles(TLPCSTR lpLeg);
00171 void SetLegAngles(TLPCSTR lpLeg, double Alpha = 0., double Beta = 0., double Gamma = 0.);
00172 TANGLES GetLeg2Angles(TLPCSTR lpLeg);
00173 void SetLeg2Angles(TLPCSTR lpLeg, double Alpha = 0., double Beta = 0., double Gamma = 0.);
00175 virtual void Reset();
00177 virtual TBOOL Init();
00179 virtual TBOOL Action(CTHumanAction* pAction, TINT tTime);
00181 virtual TBOOL Execute(TDWORD t);
00184 POSTURETYPE SetNewPosture(POSTURETYPE NewPosture);
00187 ACTIONTYPE SetNewAction(ACTIONTYPE NewAction);
00189 POSTURETYPE GetCurrentPosture() { return m_CurrentPosture; };
00190 POSTURETYPE GetOldPosture() { return m_OldPosture; };
00191 ACTIONTYPE GetCurrentAction() { return m_CurrentAction; };
00192 ACTIONTYPE GetOldAction() { return m_OldAction; };
00193 CTPoint3D GetOldPosition() { return m_OldPosition; };
00194 CTAngles GetOldAngles() { return m_OldAngles; };
00195 CTScenario* SetScenario(CTScenario* pScenario) { return m_pScenario = pScenario; };
00196 public:
00198 virtual void Delete();
00199 public:
00201 virtual CTHumanBody& operator = (CTHumanBody& AhumanBody);
00202 protected:
00205 POSTURETYPE m_CurrentPosture;
00206 POSTURETYPE m_OldPosture;
00208 ACTIONTYPE m_CurrentAction;
00209 ACTIONTYPE m_OldAction;
00211 CTPoint3D m_OldPosition;
00212 CTAngles m_OldAngles;
00214 CTInt m_OldTime;
00215 CTBodyPart* m_OldStaticPart;
00216 TPOINT3D m_OldStaticPoint;
00217 CTScenario* m_pScenario;
00220 };
00221
00222 #endif