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