00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013 #ifndef _FBXSDK_FILEIO_COLLADA_WRITER_H_
00014 #define _FBXSDK_FILEIO_COLLADA_WRITER_H_
00015
00016 #include "fbxcolladautils.h"
00017
00018 #include <fbxsdk/fbxsdk_nsbegin.h>
00019
00020 class FbxAnimStack;
00021
00025 class FbxWriterCollada : public FbxWriter
00026 {
00027 public:
00032
00037 FbxWriterCollada(FbxManager& pManager, int pID);
00038
00040 virtual ~FbxWriterCollada();
00041
00043
00048
00053 virtual bool FileCreate(char* pFileName);
00054
00058 virtual bool FileClose();
00059
00063 virtual bool IsFileOpen();
00064
00066
00071
00074 virtual void GetWriteOptions(){}
00075
00080 virtual bool Write(FbxDocument* pDocument);
00081
00087 virtual bool PreprocessScene(FbxScene &pScene);
00088
00093 virtual bool PostprocessScene(FbxScene &pScene);
00094
00096
00097
00099
00100
00101
00102
00103
00104
00106
00107 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00108
00109 private:
00110
00115
00123 xmlNode* ExportAsset(xmlNode* pXmlNode, FbxDocumentInfo* pSceneInfo);
00124
00129 xmlNode * ExportScene(FbxScene* pScene);
00130
00137 bool ExportLibraries(xmlNode* pXmlNode);
00138
00147 xmlNode* ExportNodeRecursive(xmlNode* pXmlNode, const FbxNode* pNode);
00148
00153 void ExportVisualSceneMAX3DExtension(xmlNode * pExtraElement, FbxScene * pScene);
00154
00159 void ExportVisualSceneFCOLLADAExtension(xmlNode * pExtraElement, FbxScene * pScene);
00160
00168 xmlNode* ExportNode(xmlNode* pXmlNode, const FbxNode* pNode);
00169
00177 bool ExportTransform(xmlNode* pXmlNode, const FbxNode* pNode);
00178
00186 bool ExportNodeAttribute(xmlNode* pXmlNode, const FbxNode* pNode);
00187
00194 xmlNode* CreateMeshLibrary(const FbxNode* pNode);
00195
00202 xmlNode* CreateCameraLibrary(const FbxNode* pNode);
00203
00210 xmlNode* CreateLightLibrary(const FbxNode* pNode);
00211
00218 xmlNode* ExportMesh(const FbxNode* pNode);
00219
00226 xmlNode* ExportShapeGeometry(FbxMesh* pMeshShape, FbxString pShapeId);
00227
00238
00239 xmlNode* ExportVertexPositions(xmlNode* pXmlNode, FbxMesh* pMesh, FbxString pMeshName, bool pInGeometry, bool pExportControlPoints);
00240
00249 xmlNode* ExportLayerElements(xmlNode* pXmlMesh, FbxMesh* pMesh, FbxString pName);
00250
00260 xmlNode* ExportNormals(xmlNode* pXmlNode, FbxMesh* pMesh, FbxString pName, FbxString pExt, int pLayerIndex);
00261
00270 xmlNode* ExportUVs(xmlNode* pXmlNode, FbxMesh* pMesh, FbxString pName, int pLayerIndex);
00271
00280 xmlNode* ExportVertexColors(xmlNode* pXmlNode, FbxMesh* pMesh, FbxString pName, int pLayerIndex);
00281
00288 xmlNode* ExportVertices(xmlNode* pXmlNode, FbxMesh* pMesh, FbxString pName);
00289
00299 xmlNode* ExportPolygons(xmlNode* pXmlNode, FbxMesh* pMesh, FbxString pMaterialName, FbxString pName, bool pShape=false);
00300
00306 bool ExportMeshMaterials(FbxMesh *pMesh, int pNbMat);
00307
00314 xmlNode* ExportMaterial(FbxSurfaceMaterial *pMaterial);
00315
00326 xmlNode* ExportEffect(FbxSurfaceMaterial *pMaterial, FbxString pEffectId);
00327
00336
00337 bool AddMaterialTextureInput(xmlNode *pXmlMaterial, FbxFileTexture *pTexture, FbxString pImageId, int pLayerIndex, int pLayerElementType);
00338
00345 xmlNode* ExportTexture(FbxFileTexture *pTexture, FbxString pImageId, int pLayerIndex);
00346
00352 bool ExportMeshTextures(FbxMesh *pMesh);
00353
00359 xmlNode* ExportCamera(const FbxNode* pNode);
00360
00366 xmlNode* ExportLight(const FbxNode* pNode);
00367
00370 void ExportSceneAmbient(xmlNode * pVisualSceneElement);
00371
00377 bool ExportController(FbxMesh *pMesh);
00378
00384 bool ExportControllerShape(FbxMesh *pMesh);
00385
00392
00393 xmlNode* ExportJointWeights(xmlNode* pXmlNode, FbxMesh* pMesh, FbxString pExt);
00394
00401 bool UpdateMeshLibraryWithShapes(xmlNode* pXmlNode);
00402
00408 bool ExportAnimation(FbxNode* pNode);
00409
00415 bool ExportAnimationCurves(FbxNode* pNode, xmlNode* pAnimationNode);
00416
00421 const FbxString ExportImage(FbxFileTexture * pTexture);
00422
00434 bool ExportCurve(xmlNode* pAnimationNode, FbxAnimCurve* pCurve,
00435 const char* pChannelName, const char* pSubChannelName,
00436 bool pExportShape=false, bool pExportIntensity=false, bool pExportLib=false);
00437
00443 bool NotZero(FbxVector4 pV);
00444
00450 bool NotValue(FbxVector4 pV, double pValue);
00451
00457 bool NotZero(double pD);
00458
00464 bool IsTranslationAnimated(const FbxNode *pNode);
00465
00471 bool IsRotationAnimated(const FbxNode *pNode);
00472
00479 bool IsRotationAnimated(const FbxNode *pNode, int pAxis);
00480
00486 bool IsScaleAnimated(const FbxNode *pNode);
00487
00493 void CopyMesh(FbxMesh *lNewMesh, FbxMesh *lRefMesh);
00494
00500 void ConvertFocalLengthCurveToFOV(FbxAnimCurve *pFOVCurve, FbxAnimCurve *pFLCurve, FbxCamera *pCamera);
00501
00508 void PreprocessNodeRecursive(FbxNode* pNode);
00509
00514 void ExportPropertyValue(const FbxProperty & pProperty,
00515 xmlNode * pParentElement);
00516
00518
00523
00527 void AddNotificationError( FbxString pError );
00528
00532 void AddNotificationWarning( FbxString pWarning );
00533
00535
00536 private:
00537
00538 FbxFile* mFileObject;
00539 FbxString mFileName;
00540 bool mStatus;
00541
00542
00543
00544 xmlDocPtr mXmlDoc;
00545
00546
00547 FbxScene* mScene;
00548
00549
00550 FbxAnimStack* mAnimStack;
00551 FbxAnimLayer* mAnimLayer;
00552
00553
00554
00555 xmlNode* mLibraryAnimation;
00556 xmlNode* mLibraryCamera;
00557 xmlNode* mLibraryController;
00558 xmlNode* mLibraryGeometry;
00559 xmlNode* mLibraryImage;
00560 xmlNode* mLibraryLight;
00561 xmlNode* mLibraryMaterial;
00562 xmlNode* mLibraryEffect;
00563 xmlNode* mLibraryTexture;
00564 xmlNode* mLibraryVisualScene;
00565
00566
00567 FbxStringList *mShapeMeshesList;
00568
00569
00570 bool mTriangulate;
00571 bool mSingleMatrix;
00572 FbxTime mSamplingPeriod;
00573 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
00574 };
00575
00576 #include <fbxsdk/fbxsdk_nsend.h>
00577
00578 #endif