123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 |
- /****************************************************************************************
-
- 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 fbxwriter.h
- #ifndef _FBXSDK_FILEIO_WRITER_H_
- #define _FBXSDK_FILEIO_WRITER_H_
- #include <fbxsdk/fbxsdk_def.h>
- #include <fbxsdk/utils/fbxrenamingstrategy.h>
- #include <fbxsdk/fbxsdk_nsbegin.h>
- class FbxStatus;
- class FbxManager;
- class FbxFile;
- class FbxStream;
- class FbxObject;
- class FbxDocument;
- class FbxScene;
- class FbxExporter;
- class FbxIO;
- class FbxIOSettings;
- class FbxProgress;
- #define IOSP GetIOSettings()
- /** Base class of other writers used internally.
- * This class provides the interfaces for writing files.
- *
- * The role of the writer is to effectively "write" specific file data
- * vs the role of the exporter is to select a specific writer
- * and launch the writing of a file through that writer.
- * \see FbxExporter
- *
- * ex:
- * - FbxWriterFbx5 can write FBX 5 format files
- * - FbxWriterFbx6 can write FBX 6 format files
- * - FbxWriterFbx7 can write FBX 7 format files
- * - FbxWriterCollada can write Collada files
- * - FbxWriterDxf can write Dxf files
- * - ... etc.
- *
- * A SDK user should - normally - not use this class,
- * except if a custom writer must be created for plug-in extension,
- * then FbxWriter must be the base class for
- * the new custom writer in that particular situation.
- * \nosubgrouping
- */
- class FBXSDK_DLL FbxWriter
- {
- public:
- /** Constructor.
- * \param pManager The FbxManager Object.
- * \param pID Id for current writer.
- * \param pStatus The FbxStatus object to hold error codes.
- */
- FbxWriter(FbxManager& pManager, int pID, FbxStatus& pStatus);
- /** Destructor. */
- virtual ~FbxWriter();
- /** Information type to request.
- * \remarks Used internally to get writer file information.
- */
- enum EInfoRequest
- {
- eInfoExtension, //!< To get the file ext for a writer ex: "FBX".
- eInfoDescriptions, //!< To get the file description for a writer ex:"Autodesk FBX (*.fbx)".
- eInfoVersions, //!< To get the file version for a writer ex: 7100.
- eInfoCompatibleDesc, //!< To get the file compatible description for a writer.
- eInfoUILabel, //!< To get the file UI label to show for a writer ex: file labels shown in "Open file dialog".
- eReserved1 = 0xFBFB,
- };
-
- //! Helper typedef for passing FbxWriter creator function as argument (used internally).
- typedef FbxWriter* (*CreateFuncType)(FbxManager& pManager, FbxExporter& pExporter, int pSubID, int pPluginID);
- //! Helper typedef for passing FbxIOSettings creator function as argument (used internally).
- typedef void (*IOSettingsFillerFuncType)(FbxIOSettings& pIOS);
- //! Helper typedef for passing EInfoRequest function as argument (used internally).
- typedef void* (*GetInfoFuncType)(EInfoRequest pRequest, int pWriterTypeId);
- /** Creates a new file.
- * \param pFileName The name of the newly created file.
- */
- virtual bool FileCreate(char* pFileName) = 0;
- /** Creates a new file via a stream.
- * \param pStream The stream to write to.
- * \param pStreamData the user-defined stream data to be written.
- */
- virtual bool FileCreate(FbxStream* pStream, void* pStreamData);
-
- /** Closes the file.
- */
- virtual bool FileClose() = 0;
-
- /** Test if the file is open.
- */
- virtual bool IsFileOpen() = 0;
- /** Setup write options.
- */
- virtual void GetWriteOptions() = 0;
- /** Writes content to the specified file with given stream options
- * \param pDocument FbxDocument to write file data to.
- */
- virtual bool Write(FbxDocument* pDocument) = 0;
- /** Pre-processes the scene.
- * \param pScene The scene needs to be pre-processed.
- */
- virtual bool PreprocessScene(FbxScene &pScene) = 0;
- /** Post-processes the scene.
- * \param pScene The scene needs to be post-processed.
- */
- virtual bool PostprocessScene(FbxScene &pScene) = 0;
- #ifndef FBXSDK_ENV_WINSTORE
- /** Writes 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 PluginWriteParameters(FbxObject& pParams);
- #endif /* !FBXSDK_ENV_WINSTORE */
- /** Finds the selected root node in the specified scene.
- * \param pScene The scene in which the selected root node is found.
- * \return The located root node.\c NULL if the selected root node cannot be found.
- */
- virtual FbxNode* FindRootNode(FbxScene& pScene);
- /** Checks if there are spaces in the names of specified node (and its children nodes),
- * and writes the returned node's name in the specified string list.
- * \param pNode Specifies the node to check.
- * \param pNodeNameList Specifies the string list where the node name that has spaces in it is recorded.
- * \return \c true If there are no spaces in the name of specified node (and its children nodes),
- * \c false If spaces are found.
- */
- virtual bool CheckSpaceInNodeNameRecursive(FbxNode* pNode, FbxString& pNodeNameList);
- /** Sets the file export version as specified.
- * \param pVersion The specified file export version.
- */
- bool SetFileExportVersion(FbxString pVersion);
-
- /** Sets the renaming mode as specified.
- * \param pRenamingMode The specified renaming mode.
- */
- void SetRenamingMode(FbxSceneRenamer::ERenamingMode pRenamingMode){mRenamingMode = pRenamingMode;}
- /** Sets the resampling rate as specified.
- * \param pResamplingRate The specified resampling rate.
- */
- inline void SetResamplingRate(double pResamplingRate){mResamplingRate = pResamplingRate;}
- /** Test if file format is an internal plug-in .
- * A non genuine plug-in is a plug-in made by someone external to Autodesk FBX SDK group.
- * \return \c true If the file format is an internal plug-in ,\c false Otherwise .
- */
- bool IsGenuine();
- /** Access to a IOSettings object.
- * \return The pointer to IOSettings or \c NULL \c if the object
- * has not been allocated.
- */
- virtual FbxIOSettings * GetIOSettings();
- /** Set the IOSettings pointer to be used for this writer instance.
- * \param pIOSettings
- */
- virtual void SetIOSettings(FbxIOSettings * pIOSettings);
- /** Pass a progress handler to the writer.
- * \param pProgress FbxProgress to store the progress information.
- */
- virtual void SetProgressHandler(FbxProgress* /*pProgress*/){}
- /** Returns true if this writer supports FbxStream I/O. Default value is false. */
- virtual bool SupportsStreams() const;
- protected:
- #ifndef FBXSDK_ENV_WINSTORE
- //! Function called by FBX before writing out the scene (FbxScene).
- void PluginsWriteBegin(FbxScene& pScene);
- /**
- * Function called by FBX before writing out any FBX object.
- * \param pFbx File object.
- * \param pWriteObjectId Flag to write out object id.
- */
- void PluginsWrite(FbxIO& pFbx, bool pWriteObjectId);
- //! Function called by FBX after writing out the scene (FbxScene).
- void PluginsWriteEnd(FbxScene& pScene);
- #endif /* !FBXSDK_ENV_WINSTORE */
- /*****************************************************************************************************************************
- ** WARNING! Anything beyond these lines is for internal use, may not be documented and is subject to change without notice! **
- *****************************************************************************************************************************/
- public:
- #ifndef DOXYGEN_SHOULD_SKIP_THIS
- FbxStatus& GetStatus() { return mStatus; }
- protected:
- FbxWriter& operator=(FbxWriter const&) { return *this; }
- FbxStatus& mStatus;
- FbxManager& mManager;
- FbxString mFileVersion;
- //! Resample rate for animation.
- double mResamplingRate;
- //! The mode describing from which format to which format when write FBX file.
- FbxSceneRenamer::ERenamingMode mRenamingMode;
- private:
- int mInternalID;
- FbxIOSettings * mIOSettings;
- friend struct FbxWriterFbx7_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_WRITER_H_ */
|