00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013 #ifndef _FBXSDK_FILEIO_FBX_READER_FBX5_H_
00014 #define _FBXSDK_FILEIO_FBX_READER_FBX5_H_
00015
00016 #include <fbxsdk.h>
00017
00018 #include <fbxsdk/fbxsdk_nsbegin.h>
00019
00020 class FbxAnimLayer;
00021 class Fbx5ObjectTypeInfo;
00022
00023 FbxReader* CreateFBXReader(FbxManager& pManager,
00024 FbxImporter& pImporter,
00025 int pID);
00026 void GetInfoFBXReader(int* pCount,
00027 char const* const* * pExtensions,
00028 char const* const* * pDescriptions);
00029
00030 class FbxReaderFbx5 : public FbxReader
00031 {
00032 public:
00033 FbxReaderFbx5(FbxManager& pManager, FbxImporter& pImporter, int pID);
00034 virtual ~FbxReaderFbx5();
00035
00036 virtual bool FileOpen(char* pFileName, bool pIgnoredArg);
00037 virtual bool FileOpen(char* pFileName);
00038 virtual bool FileOpen(FbxFile * pFile);
00039 virtual bool FileOpen(FbxStream * pStream, void* pStreamData);
00040 virtual bool FileClose();
00041 virtual bool IsFileOpen();
00042
00043 virtual void SetEmbeddingExtractionFolder(const char* pExtractFolder);
00044
00045 typedef enum
00046 {
00047 eASCII,
00048 eBINARY,
00049 eENCRYPTED
00050 } EImportMode;
00051
00052 EImportMode GetImportMode();
00053 virtual void GetVersion(int& pMajor, int& pMinor, int& pRevision);
00054
00055 virtual bool GetReadOptions(bool pParseFileAsNeeded = true);
00056 virtual bool Read(FbxDocument* pDocument);
00057
00058 virtual bool GetReadOptions(FbxIO* pFbx, bool pParseFileAsNeeded = true);
00059 virtual bool Read(FbxScene& pScene, FbxIO* pFbx);
00060
00061 virtual FbxDocumentInfo* GetSceneInfo() { return mSceneInfo; }
00062 virtual FbxArray<FbxTakeInfo*>* GetTakeInfo() { return &mTakeInfo; }
00063
00064 virtual bool SupportsStreams() const { return true; }
00065
00066 private:
00067 void ReadOptionsInMainSection();
00068 void ReadTakeOptions();
00069 bool ReadOptionsInExtensionSection(int& pSectionIndex);
00070 void ReadOptionsInGenericSection();
00071 bool WriteOptionsInExtensionSection(bool pOverwriteLastExtensionSection=false);
00072 bool WriteThumbnail(FbxThumbnail*);
00073 FbxDocumentInfo* ReadSceneInfo();
00074 FbxDocumentInfo* ReadSceneInfo(FbxString& pType);
00075 void WriteSceneInfo(FbxDocumentInfo*);
00076 void SetIsBeforeVersion6WithMainSection(bool pOpenMainSection);
00077
00078 bool ReadDefinitionSection(FbxScene& pScene, FbxArray<Fbx5ObjectTypeInfo*>& pObjectContent);
00079 bool ReadObjectSection(FbxScene& pScene, FbxArray<Fbx5ObjectTypeInfo*>& pObjectContent);
00080 bool ReadObject(FbxScene& pScene, FbxString& pObjectType, FbxString& pObjectSubType, FbxString& pObjectName, FbxString& pObjectUniqueId);
00081 bool ReadNode();
00082
00083 bool ReadAnimation(FbxScene& pScene);
00084 bool ReadTakeAnimation(FbxScene& pScene, FbxTakeInfo* pTakeInfo);
00085 FbxThumbnail* ReadThumbnail();
00086 bool ReadNodeAnimation(FbxIO& pFileObject, FbxScene& pScene, FbxTakeInfo* pTakeInfo);
00087 bool TimeShiftNodeAnimation(FbxScene& pScene, FbxTakeInfo* pTakeInfo);
00088 bool ReadHierarchy(FbxNode& pRootNode);
00089 bool ResolveHierarchy(FbxNode& pRootNode);
00090 bool ResolveLinks(FbxNode& pRootNode, FbxNode& pCurrentNode);
00091 bool ResolveTargets(FbxNode& pRootNode);
00092 bool ResolveUpNodes(FbxNode& pRootNode);
00093 bool ResolveCameraBackgrounds(FbxScene& pScene);
00094 void RemoveDuplicateTextures(FbxScene& pScene);
00095 void RemoveDuplicateMaterials(FbxScene& pScene);
00096
00097 void ReadPose(FbxScene& pScene);
00098 bool ReadPose(FbxScene& pScene, FbxPose* pPose, bool pAsBindPose);
00099
00100 void ReadCameraSwitcher(FbxScene& pScene);
00101 void ReorderCameraSwitcherIndices(FbxScene& pScene);
00102
00103 void ReadGobo(FbxScene& pScene);
00104 void ReadGoboSection(FbxScene& pScene);
00105 void ReadGobo(FbxGobo& pGobo);
00106
00107 void ReadCharacter(FbxScene& pScene);
00108 void ReadCharacter(FbxCharacter& pCharacter,int& pInputType, int& pInputIndex);
00109 void ReadCharacterLinkGroup(FbxCharacter& pCharacter, int pCharacterGroupId);
00110 void ReadCharacterLink(FbxCharacter& pCharacter, int pCharacterNodeId);
00111 void ReadCharacterLinkRotationSpace(FbxCharacterLink& pCharacterLink);
00112 void ReadFilterSet(FbxCharacter& pCharacter);
00113 void ReadControlSet(FbxControlSet& pControlSet);
00114 void ReadControlSetLinkGroup(FbxControlSet& pControlSet, int pCharacterGroupId);
00115 void ReadControlSetLink(FbxControlSet& pControlSet, int pCharacterNodeId);
00116 void ReadEffector(FbxControlSet& pControlSet);
00117 void ReadEffectorAux(FbxControlSet& pControlSet);
00118
00119 int ReadCharacterPose(FbxScene& pScene);
00120 bool ReadCharacterPose(FbxCharacterPose& pCharacterPose);
00121
00122 void ReadGlobalLightSettings(FbxScene& pScene);
00123 void ReadShadowPlane(FbxScene& pScene);
00124 void ReadAmbientColor(FbxScene& pScene);
00125 void ReadFogOption(FbxScene& pScene);
00126
00127 void ReadGlobalCameraAndTimeSettings(FbxScene& pScene);
00128 void ReadGlobalTimeSettings(FbxScene& pScene);
00129
00130 void ReadGlobalCameraSettings(FbxScene& pScene);
00131
00132 bool ReadMedia(FbxScene& pScene, const char* pEmbeddedMediaDirectory = "");
00133 FbxString ReadMediaClip(const char* pEmbeddedMediaDirectory);
00134
00135 bool ReadNode ( FbxNode& pNode );
00136 bool ReadGenericNode ( FbxGenericNode& pNode );
00137 bool ReadNodeChildrenName ( FbxNode& pNode );
00138 bool ReadNodeShading ( FbxNode& pNode );
00139 bool ReadNodeCullingType ( FbxNode& pNode );
00140 bool ReadNodeLimits ( FbxNode& pNode );
00141 bool ReadNodeTarget ( FbxNode& pNode );
00142 bool ReadNodeAttribute ( FbxNode& pNode );
00143 bool ReadNodePivots ( FbxNode& pNode );
00144 bool ReadNodeDefaultAttributes ( FbxNode& pNode );
00145 bool ReadNodeProperties ( FbxNode& pNode );
00146 bool ReadGeometry ( FbxGeometry& pGeometry );
00147 bool ReadGeometryMaterial ( FbxGeometry& pGeometry );
00148 bool ReadGeometryTexture ( FbxGeometry& pGeometry );
00149 bool ReadGeometryLinks ( FbxGeometry& pGeometry );
00150 bool ReadGeometryShapes ( FbxGeometry& pGeometry );
00151 bool ReadGeometryLayer ( FbxGeometry& pGeometry );
00152 bool ReadGeometryTextureLayer ( FbxGeometry& pGeometry, int pLayerIndex );
00153
00154 bool ReadNull ( FbxNull& pNull );
00155
00156 bool ReadMarker ( FbxMarker& pMarker );
00157
00158 bool ReadCamera ( FbxCamera& pCamera );
00159 bool ReadCameraSwitcher ( FbxCameraSwitcher& pCameraSwitcher );
00160
00161 bool ReadLight ( FbxLight& pLight );
00162
00163 bool ReadMesh ( FbxMesh& pMesh );
00164 bool ReadMeshVertices ( FbxMesh& pMesh );
00165 bool ReadMeshNormals ( FbxMesh& pMesh );
00166 bool ReadMeshAssignation ( FbxMesh& pMesh );
00167 bool ReadMeshPolygonIndex ( FbxMesh& pMesh );
00168 bool ReadMeshPolyGroupIndex ( FbxMesh& pMesh );
00169 bool ReadMeshMaterialsID ( FbxMesh& pMesh );
00170 bool ReadMeshTexturesID ( FbxMesh& pMesh );
00171 bool ReadMeshTextureType ( FbxMesh& pMesh );
00172 bool ReadMeshTextureUV ( FbxMesh& pMesh );
00173 bool ReadMeshTextureIndex ( FbxMesh& pMesh );
00174 bool ReadMeshVertexColors ( FbxMesh& pMesh );
00175
00176
00177
00178 bool ReadLayerElements (FbxGeometry& pGeometry);
00179 bool ReadLayerElementsMaterial (FbxGeometry* pGeometry, FbxArray<FbxLayerElement*>& pElementsMaterial);
00180 bool ReadLayerElementsNormal (FbxGeometry* pGeometry, FbxArray<FbxLayerElement*>& pElementsNormal);
00181 bool ReadLayerElementsVertexColor (FbxGeometry* pGeometry, FbxArray<FbxLayerElement*>& pElementsVertexColor);
00182 bool ReadLayerElementsTexture (FbxGeometry* pGeometry, FbxArray<FbxLayerElement*>& pElementsTexture);
00183 bool ReadLayerElementsUV (FbxGeometry* pGeometry, FbxArray<FbxLayerElement*>& pElementsUV);
00184 bool ReadLayerElementsPolygonGroup (FbxGeometry* pGeometry, FbxArray<FbxLayerElement*>& pElementsPolygonGroup);
00185
00186 bool ReadNurb ( FbxNurbs& pNurbs );
00187
00188 bool ReadPatch ( FbxPatch& pPatch );
00189 int ReadPatchType ( FbxPatch& pPatch );
00190
00191 bool ReadTexture(FbxFileTexture& pTexture);
00192 bool ReadSurfaceMaterial(FbxSurfacePhong& pMaterial);
00193 bool ReadLink(FbxCluster& pLink);
00194 bool ReadSkin(FbxSkin& pSkin);
00195 bool ReadCluster(FbxCluster& pCluster);
00196 bool ReadShape(FbxShape& pShape, FbxGeometry& pGeometry);
00197 bool ReadVideo(FbxVideo& pVideo);
00198 bool ReadConstraint(FbxConstraint& pPosition);
00199
00200 bool ReadUserProperties (FbxNode& pNode);
00201 bool ReadProperties(FbxObject *pObject);
00202
00203
00204
00205
00206 bool ReadConnectionSection();
00207 void ReadPoses(FbxScene& pScene);
00208
00209 FbxString ConvertCameraName(FbxString pCameraName);
00210
00211 bool GenerateParametricGeometryLayer(FbxGeometry& pGeometry);
00212 void CorrectTextureLayers(FbxMesh& pMesh);
00213
00214 void TransferAnimation(void* pRootCurveNode, FbxProperty& pRootProperty, bool pValueOnly = false);
00215 void ReadAnimation(FbxIO& pFileObject, void* pCurveNode);
00216 void ReadAnimation(FbxIO& pFileObject, FbxObject* pObj);
00217
00218 void ReadTimeWarps(FbxIO& pFileObject, FbxSet& pTimeWarpSet);
00219 void DestroyTimeWarps(FbxSet& pTimeWarpSet);
00220
00221 FbxNode* FindNode (char* pName);
00222 int FindString(FbxString pString, FbxArray<FbxString*>& pStringArray);
00223 FbxString FindFile(FbxString pFullFilePath, FbxString pRelativeFilePath = "");
00224
00225 bool ReadPassword(FbxString pPassword);
00226
00227 void ReadSceneGenericPersistenceSection(FbxScene& pScene);
00228
00229
00230
00231
00232 private:
00233 FbxReaderFbx5& operator=(FbxReaderFbx5 const&) { return *this; }
00234
00235 FbxIO* mFileObject;
00236 FbxImporter& mImporter;
00237
00238 FbxCharPtrSet mNodeArrayName;
00239 FbxCharPtrSet mTargetArrayName;
00240 FbxCharPtrSet mUpNodeArrayName;
00241 FbxCharPtrSet mCameraBackgroundArrayName;
00242
00243 FbxObjectStringMap mObjectMap;
00244 FbxArray<FbxTakeInfo *> mTakeInfo;
00245 FbxDocumentInfo * mSceneInfo;
00246 FbxAnimLayer* mAnimLayer;
00247
00248
00249 FbxArray<FbxTexture*> mTemporaryTextures;
00250 };
00251
00252 #include <fbxsdk/fbxsdk_nsend.h>
00253
00254 #endif