123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- /****************************************************************************************
-
- Copyright (C) 2015 Autodesk, Inc.
- All rights reserved.
-
- Use of this software is subject to the terms of the Autodesk license agreement
- provided at the time of installation or download, or which otherwise accompanies
- this software in either electronic or hard copy form.
-
- ****************************************************************************************/
- //! \file fbxreader.h
- #ifndef _FBXSDK_FILEIO_READER_H_
- #define _FBXSDK_FILEIO_READER_H_
- #include <fbxsdk/fbxsdk_def.h>
- #include <fbxsdk/core/base/fbxarray.h>
- #include <fbxsdk/core/base/fbxstring.h>
- #include <fbxsdk/core/base/fbxtime.h>
- #include <fbxsdk/fileio/fbx/fbxio.h>
- #include <fbxsdk/fbxsdk_nsbegin.h>
- class FbxManager;
- class FbxFile;
- class FbxStream;
- class FbxObject;
- class FbxDocument;
- class FbxDocumentInfo;
- class FbxScene;
- class FbxImporter;
- class FbxIOSettings;
- class FbxAxisSystem;
- class FbxStatistics;
- class FbxSystemUnit;
- class FbxNode;
- class FbxProgress;
- class FbxTakeInfo;
- /** Base class of other readers used internally.
- * This class provides the interfaces for reading files.
- *
- * The role of the reader is to effectively "read" specific file data
- * vs the role of the importer is to select a specific reader
- * and launch the reading of a file through that reader.
- * \see FbxImporter
- *
- * ex:
- * - FbxReaderFbx5 can read FBX 5 format files
- * - FbxReaderFbx6 can read FBX 6 format files
- * - FbxReaderFbx7 can read FBX 7 format files
- * - FbxReaderCollada can read Collada files
- * - FbxReaderDxf can read Dxf files
- * - ... etc.
- *
- * A SDK user should - normally - not use this class,
- * except if a custom reader must be created for plug-in extension,
- * then FbxReader must be the base class for
- * the new custom reader in that particular situation.
- * \nosubgrouping
- */
- class FBXSDK_DLL FbxReader
- {
- public:
- /** Constructor.
- * \param pManager The FbxManager Object.
- * \param pID Id for current reader.
- * \param pStatus The FbxStatus object to hold error codes.
- */
- FbxReader(FbxManager& pManager, int pID, FbxStatus& pStatus);
- /** Destructor.
- */
- virtual ~FbxReader();
-
- /** Information type to request.
- * \remarks Used internally to get reader file information.
- */
- enum EInfoRequest
- {
- eInfoExtension, //!< To get the file ext for a reader ex: "FBX".
- eInfoDescriptions, //!< To get the file description for a reader ex: "Autodesk FBX (*.fbx)".
- eReserved1 = 0xFBFB,
- };
- /** Flags for reading parts of file.
- * \remarks Used internally when an importer is initialized to get some information very fast.
- */
- enum EFileOpenSpecialFlags
- {
- eParseForGlobalSettings = 1, //!< Used for reading the Global settings section when an importer is initialized.
- eParseForStatistics = 2 //!< Used for reading a group of statistics when an importer is initialized.
- };
- /** \internal Helper typedef for passing FbxReader creator function as argument (used internally) */
- typedef FbxReader* (*CreateFuncType)(FbxManager& pManager, FbxImporter& pImporter, int pSubID, int pPluginID);
- /** \internal Helper typedef for passing FbxIOSettings creator function as argument (used internally) */
- typedef void (*IOSettingsFillerFuncType)(FbxIOSettings& pIOS);
- /** \internal Helper typedef for passing EInfoRequest function as argument (used internally) */
- typedef void* (*GetInfoFuncType)(EInfoRequest pRequest, int pReaderTypeId);
- /** Returns the file version.
- * \param pMajor Major version.
- * \param pMinor Minor version.
- * \param pRevision Revision version.
- */
- virtual void GetVersion(int& pMajor, int& pMinor, int& pRevision){ pMajor = pMinor = pRevision = 0; }
- /** Opens the file with default flag
- * \param pFileName Name of the File to open
- * \return If the file opens successfully return \c true, otherwise return \c false.
- */
- virtual bool FileOpen(char* pFileName) = 0;
- /** Opens the stream with default flag
- * \param pStream stream to open
- * \param pStreamData user-defined stream data
- * \return If the stream opens successfully return \c true, otherwise return \c false.
- */
- virtual bool FileOpen(FbxStream* pStream, void* pStreamData);
- /** Closes the file stream
- * \return \c false
- */
- virtual bool FileClose() = 0;
- /** Checks if the file stream is open.
- * \return \c false.
- */
- virtual bool IsFileOpen() = 0;
- /** Returns file stream options
- * \param pParseFileAsNeeded Sets whether to parse file as read options
- * \return true on success, otherwise return false.
- */
- virtual bool GetReadOptions(bool pParseFileAsNeeded = true) = 0;
- /** Reads file with stream options
- * \param pDocument FbxDocument to store the file data
- * \return \c false.
- */
- virtual bool Read(FbxDocument* pDocument) = 0;
- #ifndef FBXSDK_ENV_WINSTORE
- /** Reads extension plug-ins name, version and parameters, so that we can remember if a plug-in was used during export.
- * This is especially useful for extension plug-ins that modify the scene and also to warn users during import if an
- * extension plug-in was used that could be missing.
- * \param pParams The parameters of the extension plug-in. The properties of the objects are used
- * as the parameters of the extension plug-in.
- * \remark This function has no implementation in this class. Only sub-class should implement it as needed. For example,
- * FBX 6 and FBX 7 does implement it.
- */
- virtual void PluginReadParameters(FbxObject& pParams);
- #endif /* !FBXSDK_ENV_WINSTORE */
- /** Opens the file with specific EFileOpenSpecialFlags
- * \param pFileName Name of the File to open.
- * \param pFlags The EFileOpenSpecialFlags to open with
- * \return If the file opens successfully return true, otherwise return false.
- */
- virtual bool FileOpen(char* pFileName, EFileOpenSpecialFlags /*pFlags*/){ return FileOpen(pFileName); }
- /** Returns the system axis information and file system units from the file
- * \param pAxisSystem Axis system in file
- * \param pSystemUnits System unit in file
- * \return \c false.
- */
- virtual bool GetAxisInfo(FbxAxisSystem* /*pAxisSystem*/, FbxSystemUnit* /*pSystemUnits*/){ return false; }
- /** Returns statistics from the file
- * \param pStats Statistics in the file.
- * \return \c false.
- */
- virtual bool GetStatistics(FbxStatistics* /*pStats*/){ return false; }
- /** Get FBX file time mode read from GlobalSettings in FBX 6.n and FBX 7.n
- * \param pTimeMode ref to a FbxTime::EMode enum
- * \return \c true on success, \c false otherwise.
- * \remarks This function must be called after FbxImporter::Initialize().
- * Can be used for statistics (via GlobalSettings) before loading the whole scene from the file.
- */
- virtual bool GetFrameRate(FbxTime::EMode& pTimeMode) { pTimeMode = FbxTime::eDefaultMode; return false; }
- /** Returns the scene info from the file.
- * \return NULL.
- */
- virtual FbxDocumentInfo* GetSceneInfo(){return NULL;}
- /** Returns the list of take infos from the file.
- * \return NULL
- */
- virtual FbxArray<FbxTakeInfo*>* GetTakeInfo(){return NULL;}
- /** If default camera resolution is OK, returns information about the resolution of the render.
- * \param pCamName Default camera name.
- * \param pResolutionMode Default resolution mode.
- * \param pW Default resolution width.
- * \param pH Default resolution height.
- * \return \c true If default camera resolution is OK, \c false Otherwise.
- */
- virtual bool GetDefaultRenderResolution(FbxString& pCamName, FbxString& pResolutionMode, double& pW, double& pH);
- /** Judges if the format of the file is was created by an Autodesk plug-in.
- * An internal (genuine) plug-in is one created by the Autodesk FBX product team.
- * \return \c true If the file format is internal plug-in , \c false Otherwise.
- */
- bool IsGenuine();
-
- /** Access to a IOSettings object.
- * \return A pointer to IOSettings used for this reader or NULL if the object
- * has not been allocated.
- */
- virtual FbxIOSettings * GetIOSettings();
- /** Set the IOSettings pointer to be used for this reader instance.
- * \param pIOSettings
- */
- virtual void SetIOSettings(FbxIOSettings * pIOSettings);
- /** Pass a progress handler to the reader.
- * \param pProgress FbxProgress to store the progress information.
- */
- virtual void SetProgressHandler(FbxProgress* /*pProgress*/){}
- virtual void SetEmbeddingExtractionFolder(const char* /*pExtractFolder*/){}
- /** Returns true if this reader supports FbxStream I/O. Default value is false. */
- virtual bool SupportsStreams() const;
- /*****************************************************************************************************************************
- ** WARNING! Anything beyond these lines is for internal use, may not be documented and is subject to change without notice! **
- *****************************************************************************************************************************/
- #ifndef DOXYGEN_SHOULD_SKIP_THIS
- virtual bool FileOpen(FbxFile * pFile);
- FbxStatus& GetStatus() { return mStatus; }
- protected:
- void SetDefaultRenderResolution(const char* pCamName, const char* pResolutionMode, double pW, double pH);
- #ifndef FBXSDK_ENV_WINSTORE
- void PluginsReadBegin(FbxScene& pScene);
- void PluginsRead(const char* pName, const char* pVersion);
- void PluginsReadEnd(FbxScene& pScene);
- #endif /* !FBXSDK_ENV_WINSTORE */
- FbxReader& operator=(FbxReader const&) { return *this; }
- virtual bool CheckDuplicateNodeNames(FbxNode* pRootNode, FbxString& pDuplicateNodeNameList);
- FbxStatus& mStatus;
- FbxManager& mManager;
- FbxIODefaultRenderResolution* mData;
- private:
- int mInternalID;
- FbxIOSettings* mIOSettings;
- friend struct FbxReaderFbx7_Impl;
- #endif /* !DOXYGEN_SHOULD_SKIP_THIS *****************************************************************************************/
- };
- //! Helper to access the IOSetting object pointer as a ref ex: IOS_REF.GetBoolProp( ... );
- #define IOS_REF (*GetIOSettings())
- #include <fbxsdk/fbxsdk_nsend.h>
- #endif /* _FBXSDK_FILEIO_READER_H_ */
|