00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00035 #ifndef __SO3ENTITYFAP_H__
00036 #define __SO3ENTITYFAP_H__
00037
00038 #include "../SCOLBasic/SO3Prerequisites.h"
00039 #include "../SCOLBasic/SO3Array.h"
00040 #include "../SO3SceneGraph/SO3Entity.h"
00041 #include "../SCOLBasic/FAPData.h"
00042
00043 namespace SO3
00044 {
00045
00046 class SEntityFap : public SEntity
00047 {
00048 public:
00049 double FAPValues[NUMBER_OF_FAPS];
00050
00051 Ogre::Pose* FAP_6;
00052 int index_Pose_FAP_6;
00053 Ogre::Pose* FAP_7;
00054 int index_Pose_FAP_7;
00055 Ogre::Pose* FAP_12_0;
00056 int index_Pose_FAP_12_0;
00057 Ogre::Pose* FAP_12_1;
00058 int index_Pose_FAP_12_1;
00059 Ogre::Pose* FAP_13_0;
00060 int index_Pose_FAP_13_0;
00061 Ogre::Pose* FAP_13_1;
00062 int index_Pose_FAP_13_1;
00063 Ogre::Pose* FAP_31_;
00064 int index_Pose_FAP_31_;
00065 Ogre::Pose* FAP_32_;
00066 int index_Pose_FAP_32_;
00067 Ogre::Pose* FAP_33_;
00068 int index_Pose_FAP_33_;
00069 Ogre::Pose* FAP_34_;
00070 int index_Pose_FAP_34_;
00071 Ogre::Pose* FAP_35_;
00072 int index_Pose_FAP_35_;
00073 Ogre::Pose* FAP_36_;
00074 int index_Pose_FAP_36_;
00075
00076
00077
00078
00079 Ogre::Pose* FAP_39_;
00080 int index_Pose_FAP_39_;
00081 Ogre::Pose* FAP_40_;
00082 int index_Pose_FAP_40_;
00083 Ogre::Pose* FAP_41_0;
00084 int index_Pose_FAP_41_0;
00085 Ogre::Pose* FAP_41_1;
00086 int index_Pose_FAP_41_1;
00087 Ogre::Pose* FAP_42_0;
00088 int index_Pose_FAP_42_0;
00089 Ogre::Pose* FAP_42_1;
00090 int index_Pose_FAP_42_1;
00091 Ogre::Pose* FAP_55_;
00092 int index_Pose_FAP_55_;
00093 Ogre::Pose* FAP_56_;
00094 int index_Pose_FAP_56_;
00095 Ogre::Pose* FAP_59_;
00096 int index_Pose_FAP_59_;
00097 Ogre::Pose* FAP_60_;
00098 int index_Pose_FAP_60_;
00099 int numberOfPoses;
00100 int* indexOfPose;
00101 int* FAPOfPoses;
00102 Ogre::Pose** poses;
00103 Ogre::VertexPoseKeyFrame* manualKeyFrame;
00104 Ogre::AnimationState* manualAnimState;
00105 SAnim* animFAP;
00106 int nbFAPFrames;
00107 bool fapPoseCreated;
00108 bool verticesNeedUpdate;
00109 SArray<string> fapBuffer;
00110 FAPdata* FAPs;
00111 std::vector<std::vector<Ogre::Vector3> > FDPs;
00112 enum axeType{X,Y,Z};
00113 protected:
00114 private:
00115 bool hasFapPoses;
00116 double IRISD0;
00117 double IRISD;
00118 double ES;
00119 double ENS;
00120 double MNS;
00121 double MW;
00122 double MH;
00123 double LCB;
00124 double RCB;
00125 double LLP;
00126 double ULP;
00127 double FI;
00128 double JH;
00129 double UL;
00130 double LL;
00131
00132 public:
00136 SEntityFap(SScene* parent, std::string entityName, std::string meshName, std::string pathStdFDP, std::string pathStdIndices);
00137
00140 ~SEntityFap();
00141
00144 void initializeEntityFAP(Ogre::MeshPtr newMesh, Ogre::Vector3 position, Ogre::Quaternion orient, Ogre::Vector3 scale, SNode* parentNode);
00145
00148 static void readIndices(std::vector<std::vector<int> >* groups, string fileName);
00149
00152 static void readFDPs(std::vector<std::vector<Ogre::Vector3> >* FDPs, std::vector<Ogre::Vector3>* vertices, Ogre::String fileName);
00153
00156 void clear(std::vector<bool>* v);
00157
00160 void add(std::vector<bool>* v, std::vector<int>* indices);
00161
00164 void createPose2( Ogre::Pose *pose, std::vector<Ogre::Vector3>* geomety, std::vector<bool>* zones, Ogre::Vector3* FDP, axeType axe, double x, double y, double z, double div, double coef);
00165
00168 void clearAndAdd(std::vector<bool>* v, std::vector<std::vector<int> >* groups, int numberOfGroups, ...);
00169
00172 void createPose(Ogre::Pose* pose, std::vector<Ogre::Vector3>* geomety, std::vector<bool>* zones, Ogre::Vector3* FDP, axeType axe, double x, double y, double z, double div, double coef, int power = 1, double pi_=3.14159265358979323846f);
00173
00176 void scalepose(Ogre::Pose* pose, std::vector<bool>* zones, axeType axe, double factor);
00177
00180 void initFapMesh(Ogre::MeshPtr faceMesh, std::string pathStdFDP, std::string pathStdIndices);
00181
00184 void initFAPAnimation(Ogre::MeshPtr faceMesh);
00185
00188 void playFAPFrame();
00189
00192 bool linkToBone(SNode* parentBone);
00193 protected:
00194 private:
00198 SEntityFap();
00199 };
00200
00201 }
00202
00203 #endif