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 <fbxsdk.h>
00017
00018 #include <fbxsdk/fileio/collada/fbxcolladautils.h>
00019
00020 #include <fbxsdk/fbxsdk_nsbegin.h>
00021
00025 class FbxWriterCollada : public FbxWriter
00026 {
00027 public:
00032
00038 FbxWriterCollada(FbxManager& pManager, int pID, FbxStatus& pStatus);
00039
00041 virtual ~FbxWriterCollada();
00042
00044
00049
00054 virtual bool FileCreate(char* pFileName);
00055
00059 virtual bool FileClose();
00060
00064 virtual bool IsFileOpen();
00065
00067
00072
00075 virtual void GetWriteOptions(){}
00076
00081 virtual bool Write(FbxDocument* pDocument);
00082
00088 virtual bool PreprocessScene(FbxScene &pScene);
00089
00094 virtual bool PostprocessScene(FbxScene &pScene);
00095
00097
00098
00099
00100
00101
00102 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00103 private:
00108
00116 xmlNode* ExportAsset(xmlNode* pXmlNode, FbxDocumentInfo* pSceneInfo);
00117
00122 xmlNode * ExportScene(FbxScene* pScene);
00123
00130 bool ExportLibraries(xmlNode* pXmlNode);
00131
00140 xmlNode* ExportNodeRecursive(xmlNode* pXmlNode, const FbxNode* pNode);
00141
00146 void ExportVisualSceneMAX3DExtension(xmlNode * pExtraElement, FbxScene * pScene);
00147
00152 void ExportVisualSceneFCOLLADAExtension(xmlNode * pExtraElement, FbxScene * pScene);
00153
00161 xmlNode* ExportNode(xmlNode* pXmlNode, const FbxNode* pNode);
00162
00170 bool ExportTransform(xmlNode* pXmlNode, const FbxNode* pNode);
00171
00179 bool ExportNodeAttribute(xmlNode* pXmlNode, const FbxNode* pNode);
00180
00187 xmlNode* CreateMeshLibrary(const FbxNode* pNode);
00188
00195 xmlNode* CreateCameraLibrary(const FbxNode* pNode);
00196
00203 xmlNode* CreateLightLibrary(const FbxNode* pNode);
00204
00211 xmlNode* ExportMesh(const FbxNode* pNode);
00212
00219 xmlNode* ExportShapeGeometry(FbxMesh* pMeshShape, FbxString pShapeId);
00220
00231
00232 xmlNode* ExportVertexPositions(xmlNode* pXmlNode, FbxMesh* pMesh, FbxString pMeshName, bool pInGeometry, bool pExportControlPoints);
00233
00242 xmlNode* ExportLayerElements(xmlNode* pXmlMesh, FbxMesh* pMesh, FbxString pName);
00243
00253 xmlNode* ExportNormals(xmlNode* pXmlNode, FbxMesh* pMesh, FbxString pName, FbxString pExt, int pLayerIndex);
00254
00263 xmlNode* ExportUVs(xmlNode* pXmlNode, FbxMesh* pMesh, FbxString pName, int pLayerIndex);
00264
00273 xmlNode* ExportVertexColors(xmlNode* pXmlNode, FbxMesh* pMesh, FbxString pName, int pLayerIndex);
00274
00281 xmlNode* ExportVertices(xmlNode* pXmlNode, FbxMesh* pMesh, FbxString pName);
00282
00293 xmlNode* ExportPolygons(xmlNode* pMeshElement, FbxMesh* pMesh, FbxString pMaterialName, int pMaterialIndexInNode, FbxString pName, bool pShape = false);
00294
00300 bool ExportMeshMaterials(FbxMesh *pMesh, int pNbMat);
00301
00308 xmlNode* ExportMaterial(FbxSurfaceMaterial *pMaterial);
00309
00320 xmlNode* ExportEffect(FbxSurfaceMaterial *pMaterial, FbxString pEffectId);
00321
00330
00331 bool AddMaterialTextureInput(xmlNode *pXmlMaterial, FbxFileTexture *pTexture, FbxString pImageId, int pLayerIndex, int pLayerElementType);
00332
00339 xmlNode* ExportTexture(FbxFileTexture *pTexture, FbxString pImageId, int pLayerIndex);
00340
00346 bool ExportMeshTextures(FbxMesh *pMesh);
00347
00353 xmlNode* ExportCamera(const FbxNode* pNode);
00354
00360 xmlNode* ExportLight(const FbxNode* pNode);
00361
00364 void ExportSceneAmbient(xmlNode * pVisualSceneElement);
00365
00371 bool ExportController(FbxMesh *pMesh);
00372
00378 bool ExportControllerShape(FbxMesh *pMesh);
00379
00386
00387 xmlNode* ExportJointWeights(xmlNode* pXmlNode, FbxMesh* pMesh, FbxString pExt);
00388
00395 bool UpdateMeshLibraryWithShapes(xmlNode* pXmlNode);
00396
00402 bool ExportAnimation(FbxNode* pNode);
00403
00409 bool ExportAnimationCurves(FbxNode* pNode, xmlNode* pAnimationNode);
00410
00415 const FbxString ExportImage(FbxFileTexture * pTexture);
00416
00428 bool ExportCurve(xmlNode* pAnimationNode, FbxAnimCurve* pCurve,
00429 const char* pChannelName, const char* pSubChannelName,
00430 bool pExportShape=false, bool pExportIntensity=false, bool pExportLib=false);
00431
00437 bool NotZero(FbxVector4 pV);
00438
00444 bool NotValue(FbxVector4 pV, double pValue);
00445
00451 bool NotZero(double pD);
00452
00458 bool IsTranslationAnimated(const FbxNode *pNode);
00459
00465 bool IsRotationAnimated(const FbxNode *pNode);
00466
00473 bool IsRotationAnimated(const FbxNode *pNode, int pAxis);
00474
00480 bool IsScaleAnimated(const FbxNode *pNode);
00481
00487 void CopyMesh(FbxMesh *lNewMesh, FbxMesh *lRefMesh);
00488
00494 void ConvertFocalLengthCurveToFOV(FbxAnimCurve *pFOVCurve, FbxAnimCurve *pFLCurve, FbxCamera *pCamera);
00495
00502 void PreprocessNodeRecursive(FbxNode* pNode);
00503
00508 void ExportPropertyValue(const FbxProperty & pProperty,
00509 xmlNode * pParentElement);
00510
00512
00517
00521 void AddNotificationError( FbxString pError );
00522
00526 void AddNotificationWarning( FbxString pWarning );
00527
00529
00530 FbxFile* mFileObject;
00531 FbxString mFileName;
00532 bool mStatus;
00533
00534
00535
00536 xmlDocPtr mXmlDoc;
00537
00538
00539 FbxScene* mScene;
00540
00541
00542 FbxAnimStack* mAnimStack;
00543 FbxAnimLayer* mAnimLayer;
00544
00545
00546
00547 xmlNode* mLibraryAnimation;
00548 xmlNode* mLibraryCamera;
00549 xmlNode* mLibraryController;
00550 xmlNode* mLibraryGeometry;
00551 xmlNode* mLibraryImage;
00552 xmlNode* mLibraryLight;
00553 xmlNode* mLibraryMaterial;
00554 xmlNode* mLibraryEffect;
00555 xmlNode* mLibraryTexture;
00556 xmlNode* mLibraryVisualScene;
00557
00558
00559 FbxStringList *mShapeMeshesList;
00560
00561
00562 bool mTriangulate;
00563 bool mSingleMatrix;
00564 FbxTime mSamplingPeriod;
00565 #endif
00566 };
00567
00568 #include <fbxsdk/fbxsdk_nsend.h>
00569
00570 #endif