fbxscene.h

Go to the documentation of this file.
00001 /****************************************************************************************
00002  
00003    Copyright (C) 2012 Autodesk, Inc.
00004    All rights reserved.
00005  
00006    Use of this software is subject to the terms of the Autodesk license agreement
00007    provided at the time of installation or download, or which otherwise accompanies
00008    this software in either electronic or hard copy form.
00009  
00010 ****************************************************************************************/
00011 
00013 #ifndef _FBXSDK_SCENE_H_
00014 #define _FBXSDK_SCENE_H_
00015 
00016 #include <fbxsdk/fbxsdk_def.h>
00017 
00018 #include <fbxsdk/core/base/fbxarray.h>
00019 #include <fbxsdk/core/base/fbxerror.h>
00020 #include <fbxsdk/core/base/fbxstring.h>
00021 #include <fbxsdk/core/base/fbxcharptrset.h>
00022 
00023 #include <fbxsdk/scene/fbxdocument.h>
00024 #include <fbxsdk/scene/geometry/fbxdeformer.h>
00025 #include <fbxsdk/scene/geometry/fbxsubdeformer.h>
00026 #include <fbxsdk/scene/geometry/fbxlayer.h>
00027 #include <fbxsdk/scene/geometry/fbxnodeattribute.h>
00028 #include <fbxsdk/scene/animation/fbxanimevaluator.h>
00029 
00030 #include <fbxsdk/fileio/fbxglobalsettings.h>
00031 
00032 #include <fbxsdk/fbxsdk_nsbegin.h>
00033 
00034 class FbxManager;
00035 class FbxObject;
00036 class FbxNode;
00037 class FbxVideo;
00038 class FbxTexture;
00039 class FbxSurfaceMaterial;
00040 class FbxCharacter;
00041 class FbxControlSetPlug;
00042 class FbxCharacterPose;
00043 class FbxPose;
00044 class FbxDocumentInfo;
00045 class FbxTakeInfo;
00046 class FbxGlobalSettings;
00047 class FbxGenericNode;
00048 class FbxConstraint;
00049 class FbxGeometry;
00050 class FbxLayerContainer;
00051 class FbxSet;
00052 
00053 class FbxGlobalLightSettings;
00054 class FbxGlobalCameraSettings;
00055 class FbxGlobalTimeSettings;
00056 
00057 
00078 class FBXSDK_DLL FbxScene : public FbxDocument
00079 {
00080     FBXSDK_OBJECT_DECLARE(FbxScene, FbxDocument);
00081 
00082 public:
00087 
00088     void Clear();
00090 
00095 
00102     FbxNode* GetRootNode() const;
00104 
00109 
00113     void FillTextureArray(FbxArray<FbxTexture*>& pTextureArray);
00114 
00118     void FillMaterialArray(FbxArray<FbxSurfaceMaterial*>& pMaterialArray);
00119 
00121 
00126 
00130     int             GetGenericNodeCount() const;
00131 
00136     FbxGenericNode* GetGenericNode(int pIndex);
00137 
00142     FbxGenericNode* GetGenericNode(char* pName);
00143 
00148     bool             AddGenericNode(FbxGenericNode* pGenericNode);
00149 
00155     bool             RemoveGenericNode(FbxGenericNode* pGenericNode);
00156 
00158 
00159 
00164 
00168     int GetCharacterCount() const;
00169 
00174     FbxCharacter* GetCharacter(int pIndex);
00175 
00180     int CreateCharacter(const char* pName);
00181 
00185     void DestroyCharacter(int pIndex);
00186 
00188 
00193 
00197     int GetControlSetPlugCount() const;
00198 
00203     FbxControlSetPlug* GetControlSetPlug(int pIndex);
00204 
00209     int CreateControlSetPlug(char* pName);
00210 
00214     void DestroyControlSetPlug(int pIndex);
00215 
00217 
00222 
00227     int GetCharacterPoseCount() const;
00228 
00233     FbxCharacterPose* GetCharacterPose(int pIndex);
00234 
00239     int CreateCharacterPose(char* pName);
00240 
00244     void DestroyCharacterPose(int pIndex);
00245 
00247 
00252 
00257     int GetPoseCount() const;
00258 
00263     FbxPose* GetPose(int pIndex);
00264 
00270     bool AddPose(FbxPose* pPose);
00271 
00277     bool RemovePose(FbxPose* pPose);
00278 
00284     bool RemovePose(int pIndex);
00285 
00286 
00288 
00292 
00296     inline FbxDocumentInfo* GetSceneInfo() { return GetDocumentInfo(); }
00297 
00301     inline void SetSceneInfo(FbxDocumentInfo* pSceneInfo) { SetDocumentInfo(pSceneInfo); }
00302 
00304 
00309 
00313     FbxGlobalSettings& GetGlobalSettings();
00314 
00318     const FbxGlobalSettings& GetGlobalSettings() const;
00320 
00341 
00345         void SetEvaluator(FbxAnimEvaluator* pEvaluator);
00346 
00352         FbxAnimEvaluator* GetEvaluator();
00353 
00355 
00359     void FillPoseArray(FbxArray<FbxPose*>& pPoseArray);
00360 
00361 
00366 
00370     int                     GetMaterialCount            () const;
00371 
00377     FbxSurfaceMaterial*            GetMaterial                 (int pIndex);
00378 
00383     FbxSurfaceMaterial*            GetMaterial                 (char* pName);
00384 
00389     bool                    AddMaterial                 (FbxSurfaceMaterial* pMaterial);
00390 
00395     bool                    RemoveMaterial              (FbxSurfaceMaterial* pMaterial);
00396 
00398 
00403 
00413     int                     GetTextureCount             () const;
00414 
00425     FbxTexture*            GetTexture                  (int pIndex);
00426 
00431     FbxTexture*            GetTexture                  (char* pName);
00432 
00437     bool                    AddTexture                  (FbxTexture* pTexture);
00438 
00443     bool                    RemoveTexture               (FbxTexture* pTexture);
00444 
00446 
00451 
00455     int                     GetNodeCount                () const;
00456 
00462     FbxNode*               GetNode                     (int pIndex);
00463 
00468     bool                    AddNode                     (FbxNode* pNode);
00469 
00474     bool                    RemoveNode                  (FbxNode* pNode);
00475 
00482     int                     GetCurveOnSurfaceCount      ();
00483 
00488     FbxNode*               FindNodeByName              ( const FbxString& pName );
00489 
00491 
00496 
00500     int                     GetGeometryCount            () const;
00501 
00507     FbxGeometry*           GetGeometry                 (int pIndex);
00508 
00513     bool                    AddGeometry                 (FbxGeometry* pGeometry);
00514 
00519     bool                    RemoveGeometry              (FbxGeometry* pGeometry);
00520 
00522 
00527 
00531     int                     GetVideoCount               () const;
00532 
00538     FbxVideo*              GetVideo                    (int pIndex);
00539 
00544     bool                    AddVideo                    (FbxVideo* pVideo);
00545 
00550     bool                    RemoveVideo                 (FbxVideo* pVideo);
00551 
00553 
00570     void SyncShowPropertyForInstance();
00572 
00573 //
00574 //  WARNING!
00575 //
00576 //  Anything beyond these lines may not be documented accurately and is
00577 //  subject to change without notice.
00578 //
00580 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00581     virtual FbxObject& Copy(const FbxObject& pObject);
00582 
00583     void ConnectMaterials();
00584 
00585     void BuildMaterialLayersDirectArray();
00586     void ReindexMaterialConnections(); // called to make sure that eIndex is remapped to eIndexToDirect
00587 
00588     FbxSet* AddTakeTimeWarpSet(char *pTakeName);
00589     FbxSet* GetTakeTimeWarpSet(char *pTakeName);
00590 
00591     // This function will destroy the scene (and all the objects directly connected to it) without sending 
00592     // the Connect notifications nor trying to disconnect the objects first. This is a bypass of the intended
00593     // workflow and should be used with care.
00594     void ForceKill();
00595 
00596 private:
00597     FbxScene(FbxManager& pManager, char const* pName);
00598 
00599     virtual void Construct(const FbxScene* pFrom);
00600     virtual void Destruct(bool pRecursive, bool pDependents);
00601 
00602     void ConnectTextureLayerElement(FbxLayerContainer* pLayerContainer,
00603                                     FbxLayerElement::EType pLayerType,
00604                                     FbxNode* pParentNode);
00605 
00606     void BuildTextureLayersDirectArrayForLayerType(FbxLayerContainer* pLayerContainer,
00607                                                    FbxLayerElement::EType pLayerType);
00608 
00609 public:
00610     void ConvertNurbsSurfaceToNurbs();
00611     void ConvertMeshNormals();
00612     void ConvertNurbsCurvesToNulls();
00613     void ConnectTextures();
00614     void BuildTextureLayersDirectArray();
00615     void FixInheritType(FbxNode *pNode);
00616 
00622     void UpdateScaleCompensate(FbxNode *pNode, FbxIOSettings& pIOS);
00623 
00624     FbxClassId ConvertAttributeTypeToClassID(FbxNodeAttribute::EType pAttributeType);
00625 
00631     FbxGlobalLightSettings&  GlobalLightSettings()  { return *mGlobalLightSettings; }
00633     FbxGlobalCameraSettings& GlobalCameraSettings() { return *mGlobalCameraSettings; }
00635     FbxGlobalTimeSettings&   GlobalTimeSettings()   { return *mGlobalTimeSettings; }
00636 
00637 private:
00638     FbxNode*                           mRootNode;
00639 
00640     FbxGlobalLightSettings*            mGlobalLightSettings;
00641     FbxGlobalCameraSettings*           mGlobalCameraSettings;
00642     FbxGlobalTimeSettings*             mGlobalTimeSettings;
00643 
00644     FbxAnimEvaluator*                   mEvaluator;
00645 
00646     FbxCharPtrSet                         mTakeTimeWarpSet;
00647 
00648     friend class FbxLayerContainer;
00649     friend class FbxNodeFinderDuplicateName;
00650 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
00651 };
00652 
00653 #include <fbxsdk/fbxsdk_nsend.h>
00654 
00655 #endif /* _FBXSDK_SCENE_H_ */