00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013 #ifndef _FBXSDK_FILEIO_FBX_IO_H_
00014 #define _FBXSDK_FILEIO_FBX_IO_H_
00015
00016 #include <fbxsdk/fbxsdk_def.h>
00017
00018 #include <fbxsdk/core/base/fbxarray.h>
00019 #include <fbxsdk/core/base/fbxcharptrset.h>
00020 #include <fbxsdk/core/base/fbxerror.h>
00021 #include <fbxsdk/core/base/fbxfile.h>
00022 #include <fbxsdk/core/base/fbxstring.h>
00023 #include <fbxsdk/core/base/fbxtime.h>
00024
00025 #include <fbxsdk/fbxsdk_nsbegin.h>
00026
00027 class FBXSDK_DLL FbxXRefManager;
00028 class FbxReader;
00029 class FbxWriter;
00030 class FbxIO;
00031 class FbxStream;
00032
00116 #define FBX_DEFAULT_VERSION_NUMBER 7300
00117
00118
00119 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00120
00122 enum
00123 {
00124 FBX_NO_SECTION = -1,
00125 FBX_MAIN_SECTION,
00126 FBX_EXTENSION_SECTION_0,
00127
00128
00129
00130 };
00131 #endif
00132
00136 class FBXSDK_DLL FbxIODefaultRenderResolution
00137 {
00138 public:
00140 bool mIsOK;
00142 FbxString mCameraName;
00144 FbxString mResolutionMode;
00146 double mResolutionW;
00148 double mResolutionH;
00149
00154
00155 FbxIODefaultRenderResolution();
00157
00162
00163 void Reset();
00165 };
00166
00171 class FBXSDK_DLL FbxIOFileHeaderInfo
00172 {
00173 public:
00178
00179 FbxIOFileHeaderInfo();
00180
00182 virtual ~FbxIOFileHeaderInfo();
00184
00189
00191 virtual void Reset();
00192
00196 virtual bool ReadExtendedHeaderInformation(FbxIO*);
00198
00200 FbxIODefaultRenderResolution mDefaultRenderResolution;
00201
00203
00205
00209 int mFileVersion;
00210
00212 bool mCreationTimeStampPresent;
00213
00215 FbxLocalTime mCreationTimeStamp;
00216
00220 FbxString mCreator;
00221
00223 bool mIOPlugin;
00224
00226 bool mPLE;
00228 };
00229
00272 class FBXSDK_DLL FbxIO
00273 {
00274 public:
00275
00278 struct FbxAutoResetXRefManager
00279 {
00280 FbxIO* mFbx;
00281 const FbxXRefManager* mXRefManager;
00282
00284 FbxAutoResetXRefManager(FbxIO* pFbx, FbxXRefManager& pXRefManager)
00285 : mFbx(pFbx)
00286 , mXRefManager(NULL)
00287 {
00288 if( mFbx )
00289 {
00290 mXRefManager = mFbx->ProjectGetXRefManager();
00291 mFbx->ProjectSetXRefManager(&pXRefManager);
00292 }
00293 }
00294
00296 ~FbxAutoResetXRefManager()
00297 {
00298 if( mFbx )
00299 {
00300 mFbx->ProjectSetXRefManager(mXRefManager);
00301 }
00302 }
00303 };
00304
00308 static FbxIO* Create(){ return FbxNew< FbxIO >(); }
00309
00311 FbxIO();
00312
00314 virtual ~FbxIO();
00315
00322
00332 bool ProjectOpen(void* pAddress, FbxULong pMaxLength, FbxReader* pReader, bool pCheckCRC = false, bool pOpenMainSection = true, FbxIOFileHeaderInfo* pFileHeaderInfo = NULL);
00333
00342 bool ProjectOpen(const char* pName, FbxReader* pReader, bool pCheckCRC = false, bool pOpenMainSection = true, FbxIOFileHeaderInfo* pFileHeaderInfo = NULL);
00343
00344 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00345
00353 bool ProjectOpen (FbxFile * pFile, FbxReader* pReader, bool pCheckCRC = false, bool pOpenMainSection = true, FbxIOFileHeaderInfo* pFileHeaderInfo = NULL);
00354 #endif
00355
00365 bool ProjectOpen(FbxStream* pStream, void* pStreamData, FbxReader* pReader, bool pCheckCRC = false, bool pOpenMainSection = true, FbxIOFileHeaderInfo* pFileHeaderInfo = NULL);
00366
00375 bool ProjectOpenDirect(const char* pName, FbxReader* pReader, bool pCheckCRC = false, bool pOpenMainSection = true, FbxIOFileHeaderInfo* pFileHeaderInfo = NULL);
00376
00386 bool ProjectCreate(void* pAddress, FbxUInt pSize, FbxWriter* pWriter, bool pBinary, bool pEncrypted, FbxIOFileHeaderInfo* pFileHeaderInfo = NULL);
00387
00396 bool ProjectCreate(const char* pName, FbxWriter* pWriter, bool pBinary, bool pEncrypted, FbxIOFileHeaderInfo* pFileHeaderInfo = NULL);
00397
00407 bool ProjectCreate(FbxStream* pStream, void* pStreamData, FbxWriter* pWriter, bool pBinary, bool pEncrypted, FbxIOFileHeaderInfo* pFileHeaderInfo = NULL);
00408
00417 bool ProjectCreateDirect(const char* pName, FbxWriter* pWriter, bool pBinary, bool pEncrypted, FbxIOFileHeaderInfo* pFileHeaderInfo = NULL);
00418
00427 bool ProjectCreateEmpty(const char* pName, FbxWriter* pWriter, int pVersion, bool pBinary, bool pEncrypted);
00428
00438 bool ProjectCreateEmpty(FbxStream* pStream, void* pStreamData, FbxWriter* pWriter, int pVersion, bool pBinary, bool pEncrypted);
00439
00443 bool ProjectWrite_BeginFileHeader();
00444
00448 bool ProjectWrite_BeginExtendedHeader();
00449
00454 bool ProjectWrite_WriteExtendedHeader(const FbxIOFileHeaderInfo* pExtendedHeader);
00455
00459 bool ProjectWrite_EndExtendedHeader();
00460
00464 bool ProjectWrite_EndFileHeader();
00465
00471 bool ProjectClose(void** pData=0, size_t* pSize=0);
00472
00476 void ProjectSetXRefManager(const FbxXRefManager*);
00477
00481 const FbxXRefManager* ProjectGetXRefManager() const;
00482
00497 bool ProjectCreateEmbeddedFolder(const FbxXRefManager& pXRefManager, FbxString& pCreatedFolder, const char* pUserDefinedFolder = NULL);
00498
00502 void SetEmbedded(bool pValue);
00503
00507 void SetEmbeddingExtractionFolder(const char* pExtractionFolder);
00508
00511 const char* GetEmbeddingExtractionFolder();
00512
00516 bool IsEmbedded() const;
00517
00521 bool IsBinary() const;
00522
00526 bool IsEncrypted () const;
00527
00531 bool CheckCRC();
00532
00536 FbxUInt32 GetFileVersionNumber() const;
00537
00541 void CacheSize(FbxUInt32 pCacheSize);
00542
00546 FbxUInt32 CacheSize() const;
00547
00549
00560
00562 bool Fbx7Support() const;
00563
00567 void Fbx7Support(bool pSupport);
00568
00570 bool CompressArrays() const;
00571
00575 void CompressArrays(bool pCompress);
00576
00578 int CompressMinimumSize() const;
00579
00583 void CompressMinimumSize(int pSize);
00584
00586 int CompressLevel() const;
00587
00593 void CompressLevel(int pLevel);
00595
00601
00605 bool ProjectOpenMainSection();
00606
00610 int ProjectGetExtensionSectionCount() const;
00611
00616 bool ProjectOpenExtensionSection(int pExtensionSectionIndex);
00617
00622 bool ProjectCreateExtensionSection(bool pOverwriteLastExtensionSection = false);
00623
00626 void ProjectCloseSection();
00627
00631 int ProjectGetCurrentSection() const;
00632
00636 int ProjectGetCurrentSectionMode() const;
00637
00641 int ProjectGetCurrentSectionVersion() const;
00642
00650 int ProjectGetSectionVersion(int pSection) const;
00651
00658 static void ProjectConvertVersionNumber(int pVersion, int& pMajor, int& pMinor, int& pRevision);
00659
00663 bool IsPasswordProtected() const;
00664
00670 bool CheckPassword(const char* pPassword);
00671
00678 bool WritePassword(const char* pPassword);
00679
00681
00686
00690 const char* GetFilename() const;
00691
00696 FbxString GetDataDirectory(bool pAutoCreate = true);
00697
00706 FbxString GetMediaDirectory(bool pCreate = false, const char* pUserDefinedFolder = NULL);
00707
00713 FbxString GetContainerTemplateDirectory(const char* pTemplateName, bool pCreate);
00714
00719 char* GetRelativePath(const char* pPath);
00720
00725 char* GetRelativeFilePath(const char* pFilePath);
00726
00731 char* GetFullPath(const char* pRelativePath);
00732
00737 char* GetFullFilePath(const char* pRelativeFilePath);
00738
00743 char* GetTmpProjectName(const char* pName) const;
00744
00751 bool SwapFromTmpProject(const char* pName, char* pError=NULL, int pErrorSize=0);
00752
00754
00760
00763 void FieldReadResetPosition();
00764
00768 int FieldGetCount() const;
00769
00774 const char* FieldGetName(int pFieldIndex) const;
00775
00780 int FieldGetInstanceCount(const char* pFieldName) const;
00781
00787 bool FieldReadBegin(int pFieldIndex, int pInstance);
00788
00793 bool FieldReadBegin(const char* pFieldName);
00794
00800 bool FieldReadBegin(const char* pFieldName, int pInstance);
00801
00803 void FieldReadEnd();
00804
00806 bool FieldReadIsBlock();
00807
00809 bool FieldReadBlockBegin();
00810
00812 void FieldReadBlockEnd();
00813
00815 int FieldReadGetCount() const;
00816
00818 int FieldReadGetRemain() const;
00819
00821 char FieldReadGetType() const;
00822
00824 char FieldReadCH();
00825
00830 char FieldReadCH(const char* pFieldName, char pDefault=0);
00831
00833 const char* FieldReadC();
00834
00839 const char* FieldReadC(const char* pFieldName, const char* pDefault="");
00840
00842 const char* FieldReadS();
00843
00848 const char* FieldReadS(const char* pFieldName, const char* pDefault="");
00849
00851 bool FieldReadB();
00852
00857 bool FieldReadB(const char* pFieldName, bool pDefault = false);
00858
00860 int FieldReadI();
00861 int FieldReadI(const char* pFieldName, int pDefault=0);
00866
00868 FbxLongLong FieldReadLL();
00869
00874 FbxLongLong FieldReadLL(const char* pFieldName, FbxLongLong pDefault=0);
00875
00877 float FieldReadF();
00878
00883 float FieldReadF(const char* pFieldName, float pDefault=0);
00884
00886 double FieldReadD();
00887
00892 double FieldReadD(const char* pFieldName, double pDefault=0);
00893
00897 FbxTime FieldReadT(const char* pFieldName);
00898
00900 FbxTime FieldReadT();
00901
00905 FbxTimeSpan FieldReadTS(const char* pFieldName);
00906
00908 FbxTimeSpan FieldReadTS();
00909
00914 void FieldReadFn(float* pValue, FbxUInt pn);
00915
00919 void FieldRead3F(float* pValue);
00920
00924 void FieldRead4F(float* pValue);
00925
00932 void FieldReadFn(const char* pFieldName, float* pValue, const float *pDefault, FbxUInt pn);
00933
00939 void FieldRead3F(const char* pFieldName, float* pValue, const float* pDefault=NULL);
00940
00946 void FieldRead4F(const char* pFieldName, float* pValue, const float* pDefault=NULL);
00947
00952 void FieldReadDn(double* pValue, FbxUInt pn);
00953
00957 void FieldRead3D(double* pValue);
00958
00962 void FieldRead4D(double* pValue);
00963
00970 void FieldReadDn(const char* pFieldName, double* pValue, const double *pDefault, FbxUInt pn);
00971
00977 void FieldRead3D(const char* pFieldName, double* pValue, const double* pDefault=NULL);
00978
00984 void FieldRead4D(const char* pFieldName, double* pValue, const double* pDefault=NULL);
00985
00989 void* FieldReadR(int* pByteSize);
00990
00995 void* FieldReadR(const char* pFieldName,int* pByteSize);
00996
01001
01002 FbxChar FieldReadByte();
01003
01008 FbxChar FieldReadByte(const char* pFieldName, FbxChar pDefault=0);
01009
01011 FbxUChar FieldReadUByte();
01012
01017 FbxUChar FieldReadUByte(const char* pFieldName, FbxUChar pDefault=0);
01018
01020 FbxShort FieldReadShort();
01021
01026 FbxShort FieldReadShort(const char* pFieldName, FbxShort pDefault=0);
01027
01029 FbxUShort FieldReadUShort();
01030
01035 FbxUShort FieldReadUShort(const char* pFieldName, FbxUShort pDefault=0);
01036
01038 unsigned int FieldReadUI();
01039
01044 unsigned int FieldReadUI(const char* pFieldName, unsigned int pDefault=0);
01045
01047 FbxULongLong FieldReadULL();
01048
01053 FbxULongLong FieldReadULL(const char* pFieldName, FbxULongLong pDefault=0);
01054
01058 const FbxChar* FieldReadArraySBytes( int &pCount );
01062 const FbxShort* FieldReadArrayShort ( int &pCount );
01066 const FbxUShort* FieldReadArrayUShort( int &pCount );
01070 const unsigned int* FieldReadArrayUI ( int &pCount );
01074 const FbxULongLong* FieldReadArrayULL ( int &pCount );
01075
01079 const FbxChar* FieldReadArray(int &pCount, const FbxChar*);
01086 const FbxShort* FieldReadArray(int &pCount, const FbxShort*);
01090 const FbxUShort* FieldReadArray(int &pCount, const FbxUShort*);
01094 const unsigned int* FieldReadArray(int &pCount, const unsigned int*);
01098 const FbxULongLong* FieldReadArray(int &pCount, const FbxULongLong*);
01100
01109 virtual bool FieldReadEmbeddedFile (FbxString& pFileName, FbxString& pRelativeFileName, const char* pEmbeddedMediaDirectory = "", bool *pIsFileCreated=NULL);
01110
01114 const double* FieldReadArrayD( int &pCount );
01118 const float* FieldReadArrayF( int &pCount );
01122 const int* FieldReadArrayI( int &pCount );
01126 const FbxLongLong*FieldReadArrayLL(int &pCount );
01130 const bool* FieldReadArrayB( int &pCount );
01134 const FbxUChar* FieldReadArrayBytes( int &pCount );
01135
01139 const int* FieldReadArray(int& pCount, const int*);
01143 const float* FieldReadArray(int& pCount, const float*);
01147 const double* FieldReadArray(int& pCount, const double*);
01151 const FbxLongLong* FieldReadArray(int& pCount, const FbxLongLong*);
01155 const bool* FieldReadArray(int& pCount, const bool*);
01159 const FbxUChar* FieldReadArray(int& pCount, const FbxUChar*);
01160
01162
01168
01172 void FieldWriteBegin(const char* pFieldName);
01173
01175 void FieldWriteEnd();
01176
01178 void FieldWriteBlockBegin();
01179
01185 void FieldWriteObjectBegin(const char* pObjectType, const char* pName, const char* pSubType=NULL);
01186
01188 void FieldWriteObjectEnd();
01189
01194 void FieldWriteBlockBegin(const char* pFileName);
01195
01197 void FieldWriteBlockEnd ();
01198
01202 void FieldWriteCH(char pValue);
01203
01208 void FieldWriteCH(const char* pFieldName, char pValue);
01209
01213 void FieldWriteC(const char* pValue);
01214
01219 void FieldWriteC(const char* pFieldName, const char* pValue);
01220
01224 void FieldWriteS(const char* pValue);
01225
01229 void FieldWriteS(const FbxString& pValue);
01230
01235 void FieldWriteS(const char* pFieldName, const char* pValue);
01236
01241 void FieldWriteS(const char* pFieldName, const FbxString& pValue);
01242
01246 void FieldWriteB(bool pValue);
01247
01252 void FieldWriteB(const char* pFieldName, bool pValue);
01253
01257 void FieldWriteI(int pValue);
01258
01263 void FieldWriteI(const char* pFieldName, int pValue);
01264
01268 void FieldWriteLL(FbxLongLong pValue);
01269
01274 void FieldWriteLL(const char* pFieldName, FbxLongLong pValue);
01275
01280 void FieldWriteF(float pValue);
01281
01287 void FieldWriteF(const char* pFieldName, float pValue);
01288
01292 void FieldWriteD(double pValue);
01293
01298 void FieldWriteD(const char* pFieldName, double pValue);
01299
01303 void FieldWriteT(FbxTime pTime);
01304
01309 void FieldWriteT(const char* pFieldName,FbxTime pValue);
01310
01314 void FieldWriteTS(FbxTimeSpan pTimeSpan);
01315
01320 void FieldWriteTS(const char* pFieldName,FbxTimeSpan pValue);
01321
01326 void FieldWriteFn(const float* pValue, FbxUInt pn);
01327
01333 void FieldWriteFn(const char* pFieldName, const float* pValue, FbxUInt pn);
01334
01338 void FieldWrite3F(const float* pValue);
01339
01344 void FieldWrite3F(const char* pFieldName, const float* pValue);
01345
01349 void FieldWrite4F(const float* pValue);
01350
01355 void FieldWrite4F(const char* pFieldName, const float* pValue);
01356
01361 void FieldWriteDn(const double* pValue, FbxUInt pn);
01362
01368 void FieldWriteDn(const char* pFieldName, const double* pValue, FbxUInt pn);
01369
01373 void FieldWrite3D(const double* pValue);
01374
01379 void FieldWrite3D(const char* pFieldName, const double* pValue);
01380
01384 void FieldWrite4D(const double* pValue);
01385
01390 void FieldWrite4D(const char* pFieldName, const double* pValue);
01391
01392
01393
01394
01395
01396
01403 void FieldWriteArrayD( int n, const double* pValue, int pSize = 1, int pStride = 0 );
01410 void FieldWriteArrayF( int n, const float* pValue, int pSize = 1, int pStride = 0 );
01417 void FieldWriteArrayI( int n, const int* pValue, int pSize = 1, int pStride = 0 );
01424 void FieldWriteArrayLL(int n, const FbxLongLong* pValue, int pSize = 1, int pStride = 0 );
01431 void FieldWriteArrayB( int n, const bool* pValue, int pSize = 1, int pStride = 0 );
01438 void FieldWriteArrayBytes( int n, const FbxUChar* pValue, int pSize = 1, int pStride = 0 );
01439
01444 void FieldWriteR(const void* pRawData, int pByteSize);
01445
01451 void FieldWriteR(const char* pFieldName, const void* pRawData, int pByteSize);
01452
01457
01461 void FieldWriteByte(FbxChar pValue);
01462
01467 void FieldWriteByte(const char* pFieldName, FbxChar pValue);
01468
01472 void FieldWriteUByte(FbxUChar pValue);
01473
01478 void FieldWriteUByte(const char* pFieldName, FbxUChar pValue);
01479
01483 void FieldWriteShort(FbxShort pValue);
01484
01489 void FieldWriteShort(const char* pFieldName, FbxShort pValue);
01490
01494 void FieldWriteUShort(FbxUShort pValue);
01495
01500 void FieldWriteUShort(const char* pFieldName, FbxUShort pValue);
01501
01505 void FieldWriteUI(unsigned int pValue);
01506
01511 void FieldWriteUI(const char* pFieldName, unsigned int pValue);
01512
01516 void FieldWriteULL(FbxULongLong pValue);
01517
01523 void FieldWriteULL(const char* pFieldName, FbxULongLong pValue);
01524
01531 void FieldWriteArraySBytes( int n, const FbxChar* pValue, int pSize = 1, int pStride = 0 );
01538 void FieldWriteArrayShort( int n, const FbxShort* pValue, int pSize = 1, int pStride = 0 );
01545 void FieldWriteArrayUShort( int n, const FbxUShort* pValue, int pSize = 1, int pStride = 0 );
01552 void FieldWriteArrayUI( int n, const unsigned int* pValue, int pSize = 1, int pStride = 0 );
01559 void FieldWriteArrayULL(int n, const FbxULongLong* pValue, int pSize = 1, int pStride = 0 );
01561
01565 int GetFieldRMaxChunkSize() const;
01566
01570 void FieldWriteObjectReference(const char* pName);
01571
01576 void FieldWriteObjectReference(const char* pFieldName, const char* pName);
01577
01584 bool FieldWriteEmbeddedFile (FbxString pFileName, FbxString pRelativeFileName);
01585
01589 void WriteComments(const char* pFieldName);
01590
01592
01598
01600 enum EErrorCode
01601 {
01602 eFileCorrupted,
01603 eFileVersionNotSupportedYet,
01604 eFileVersionNotSupportedAnymore,
01605 eFileNotOpened,
01606 eFileNotCreated,
01607 eDirectoryNotCreated,
01608 eCrcCheckFailed,
01609 eNonExistingSection,
01610 eOperationCanceled,
01611 eCountError,
01612 eInvalidData,
01613 eWriteError,
01614 eReadError,
01615 eErrorCount
01616 };
01617
01621 FbxError& GetError();
01622
01626 EErrorCode GetLastErrorID() const;
01627
01631 const char* GetLastErrorString() const;
01632
01634
01635 #ifdef _DEBUG
01636
01637 void StdoutDump();
01638 #endif
01639
01647 bool GetHaveLoadedEmbededFile() const;
01648
01653 void GetMemoryFileInfo(void** pMemPtr, size_t& pSize) const;
01654
01655 public:
01656
01660 bool IsBeforeVersion6() const;
01661
01665 void SetIsBeforeVersion6(bool pIsBeforeVersion6);
01666
01667 private:
01668 struct Implementation;
01669 Implementation* mImpl;
01670
01672
01673 void ProjectClear();
01674 void ProjectReset();
01675
01676 bool ProjectReadHeader(bool pCheckASCIIHeader, bool pCheckCRC, bool pOpenMainSection, FbxIOFileHeaderInfo* pFileHeaderInfo);
01677 bool ProjectReadExtendedHeader(int& pExtendedHeaderEnd, FbxIOFileHeaderInfo* pFileHeaderInfo);
01678 bool BinaryReadHeader();
01679 bool BinaryReadSectionPosition();
01680 bool ASCIIReadHeader();
01681 bool ASCIIReadSectionPosition();
01682
01683 bool ProjectWriteHeader(FbxIOFileHeaderInfo* pFileHeaderInfo);
01684 bool ProjectWriteExtendedHeader(FbxIOFileHeaderInfo* pFileHeaderInfo);
01685 void BinaryWriteHeader();
01686 void ASCIIWriteHeader();
01687
01688 void ReadEncryptionKey(char* pEncryptionKey);
01689 void WriteEncryptionKey(char* pEncryptionKey);
01690
01692
01693 bool ProjectClearSection();
01694 bool ProjectOpenSection(int pSection);
01695 bool BinaryReadSectionHeader();
01696 int BinaryReadSectionFooter(char* pSourceCheck);
01697 bool BinaryReadExtensionCode(FbxUInt32 pFollowingSectionStart, FbxUInt32& pSectionStart, FbxUInt32& pSectionVersion);
01698 void BinaryReadSectionPassword();
01699
01700 bool ProjectWriteSectionHeader();
01701 void BinaryWriteSectionFooter();
01702 bool BinaryWriteExtensionCode(FbxUInt32 pSectionStart, FbxUInt32 pSectionVersion);
01703
01704 FbxString GetCreationTime() const;
01705 void SetCreationTime(FbxString pCreationTime);
01706 void CreateSourceCheck(char* lSourceCheck);
01707 bool TestSourceCheck(char* pSourceCheck, char* pSourceCompany);
01708 FbxString GetMangledCreationTime();
01709 void EncryptSourceCheck(char* pSourceCheck, char* pEncryptionData);
01710 void DecryptSourceCheck(char* pSourceCheck, const char* pEncryptionData);
01711
01712 void EncryptPasswordV1(FbxString pOriginalPassword, FbxString &pEncryptedPassword);
01713 void DecryptPasswordV1(FbxString pEncryptedPassword, FbxString &pDecryptedPassword);
01714
01716
01717 void CheckValidityOfFieldName(const char* pFieldName);
01718 void GetUnusedEmbeddedName(const FbxString& pDirectory, const FbxString& pName, FbxString& pResult, bool pCreateSubdirectory);
01719
01721 FbxString GetDirectory(bool pAutoCreate, const char* pExtension);
01722 };
01723
01724 #include <fbxsdk/fbxsdk_nsend.h>
01725
01726 #endif