FBX2glTF/sdk/Darwin/2019.2/include/fbxsdk/fileio/fbxwriter.h

245 lines
9.3 KiB
C++

/****************************************************************************************
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_ */