00001
00003 #ifndef _FBXSDK_SCENE_H_
00004 #define _FBXSDK_SCENE_H_
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #include <kaydaradef.h>
00042 #ifndef KFBX_DLL
00043 #define KFBX_DLL K_DLLIMPORT
00044 #endif
00045
00046 #include <kaydara.h>
00047
00048 #include <fbxcore/fbxcollection/kfbxdocument.h>
00049
00050 #include <kfbxplugins/kfbxdeformer.h>
00051 #include <kfbxplugins/kfbxsubdeformer.h>
00052 #include <kfbxplugins/kfbxlayer.h>
00053 #include <kfbxplugins/kfbxnodeattribute.h>
00054 #include <kfbxplugins/kfbxglobalsettings.h>
00055
00056 #include <klib/karrayul.h>
00057 #include <klib/kerror.h>
00058 #include <klib/kstring.h>
00059 #include <klib/kcharptrset.h>
00060
00061 #include <fbxfilesdk_nsbegin.h>
00062
00063 class KFbxSdkManager;
00064 class KFbxObject;
00065 class KFbxNode;
00066 class KFbxVideo;
00067 class KFbxTexture;
00068 class KFbxSurfaceMaterial;
00069 class KFbxMarkerSet;
00070 class KFbxActor;
00071 class KFbxCharacter;
00072 class KFbxControlSetPlug;
00073 class KFbxCharacterPose;
00074 class KFbxPose;
00075 class KFbxDocumentInfo;
00076 class KFbxTakeInfo;
00077 class KFbxGlobalLightSettings;
00078 class KFbxGlobalCameraSettings;
00079 class KFbxGlobalTimeSettings;
00080 class KFbxGlobalSettings;
00081 class KFbxGenericNode;
00082 class KFbxConstraint;
00083 class KFbxGeometry;
00084 class KFbxTakeNodeContainer;
00085 class KFbxLayerContainer;
00086
00096 class KFBX_DLL KFbxScene : public KFbxDocument
00097 {
00098 KFBXOBJECT_DECLARE(KFbxScene,KFbxDocument);
00099
00100 public:
00102 void Clear();
00103
00108
00115 KFbxNode* GetRootNode() const;
00116
00117
00125 void FillNodeArray(KArrayTemplate<KFbxNode*>& pNodeArray,
00126 KFbxNodeAttribute::EAttributeType pAttributeType,
00127 bool pDepthFirst = false);
00128
00130
00135
00139 void FillTextureArray(KArrayTemplate<KFbxTexture*>& pTextureArray);
00140
00144 void FillMaterialArray(KArrayTemplate<KFbxSurfaceMaterial*>& pMaterialArray);
00145
00147
00152
00156 int GetGenericNodeCount();
00157
00162 KFbxGenericNode* GetGenericNode(int pIndex);
00163
00168 KFbxGenericNode* GetGenericNode(char* pName);
00169
00174 bool AddGenericNode(KFbxGenericNode* pGenericNode);
00175
00181 bool RemoveGenericNode(KFbxGenericNode* pGenericNode);
00182
00184
00185
00190
00194 int GetCharacterCount();
00195
00200 KFbxCharacter* GetCharacter(int pIndex);
00201
00206 int CreateCharacter(char* pName);
00207
00212 void DestroyCharacter(int pIndex);
00213
00215
00220
00224 int GetControlSetPlugCount();
00225
00230 KFbxControlSetPlug* GetControlSetPlug(int pIndex);
00231
00236 int CreateControlSetPlug(char* pName);
00237
00242 void DestroyControlSetPlug(int pIndex);
00243
00245
00250
00255 int GetCharacterPoseCount();
00256
00261 KFbxCharacterPose* GetCharacterPose(int pIndex);
00262
00267 int CreateCharacterPose(char* pName);
00268
00273 void DestroyCharacterPose(int pIndex);
00274
00276
00281
00286 int GetPoseCount();
00287
00292 KFbxPose* GetPose(int pIndex);
00293
00299 bool AddPose(KFbxPose* pPose);
00300
00306 bool RemovePose(KFbxPose* pPose);
00307
00313 bool RemovePose(int pIndex);
00314
00315
00317
00321
00325 inline KFbxDocumentInfo* GetSceneInfo() { return GetDocumentInfo(); }
00326
00330 inline void SetSceneInfo(KFbxDocumentInfo* pSceneInfo) { SetDocumentInfo(pSceneInfo); }
00331
00333
00338
00342 KFbxGlobalLightSettings& GetGlobalLightSettings();
00343
00347 KFbxGlobalCameraSettings& GetGlobalCameraSettings();
00348
00352 KFbxGlobalTimeSettings& GetGlobalTimeSettings();
00353
00357 KFbxGlobalSettings& GetGlobalSettings();
00358
00362 const KFbxGlobalSettings& GetGlobalSettings() const;
00363
00365
00367
00368
00369
00370
00371
00372
00374
00375 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00376
00377 void ConnectMaterials();
00378
00379 void BuildMaterialLayersDirectArray();
00380 void ReindexMaterialConnections();
00381
00385 void FillNodeArray(KArrayTemplate<KFbxNode*>& pNodeArray);
00386
00390 void FillPoseArray(KArrayTemplate<KFbxPose*>& pPoseArray);
00391
00392
00393 virtual KFbxObject* Clone(KFbxObject* pContainer, KFbxObject::ECloneType pCloneType) const;
00394
00395
00400
00404 int GetMaterialCount ();
00405
00411 KFbxSurfaceMaterial* GetMaterial (int pIndex);
00412
00417 KFbxSurfaceMaterial* GetMaterial (char* pName);
00418
00423 bool AddMaterial (KFbxSurfaceMaterial* pMaterial);
00424
00429 bool RemoveMaterial (KFbxSurfaceMaterial* pMaterial);
00430
00432
00437
00441 int GetTextureCount ();
00442
00448 KFbxTexture* GetTexture (int pIndex);
00449
00454 KFbxTexture* GetTexture (char* pName);
00455
00460 bool AddTexture (KFbxTexture* pTexture);
00461
00466 bool RemoveTexture (KFbxTexture* pTexture);
00467
00469
00474
00478 int GetNodeCount ();
00479
00485 KFbxNode* GetNode (int pIndex);
00486
00491 bool AddNode (KFbxNode* pNode);
00492
00497 bool RemoveNode (KFbxNode* pNode);
00498
00505 int GetCurveOnSurfaceCount ();
00506
00507 KFbxNode* FindNodeByName ( const KString& pName );
00508
00510
00515
00519 int GetGeometryCount ();
00520
00526 KFbxGeometry* GetGeometry (int pIndex);
00527
00532 bool AddGeometry (KFbxGeometry* pGeometry);
00533
00538 bool RemoveGeometry (KFbxGeometry* pGeometry);
00539
00541
00546
00550 int GetVideoCount ();
00551
00557 KFbxVideo* GetVideo (int pIndex);
00558
00563 bool AddVideo (KFbxVideo* pVideo);
00564
00569 bool RemoveVideo (KFbxVideo* pVideo);
00570
00572
00573 int GetTakeNodeContainerCount ();
00574 KFbxTakeNodeContainer* GetTakeNodeContainer (int pIndex);
00575 bool AddTakeNodeContainer (KFbxTakeNodeContainer* pTakeNodeContainer);
00576 bool RemoveTakeNodeContainer (KFbxTakeNodeContainer* pTakeNodeContainer);
00577
00578 KSet* AddTakeTimeWarpSet(char *pTakeName);
00579 KSet* GetTakeTimeWarpSet(char *pTakeName);
00580
00581 private:
00582 KFbxScene(KFbxSdkManager& pManager, char const* pName);
00583 ~KFbxScene();
00584
00585 virtual void Construct(const KFbxScene* pFrom);
00586 virtual void Destruct(bool pRecursive, bool pDependents);
00587
00588 KFbxScene& operator=(KFbxScene const& pScene);
00589
00590 void FillNodeArrayRecursive(KArrayTemplate<KFbxNode*>& pNodeArray,
00591 KFbxNodeAttribute::EAttributeType pAttributeType,
00592 KFbxNode* pNode);
00593
00594 void ConnectTextures();
00595 void ConnectTextureLayerElement(KFbxLayerContainer* pLayerContainer,
00596 KFbxLayerElement::ELayerElementType pLayerType,
00597 KFbxNode* pParentNode);
00598
00599 void BuildTextureLayersDirectArray();
00600 void BuildTextureLayersDirectArrayForLayerType(KFbxLayerContainer* pLayerContainer,
00601 KFbxLayerElement::ELayerElementType pLayerType);
00602
00603 void FixInheritType(KFbxNode *pNode);
00604
00605 public:
00606 void ConvertNurbsSurfaceToNurb();
00607 void ConvertMeshNormals();
00608 void ConvertNurbCurvesToNulls();
00609
00610 private:
00611 KFbxNode* mRootNode;
00612
00613 KFbxGlobalLightSettings* mGlobalLightSettings;
00614 KFbxGlobalCameraSettings* mGlobalCameraSettings;
00615 KFbxGlobalTimeSettings* mGlobalTimeSettings;
00616
00617 KCharPtrSet mTakeTimeWarpSet;
00618
00619 friend class KFbxLayerContainer;
00620 friend class KFbxNodeFinderDuplicateName;
00621
00622 friend class KFbxWriterFbx;
00623 friend class KFbxWriterFbx6;
00624 friend class KFbxWriterFbx7;
00625 friend class KFbxReaderFbx;
00626 friend class KFbxReaderFbx6;
00627 friend class KFbxReaderFbx7;
00628
00629 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
00630
00631 };
00632
00633 typedef class KFBX_DLL KArrayTemplate<KFbxTakeInfo *> KArrayKFbxTakeInfo;
00634 typedef KFbxScene* HKFbxScene;
00635
00636 #include <fbxfilesdk_nsend.h>
00637
00638 #endif // #ifndef _FBXSDK_SCENE_H_
00639
00640