FBX SDK Reference Guide: kfbxnode.h Source File
Go to the documentation of this file.
00001 
00004 #ifndef _FBXSDK_NODE_H_
00005 #define _FBXSDK_NODE_H_
00006 
00007 /**************************************************************************************
00008 
00009  Copyright © 2001 - 2008 Autodesk, Inc. and/or its licensors.
00010  All Rights Reserved.
00011 
00012  The coded instructions, statements, computer programs, and/or related material 
00013  (collectively the "Data") in these files contain unpublished information 
00014  proprietary to Autodesk, Inc. and/or its licensors, which is protected by 
00015  Canada and United States of America federal copyright law and by international 
00016  treaties. 
00017  
00018  The Data may not be disclosed or distributed to third parties, in whole or in
00019  part, without the prior written consent of Autodesk, Inc. ("Autodesk").
00020 
00021  THE DATA IS PROVIDED "AS IS" AND WITHOUT WARRANTY.
00022  ALL WARRANTIES ARE EXPRESSLY EXCLUDED AND DISCLAIMED. AUTODESK MAKES NO
00023  WARRANTY OF ANY KIND WITH RESPECT TO THE DATA, EXPRESS, IMPLIED OR ARISING
00024  BY CUSTOM OR TRADE USAGE, AND DISCLAIMS ANY IMPLIED WARRANTIES OF TITLE, 
00025  NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR USE. 
00026  WITHOUT LIMITING THE FOREGOING, AUTODESK DOES NOT WARRANT THAT THE OPERATION
00027  OF THE DATA WILL BE UNINTERRUPTED OR ERROR FREE. 
00028  
00029  IN NO EVENT SHALL AUTODESK, ITS AFFILIATES, PARENT COMPANIES, LICENSORS
00030  OR SUPPLIERS ("AUTODESK GROUP") BE LIABLE FOR ANY LOSSES, DAMAGES OR EXPENSES
00031  OF ANY KIND (INCLUDING WITHOUT LIMITATION PUNITIVE OR MULTIPLE DAMAGES OR OTHER
00032  SPECIAL, DIRECT, INDIRECT, EXEMPLARY, INCIDENTAL, LOSS OF PROFITS, REVENUE
00033  OR DATA, COST OF COVER OR CONSEQUENTIAL LOSSES OR DAMAGES OF ANY KIND),
00034  HOWEVER CAUSED, AND REGARDLESS OF THE THEORY OF LIABILITY, WHETHER DERIVED
00035  FROM CONTRACT, TORT (INCLUDING, BUT NOT LIMITED TO, NEGLIGENCE), OR OTHERWISE,
00036  ARISING OUT OF OR RELATING TO THE DATA OR ITS USE OR ANY OTHER PERFORMANCE,
00037  WHETHER OR NOT AUTODESK HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS
00038  OR DAMAGE. 
00039 
00040 **************************************************************************************/
00041 
00042 #include <kaydaradef.h>
00043 #ifndef KFBX_DLL
00044     #define KFBX_DLL K_DLLIMPORT
00045 #endif
00046 
00047 #include <kaydara.h>
00048 
00049 #include <kfbxplugins/kfbxtakenodecontainer.h>
00050 #include <kfbxplugins/kfbxnodelimits.h>
00051 #include <kfbxplugins/kfbxgroupname.h>
00052 
00053 #include <kfbxmath/kfbxtransformation.h>
00054 #include <kfbxmath/kfbxvector4.h>
00055 #include <kfbxmath/kfbxmatrix.h>
00056 #include <kfbxmath/kfbxxmatrix.h>
00057 
00058 #include <klib/karrayul.h>
00059 #include <klib/kerror.h>
00060 #include <klib/kstring.h>
00061 #include <klib/ktime.h>
00062 
00063 #ifndef MB_FBXSDK
00064 #include <kbaselib_nsuse.h>
00065 #endif
00066 #include <kbaselib_forward.h>
00067 
00068 #include <fbxfilesdk_nsbegin.h>
00069 
00070     class KFbxNodeAttribute;
00071     class KFbxScene;
00072     class KFbxSdkManager;
00073     class KFbxNull;
00074     class KFbxMarker;
00075     class KFbxSkeleton;
00076     class KFbxGeometry;
00077     class KFbxMesh;
00078     class KFbxNurb;
00079     class KFbxNurbsCurve;
00080     class KFbxNurbsSurface;
00081     class KFbxTrimNurbsSurface;
00082     class KFbxPatch;
00083     class KFbxCamera;
00084     class KFbxCameraSwitcher;
00085     class KFbxLight;
00086     class KFbxOpticalReference;
00087     class KFbxCharacter;
00088     class KFbxNode_internal;
00089     class KFbxSurfaceMaterial;
00090 
00103     class KFBX_DLL KFbxNode : public KFbxTakeNodeContainer
00104     {
00105         KFBXOBJECT_DECLARE(KFbxNode,KFbxTakeNodeContainer);
00106         public:
00112 
00116             KFbxNode* GetParent();
00117             KFbxNode const* GetParent() const;
00118 
00132             bool AddChild(KFbxNode* pNode);
00133 
00139             KFbxNode* RemoveChild(KFbxNode* pNode);
00140 
00145             int GetChildCount(bool pRecursive = false) const;
00146 
00151             KFbxNode* GetChild(int pIndex);
00152 
00157             KFbxNode const* GetChild(int pIndex) const;
00158 
00165             KFbxNode* FindChild(char const* pName, bool pRecursive = true, bool pInitial = false);
00166 
00168 
00187 
00191             void SetTarget(KFbxNode* pNode);
00192 
00196             KFbxNode* GetTarget() const;
00197 
00201             void SetPostTargetRotation(KFbxVector4 pVector);
00202 
00206             KFbxVector4 GetPostTargetRotation() const;
00207 
00211             void SetTargetUp(KFbxNode* pNode);
00212 
00216             KFbxNode* GetTargetUp() const;
00217 
00221             void SetTargetUpVector(KFbxVector4 pVector);
00222 
00226             KFbxVector4 GetTargetUpVector() const;
00227 
00229 
00230 
00235         public:
00236             virtual kFbxUpdateId GetUpdateId(eFbxUpdateIdType pUpdateId=eUpdateId_Object) const;
00238 
00246             void SetVisibility(bool pIsVisible);
00247 
00251             bool GetVisibility() const;
00252 
00261             typedef enum
00262             {
00263                 eHARD_SHADING,
00264                 eWIRE_FRAME,
00265                 eFLAT_SHADING,
00266                 eLIGHT_SHADING,
00267                 eTEXTURE_SHADING,
00268                 eLIGHT_TEXTURE_SHADING
00269             } EShadingMode;
00270 
00274             void SetShadingMode(EShadingMode pShadingMode);
00275 
00279             EShadingMode GetShadingMode() const;
00280 
00284             void SetMultiLayer(bool pMultiLayer);
00285 
00289             bool GetMultiLayer() const;
00290 
00296             typedef enum
00297             {
00298                 eOLD_MULTI_TAKE,
00299                 eMULTI_TAKE,
00300                 eMONO_TAKE
00301             } EMultiTakeMode;
00302 
00306             void SetMultiTakeMode(EMultiTakeMode pMultiTakeMode);
00307 
00311             EMultiTakeMode GetMultiTakeMode() const;
00313 
00318 
00328             KFbxNodeAttribute* SetNodeAttribute(KFbxNodeAttribute* pNodeAttribute);
00329 
00334             KFbxNodeAttribute* GetNodeAttribute();
00335 
00340             KFbxNodeAttribute const* GetNodeAttribute() const;
00341 
00345             int GetNodeAttributeCount() const;
00346 
00351             int GetDefaultNodeAttributeIndex() const;
00352 
00358             bool SetDefaultNodeAttributeIndex(int pIndex);
00359 
00365             KFbxNodeAttribute* GetNodeAttributeByIndex(int pIndex);
00366 
00372             KFbxNodeAttribute const* GetNodeAttributeByIndex(int pIndex) const;
00373 
00380             int GetNodeAttributeIndex(KFbxNodeAttribute* pNodeAttribute) const;
00381 
00389             bool AddNodeAttribute(KFbxNodeAttribute* pNodeAttribute);
00390 
00397             KFbxNodeAttribute* RemoveNodeAttribute(KFbxNodeAttribute* pNodeAttribute);
00398 
00405             KFbxNodeAttribute* RemoveNodeAttributeByIndex(int pIndex);
00406 
00411             KFbxNull* GetNull();
00412 
00417             KFbxMarker* GetMarker();
00418 
00423             KFbxSkeleton* GetSkeleton();
00424 
00430             KFbxGeometry* GetGeometry();
00431 
00436             KFbxMesh* GetMesh();
00437 
00442             KFbxNurb* GetNurb();
00443 
00448             KFbxNurbsSurface* GetNurbsSurface();
00449 
00454             KFbxNurbsCurve* GetNurbsCurve();
00455 
00460             KFbxTrimNurbsSurface* GetTrimNurbsSurface();
00461 
00466             KFbxPatch* GetPatch();
00467 
00472             KFbxCamera* GetCamera();
00473 
00479             KFbxCameraSwitcher* GetCameraSwitcher();
00480 
00485             KFbxLight* GetLight();
00486 
00492             KFbxOpticalReference* GetOpticalReference();
00494 
00501 
00505             void SetDefaultT(const KFbxVector4& pT);
00506 
00511             KFbxVector4& GetDefaultT(KFbxVector4& pT);
00512 
00516             void SetDefaultR(const KFbxVector4& pR);
00517 
00522             KFbxVector4& GetDefaultR(KFbxVector4& pR);
00523 
00527             void SetDefaultS(const KFbxVector4& pS);
00528 
00533             KFbxVector4& GetDefaultS(KFbxVector4& pS);
00534 
00542             void SetDefaultVisibility(double pVisibility);
00543 
00551             double GetDefaultVisibility();
00552 
00554 
00568             void SetTransformationInheritType(ETransformInheritType pInheritType);
00569 
00573             void GetTransformationInheritType(ETransformInheritType& pInheritType);
00575 
00576 
00585 
00590             typedef enum
00591             {
00592                 eSOURCE_SET,
00593                 eDESTINATION_SET
00594             } EPivotSet;
00595 
00600             typedef enum
00601             {
00602                 ePIVOT_STATE_ACTIVE,
00603                 ePIVOT_STATE_REFERENCE
00604             } EPivotState;
00605 
00612             void SetPivotState(EPivotSet pPivotSet, EPivotState pPivotState);
00613 
00620             void GetPivotState(EPivotSet pPivotSet, EPivotState& pPivotState);
00621 
00627             void SetRotationOrder(EPivotSet pPivotSet, ERotationOrder pRotationOrder);
00628 
00633             void GetRotationOrder(EPivotSet pPivotSet, ERotationOrder& pRotationOrder);
00634 
00643             void SetUseRotationSpaceForLimitOnly(EPivotSet pPivotSet, bool pUseForLimitOnly);
00644 
00649             bool GetUseRotationSpaceForLimitOnly(EPivotSet pPivotSet);
00650 
00656             void SetRotationActive(bool pVal);
00657 
00661             bool GetRotationActive();
00662 
00667             void SetUseQuaternionForInterpolation(EPivotSet pPivotSet, bool pUseQuaternion);
00668 
00673             bool GetUseQuaternionForInterpolation(EPivotSet pPivotSet) const;
00674 
00683             void SetRotationStiffness(KFbxVector4 pRotationStiffness);
00684 
00688             KFbxVector4 GetRotationStiffness();
00689 
00698             void SetMinDampRange(KFbxVector4 pMinDampRange);
00699 
00703             KFbxVector4 GetMinDampRange();
00704 
00705 
00714             void SetMaxDampRange(KFbxVector4 pMaxDampRange);
00715 
00719             KFbxVector4 GetMaxDampRange();
00720 
00721 
00730             void SetMinDampStrength(KFbxVector4 pMinDampStrength);
00731 
00735             KFbxVector4 GetMinDampStrength();
00736 
00737 
00746             void SetMaxDampStrength(KFbxVector4 pMaxDampStrength);
00747 
00751             KFbxVector4 GetMaxDampStrength();
00752 
00758             void SetPreferedAngle(KFbxVector4 pPreferedAngle);
00759 
00763             KFbxVector4 GetPreferedAngle();
00764 
00770             void SetRotationOffset(EPivotSet pPivotSet, KFbxVector4 pVector);
00771 
00777             KFbxVector4& GetRotationOffset(EPivotSet pPivotSet) const;
00778 
00785             void SetRotationPivot(EPivotSet pPivotSet, KFbxVector4 pVector);
00786 
00793             KFbxVector4& GetRotationPivot(EPivotSet pPivotSet) const;
00794 
00801             void SetPreRotation(EPivotSet pPivotSet, KFbxVector4 pVector);
00802 
00809             KFbxVector4& GetPreRotation(EPivotSet pPivotSet) const;
00810 
00817             void SetPostRotation(EPivotSet pPivotSet, KFbxVector4 pVector);
00818 
00825             KFbxVector4& GetPostRotation(EPivotSet pPivotSet) const;
00826 
00832             void SetScalingOffset(EPivotSet pPivotSet, KFbxVector4 pVector);
00833 
00839             KFbxVector4& GetScalingOffset(EPivotSet pPivotSet) const;
00840 
00848             void SetScalingPivot(EPivotSet pPivotSet, KFbxVector4 pVector);
00849 
00856             KFbxVector4& GetScalingPivot(EPivotSet pPivotSet) const;
00857 
00866             void SetGeometricTranslation(EPivotSet pPivotSet, KFbxVector4 pVector);
00867 
00872             KFbxVector4 GetGeometricTranslation(EPivotSet pPivotSet) const;
00873 
00882             void SetGeometricRotation(EPivotSet pPivotSet, KFbxVector4 pVector);
00883 
00888             KFbxVector4 GetGeometricRotation(EPivotSet pPivotSet);
00889 
00898             void SetGeometricScaling(EPivotSet pPivotSet, KFbxVector4 pVector);
00899 
00903             KFbxVector4 GetGeometricScaling(EPivotSet pPivotSet);
00904 
00913             void ConvertPivotAnimation(EPivotSet pConversionTarget, double pFrameRate, bool pKeyReduce=true);
00914 
00923             void ConvertPivotAnimationRecursive(EPivotSet pConversionTarget, double pFrameRate, bool pKeyReduce=true);
00924 
00929             void ResetPivotSet( KFbxNode::EPivotSet pPivotSet );
00930 
00937             void ResetPivotSetAndConvertAnimation( double pFrameRate=30., bool pKeyReduce=false );
00938 
00940 
00945 
00950             KFbxVector4& GetLocalTFromDefaultTake(bool pApplyLimits = false);
00951 
00956             KFbxVector4& GetLocalRFromDefaultTake(bool pApplyLimits = false);
00957 
00962             KFbxVector4& GetLocalSFromDefaultTake(bool pApplyLimits = false);
00963 
00969             KFbxXMatrix& GetGlobalFromDefaultTake(EPivotSet pPivotSet = eSOURCE_SET, bool pApplyTarget = false);
00970 
00976             KFbxVector4& GetLocalTFromCurrentTake(KTime pTime, bool pApplyLimits = false);
00977 
00983             KFbxVector4& GetLocalRFromCurrentTake(KTime pTime, bool pApplyLimits = false);
00984 
00990             KFbxVector4& GetLocalSFromCurrentTake(KTime pTime, bool pApplyLimits = false);
00991 
00998             KFbxXMatrix& GetGlobalFromCurrentTake(KTime pTime, EPivotSet pPivotSet = eSOURCE_SET, bool pApplyTarget = false);
01000 
01005 
01009             int GetCharacterLinkCount();
01010 
01023             bool GetCharacterLink(int pIndex, KFbxCharacter** pCharacter, int* pCharacterLinkType, int* pNodeId, int *pNodeSubId);
01024 
01035             int FindCharacterLink(KFbxCharacter* pCharacter, int pCharacterLinkType, int pNodeId, int pNodeSubId);
01037 
01049         virtual bool GetAnimationInterval(KTime& pStart, KTime& pStop);
01050 
01051 
01056 
01061             int AddMaterial( KFbxSurfaceMaterial* pMaterial );
01062 
01067             bool RemoveMaterial( KFbxSurfaceMaterial* pMaterial );
01068 
01072             int GetMaterialCount() const;
01073 
01078             KFbxSurfaceMaterial* GetMaterial( int pIndex ) const;
01079 
01082             void RemoveAllMaterials();
01083 
01089             int GetMaterialIndex( char const* pName ) const;
01090 
01092 
01098 
01102             KError& GetError();
01103 
01117             typedef enum
01118             {
01119                 eTAKE_NODE_ERROR,
01120                 eNODE_NAME_CLASH,
01121                 eMATERIAL_NAME_CLASH,
01122                 eTEXTURE_NAME_CLASH,
01123                 eVIDEO_NAME_CLASH,
01124                 eNOT_A_CHILD,
01125                 eCYCLIC_GRAPH,
01126                 eINDEX_OUT_OF_RANGE,
01127                 eATTRIBUTE_NOT_CONNECTED,
01128                 eERROR_COUNT
01129             } EError;
01130 
01134             EError GetLastErrorID() const;
01135 
01139             const char* GetLastErrorString() const;
01140 
01142 
01143 
01148 
01156             KFbxTypedProperty<fbxDouble3>               LclTranslation;
01157 
01165             KFbxTypedProperty<fbxDouble3>               LclRotation;
01166 
01174             KFbxTypedProperty<fbxDouble3>               LclScaling;
01175 
01183             KFbxTypedProperty<KFbxXMatrix>              GlobalTransform;
01184 
01192             KFbxTypedProperty<fbxDouble1>               Visibility;
01193 
01194             KFbxTypedProperty<fbxDouble1>               Weight;
01195             KFbxTypedProperty<fbxDouble3>               PoleVector;
01196             KFbxTypedProperty<fbxDouble1>               Twist;
01197             KFbxTypedProperty<fbxDouble3>               WorldUpVector;
01198             KFbxTypedProperty<fbxDouble3>               UpVector;
01199             KFbxTypedProperty<fbxDouble3>               AimVector;
01200             KFbxTypedProperty<fbxBool1>                 QuaternionInterpolate;
01201             KFbxTypedProperty<fbxDouble3>               RotationOffset;
01202             KFbxTypedProperty<fbxDouble3>               RotationPivot;
01203             KFbxTypedProperty<fbxDouble3>               ScalingOffset;
01204             KFbxTypedProperty<fbxDouble3>               ScalingPivot;
01205             KFbxTypedProperty<fbxBool1>                 TranslationActive;
01206             KFbxTypedProperty<fbxDouble3>               Translation;
01207             KFbxTypedProperty<fbxDouble3>               TranslationMin;
01208             KFbxTypedProperty<fbxDouble3>               TranslationMax;
01209             KFbxTypedProperty<fbxBool1>                 TranslationMinX;
01210             KFbxTypedProperty<fbxBool1>                 TranslationMinY;
01211             KFbxTypedProperty<fbxBool1>                 TranslationMinZ;
01212             KFbxTypedProperty<fbxBool1>                 TranslationMaxX;
01213             KFbxTypedProperty<fbxBool1>                 TranslationMaxY;
01214             KFbxTypedProperty<fbxBool1>                 TranslationMaxZ;
01215 
01216             KFbxTypedProperty<ERotationOrder>           RotationOrder;
01217             KFbxTypedProperty<fbxBool1>                 RotationSpaceForLimitOnly;
01218             KFbxTypedProperty<fbxDouble1>               RotationStiffnessX;
01219             KFbxTypedProperty<fbxDouble1>               RotationStiffnessY;
01220             KFbxTypedProperty<fbxDouble1>               RotationStiffnessZ;
01221             KFbxTypedProperty<fbxDouble1>               AxisLen;
01222 
01223             KFbxTypedProperty<fbxDouble3>               PreRotation;
01224             KFbxTypedProperty<fbxDouble3>               PostRotation;
01225             KFbxTypedProperty<fbxBool1>                 RotationActive;
01226             KFbxTypedProperty<fbxDouble3>               RotationMin;
01227             KFbxTypedProperty<fbxDouble3>               RotationMax;
01228             KFbxTypedProperty<fbxBool1>                 RotationMinX;
01229             KFbxTypedProperty<fbxBool1>                 RotationMinY;
01230             KFbxTypedProperty<fbxBool1>                 RotationMinZ;
01231             KFbxTypedProperty<fbxBool1>                 RotationMaxX;
01232             KFbxTypedProperty<fbxBool1>                 RotationMaxY;
01233             KFbxTypedProperty<fbxBool1>                 RotationMaxZ;
01234 
01235             KFbxTypedProperty<ETransformInheritType>    InheritType;
01236 
01237             KFbxTypedProperty<fbxBool1>                 ScalingActive;
01238             KFbxTypedProperty<fbxDouble3>               Scaling;
01239             KFbxTypedProperty<fbxDouble3>               ScalingMin;
01240             KFbxTypedProperty<fbxDouble3>               ScalingMax;
01241             KFbxTypedProperty<fbxBool1>                 ScalingMinX;
01242             KFbxTypedProperty<fbxBool1>                 ScalingMinY;
01243             KFbxTypedProperty<fbxBool1>                 ScalingMinZ;
01244             KFbxTypedProperty<fbxBool1>                 ScalingMaxX;
01245             KFbxTypedProperty<fbxBool1>                 ScalingMaxY;
01246             KFbxTypedProperty<fbxBool1>                 ScalingMaxZ;
01247 
01248             KFbxTypedProperty<fbxDouble3>               GeometricTranslation;
01249             KFbxTypedProperty<fbxDouble3>               GeometricRotation;
01250             KFbxTypedProperty<fbxDouble3>               GeometricScaling;
01251 
01252             // Ik Settings
01254             KFbxTypedProperty<fbxDouble1>               MinDampRangeX;
01255             KFbxTypedProperty<fbxDouble1>               MinDampRangeY;
01256             KFbxTypedProperty<fbxDouble1>               MinDampRangeZ;
01257             KFbxTypedProperty<fbxDouble1>               MaxDampRangeX;
01258             KFbxTypedProperty<fbxDouble1>               MaxDampRangeY;
01259             KFbxTypedProperty<fbxDouble1>               MaxDampRangeZ;
01260             KFbxTypedProperty<fbxDouble1>               MinDampStrengthX;
01261             KFbxTypedProperty<fbxDouble1>               MinDampStrengthY;
01262             KFbxTypedProperty<fbxDouble1>               MinDampStrengthZ;
01263             KFbxTypedProperty<fbxDouble1>               MaxDampStrengthX;
01264             KFbxTypedProperty<fbxDouble1>               MaxDampStrengthY;
01265             KFbxTypedProperty<fbxDouble1>               MaxDampStrengthZ;
01266             KFbxTypedProperty<fbxDouble1>               PreferedAngleX;
01267             KFbxTypedProperty<fbxDouble1>               PreferedAngleY;
01268             KFbxTypedProperty<fbxDouble1>               PreferedAngleZ;
01270 
01271             KFbxTypedProperty<fbxReference*>            LookAtProperty;
01272             KFbxTypedProperty<fbxReference*>            UpVectorProperty;
01273 
01274             KFbxTypedProperty<fbxBool1>                 Show;
01275             KFbxTypedProperty<fbxBool1>                 NegativePercentShapeSupport;
01276 
01277             KFbxTypedProperty<fbxInteger1>              DefaultAttributeIndex;
01279 
01280 
01281         #ifndef DOXYGEN_SHOULD_SKIP_THIS
01283         //  WARNING!
01284         //  Anything beyond these lines may not be documented accurately and is
01285         //  subject to change without notice.
01287         public:
01292 
01299                 void SetLocalStateFromDefaultTake(bool pRecursive, bool pApplyLimits = false);
01300 
01305                 void SetDefaultTakeFromLocalState(bool pRecursive);
01306 
01313                 void SetLocalStateFromCurrentTake(KTime pTime, bool pRecursive,bool pApplyLimits = false);
01314 
01320                 void SetCurrentTakeFromLocalState(KTime pTime, bool pRecursive);
01321 
01328                 void ComputeGlobalState(kUInt pUpdateId, bool pRecursive, EPivotSet pPivotSet = eSOURCE_SET, bool pApplyTarget = false);
01329 
01335                 void ComputeLocalState(kUInt pUpdateId, bool pRecursive);
01336 
01340                 void SetGlobalState(const KFbxXMatrix& pGX);
01341 
01343                 KFbxXMatrix& GetGlobalState();
01344 
01348                 void SetLocalState(const KFbxVector4& pLT,const KFbxVector4& pLR, const KFbxVector4& pLS);
01349 
01351                 void GetLocalState(KFbxVector4& pLT, KFbxVector4& pLR, KFbxVector4& pLS);
01352 
01357                 void SetGlobalStateId(kUInt pUpdateId, bool pRecursive);
01358 
01360                 kUInt GetGlobalStateId();
01361 
01366                 void SetLocalStateId(kUInt pUpdateId, bool pRecursive);
01367 
01369                 kUInt GetLocalStateId();
01371 
01372             KFbxNodeLimits& GetLimits();
01373 
01374 
01375             // Clone,
01376             // Note this does not clone the node's attribute.
01377             virtual KFbxObject* Clone(KFbxObject* pContainer, KFbxObject::ECloneType pCloneType = eDEEP_CLONE) const;
01378 
01379             // Notification received when a KFbxNod property has changed
01380             virtual bool PropertyNotify(eFbxPropertyNotify pType, KFbxProperty* pProperty);
01381 
01382         protected:
01383             KFbxNode(KFbxSdkManager& pManager, char const* pName);
01384             virtual ~KFbxNode();
01385 
01386             virtual void Construct(const KFbxNode* pFrom);
01387             virtual bool ConstructProperties(bool pForceSet);
01388             virtual void Destruct(bool pRecursive, bool pDependents);
01389 
01391             KFbxNode& operator=(KFbxNode const& pNode);
01392 
01393             void    Reset();
01394             bool    GetAnimationIntervalRecursive(KTime& pStart, KTime& pStop);
01395 
01396             void    AddChildName(char* pChildName);
01397             char*   GetChildName(kUInt pIndex);
01398             kUInt   GetChildNameCount();
01399 
01400         public:
01401             void UpdatePivotsAndLimitsFromProperties();
01402             void UpdatePropertiesFromPivotsAndLimits();
01403             void SetRotationActiveProperty(bool pVal);
01404 
01405             void PivotSetToMBTransform(EPivotSet pPivotSet);
01406             KFbxXMatrix         GetLXFromLocalState( bool pT, bool pR, bool pS, bool pSoff );
01407 
01408         protected:
01409             virtual KString     GetTypeName() const;
01410             virtual KStringList GetTypeFlags() const;
01411             KMBTransform*       GetMBTransform();
01412             void                ComputeTRSLocalFromDefaultTake(bool pApplyLimits = false);
01413             void                ComputeTRSLocalFromCurrentTake(KTime pTime, bool pApplyLimits = false);
01414 
01415             // begin character related members
01416             int AddCharacterLink(KFbxCharacter* pCharacter, int pCharacterLinkType, int pNodeId, int pNodeSubId);
01417             int RemoveCharacterLink(KFbxCharacter* pCharacter, int pCharacterLinkType, int pNodeId, int pNodeSubId);
01418             // This class must be declared public, otherwise gcc complains on typedef below.
01419 
01420         private:
01421             KFbxNode& DeepCopy( KFbxNode const& pNode, bool pCopyNodeAttribute );
01422 
01423         protected:
01424             // Unsupported parameters in the FBX SDK
01425             // These are declared but not accessible
01426             // They are used to keep imported and exported data identical
01427             typedef enum { eCULLING_OFF, eCULLING_ON_CCW, eCULLING_ON_CW } ECullingType;
01428 
01429             ECullingType                mCullingType;
01430             KFbxNode_internal*          mPH;
01431             bool                        mCorrectInheritType;
01432             mutable KError              mError;
01433 
01434             friend class KFbxReaderFbx;
01435             friend class KFbxReaderFbx6;
01436             friend class KFbxWriterFbx;
01437             friend class KFbxWriterFbx6;
01438             friend class KFbxScene;
01439             friend class KFbxGeometry;
01440             friend class KFbxLight;
01441             friend class KFbxNodeFinderDuplicateName;
01442             friend class KFbxCharacter;
01443             friend class KFbxControlSet;
01444             friend class KFbxNode_internal;
01445             friend class KFbxSurfaceMaterial_internal;
01446             friend class KFbxTexture_internal;
01447             friend class KFbxVideo_internal;
01448 
01449             friend class KFbxNodeLimits;
01450             friend class KFbxLimits;
01451 
01452             friend struct KFbxReaderFbx7Impl;
01453             friend struct KFbxWriterFbx7Impl;
01454 
01455         #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
01456     };
01457 
01458     typedef KFbxNode* HKFbxNode;
01459     typedef class KFBX_DLL KArrayTemplate<KFbxNode*> KArrayKFbxNode;
01460 
01461     inline EFbxType FbxTypeOf( ERotationOrder const &pItem )            { return eENUM; }
01462     inline EFbxType FbxTypeOf( ETransformInheritType const &pItem )     { return eENUM; }
01463 
01464 #include <fbxfilesdk_nsend.h>
01465 
01466 #endif // #ifndef _FBXSDK_NODE_H_
01467 
01468