00001
00004 #ifndef FBXFILESDK_KFBXCHARACTER_KFBXCHARACTERPOSE_H
00005 #define FBXFILESDK_KFBXCHARACTER_KFBXCHARACTERPOSE_H
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #include <fbxfilesdk/fbxfilesdk_def.h>
00042
00043 #include <fbxfilesdk/kfbxplugins/kfbxobject.h>
00044 #include <fbxfilesdk/kfbxplugins/kfbxscene.h>
00045 #include <fbxfilesdk/components/kbaselib/klib/kstring.h>
00046 #include <fbxfilesdk/kfbxmath/kfbxxmatrix.h>
00047 #include <fbxfilesdk/kfbxplugins/kfbxnode.h>
00048 #include <fbxfilesdk/kfbxcharacter/kfbxcharacter.h>
00049
00050 #include <fbxfilesdk/fbxfilesdk_nsbegin.h>
00051
00052 class KFbxScene;
00053 class KFbxSdkManager;
00054
00055 class KFbxCharacterPose_internal;
00056
00081 class KFBX_DLL KFbxCharacterPose : public KFbxObject
00082 {
00083 KFBXOBJECT_DECLARE(KFbxCharacterPose,KFbxObject);
00084
00085 public:
00087 void Reset();
00088
00092 KFbxNode* GetRootNode() const;
00093
00097 KFbxCharacter* GetCharacter() const;
00098
00104 bool GetOffset(ECharacterNodeId pCharacterNodeId, KFbxXMatrix& pOffset) const
00105 {
00106 KFbxCharacterLink lCharacterLink;
00107
00108 if (!GetCharacter()) return false;
00109
00110 if (!GetCharacter()->GetCharacterLink(pCharacterNodeId, &lCharacterLink)) return false;
00111
00112 pOffset.SetTRS(lCharacterLink.mOffsetT, lCharacterLink.mOffsetR, lCharacterLink.mOffsetS);
00113
00114 return true;
00115 }
00116
00124 bool GetLocalPosition(ECharacterNodeId pCharacterNodeId, KFbxVector4& pLocalT, KFbxVector4& pLocalR, KFbxVector4& pLocalS) const
00125 {
00126 KFbxCharacterLink lCharacterLink;
00127
00128 if (!GetCharacter()) return false;
00129
00130 if (!GetCharacter()->GetCharacterLink(pCharacterNodeId, &lCharacterLink)) return false;
00131
00132 KFbxScene* lScene = lCharacterLink.mNode->GetScene();
00133 if( lScene )
00134 {
00135 pLocalT = lScene->GetEvaluator()->GetNodeLocalTransform(lCharacterLink.mNode).GetT();
00136 pLocalR = lScene->GetEvaluator()->GetNodeLocalTransform(lCharacterLink.mNode).GetR();
00137 pLocalS = lScene->GetEvaluator()->GetNodeLocalTransform(lCharacterLink.mNode).GetS();
00138 return true;
00139 }
00140 return false;
00141 }
00142
00148 bool GetGlobalPosition(ECharacterNodeId pCharacterNodeId, KFbxXMatrix& pGlobalPosition) const
00149 {
00150 KFbxCharacterLink lCharacterLink;
00151
00152 if (!GetCharacter()) return false;
00153
00154 if (!GetCharacter()->GetCharacterLink(pCharacterNodeId, &lCharacterLink)) return false;
00155
00156 KFbxScene* lScene = lCharacterLink.mNode->GetScene();
00157 if( lScene )
00158 {
00159 pGlobalPosition = lScene->GetEvaluator()->GetNodeGlobalTransform(lCharacterLink.mNode);
00160 return true;
00161 }
00162 return false;
00163 }
00164
00166
00167
00168
00169
00170
00171
00173 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00174
00175 virtual KFbxObject& Copy(const KFbxObject& pObject);
00176 virtual KFbxObject* Clone(KFbxObject* pContainer, KFbxObject::ECloneType pCloneType) const;
00177
00178 private:
00179 virtual KString GetTypeName() const;
00180
00181 KFbxCharacterPose(KFbxSdkManager& pManager, char const* pName);
00182
00183 virtual void Destruct(bool pRecursive, bool pDependents);
00184
00185 void CopyNode(KFbxNode* pSrcNode, KFbxNode* pDstNode);
00186 void CopyCharacter(KFbxCharacter* pSrcCharacter, KFbxCharacter* pDstCharacter, KFbxNode* pDstRootNode);
00187
00188 KFbxCharacterPose_internal* mPH;
00189
00190 public:
00191 KFbxScene* mScene;
00192
00193 private:
00194 friend class KFbxCharacterPose_internal;
00195 friend class KFbxScene;
00196 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
00197
00198 };
00199
00200 #include <fbxfilesdk/fbxfilesdk_nsend.h>
00201
00202 #endif // FBXFILESDK_KFBXCHARACTER_KFBXCHARACTERPOSE_H
00203