1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392 |
- /****************************************************************************************
-
- Copyright (C) 2015 Autodesk, Inc.
- All rights reserved.
-
- Use of this software is subject to the terms of the Autodesk license agreement
- provided at the time of installation or download, or which otherwise accompanies
- this software in either electronic or hard copy form.
-
- ****************************************************************************************/
- //! \file fbxnode.h
- #ifndef _FBXSDK_SCENE_GEOMETRY_NODE_H_
- #define _FBXSDK_SCENE_GEOMETRY_NODE_H_
- #include <fbxsdk/fbxsdk_def.h>
- #include <fbxsdk/core/fbxobject.h>
- #include <fbxsdk/core/math/fbxtransforms.h>
- #include <fbxsdk/fbxsdk_nsbegin.h>
- class FbxStatus;
- class FbxNodeAttribute;
- class FbxCachedEffect;
- class FbxLODGroup;
- class FbxNull;
- class FbxMarker;
- class FbxSkeleton;
- class FbxGeometry;
- class FbxMesh;
- class FbxNurbs;
- class FbxNurbsCurve;
- class FbxLine;
- class FbxNurbsSurface;
- class FbxTrimNurbsSurface;
- class FbxPatch;
- class FbxCamera;
- class FbxCameraStereo;
- class FbxCameraSwitcher;
- class FbxLight;
- class FbxOpticalReference;
- class FbxSubDiv;
- class FbxCharacter;
- class FbxSurfaceMaterial;
- class FbxAnimStack;
- class FbxAnimCurveFilterMatrixConverter;
- /** Represents an element in the scene graph. A scene graph is a tree of FbxNode
- * objects. The tree management services are self contained in this class.
- *
- * \note The FBX SDK does not test the validity of the constructed scene graph. It
- * is the responsibility of the caller to make sure that it does not generate cyclic
- * graphs in a node hierarchy.
- *
- * Besides the tree management, this class defines all the properties required to describe
- * the position of the object in the scene. This information include the basic Translation,
- * Rotation and Scaling properties and the more advanced options for pivots, limits, and IK joints
- * attributes such the stiffness and dampening.
- *
- * When it is first created, the FbxNode object is "empty" (i.e: it is an object without any
- * graphical representation that only contains the position information). In this state, it can
- * be used to represent parents in the node tree structure but not much more. The normal use of
- * this type of objects is to add them an attribute that will specialize the node (see the
- * "Node Attribute Management" section).
- *
- * The node attribute is an object in itself and is connected to the the FbxNode. This also
- * means that the same node attribute can be shared among multiple nodes. FbxCamera, FbxLight,
- * FbxMesh, etc... are all node attributes and they all derive from the base class FbxNodeAttribute.
- *
- */
- class FBXSDK_DLL FbxNode : public FbxObject
- {
- FBXSDK_OBJECT_DECLARE(FbxNode, FbxObject);
- public:
- /**
- * \name Node Tree Management
- */
- //@{
- /** Get the parent node.
- * \return Pointer to parent node or \c NULL if the current node has no parent.
- */
- FbxNode* GetParent();
- const FbxNode* GetParent() const;
- /** Add a child node and its underlying node tree.
- * \param pNode Node we want to make child of \c this.
- * \return \c true on success, \c false if \e pNode is \c NULL or the system is
- * unable to make the connection.
- * \remarks If \e pNode already has a parent, first it is removed from current parent and then
- * added to this one.
- */
- bool AddChild(FbxNode* pNode);
- /** Remove the child node.
- * \param pNode The child node to be removed.
- * \return The removed child node.
- */
- FbxNode* RemoveChild(FbxNode* pNode);
- /** Get the number of children nodes.
- * \param pRecursive If \c true the method will also count all the descendant children.
- * \return Total number of children for this node.
- */
- int GetChildCount(bool pRecursive = false) const;
- /** Get child by index.
- * \param pIndex The child index.
- * \return Child node or \c NULL if \e pIndex is out of range (i.e: < 0 or > GetChildCount()).
- */
- FbxNode* GetChild(int pIndex);
- /** Get child by index.
- * \param pIndex The child index.
- * \return Child node or \c NULL if \e pIndex is out of range (i.e: < 0 or > GetChildCount()).
- */
- const FbxNode* GetChild(int pIndex) const;
- /** Finds a child node by name.
- * \param pName Name of the searched child node.
- * \param pRecursive Flag to request recursive calls.
- * \param pInitial If set to \c true, the search compares the initial name of
- * the node (see the FbxObject class)
- * \return Found child node or \c NULL if no child node with this name exists.
- */
- FbxNode* FindChild(const char* pName, bool pRecursive=true, bool pInitial=false);
- //@}
- /**
- * \name Node Target Management
- * The FbxNode class allows the client to set a "follow" target node. This target
- * forces the node to re-align itself so it points to the target. By default, the node
- * uses its X axis as the aiming constraint. A rotation offset can be added to change
- * this behavior. While the default relative orientation to the target (the X axis) is
- * sufficient for the FBX cameras (with a (0,0,0) rotation vector, they are aiming
- * along the X axis), this rotation offset becomes particularly useful with the lights
- * objects because their default orientation (when they have a 0,0,0 rotation vector) is to
- * point along the -Y axis and they need to be adjusted with a 90-degree offset on the Z axis.
- *
- * The FbxNode class also permits the use of node to define an Up-vector. By default,
- * the node's up vector points towards the Up node. If the Up node is not specified,
- * then the node's Up vector points towards the Y axis. Here too, a rotation offset can be
- * added to change the default behavior.
- *
- * Of course, these offsets can be applied to anything, not only the cameras and lights.
- *
- * \note Objects in the FBX SDK are always created in the right handed, Y-Up system and need
- * to be adjusted for any other axis system by explicitly convert them (the class
- * FbxAxisSystem can help in that process).
- *
- */
- //@{
- /** The target must be part of the same scene and it cannot be itself.
- * \param pNode The target.
- */
- void SetTarget(FbxNode* pNode);
- /** Get the target for this node.
- * \returns \c NULL if target isn't set.
- */
- FbxNode* GetTarget() const;
- /** Set rotation offset from default relative orientation to target.
- * \param pVector The rotation offset.
- */
- void SetPostTargetRotation(FbxVector4 pVector);
- /** Get rotation offset from default relative orientation to target.
- * \return The rotation offset.
- */
- FbxVector4 GetPostTargetRotation() const;
- /** The target up node must be part of the same scene and it cannot be itself.
- * \param pNode The target.
- */
- void SetTargetUp(FbxNode* pNode);
- /** Get the target up node.
- * \return \c NULL if the target up model isn't set.
- */
- FbxNode* GetTargetUp() const;
- /** Set up vector offset from default relative target up vector.
- * \param pVector The rotation offset.
- */
- void SetTargetUpVector(FbxVector4 pVector);
- /** Get up vector offset from default relative target up vector.
- * \return The up vector offset.
- */
- FbxVector4 GetTargetUpVector() const;
- //@}
- /**
- * \name Node Display Parameters
- */
- //@{
- /** Set the node Visibility value from the boolean parameter.
- * \param pIsVisible Node is visible in the scene if set to \c true.
- * \remarks This method checks for the validity of the property before attempting to
- * set its value. In fact, the exact same result can be achieved by the following code:
- * \code
- * if( Visibility.IsValid() )
- * {
- * Visibility.Set(FbxDouble(pIsVisible));
- * }
- * \endcode
- *
- * \see Visibility property.
- */
- void SetVisibility(bool pIsVisible);
- /** Get the current value of the Visibility property.
- * \return \c false if the Visibility property value is 0.0 and \c true for any other value.
- * \remarks This method expects the Visibility property to exist and to be valid. If this
- * condition is not met, the returned value will be \c false.
- */
- bool GetVisibility() const;
- /** \enum EShadingMode Shading modes.
- * These shading modes are not directly used by the FBX SDK but it is guaranteed that the information is
- * carried to and from the FBX files. The typical context of using these modes is to affect the rendering of
- * geometric objects (this is, of course, performed at the application level) and the possible definition
- * for each mode is:
- */
- enum EShadingMode
- {
- eHardShading, //!< Solid geometries rendered with smooth surfaces - using the system light.
- eWireFrame, //!< Geometries displayed in wire frame.
- eFlatShading, //!< Solid geometries rendered faceted - using the system light.
- eLightShading, //!< Solid geometries rendered with the scene lights.
- eTextureShading, //!< Solid geometries rendered with smooth textured surfaces - using system light.
- eFullShading //!< Solid geometries rendered with smooth textured surfaces and scene lights.
- };
- /** Set the shading mode.
- * \param pShadingMode The shading mode.
- */
- void SetShadingMode(EShadingMode pShadingMode);
- /** Get the shading mode.
- * \return The currently set shading mode.
- */
- EShadingMode GetShadingMode() const;
- //@}
- /**
- * \name Node Attribute Management
- */
- //@{
- /** Set the node attribute.
- * \param pNodeAttribute Node attribute object
- * \return Pointer to previous node attribute object.
- * \c NULL if the node didn't have a node attribute or if
- * the new node attribute is equal to the one currently set.
- * \remarks A node attribute can be shared between nodes.
- * \remarks If this node has more than one attribute (added via the AddAttribute() method), this call
- * will destroy all, but the default node attribute.
- */
- FbxNodeAttribute* SetNodeAttribute(FbxNodeAttribute* pNodeAttribute);
- /** Get the default node attribute.
- * The default node attribute is the attribute that has been set by the call to SetNodeAttribute().
- * \return Pointer to the default node attribute or \c NULL if the node doesn't
- * have a node attribute.
- */
- FbxNodeAttribute* GetNodeAttribute();
- /** Get the default node attribute.
- * The default node attribute is the attribute that has been set by the call to SetNodeAttribute(...).
- * \return Pointer to the default node attribute or \c NULL if the node doesn't
- * have a node attribute.
- */
- const FbxNodeAttribute* GetNodeAttribute() const;
- //! Get the number of node attribute(s) connected to this node.
- int GetNodeAttributeCount() const;
- /** Get the index, in the list of connected node attributes, of the node attribute that is set
- * to be the default one.
- * \return Index of the default node attribute or \c -1 if there is no default node attribute set.
- */
- int GetDefaultNodeAttributeIndex() const;
- /** Set index of the default node attribute.
- * \param pIndex Identifies which of the connected node attributes is becoming the default one.
- * This value represent the connection number of the node.
- * \param pStatus The FbxStatus object to hold error codes.
- * \return \c true if the operation succeeds or \c false if the passed index is invalid.
- */
- bool SetDefaultNodeAttributeIndex(int pIndex, FbxStatus* pStatus = NULL);
- /** Get the connected node attribute by specifying its index in the connection list.
- * \param pIndex The connection number of the node.
- * \return Pointer to corresponding node attribute or \c NULL if the index is out of range.
- */
- FbxNodeAttribute* GetNodeAttributeByIndex(int pIndex);
- /** Get the connected node attribute by specifying its index in the connection list.
- * \param pIndex The connection number of the node.
- * \return Pointer to corresponding node attribute or \c NULL if the index is out of range.
- */
- const FbxNodeAttribute* GetNodeAttributeByIndex(int pIndex) const;
- /** Get the connection index of the specified node attribute.
- * This method will do a linear search of all the connected node attributes (from the last to
- * the first connection) until it finds \e pNodeAttribue.
- * \param pNodeAttribute The pointer to the node attribute.
- * \param pStatus The FbxStatus object to hold error codes.
- * \return The connection number of the node attribute or \c -1 if pNodeAttribute is \c NULL
- * or not connected to this node.
- */
- int GetNodeAttributeIndex(FbxNodeAttribute* pNodeAttribute, FbxStatus* pStatus = NULL) const;
- /** Add the new node attribute to this node.
- * If no other node attribute is already set as the default one, this new node attribute is
- * automatically set as the default one.
- * \param pNodeAttribute The pointer to a node attribute.
- * \param pStatus The FbxStatus object to hold error codes.
- * \return \c true if the operation succeeded or \c false if the operation failed.
- * \remarks The failing conditions for this methods are:
- * - The received object pointer is \c NULL.
- * - The received object is already connected to this node.
- * - An internal error prevented the connection to successfully complete.
- */
- bool AddNodeAttribute(FbxNodeAttribute* pNodeAttribute, FbxStatus* pStatus = NULL);
- /** Remove the node attribute from the connection list of this node.
- * \param pNodeAttribute The pointer to a node attribute.
- * \return Pointer to the removed node attribute or \c NULL if the operation failed.
- */
- FbxNodeAttribute* RemoveNodeAttribute(FbxNodeAttribute* pNodeAttribute);
- /** Remove the node attribute, specified by the connection index, from the connection
- * list of this node.
- * \param pIndex Index of the node attribute.
- * \return Pointer to the removed node attribute or \c NULL if the operation failed.
- * \remarks If the specified node attribute is also the default one, its predecessor in
- * the connection list will become the new default node attribute. And if there
- * are no more predecessors, the node DefaultNodeAttributeIndex is reset to -1.
- */
- FbxNodeAttribute* RemoveNodeAttributeByIndex(int pIndex);
- /** Get the default node attribute casted to a FbxCachedEffect pointer.
- * \return Pointer to the cached effect object.
- * \remarks If the type cast failed because there is not default node attribute set or it cannot
- * be successfully casted, this method will return \c NULL.
- */
- FbxCachedEffect* GetCachedEffect();
- /** Get the default node attribute casted to a FbxLODGroup pointer.
- * \return Pointer to the lod group object.
- * \remarks If the type cast failed because there is not default node attribute set or it cannot
- * be successfully casted, this method will return \c NULL.
- */
- FbxLODGroup* GetLodGroup();
- /** Get the default node attribute casted to a FbxNull pointer.
- * \return Pointer to the null object.
- * \remarks If the type cast failed because there is not default node attribute set or it cannot
- * be successfully casted, this method will return \c NULL.
- */
- FbxNull* GetNull();
- /** Get the node attribute casted to a FbxMarker pointer.
- * \return Pointer to the marker object.
- * \remarks If the type cast failed because there is not default node attribute set or it cannot
- * be successfully casted, this method will return \c NULL.
- */
- FbxMarker* GetMarker();
- /** Get the node attribute casted to a FbxSkeleton pointer.
- * \return Pointer to the skeleton object.
- * \remarks If the type cast failed because there is not default node attribute set or it cannot
- * be successfully casted, this method will return \c NULL.
- */
- FbxSkeleton* GetSkeleton();
- /** Get the node attribute casted to a FbxGeometry pointer.
- * \return Pointer to the geometry object.
- * \remarks If the type cast failed because there is not default node attribute set or it cannot
- * be successfully casted, this method will return \c NULL.
- * \remarks For this method to succeed, the node attribute's GetAttributeType() must returns one of the
- * following:
- * - FbxNodeAttribute::eMesh
- * - FbxNodeAttribute::eNurbs
- * - FbxNodeAttribute::eNurbsSurface
- * - FbxNodeAttribute::ePatch
- * - FbxNodeAttribute::eNurbsCurve
- * - FbxNodeAttribute::eBoundary
- * - FbxNodeAttribute::eTrimNurbsSurface
- * - FbxNodeAttribute::eSubDiv
- * - FbxNodeAttribute::eLine
- */
- FbxGeometry* GetGeometry();
- /** Get the node attribute casted to a FbxMesh pointer.
- * \return Pointer to the mesh object.
- * \remarks This method will try to process the default node attribute first. If it cannot
- * find it, it will scan the list of connected node attributes and get the first
- * object that is a FbxNodeAttribute::eMesh.
- * \remarks If the above search failed to get a valid pointer or it cannot
- * be successfully casted, this method will return \c NULL.
- */
- FbxMesh* GetMesh();
- /** Get the node attribute casted to a FbxNurbs pointer.
- * \return Pointer to the nurb object.
- * \remarks This method will try to process the default node attribute first. If it cannot
- * find it, it will scan the list of connected node attributes and get the first
- * object that is a FbxNodeAttribute::eNurbs.
- * \remarks If the above search failed to get a valid pointer or it cannot
- * be successfully casted, this method will return \c NULL.
- */
- FbxNurbs* GetNurbs();
- /** Get the node attribute casted to a FbxNurbsSurface pointer.
- * \return Pointer to the nurbs surface object.
- * \remarks This method will try to process the default node attribute first. If it cannot
- * find it, it will scan the list of connected node attributes and get the first
- * object that is a FbxNodeAttribute::eNurbsSurface.
- * \remarks If the above search failed to get a valid pointer or it cannot
- * be successfully casted, this method will return \c NULL.
- */
- FbxNurbsSurface* GetNurbsSurface();
- /** Get the node attribute casted to a FbxNurbsCurve pointer.
- * \return Pointer to the nurbs curve object.
- * \remarks This method will try to process the default node attribute first. If it cannot
- * find it, it will scan the list of connected node attributes and get the first
- * object that is a FbxNodeAttribute::eNurbsCurve.
- * \remarks If the above search failed to get a valid pointer or it cannot
- * be successfully casted, this method will return \c NULL.
- */
- FbxNurbsCurve* GetNurbsCurve();
- /** Get the node attribute casted to a FbxLine pointer.
- * \return Pointer to the line object.
- * \remarks This method will try to process the default node attribute first. If it cannot
- * find it, it will scan the list of connected node attributes and get the first
- * object that is a FbxNodeAttribute::eLine.
- * \remarks If the above search failed to get a valid pointer or it cannot
- * be successfully casted, this method will return \c NULL.
- */
- FbxLine* GetLine();
- /** Get the node attribute casted to a FbxTrimNurbsSurface pointer.
- * \return Pointer to the trim nurbs surface object.
- * \remarks This method will try to process the default node attribute first. If it cannot
- * find it, it will scan the list of connected node attributes and get the first
- * object that is a FbxNodeAttribute::eTrimNurbsSurface.
- * \remarks If the above search failed to get a valid pointer or it cannot
- * be successfully casted, this method will return \c NULL.
- */
- FbxTrimNurbsSurface* GetTrimNurbsSurface();
- /** Get the node attribute casted to a FbxSubDiv pointer.
- * \return Pointer to the subdivision surface object.
- * \remarks This method will try to process the default node attribute first. If it cannot
- * find it, it will scan the list of connected node attributes and get the first
- * object that is a FbxNodeAttribute::eSubDiv.
- * \remarks If the above search failed to get a valid pointer or it cannot
- * be successfully casted, this method will return \c NULL.
- */
- FbxSubDiv* GetSubdiv();
- /** Get the node attribute casted to a FbxPatch pointer.
- * \return Pointer to the patch object.
- * \remarks This method will try to process the default node attribute first. If it cannot
- * find it, it will scan the list of connected node attributes and get the first
- * object that is a FbxNodeAttribute::ePatch.
- * \remarks If the above search failed to get a valid pointer or it cannot
- * be successfully casted, this method will return \c NULL.
- */
- FbxPatch* GetPatch();
- /** Get the node attribute casted to a FbxCamera pointer.
- * \return Pointer to the camera object.
- * \remarks If the type cast failed because there is not default node attribute set or it cannot
- * be successfully casted, this method will return \c NULL.
- */
- FbxCamera* GetCamera();
- const FbxCamera* GetCamera() const;
- /** Get the node attribute casted to a FbxCameraStereo pointer.
- * \return Pointer to the stereo camera object.
- * \remarks If the type cast failed because there is not default node attribute set or it cannot
- * be successfully casted, this method will return \c NULL.
- */
- FbxCameraStereo* GetCameraStereo();
- /** Get the node attribute casted to a FbxCameraSwitcher pointer.
- * \return Pointer to the camera switcher object.
- * \remarks If the type cast failed because there is not default node attribute set or it cannot
- * be successfully casted, this method will return \c NULL.
- */
- FbxCameraSwitcher* GetCameraSwitcher();
- /** Get the node attribute casted to a FbxLight pointer.
- * \return Pointer to the light object.
- * \remarks If the type cast failed because there is not default node attribute set or it cannot
- * be successfully casted, this method will return \c NULL.
- */
- FbxLight* GetLight();
- const FbxLight* GetLight() const;
- /** Get the node attribute casted to a FbxOpticalReference pointer.
- * \return Pointer to the optical reference object.
- * \remarks If the type cast failed because there is not default node attribute set or it cannot
- * be successfully casted, this method will return \c NULL.
- */
- FbxOpticalReference* GetOpticalReference();
- //@}
- /**
- * \name Transformation propagation
- * This set of functions provides direct access to the transformation propagations settings
- * of the FbxNode. These settings determine how transformations must be applied when
- * evaluating a node's transformation matrix. The possible values are:
- * - eInheritRrSs : Scaling of parent is applied in the child world after the local child rotation.
- * - eInheritRSrs : Scaling of parent is applied in the parent world.
- * - eInheritRrs : Scaling of parent does not affect the scaling of children.
- */
- //@{
- /** Sets how child transforms are inherited from parent transforms.
- * \param pInheritType One of the following values eInheritRrSs, eInheritRSrs or eInheritRrs
- */
- void SetTransformationInheritType(FbxTransform::EInheritType pInheritType);
- //! Get transformation inherit type.
- void GetTransformationInheritType(FbxTransform::EInheritType& pInheritType) const;
- //@}
- /**
- * \name Pivot Management
- * Pivots are used to specify translation, rotation and scaling centers in coordinates
- * relative to a node's origin.
- * A node has two pivot contexts defined by the EPivotSet enumeration. The node's animation
- * data can be converted from one pivot context to the other. Each context can be set to be
- * either active or passive (reference). By default the two pivot contexts are passive. They
- * need to be active to be processed during the evaluation of the node final transformation
- * matrix. In its passive state, a pivot context can still be accessed to retrieve its content
- * for any other required purpose. Each pivot context stores values (as FbxVector4) for:
- * \code
- * - Rotation offset (Roff)
- * - Rotation pivot (Rp)
- * - Pre-rotation (Rpre)
- * - Post-rotation (Rpost)
- * - Scaling offset (Soff)
- * - Scaling pivot (Sp)
- * - Geometric translation (Gt)
- * - Geometric rotation (Gr)
- * - Geometric scaling (Gs)
- *
- * These values combine in the matrix form to compute the World transform of the node
- * using the formula:
- *
- * World = ParentWorld * T * Roff * Rp * Rpre * R * Rpost * Rp-1 * Soff * Sp * S * Sp-1
- * \endcode
- *
- * The geometric transformation (Gt * Gr * Gs) is applied only to the node attribute and after
- * the node transformations. This transformation is not inherited across the node hierarchy.
- *
- * \note Please refer to the FBX SDK programmers guide for more details.
- *
- * The application of the pivots is performed by calling the method ConvertPivotAnimation(). Typically,
- * you set-up the eDestinationPivot context to match what your system can directly support and leave at (0,0,0) the
- * attributes that are not supported by your system. When the values of a specific attribute in the
- * two contexts (source and destination) are identical, the system considers that no adjustment is
- * required because the attribute is directly supported in the destination world.
- *
- * Below is an example of code that shows how the pivot information could be setup before calling ConvertPivotAnimation().
- * \code
- * FbxVector4 lZero(0,0,0);
- * FbxVector4 lOne(1,1,1);
- * pNode->SetPivotState(FbxNode::eSourcePivot, FbxNode::ePivotActive);
- * pNode->SetPivotState(FbxNode::eDestinationPivot, FbxNode::ePivotActive);
- *
- * EFbxRotationOrder lRotationOrder;
- * pNode->GetRotationOrder(FbxNode::eSourcePivot , lRotationOrder);
- * pNode->SetRotationOrder(FbxNode::eDestinationPivot , lRotationOrder);
- *
- * //For cameras and lights (without targets) let's compensate the postrotation.
- * if( pNode->GetCamera() || pNode->GetLight() )
- * {
- * if( !pNode->GetTarget() )
- * {
- * FbxVector4 lRV(90, 0, 0);
- * if( pNode->GetCamera() )
- * lRV.Set(0, 90, 0);
- *
- * FbxVector4 prV = pNode->GetPostRotation(FbxNode::eSourcePivot);
- * FbxAMatrix lSourceR;
- * FbxAMatrix lR(lZero, lRV, lOne);
- * FbxVector4 res = prV;
- *
- * // Rotation order don't affect post rotation, so just use the default XYZ order
- * FbxRotationOrder rOrder;
- * rOrder.V2M(lSourceR, res);
- *
- * lR = lSourceR * lR;
- * rOrder.M2V(res, lR);
- * prV = res;
- * pNode->SetPostRotation(FbxNode::eSourcePivot, prV);
- * pNode->SetRotationActive(true);
- * }
- *
- * // Point light do not need to be adjusted (since they radiate in all the directions).
- * if( pNode->GetLight() && pNode->GetLight()->LightType.Get() == FbxLight::ePoint )
- * {
- * pNode->SetPostRotation(FbxNode::eSourcePivot, FbxVector4(0,0,0,0));
- * }
- * }
- * // apply Pre rotations only on bones / end of chains
- * if( pNode->GetNodeAttribute() && pNode->GetNodeAttribute()->GetAttributeType() == FbxNodeAttribute::eSkeleton
- * || (pNode->GetMarker() && pNode->GetMarker()->GetType() == FbxMarker::eEffectorFK)
- * || (pNode->GetMarker() && pNode->GetMarker()->GetType() == FbxMarker::eEffectorIK) )
- * {
- * if( pNode->GetRotationActive() )
- * {
- * pNode->SetPreRotation(FbxNode::eDestinationPivot, pNode->GetPreRotation(FbxNode::eSourcePivot));
- * }
- *
- * // No pivots on bones
- * pNode->SetRotationPivot(FbxNode::eDestinationPivot, lZero);
- * pNode->SetScalingPivot(FbxNode::eDestinationPivot, lZero);
- * pNode->SetRotationOffset(FbxNode::eDestinationPivot,lZero);
- * pNode->SetScalingOffset(FbxNode::eDestinationPivot, lZero);
- * }
- * else
- * {
- * // any other type: no pre-rotation support but...
- * pNode->SetPreRotation(FbxNode::eDestinationPivot, lZero);
- *
- * // support for rotation and scaling pivots.
- * pNode->SetRotationPivot(FbxNode::eDestinationPivot, pNode->GetRotationPivot(FbxNode::eSourcePivot));
- * pNode->SetScalingPivot(FbxNode::eDestinationPivot, pNode->GetScalingPivot(FbxNode::eSourcePivot));
- * // Rotation and scaling offset are supported
- * pNode->SetRotationOffset(FbxNode::eDestinationPivot, pNode->GetRotationOffset(FbxNode::eSourcePivot));
- * pNode->SetScalingOffset(FbxNode::eDestinationPivot, pNode->GetScalingOffset(FbxNode::eSourcePivot));
- * //
- * // If we don't "support" scaling pivots, we can simply do:
- * // pNode->SetRotationPivot(FbxNode::eDestinationPivot, lZero);
- * // pNode->SetScalingPivot(FbxNode::eDestinationPivot, lZero);
- * }
- * \endcode
- *
- */
- //@{
- /** \enum EPivotSet Pivot context identifier.
- */
- enum EPivotSet
- {
- eSourcePivot, //!< The source pivot context.
- eDestinationPivot //!< The destination pivot context.
- };
- /** \enum EPivotState Pivot context state.
- */
- enum EPivotState
- {
- ePivotActive, //!< The pivot context with this state is affecting the node's transform computation.
- ePivotReference //!< The pivot context with this state is not used during the node transform computation but can be accessed for reference purposes.
- };
- /** Change the state of the pivot context.
- * \param pPivotSet Specify which pivot context is manipulated.
- * \param pPivotState The new state of the pivot context.
- */
- void SetPivotState(EPivotSet pPivotSet, EPivotState pPivotState);
- /** Get the pivot context state.
- * The returned value tells if this pivot context is used in the
- * evaluation of the node transform or not.
- * \param pPivotSet Specify which pivot context is queried.
- * \param pPivotState The current state of the pivot set.
- */
- void GetPivotState(EPivotSet pPivotSet, EPivotState& pPivotState) const;
- /** Set rotation space
- * Determine the rotation space (Euler or Spheric) and the rotation order.
- * \param pPivotSet Specify which pivot context is manipulated.
- * \param pRotationOrder The new value for the pivot rotation order.
- */
- void SetRotationOrder(EPivotSet pPivotSet, EFbxRotationOrder pRotationOrder);
- /** Get rotation order
- * \param pPivotSet Specify which pivot context is queried.
- * \param pRotationOrder The current value of the pivot rotation order.
- */
- void GetRotationOrder(EPivotSet pPivotSet, EFbxRotationOrder& pRotationOrder) const;
- /** Set rotation space for limit only.
- * \param pPivotSet Specify which pivot context is manipulated.
- * \param pUseForLimitOnly When set to \c true, the current rotation space
- * (set with SetRotationOrder) define the rotation space for
- * the limit only; leaving the rotation animation in
- * Euler XYZ space. When set to \c false, the current rotation
- * space defines the rotation space for both the limits and the
- * rotation animation data.
- */
- void SetUseRotationSpaceForLimitOnly(EPivotSet pPivotSet, bool pUseForLimitOnly);
- /** Get rotation space for limit only.
- * \param pPivotSet Specify which pivot context is queried.
- * \return The current rotation space limit flag value.
- */
- bool GetUseRotationSpaceForLimitOnly(EPivotSet pPivotSet) const;
- /** Set the RotationActive state.
- * \param pVal The new state of the property.
- * \remarks When this flag is set to false, the RotationOrder, the Pre/Post rotation values
- * and the rotation limits should be ignored.
- */
- void SetRotationActive(bool pVal);
- /** Get the RotationActive state.
- * \return The value of the RotationActive flag.
- */
- bool GetRotationActive() const;
- /** Specify which Quaternion interpolation mode is used on the pivot context.
- * \param pPivotSet Specify which pivot context is manipulated.
- * \param pQuatIterp The new value.
- * \remarks When the \e pPivotSet is eSourcePivot, this method also updates the value of the
- * QuaternionInterpolate property.
- */
- void SetQuaternionInterpolation(EPivotSet pPivotSet, EFbxQuatInterpMode pQuatIterp);
- /** Get the Quaternion interpolation mode of the pivot context.
- * \param pPivotSet Specify which pivot context is queried.
- * \return The current mode set on the pivot context.
- */
- EFbxQuatInterpMode GetQuaternionInterpolation(EPivotSet pPivotSet) const;
- /** Set the rotation stiffness.
- * The stiffness attribute is used by IK solvers to generate a resistance
- * to a joint motion. The higher the stiffness the less it will rotate.
- * Stiffness works in a relative sense: it determines the willingness of
- * this joint to rotate with respect to the other joint in the IK chain.
- * \param pRotationStiffness The rotation stiffness values are limited to
- * the range [0, 100].
- */
- void SetRotationStiffness(FbxVector4 pRotationStiffness);
- /** Get the rotation stiffness
- * \return The currently set rotation stiffness values.
- */
- FbxVector4 GetRotationStiffness() const;
- /** Set the minimum damp range angles.
- * This attributes apply resistance to a joint rotation as it approaches the
- * lower boundary of its rotation limits. This functionality allows joint
- * motion to slow down smoothly until the joint reaches its rotation limits
- * instead of stopping abruptly. The MinDampRange specifies when the
- * deceleration should start.
- * \param pMinDampRange Angle, in degrees, where deceleration should start
- */
- void SetMinDampRange(FbxVector4 pMinDampRange);
- /** Get the minimum damp range angles
- * \return The currently set minimum damp range angles.
- */
- FbxVector4 GetMinDampRange() const;
- /** Set the maximum damp range angles.
- * This attributes apply resistance to a joint rotation as it approaches the
- * upper boundary of its rotation limits. This functionality allows joint
- * motion to slow down smoothly until the joint reaches its rotation limits
- * instead of stopping abruptly. The MaxDampRange specifies when the
- * deceleration should start.
- * \param pMaxDampRange Angle, in degrees, where deceleration should start
- */
- void SetMaxDampRange(FbxVector4 pMaxDampRange);
- /** Get the maximum damp range angles
- * \return The currently set maximum damp range angles.
- */
- FbxVector4 GetMaxDampRange() const;
- /** Set the minimum damp strength.
- * This attributes apply resistance to a joint rotation as it approaches the
- * lower boundary of its rotation limits. This functionality allows joint
- * motion to slow down smoothly until the joint reaches its rotation limits
- * instead of stopping abruptly. The MinDampStrength defines the
- * rate of deceleration.
- * \param pMinDampStrength Values are limited to the range [0, 100].
- */
- void SetMinDampStrength(FbxVector4 pMinDampStrength);
- /** Get the minimum damp strength
- * \return The currently set minimum damp strength values.
- */
- FbxVector4 GetMinDampStrength() const;
- /** Set the maximum damp strength.
- * This attributes apply resistance to a joint rotation as it approaches the
- * upper boundary of its rotation limits. This functionality allows joint
- * motion to slow down smoothly until the joint reaches its rotation limits
- * instead of stopping abruptly. The MaxDampStrength defines the
- * rate of deceleration.
- * \param pMaxDampStrength Values are limited to the range [0, 100].
- */
- void SetMaxDampStrength(FbxVector4 pMaxDampStrength);
- /** Get the maximum damp strength
- * \return The currently set maximum damp strength values.
- */
- FbxVector4 GetMaxDampStrength() const;
- /** Set the preferred angle.
- * The preferredAngle attribute defines the initial joint configuration used
- * by a single chain IK solver to calculate the inverse kinematic solution.
- * \param pPreferedAngle Angle in degrees
- */
- void SetPreferedAngle(FbxVector4 pPreferedAngle);
- /** Get the preferred angle
- * \return The currently set preferred angle.
- */
- FbxVector4 GetPreferedAngle() const;
- /** Set a translation offset for the rotation pivot.
- * The translation offset is in coordinates relative to the node's origin.
- * \param pPivotSet Specify which pivot set to modify.
- * \param pVector The X,Y and Z translation values (the 4th component of the FbxVector4 is ignored).
- */
- void SetRotationOffset(EPivotSet pPivotSet, FbxVector4 pVector);
- /** Get the translation offset for the rotation pivot.
- * The translation offset is in coordinates relative to the node's origin.
- * \param pPivotSet Specify which pivot set to to query the value.
- * \return The X, Y and Z translation offset values (the 4th component of the FbxVector4 is always 1).
- */
- const FbxVector4& GetRotationOffset(EPivotSet pPivotSet) const;
- /** Set rotation pivot.
- * The rotation pivot is the center of rotation in coordinates relative to
- * the node's origin.
- * \param pPivotSet Specify which pivot set to modify.
- * \param pVector The new position of the rotation pivot (the 4th component of the FbxVector4 is ignored).
- */
- void SetRotationPivot(EPivotSet pPivotSet, FbxVector4 pVector);
- /** Get rotation pivot.
- * The rotation pivot is the center of rotation in coordinates relative to
- * the node's origin.
- * \param pPivotSet Specify which pivot set to query.
- * \return The current position of the rotation pivot (the 4th component of the FbxVector4 is always 1).
- */
- const FbxVector4& GetRotationPivot(EPivotSet pPivotSet) const;
- /** Set pre-rotation in Euler angles.
- * The pre-rotation is the rotation applied to the node before
- * rotation animation data.
- * \param pPivotSet Specify which pivot set to modify.
- * \param pVector The X,Y,Z rotation values to set (the 4th component of the FbxVector4 is ignored).
- */
- void SetPreRotation(EPivotSet pPivotSet, FbxVector4 pVector);
- /** Get pre-rotation in Euler angles.
- * The pre-rotation is the rotation applied to the node before
- * rotation animation data.
- * \param pPivotSet Specify which pivot set to query.
- * \return The X,Y and Z rotation values (the 4th component of the FbxVector4 is always 1).
- */
- const FbxVector4& GetPreRotation(EPivotSet pPivotSet) const;
- /** Set post-rotation in Euler angles.
- * The post-rotation is the rotation applied to the node after the
- * rotation animation data.
- * \param pPivotSet Specify which pivot set to modify.
- * \param pVector The X,Y,Z rotation values to set (the 4th component of the FbxVector4 is ignored).
- */
- void SetPostRotation(EPivotSet pPivotSet, FbxVector4 pVector);
- /** Get post-rotation in Euler angles.
- * The post-rotation is the rotation applied to the node after the
- * rotation animation data.
- * \param pPivotSet Specify which pivot set to query.
- * \return The X,Y and Z rotation values (the 4th component of the FbxVector4 is always 1).
- */
- const FbxVector4& GetPostRotation(EPivotSet pPivotSet) const;
- /** Set a translation offset for the scaling pivot.
- * The translation offset is in coordinates relative to the node's origin.
- * \param pPivotSet Specify which pivot set to modify.
- * \param pVector The X,Y and Z translation values (the 4th component of the FbxVector4 is ignored).
- */
- void SetScalingOffset(EPivotSet pPivotSet, FbxVector4 pVector);
- /** Get the translation offset for the scaling pivot.
- * The translation offset is in coordinates relative to the node's origin.
- * \param pPivotSet Specify which pivot set to query the value.
- * \return The X, Y and Z translation offset values (the 4th component of the FbxVector4 is always 1).
- */
- const FbxVector4& GetScalingOffset(EPivotSet pPivotSet) const;
- /** Set scaling pivot.
- * The scaling pivot is the center of scaling in coordinates relative to
- * the node's origin.
- * \param pPivotSet Specify which pivot set to modify.
- * \param pVector The new position of the scaling pivot (the 4th component of the FbxVector4 is ignored).
- */
- void SetScalingPivot(EPivotSet pPivotSet, FbxVector4 pVector);
- /** Get scaling pivot.
- * The scaling pivot is the center of scaling in coordinates relative to
- * the node's origin.
- * \param pPivotSet Specify which pivot set to query.
- * \return The current position of the rotation pivot (the 4th component of the FbxVector4 is always 1).
- */
- const FbxVector4& GetScalingPivot(EPivotSet pPivotSet) const;
- /** Set geometric translation
- * The geometric translation is a local translation that is applied
- * to a node attribute only. This translation is applied to the node attribute
- * after the node transformations. This translation is not inherited across the
- * node hierarchy.
- * \param pPivotSet Specify which pivot set to modify.
- * \param pVector The X, Y, and Z translation values (the 4th component of the FbxVector4 is ignored).
- */
- void SetGeometricTranslation(EPivotSet pPivotSet, FbxVector4 pVector);
- /** Get geometric translation
- * \param pPivotSet Specify which pivot set to query.
- * \return The current geometric translation (the 4th component of the FbxVector4 is always 1).
- */
- FbxVector4 GetGeometricTranslation(EPivotSet pPivotSet) const;
- /** Set geometric rotation
- * The geometric rotation is a local rotation that is applied
- * to a node attribute only. This rotation is applied to the node attribute
- * after the node transformations. This rotation is not inherited across the
- * node hierarchy.
- * \param pPivotSet Specify which pivot set to modify.
- * \param pVector The X,Y and Z rotation values (the 4th component of the FbxVector4 is ignored).
- */
- void SetGeometricRotation(EPivotSet pPivotSet, FbxVector4 pVector);
- /** Get geometric rotation
- * \param pPivotSet Specify which pivot set to query.
- * \return The current geometric rotation (the 4th component of the FbxVector4 is always 1).
- */
- FbxVector4 GetGeometricRotation(EPivotSet pPivotSet) const;
- /** Set geometric scaling
- * The geometric scaling is a local scaling that is applied
- * to a node attribute only. This scaling is applied to the node attribute
- * after the node transformations. This scaling is not inherited across the
- * node hierarchy.
- * \param pPivotSet Specify which pivot set to modify.
- * \param pVector The X,Y and Z scale values (the 4th component of the FbxVector4 is ignored).
- */
- void SetGeometricScaling(EPivotSet pPivotSet, FbxVector4 pVector);
- /** Get geometric scaling
- * \param pPivotSet Specify which pivot set to query.
- * \return The current geometric scaling (the 4th component of the FbxVector4 is always 1).
- */
- FbxVector4 GetGeometricScaling(EPivotSet pPivotSet) const;
- /** Reset a pivot set to the default pivot context.
- * If the node has a geometry, reset the geometry's pivot to the identity matrix.
- * \param pPivotSet Pivot set to reset.
- * \remarks The default pivot context is a context with all the vector attributes
- * set to (0,0,0) except the GeometricScaling attribute that is reset to (1,1,1).
- */
- void ResetPivotSet( FbxNode::EPivotSet pPivotSet );
- /** This version is an improved version of the ConvertPivotAnimation(). It fully supports all the
- * attributes defined in the pivot sets and can process animation data defined on different animation
- * stack.
- * \param pAnimStack The animation stack on which the conversion will take place. If equals \c NULL, convert the animation on all the animation stacks.
- * \param pConversionTarget If set to EPivotSet::eDestinationPivot,
- * convert animation data from the EPivotSet::eSourcePivot pivot context
- * to the EPivotSet::eDestinationPivot pivot context. Otherwise, the
- * conversion is computed the other way around.
- * \param pFrameRate Resampling frame rate in frames per second.
- * \param pKeyReduce Apply or skip key reducing filter.
- * \remarks Due to the intrinsic properties of the mathematical operations performed,
- * sometimes, it is necessary to resample animation curves to maintain the accurate
- * conversion. When this resampling is required, the method will use the \e pFrameRate
- * value to specify the number of samples. To avoid a huge number of keys in the animation
- * curves, a constant key reducer filter (FbxKFCurveFilterConstantKeyReducer) is
- * automatically applied to all the affected curves to remove as much consecutive keys
- * that have the same value. This filter is private and its settings cannot be changed.
- * It is possible that, after the filtering pass, the animations curves do not contain keys
- * anymore. This is a normal result and does not affect the overall results.
- * \note Although it is possible to call this method several times with a different
- * AnimStack name, users must be aware that some pivot computation can irreversibly
- * modify the geometric nodes with a cumulative effect of the \e GeometricTranslation,
- * \e GeometricRotation and \e GeometricScaling which will produce undesirable results. It is recommended
- * to call ConvertPivotAnimationRecursive with \p pAnimStackName = NULL and let the method convert
- * the animation on all the Anim stacks at once.
- * In the case when there are no geometric nodes in the scene tree, specifying the animation stack
- * is safe and somewhat faster.
- * If any transform limits are active, they are applied during the conversion and disabled.
- */
- void ConvertPivotAnimationRecursive(FbxAnimStack* pAnimStack, EPivotSet pConversionTarget, double pFrameRate, bool pKeyReduce=true);
- /** Reset all the pivot sets to the default pivot context and convert the animation.
- * \param pFrameRate Resampling frame rate in frames per second.
- * \param pKeyReduce Apply or skip key reducing filter.
- * \param pToNodeCenter: Reset pivots to node center if \c true, or retain pivot places if \c false.
- * \param pForceResetLimits If \c true, this flag will reset all the Translation, Rotation and Scaling
- * limits and clears the enabled flags.
- * \remarks The resulting animation will be visually equivalent and all the pivots will be cleared.
- * The conversion is performed on all animation stacks.
- * \remarks Will recursively convert the animation of all the children nodes.
- * \remarks The \e pForceResetLimits flag has a destructive behavior and should be used only in very
- * limited cases where the values of the limits are not required after the call to this method.
- * \remarks Currently, this function just works under RSrs inherit type if pToNodeCenter is set to \c false.
- */
- void ResetPivotSetAndConvertAnimation(double pFrameRate=30.0, bool pKeyReduce=false, bool pToNodeCenter=true, bool pForceResetLimits=false);
- /** Set rotation pivot as node center recursively
- * \param pParentGeometricOffset Offset vector to be applied.
- */
- void SetRotationPivotAsCenterRecursive(FbxVector4 pParentGeometricOffset=FbxVector4());
- //@}
- /**
- * \name Node Evaluation Functions
- */
- //@{
- /** Retrieve the proper animation evaluator to use for this node.
- * \return If the object has no scene, returns the default evaluator, otherwise the object's scene evaluator. */
- FbxAnimEvaluator* GetAnimationEvaluator() const;
- /** Returns this node's global transformation matrix at the specified time. The node's translation, rotation and scaling limits are taken into consideration.
- * \param pTime The time used for evaluate. If FBXSDK_TIME_INFINITE is used, this returns the default value, without animation curves evaluation.
- * \param pPivotSet The pivot set to take into account
- * \param pApplyTarget Applies the necessary transform to align into the target node
- * \param pForceEval Force the evaluator to refresh the evaluation state cache even if its already up-to-date.
- * \return The resulting global transform of the specified node at the specified time.
- * \remarks This function is the equivalent of calling Scene->GetEvaluator()->GetNodeGlobalTransform().
- */
- FbxAMatrix& EvaluateGlobalTransform(FbxTime pTime=FBXSDK_TIME_INFINITE, FbxNode::EPivotSet pPivotSet=FbxNode::eSourcePivot, bool pApplyTarget=false, bool pForceEval=false);
- /** Returns this node's local transformation matrix at the specified time. The node's translation, rotation and scaling limits are taken into consideration.
- * \param pTime The time used for evaluate. If FBXSDK_TIME_INFINITE is used, this returns the default value, without animation curves evaluation.
- * \param pPivotSet The pivot set to take into account
- * \param pApplyTarget Applies the necessary transform to align into the target node
- * \param pForceEval Force the evaluator to refresh the evaluation state cache even if its already up-to-date.
- * \return The resulting local transform of the specified node for the specified time.
- * \remarks The local transform matrix is calculated in this way: ParentGlobal.Inverse * Global, all transforms such as pre/post rotation are taken into consideration.
- * This will return a different value than LclTranslation, LclRotation and LclScaling at the specified time. To evaluate these properties separately
- * without taking pre/post rotation, pivots and offsets into consideration, please use GetNodeLocalTranslation(), GetNodeLocalRotation() and GetNodeLocalScaling().
- * This function is the equivalent of calling Scene->GetEvaluator()->GetNodeLocalTransform().
- */
- FbxAMatrix& EvaluateLocalTransform(FbxTime pTime=FBXSDK_TIME_INFINITE, FbxNode::EPivotSet pPivotSet=FbxNode::eSourcePivot, bool pApplyTarget=false, bool pForceEval=false);
- /** Returns this node's LclTranslation property at the specified time.
- * No pivot, offsets, or any other transform is taken into consideration. The translation limit is applied.
- * \param pTime The time used for evaluate. If FBXSDK_TIME_INFINITE is used, this returns the default value, without animation curves evaluation.
- * \param pPivotSet The pivot set to take into account
- * \param pApplyTarget Applies the necessary transform to align into the target node
- * \param pForceEval Force the evaluator to refresh the evaluation state cache even if its already up-to-date.
- * \return The resulting value of LclTranslation property of the specified node at the specified time.
- * \remarks This function is the equivalent of calling Scene->GetEvaluator()->GetNodeLocalTranslation().
- */
- FbxVector4& EvaluateLocalTranslation(FbxTime pTime=FBXSDK_TIME_INFINITE, FbxNode::EPivotSet pPivotSet=FbxNode::eSourcePivot, bool pApplyTarget=false, bool pForceEval=false);
- /** Returns this node's LclRotation property at the specified time.
- * No pre/post rotation, rotation pivot, rotation offset or any other transform is taken into consideration. The rotation limit is applied.
- * \param pTime The time used for evaluate. If FBXSDK_TIME_INFINITE is used, this returns the default value, without animation curves evaluation.
- * \param pPivotSet The pivot set to take into account
- * \param pApplyTarget Applies the necessary transform to align into the target node
- * \param pForceEval Force the evaluator to refresh the evaluation state cache even if its already up-to-date.
- * \return The resulting value of LclRotation property of the specified node at the specified time.
- * \remarks This function is the equivalent of calling Scene->GetEvaluator()->GetNodeLocalRotation().
- */
- FbxVector4& EvaluateLocalRotation(FbxTime pTime=FBXSDK_TIME_INFINITE, FbxNode::EPivotSet pPivotSet=FbxNode::eSourcePivot, bool pApplyTarget=false, bool pForceEval=false);
- /** Returns this node's LclScaling property at the specified time.
- * No scaling pivot, scaling offset or any other transform is taken into consideration. The scaling limit is applied.
- * \param pTime The time used for evaluate. If FBXSDK_TIME_INFINITE is used, this returns the default value, without animation curves evaluation.
- * \param pPivotSet The pivot set to take into account
- * \param pApplyTarget Applies the necessary transform to align into the target node
- * \param pForceEval Force the evaluator to refresh the evaluation state cache even if its already up-to-date.
- * \return The resulting value of LclScaling property of the specified node at the specified time.
- * \remarks This function is the equivalent of calling Scene->GetEvaluator()->GetNodeLocalScaling().
- */
- FbxVector4& EvaluateLocalScaling(FbxTime pTime=FBXSDK_TIME_INFINITE, FbxNode::EPivotSet pPivotSet=FbxNode::eSourcePivot, bool pApplyTarget=false, bool pForceEval=false);
- /** Compute the node's bounding box and its center in global coordinates.
- * \param pBBoxMin The minimum value of the bounding box upon successful return.
- * \param pBBoxMax The maximum value of the bounding box upon successful return.
- * \param pBBoxCenter The center value of the bounding box upon successful return.
- * \param pTime If different from FBXSDK_TIME_INFINITE, time used to compute the bounding box for deformed geometry.
- * \return \c true if successful, otherwise \c false.
- * \remark If geometry have been unloaded from memory, their bounding box cannot be calculated and will use any value set previously. */
- bool EvaluateGlobalBoundingBoxMinMaxCenter(FbxVector4& pBBoxMin, FbxVector4& pBBoxMax, FbxVector4& pBBoxCenter, const FbxTime& pTime=FBXSDK_TIME_INFINITE);
- /** Compute closest ray intersection point with mesh attributes of this node (triangle meshes only!).
- * \param pOut The closest intersection point from pRayOrigin location in pRayDir direction. Variable is unchanged if return value is \c false.
- * \param pRayOrigin The origin location to cast the ray from.
- * \param pRayDir The direction the cast ray to test mesh triangles from.
- * \param pCulling If \c true, only test triangles that are front facing, otherwise test both sides.
- * \param pTime The time to use to evaluate mesh deformations.
- * \return \c true if a triangle intersect with the ray, otherwise \c false.
- * \remark This function will automatically fail if the node's meshes are not triangulated. */
- bool EvaluateRayIntersectionPoint(FbxVector4& pOut, const FbxVector4& pRayOrigin, const FbxVector4& pRayDir, bool pCulling=false, const FbxTime& pTime=FBXSDK_TIME_INFINITE);
- //@}
- /**
- * \name Character Link
- */
- //@{
- /** Get number of character links.
- * \return The number of character links.
- */
- int GetCharacterLinkCount() const;
- /** Get character link at given index.
- * \param pIndex Index of character link.
- * \param pCharacter Pointer to receive linked character if function succeeds.
- * \param pCharacterLinkType Pointer to receive character link type if function succeeds,
- * cast to \c FbxCharacterLink::Type.
- * \param pNodeId Pointer to receive the node ID if function succeeds. This ID should be casted
- * to \c FbxCharacter::ENodeId type when the character link type is \c eCharacterLink or
- * \c eControlSetLink else to the \c FbxEffector::ENodeId type if the character link type is
- * \c eControlSetEffector or \c eControlSetEffectorAux.
- * \param pNodeSubId For internal use.
- * \return \c false if the index is out of range or any of the pointer arguments is NULL.
- */
- bool GetCharacterLink(int pIndex, FbxCharacter** pCharacter, int* pCharacterLinkType, int* pNodeId, int* pNodeSubId);
- /** Looks if the given character link exists on this node.
- * \param pCharacter Character searched.
- * \param pCharacterLinkType Character link type searched. Its value must be one of
- * the \c FbxCharacterLink::Type symbols..
- * \param pNodeId Node ID searched. If \e pCharacterLinkType is \c eCharacterLink or \c eControlSetLink
- * the \e pNodeId value is casted to the \c FbxCharacter::ENodeId type. If the \e pCharacterLinkType
- * is \c eControlSetEffector or \c eControlSetEffectorAux then the \e pNodeId is casted to the
- * \c FbxEffector::ENodeId type.
- * \param pNodeSubId For internal use.
- * \return Index of found character link if it exists, -1 otherwise.
- */
- int FindCharacterLink(FbxCharacter* pCharacter, int pCharacterLinkType, int pNodeId, int pNodeSubId) const;
- //@}
- /** Find out start and end time of the animation curves for this node (and its children).
- * \param pInterval This node's animation interval.
- * \param pAnimStack Animation stack where to retrieve animation curves.
- * \param pAnimLayerId Specific animation layer on the animStack to use.
- * \return \c true if the node (or its children) is animated, \c false otherwise.
- * \remarks If pAnimStack is left NULL, the function will try to get the first AnimStack that is connected
- * to the scene. \e pAnimLayerId represent the index of the connection. For example, the call:
- * \code
- * lNode->GetAnimationInterval(span, myStack, 3);
- * \endcode
- * will scan all the animation curves of this node, and it's children, that are defined on the third
- * animation layer of \c myStack.
- */
- bool GetAnimationInterval(FbxTimeSpan& pInterval, FbxAnimStack* pAnimStack=NULL, int pAnimLayerId=0);
- /**
- * \name Material Management
- */
- //@{
- /** Add a material to this node.
- * \param pMaterial The material to add.
- * \return non-negative index of added material, or -1 on error.
- */
- int AddMaterial(FbxSurfaceMaterial* pMaterial);
- /** Remove a material from this node.
- * \param pMaterial The material to remove.
- * \return true on success, false otherwise
- */
- bool RemoveMaterial(FbxSurfaceMaterial* pMaterial);
- /**
- * \return The number of materials applied to this node.
- * \remarks If this node has an instanced node attribute, it is possible
- * to have a material applied to this node more than once. The material
- * count may not reflect the distinct material count.
- */
- int GetMaterialCount() const;
- /** Access a material on this node.
- * \param pIndex Valid range is [0, GetMaterialCount() - 1]
- * \return The pIndex-th material, or NULL if pIndex is invalid.
- */
- FbxSurfaceMaterial* GetMaterial(int pIndex) const;
- /** Remove all materials applied to this node.
- */
- void RemoveAllMaterials();
- /** Find an applied material with the given name.
- * \param pName The requested name
- * \return an index to a material, or -1 if no applied material
- * has the requested name.
- */
- int GetMaterialIndex(const char* pName) const;
- //@}
- /**
- * \name Public and fast access Properties
- */
- //@{
- /** This property contains the translation information of the node
- *
- * To access this property do: LclTranslation.Get().
- * To set this property do: LclTranslation.Set(FbxDouble3).
- *
- * Default value is 0.,0.,0.
- */
- FbxPropertyT<FbxDouble3> LclTranslation;
- /** This property contains the rotation information of the node
- *
- * To access this property do: LclRotation.Get().
- * To set this property do: LclRotation.Set(FbxDouble3).
- *
- * Default value is 0.,0.,0.
- */
- FbxPropertyT<FbxDouble3> LclRotation;
- /** This property contains the scaling information of the node
- *
- * To access this property do: LclScaling.Get().
- * To set this property do: LclScaling.Set(FbxDouble3).
- *
- * Default value is 1.,1.,1.
- */
- FbxPropertyT<FbxDouble3> LclScaling;
- /** This property contains the visibility information of the node.
- * The assumed behavior of this property is to affect the visibility of the node, all the
- * nodes attributes connected to it as well as all its descendants. This property can be
- * animated.
- *
- * To access this property do: Visibility.Get().
- * To set this property do: Visibility.Set(FbxDouble).
- *
- * Default value is 1.
- * \remarks \li This property holds values ranging from 0.0 to 1.0 where the value 0.0 means
- * a totally invisible object, the value 1.0, a full visible object and anything inbetween, a
- * percentage degree of visibility.\n
- *
- * \li Since not all the applications may support a degree of visibility, it is agreed that
- * a value of 0.0 means invisible and anything else means visible.
- *
- * \see Show property.
- */
- FbxPropertyT<FbxDouble> Visibility;
- /** This property contains the visibility inheritance flag that allow applications to modify
- * the Visibility property interpretation. By default, this value is set to \c true because it is
- * assumed (as explained in the Visibility property description) that the node visibility is inherited
- * from its parent. In other words, applications should always process the Visibility property of the
- * node and, depending on its value, decide whether or not the node has to be displayed. After
- * this first assessment, check the node VisibilityInheritance flag. If its value is set to \c false then
- * move to the next object, else use the parent's Visibility value and modify this node display state
- * by performing the logical AND operation between this node Visibility property and its parent's.
- *
- * To access this property do: VisibilityInheritance.Get().
- * To set this property do: VisibilityInheritance.Set(FbxBool).
- *
- * Default value is \c true.
- * \remarks This property is non-animatable and is not used inside the FBX SDK but it is guaranteed
- * to exist in FBX files with version 7.2 and above.
- * \see Visibility property.
- */
- FbxPropertyT<FbxBool> VisibilityInheritance;
- /** This property contains the quaternion interpolate flag of the node
- *
- * To access this property do: QuaternionInterpolate.Get().
- * To set this property do: QuaternionInterpolate.Set(EFbxQuatInterpMode).
- *
- * Default value is eQuatInterpOff.
- */
- FbxPropertyT<EFbxQuatInterpMode> QuaternionInterpolate;
- /** This property contains the rotation offset information of the node
- *
- * To access this property do: RotationOffset.Get().
- * To set this property do: RotationOffset.Set(FbxDouble3).
- *
- * Default value is 0.,0.,0.
- */
- FbxPropertyT<FbxDouble3> RotationOffset;
- /** This property contains the rotation pivot information of the node
- *
- * To access this property do: RotationPivot.Get().
- * To set this property do: RotationPivot.Set(FbxDouble3).
- *
- * Default value is 0.,0.,0.
- */
- FbxPropertyT<FbxDouble3> RotationPivot;
- /** This property contains the scaling offset information of the node
- *
- * To access this property do: ScalingOffset.Get().
- * To set this property do: ScalingOffset.Set(FbxDouble3).
- *
- * Default value is 0.,0.,0.
- */
- FbxPropertyT<FbxDouble3> ScalingOffset;
- /** This property contains the scaling pivot information of the node
- *
- * To access this property do: ScalingPivot.Get().
- * To set this property do: ScalingPivot.Set(FbxDouble3).
- *
- * Default value is 0.,0.,0.
- */
- FbxPropertyT<FbxDouble3> ScalingPivot;
- /** This property enables or disables the limit on translation.
- * When set to \c false the object can translate in any direction without limitations.
- * Else the
- * \ref TranslationMinX, \ref TranslationMinY, \ref TranslationMinZ,
- * \ref TranslationMaxX, \ref TranslationMaxY and \ref TranslationMaxZ flags are used to
- * limit the translation on each individual axis.
- *
- * To access this property do: TranslationActive.Get().
- * To set this property do: TranslationActive.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> TranslationActive;
- /** This property sets the minimum translation values the object can occupy on each individual axis.
- *
- * To access this property do: TranslationMin.Get().
- * To set this property do: TranslationMin.Set(FbxDouble3).
- * Default value is 0.,0.,0.
- *
- */
- FbxPropertyT<FbxDouble3> TranslationMin;
- /** This property sets the maximum translation values the object can occupy on each individual axis.
- *
- * To access this property do: TranslationMax.Get().
- * To set this property do: TranslationMax.Set(FbxDouble3).
- * Default value is 0.,0.,0.
- *
- */
- FbxPropertyT<FbxDouble3> TranslationMax;
- /** This property enables or disables the limit on translation X.
- * When set to \c true, the object translation is constrained by the value of \ref TranslationMin.
- *
- * To access this property do: TranslationMinX.Get().
- * To set this property do: TranslationMinX.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> TranslationMinX;
- /** This property enables or disables the limit on translation Y.
- * When set to \c true, the object translation is constrained by the value of \ref TranslationMin.
- *
- * To access this property do: TranslationMinY.Get().
- * To set this property do: TranslationMinY.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> TranslationMinY;
-
- /** This property enables or disables the limit on translation Z.
- * When set to \c true, the object translation is constrained by the value of \ref TranslationMin.
- *
- * To access this property do: TranslationMinZ.Get().
- * To set this property do: TranslationMinZ.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> TranslationMinZ;
- /** This property enables or disables the limit on translation X.
- * When set to \c true, the object translation is constrained by the value of \ref TranslationMax.
- *
- * To access this property do: TranslationMaxX.Get().
- * To set this property do: TranslationMaxX.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> TranslationMaxX;
- /** This property enables or disables the limit on translation Y.
- * When set to \c true, the object translation is constrained by the value of \ref TranslationMax.
- *
- * To access this property do: TranslationMaxY.Get().
- * To set this property do: TranslationMaxY.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> TranslationMaxY;
- /** This property enables or disables the limit on translation Z.
- * When set to \c true, the object translation is constrained by the value of \ref TranslationMax.
- *
- * To access this property do: TranslationMaxZ.Get().
- * To set this property do: TranslationMaxZ.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> TranslationMaxZ;
- /** This property contains the rotation order information of the node
- *
- * To access this property do: RotationOrder.Get().
- * To set this property do: RotationOrder.Set(EFbxRotationOrder).
- * Default value is eEulerXYZ.
- *
- */
- FbxPropertyT<EFbxRotationOrder> RotationOrder;
- /** This property contains the rotation space for limit only flag of the node.
- * When set to \c true, the Rotation space is applied only on the limit data (provided the \ref RotationActive is
- * also \c true).
- *
- * To access this property do: RotationSpaceForLimitOnly.Get().
- * To set this property do: RotationSpaceForLimitOnly.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> RotationSpaceForLimitOnly;
- /** This property contains the x value of the rotation stiffness of the node
- *
- * To access this property do: RotationStiffnessX.Get().
- * To set this property do: RotationStiffnessX.Set(FbxDouble).
- *
- * Default value is 0.
- */
- FbxPropertyT<FbxDouble> RotationStiffnessX;
- /** This property contains the y value of the rotation stiffness of the node
- *
- * To access this property do: RotationStiffnessY.Get().
- * To set this property do: RotationStiffnessY.Set(FbxDouble).
- *
- * Default value is 0.
- */
- FbxPropertyT<FbxDouble> RotationStiffnessY;
- /** This property contains the z value of the rotation stiffness of the node
- *
- * To access this property do: RotationStiffnessZ.Get().
- * To set this property do: RotationStiffnessZ.Set(FbxDouble).
- *
- * Default value is 0.
- */
- FbxPropertyT<FbxDouble> RotationStiffnessZ;
- /** This property contains axis length information of the node
- *
- * To access this property do: AxisLen.Get().
- * To set this property do: AxisLen.Set(FbxDouble).
- *
- * Default value is 10.
- */
- FbxPropertyT<FbxDouble> AxisLen;
-
- /** This property contains pre-rotation information of the node
- *
- * To access this property do: PreRotation.Get().
- * To set this property do: PreRotation.Set(FbxDouble3).
- *
- * Default value is 0.,0.,0.
- */
- FbxPropertyT<FbxDouble3> PreRotation;
- /** This property contains post-rotation information of the node
- *
- * To access this property do: PostRotation.Get().
- * To set this property do: PostRotation.Set(FbxDouble3).
- *
- * Default value is 0.,0.,0.
- */
- FbxPropertyT<FbxDouble3> PostRotation;
- /** This property enables or disables the limit on rotation.
- * When set to \c false the object can rotate in any direction without limitations.
- * Else the
- * \ref RotationMinX, \ref RotationMinY, \ref RotationMinZ,
- * \ref RotationMaxX, \ref RotationMaxY and \ref RotationMaxZ flags are used to
- * limit the rotation on each individual axis.
- * \remarks The PreRotation value is applied before the limit, while the PostRotation is applied
- * after the limit.
- *
- * To access this property do: RotationActive.Get().
- * To set this property do: RotationActive.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> RotationActive;
- /** This property sets the minimum rotation values the object can occupy on each individual axis.
- *
- * To access this property do: RotationMin.Get().
- * To set this property do: RotationMin.Set(FbxDouble3).
- *
- * Default value is 0.,0.,0.
- */
- FbxPropertyT<FbxDouble3> RotationMin;
- /** This property sets the maximum rotation values the object can occupy on each individual axis.
- *
- * To access this property do: RotationMax.Get().
- * To set this property do: RotationMax.Set(FbxDouble3).
- *
- * Default value is 0.,0.,0.
- */
- FbxPropertyT<FbxDouble3> RotationMax;
- /** This property enables or disables the limit on rotation X.
- * When set to \c true, the object rotation is constrained by the value of \ref RotationMin.
- *
- * To access this property do: RotationMinX.Get().
- * To set this property do: RotationMinX.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> RotationMinX;
- /** This property enables or disables the limit on rotation Y.
- * When set to \c true, the object rotation is constrained by the value of \ref RotationMin.
- *
- * To access this property do: RotationMinY.Get().
- * To set this property do: RotationMinY.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> RotationMinY;
- /** This property enables or disables the limit on rotation Z.
- * When set to \c true, the object rotation is constrained by the value of \ref RotationMin.
- *
- * To access this property do: RotationMinZ.Get().
- * To set this property do: RotationMinZ.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> RotationMinZ;
- /** This property enables or disables the limit on rotation X.
- * When set to \c true, the object rotation is constrained by the value of \ref RotationMax.
- *
- * To access this property do: RotationMaxX.Get().
- * To set this property do: RotationMaxX.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> RotationMaxX;
- /** This property enables or disables the limit on rotation Y.
- * When set to \c true, the object rotation is constrained by the value of \ref RotationMax.
- *
- * To access this property do: RotationMaxY.Get().
- * To set this property do: RotationMaxY.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> RotationMaxY;
- /** This property enables or disables the limit on rotation Z.
- * When set to \c true, the object rotation is constrained by the value of \ref RotationMax.
- *
- * To access this property do: RotationMaxZ.Get().
- * To set this property do: RotationMaxZ.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> RotationMaxZ;
- /** This property contains inherit type information of the node
- *
- * To access this property do: InheritType.Get().
- * To set this property do: InheritType.Set(FbxTransform::EInheritType).
- *
- * Default value is eInheritRrSs.
- */
- FbxPropertyT<FbxTransform::EInheritType> InheritType;
- /** This property enables or disables the limit on scaling.
- * When set to \c false the object can scale in any direction without limitations.
- * Else the
- * \ref ScalingMinX, \ref ScalingMinY, \ref ScalingMinZ,
- * \ref ScalingMaxX, \ref ScalingMaxY and \ref ScalingMaxZ flags are used to
- * limit the scaling on each individual axis.
- *
- * To access this property do: ScalingActive.Get().
- * To set this property do: ScalingActive.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> ScalingActive;
- /** This property sets the minimum scaling values the object can occupy on each individual axis.
- *
- * To access this property do: ScalingMin.Get().
- * To set this property do: ScalingMin.Set(FbxDouble3).
- *
- * Default value is 0.,0.,0.
- */
- FbxPropertyT<FbxDouble3> ScalingMin;
- /** This property sets the maximum scaling values the object can occupy on each individual axis.
- *
- * To access this property do: ScalingMax.Get().
- * To set this property do: ScalingMax.Set(FbxDouble3).
- *
- * Default value is 1.,1.,1.
- */
- FbxPropertyT<FbxDouble3> ScalingMax;
- /** This property activates or disables the limit on scaling X. When active, the object scaling
- * is constrained by the value of \ref ScalingMin.
- *
- * To access this property do: ScalingMinX.Get().
- * To set this property do: ScalingMinX.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> ScalingMinX;
- /** This property enables or disables the limit on scaling Y.
- * When set to \c true, the object scaling is constrained by the value of \ref ScalingMin.
- *
- * To access this property do: ScalingMinY.Get().
- * To set this property do: ScalingMinY.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> ScalingMinY;
- /** This property enables or disables the limit on scaling Z.
- * When set to \c true, the object scaling is constrained by the value of \ref ScalingMin.
- *
- * To access this property do: ScalingMinZ.Get().
- * To set this property do: ScalingMinZ.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> ScalingMinZ;
- /** This property enables or disables the limit on scaling X.
- * When set to \c true, the object scaling is constrained by the value of \ref ScalingMax.
- *
- * To access this property do: ScalingMaxX.Get().
- * To set this property do: ScalingMaxX.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> ScalingMaxX;
- /** This property enables or disables the limit on scaling Y.
- * When set to \c true, the object scaling is constrained by the value of \ref ScalingMax.
- *
- * To access this property do: ScalingMaxY.Get().
- * To set this property do: ScalingMaxY.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> ScalingMaxY;
- /** This property enables or disables the limit on scaling Z.
- * When set to \c true, the object scaling is constrained by the value of \ref ScalingMax.
- *
- * To access this property do: ScalingMaxZ.Get().
- * To set this property do: ScalingMaxZ.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> ScalingMaxZ;
- /** This property contains geometric translation information of the node
- *
- * To access this property do: GeometricTranslation.Get().
- * To set this property do: GeometricTranslation.Set(FbxDouble3).
- *
- * Default value is 0.,0.,0.
- */
- FbxPropertyT<FbxDouble3> GeometricTranslation;
- /** This property contains geometric rotation information of the node
- *
- * To access this property do: GeometricRotation.Get().
- * To set this property do: GeometricRotation.Set(FbxDouble3).
- *
- * Default value is 0.,0.,0.
- */
- FbxPropertyT<FbxDouble3> GeometricRotation;
-
- /** This property contains geometric scaling information of the node
- *
- * To access this property do: GeometricScaling.Get().
- * To set this property do: GeometricScaling.Set(FbxDouble3).
- *
- * Default value is 1.,1.,1.
- */
- FbxPropertyT<FbxDouble3> GeometricScaling;
- // IK Settings
- //////////////////////////////////////////////////////////
- /** This property contains the x component of the minimum damp range angles of the node
- *
- * To access this property do: MinDampRangeX.Get().
- * To set this property do: MinDampRangeX.Set(FbxDouble).
- *
- * Default value is 0.
- */
- FbxPropertyT<FbxDouble> MinDampRangeX;
- /** This property contains the y component of the minimum damp range angles of the node
- *
- * To access this property do: MinDampRangeY.Get().
- * To set this property do: MinDampRangeY.Set(FbxDouble).
- *
- * Default value is 0.
- */
- FbxPropertyT<FbxDouble> MinDampRangeY;
- /** This property contains the z component of the minimum damp range angles of the node
- *
- * To access this property do: MinDampRangeZ.Get().
- * To set this property do: MinDampRangeZ.Set(FbxDouble).
- *
- * Default value is 0.
- */
- FbxPropertyT<FbxDouble> MinDampRangeZ;
- /** This property contains the x component of the maximum damp range angles of the node
- *
- * To access this property do: MaxDampRangeX.Get().
- * To set this property do: MaxDampRangeX.Set(FbxDouble).
- *
- * Default value is 0.
- */
- FbxPropertyT<FbxDouble> MaxDampRangeX;
- /** This property contains the y component of the maximum damp range angles of the node
- *
- * To access this property do: MaxDampRangeY.Get().
- * To set this property do: MaxDampRangeY.Set(FbxDouble).
- *
- * Default value is 0.
- */
- FbxPropertyT<FbxDouble> MaxDampRangeY;
- /** This property contains the z component of the maximum damp range angles of the node
- *
- * To access this property do: MaxDampRangeZ.Get().
- * To set this property do: MaxDampRangeZ.Set(FbxDouble).
- *
- * Default value is 0.
- */
- FbxPropertyT<FbxDouble> MaxDampRangeZ;
- /** This property contains the x component of the minimum damp strength of the node
- *
- * To access this property do: MinDampStrengthX.Get().
- * To set this property do: MinDampStrengthX.Set(FbxDouble).
- *
- * Default value is 0.
- */
- FbxPropertyT<FbxDouble> MinDampStrengthX;
- /** This property contains the y component of the minimum damp strength of the node
- *
- * To access this property do: MinDampStrengthY.Get().
- * To set this property do: MinDampStrengthY.Set(FbxDouble).
- *
- * Default value is 0.
- */
- FbxPropertyT<FbxDouble> MinDampStrengthY;
- /** This property contains the z component of the minimum damp strength of the node
- *
- * To access this property do: MinDampStrengthZ.Get().
- * To set this property do: MinDampStrengthZ.Set(FbxDouble).
- *
- * Default value is 0.
- */
- FbxPropertyT<FbxDouble> MinDampStrengthZ;
- /** This property contains the x component of the maximum damp strength of the node
- *
- * To access this property do: MaxDampStrengthX.Get().
- * To set this property do: MaxDampStrengthX.Set(FbxDouble).
- *
- * Default value is 0.
- */
- FbxPropertyT<FbxDouble> MaxDampStrengthX;
- /** This property contains the y component of the maximum damp strength of the node
- *
- * To access this property do: MaxDampStrengthY.Get().
- * To set this property do: MaxDampStrengthY.Set(FbxDouble).
- *
- * Default value is 0.
- */
- FbxPropertyT<FbxDouble> MaxDampStrengthY;
- /** This property contains the z component of the maximum damp strength of the node
- *
- * To access this property do: MaxDampStrengthZ.Get().
- * To set this property do: MaxDampStrengthZ.Set(FbxDouble).
- *
- * Default value is 0.
- */
- FbxPropertyT<FbxDouble> MaxDampStrengthZ;
- /** This property contains the x component of the preferred angle of the node
- *
- * To access this property do: PreferedAngleX.Get().
- * To set this property do: PreferedAngleX.Set(FbxDouble).
- *
- * Default value is 0.
- */
- FbxPropertyT<FbxDouble> PreferedAngleX;
- /** This property contains the y component of the preferred angle of the node
- *
- * To access this property do: PreferedAngleY.Get().
- * To set this property do: PreferedAngleY.Set(FbxDouble).
- *
- * Default value is 0.
- */
- FbxPropertyT<FbxDouble> PreferedAngleY;
- /** This property contains the z component of the preferred angle of the node
- *
- * To access this property do: PreferedAngleZ.Get().
- * To set this property do: PreferedAngleZ.Set(FbxDouble).
- *
- * Default value is 0.
- */
- FbxPropertyT<FbxDouble> PreferedAngleZ;
- ///////////////////////////////////////////////////////
- /** This property contains lookat property of the node
- *
- * To access this property do: LookAtProperty.Get().
- * To set this property do: LookAtProperty.Set(FbxReference).
- *
- */
- FbxPropertyT<FbxReference> LookAtProperty;
- /** This property contains the up vector property of the node
- *
- * To access this property do: UpVectorProperty.Get().
- * To set this property do: UpVectorProperty.Set(FbxReference).
- *
- */
- FbxPropertyT<FbxReference> UpVectorProperty;
- /** This property contains the show information of the node.
- * As opposed to the Visibility property, this one cannot be animated. The assumed behavior of
- * this property is to represent the show/hide state of all the nodes attributes connected to this
- * node only.
- *
- * To access this property do: Show.Get().
- * To set this property do: Show.Set(FbxBool).
- *
- * Default value is true.
- *
- * \remarks \li Because node attributes can be shared by multiple nodes (instances), the FBX SDK provides an utility
- * function FbxScene::SyncShowPropertyForInstance() to propagates the same Show value across all the nodes
- * referencing the node attribute. The applied logic is that as soon as one of these nodes has the Show
- * property set to \c false, all will be set to \c false (basically it is an AND operation on all the
- * Show flags).
- *
- * \li Depending on the support of the Show and Visibility properties that applications will implement, there
- * may be conflicts with these two states. In this case, it is suggested that the Visibility property
- * always overrides the Show.
- *
- * \see Visibility property.
- */
- FbxPropertyT<FbxBool> Show;
- /** This property contains negative percent shape support information of the node
- *
- * To access this property do: NegativePercentShapeSupport.Get().
- * To set this property do: NegativePercentShapeSupport.Set(FbxBool).
- *
- * Default value is true.
- */
- FbxPropertyT<FbxBool> NegativePercentShapeSupport;
- /** This property contains default attribute index information of the node
- *
- * To access this property do: DefaultAttributeIndex.Get().
- * To set this property do: DefaultAttributeIndex.Set(FbxInt).
- *
- * Default value is -1.
- */
- FbxPropertyT<FbxInt> DefaultAttributeIndex;
- /** This property contains manipulation state information of the node
- *
- * To access this property do: Freeze.Get().
- * To set this property do: Freeze.Set(FbxBool).
- *
- * Default value is false.
- */
- FbxPropertyT<FbxBool> Freeze;
- /** This property contains level of detail mode information of the node
- *
- * To access this property do: LODBox.Get().
- * To set this property do: LODBox.Set(FbxBool).
- *
- * True: Bounding box
- * False: Geometry object is displayed.
- * Default value is false.
- */
- FbxPropertyT<FbxBool> LODBox;
- //@}
- /*****************************************************************************************************************************
- ** WARNING! Anything beyond these lines is for internal use, may not be documented and is subject to change without notice! **
- *****************************************************************************************************************************/
- #ifndef DOXYGEN_SHOULD_SKIP_THIS
- class FBXSDK_DLL Pivot
- {
- public:
- static const FbxVector4 sZeroVector;
- static const FbxVector4 sOneVector;
- Pivot()
- {
- mRotationOffset = NULL;
- mRotationPivot = NULL;
- mPreRotation = NULL;
- mPostRotation = NULL;
- mScalingOffset = NULL;
- mScalingPivot = NULL;
- mGeometricTranslation = NULL;
- mGeometricRotation = NULL;
- mGeometricScaling = NULL;
- Reset();
- }
- ~Pivot() { Reset(); }
- void Reset()
- {
- FBX_SAFE_DELETE(mRotationOffset);
- FBX_SAFE_DELETE(mRotationPivot);
- FBX_SAFE_DELETE(mPreRotation);
- FBX_SAFE_DELETE(mPostRotation);
- FBX_SAFE_DELETE(mScalingOffset);
- FBX_SAFE_DELETE(mScalingPivot);
- FBX_SAFE_DELETE(mGeometricTranslation);
- FBX_SAFE_DELETE(mGeometricRotation);
- FBX_SAFE_DELETE(mGeometricScaling);
- mRotationOrder = eEulerXYZ;
- mRotationSpaceForLimitOnly = false;
- mPivotState = FbxNode::ePivotReference;
- mQuaternionInterpolate = eQuatInterpOff;
- }
- inline const FbxVector4& GetRotationOffset() const { return (mRotationOffset) ? *mRotationOffset : sZeroVector; }
- inline void SetRotationOffset(const FbxVector4& pV)
- {
- if( !mRotationOffset )
- {
- #if defined(__GNUC__) && (__GNUC__ < 4)
- mRotationOffset = FbxNew< FbxVector4 >((FbxVector4&)pV);
- #else
- mRotationOffset = FbxNew< FbxVector4 >(pV);
- #endif
- }
- else
- {
- *mRotationOffset = pV;
- }
- }
- inline const FbxVector4& GetRotationPivot() const { return (mRotationPivot) ? *mRotationPivot : sZeroVector; }
- inline void SetRotationPivot(const FbxVector4& pV)
- {
- if( !mRotationPivot )
- {
- #if defined(__GNUC__) && (__GNUC__ < 4)
- mRotationPivot = FbxNew< FbxVector4 >((FbxVector4&)pV);
- #else
- mRotationPivot = FbxNew< FbxVector4 >(pV);
- #endif
- }
- else
- {
- *mRotationPivot = pV;
- }
- }
- inline const FbxVector4& GetPreRotation() const { return (mPreRotation) ? *mPreRotation : sZeroVector; }
- inline void SetPreRotation(const FbxVector4& pV)
- {
- if( !mPreRotation )
- {
- #if defined(__GNUC__) && (__GNUC__ < 4)
- mPreRotation = FbxNew< FbxVector4 >((FbxVector4&)pV);
- #else
- mPreRotation = FbxNew< FbxVector4 >(pV);
- #endif
- }
- else
- {
- *mPreRotation = pV;
- }
- }
- inline const FbxVector4& GetPostRotation() const { return (mPostRotation) ? *mPostRotation : sZeroVector; }
- inline void SetPostRotation(const FbxVector4& pV)
- {
- if( !mPostRotation )
- {
- #if defined(__GNUC__) && (__GNUC__ < 4)
- mPostRotation = FbxNew< FbxVector4 >((FbxVector4&)pV);
- #else
- mPostRotation = FbxNew< FbxVector4 >(pV);
- #endif
- }
- else
- {
- *mPostRotation = pV;
- }
- }
- inline const FbxVector4& GetScalingOffset() const { return (mScalingOffset) ? *mScalingOffset : sZeroVector; }
- inline void SetScalingOffset(const FbxVector4& pV)
- {
- if( !mScalingOffset )
- {
- #if defined(__GNUC__) && (__GNUC__ < 4)
- mScalingOffset = FbxNew< FbxVector4 >((FbxVector4&)pV);
- #else
- mScalingOffset = FbxNew< FbxVector4 >(pV);
- #endif
- }
- else
- {
- *mScalingOffset = pV;
- }
- }
- inline const FbxVector4& GetScalingPivot() const { return (mScalingPivot) ? *mScalingPivot : sZeroVector; }
- inline void SetScalingPivot(const FbxVector4& pV)
- {
- if( !mScalingPivot )
- {
- #if defined(__GNUC__) && (__GNUC__ < 4)
- mScalingPivot = FbxNew< FbxVector4 >((FbxVector4&)pV);
- #else
- mScalingPivot = FbxNew< FbxVector4 >(pV);
- #endif
- }
- else
- {
- *mScalingPivot = pV;
- }
- }
- inline const FbxVector4& GetGeometricTranslation() const { return (mGeometricTranslation) ? *mGeometricTranslation : sZeroVector; }
- inline void SetGeometricTranslation(const FbxVector4& pV)
- {
- if( !mGeometricTranslation )
- {
- #if defined(__GNUC__) && (__GNUC__ < 4)
- mGeometricTranslation = FbxNew< FbxVector4 >((FbxVector4&)pV);
- #else
- mGeometricTranslation = FbxNew< FbxVector4 >(pV);
- #endif
- }
- else
- {
- *mGeometricTranslation = pV;
- }
- }
- inline const FbxVector4& GetGeometricRotation() const { return (mGeometricRotation) ? *mGeometricRotation : sZeroVector; }
- inline void SetGeometricRotation(const FbxVector4& pV)
- {
- if( !mGeometricRotation )
- {
- #if defined(__GNUC__) && (__GNUC__ < 4)
- mGeometricRotation = FbxNew< FbxVector4 >((FbxVector4&)pV);
- #else
- mGeometricRotation = FbxNew< FbxVector4 >(pV);
- #endif
- }
- else
- {
- *mGeometricRotation = pV;
- }
- }
- inline const FbxVector4& GetGeometricScaling() const { return (mGeometricScaling) ? *mGeometricScaling : sOneVector; }
- inline void SetGeometricScaling(const FbxVector4& pV)
- {
- if( !mGeometricScaling )
- {
- #if defined(__GNUC__) && (__GNUC__ < 4)
- mGeometricScaling = FbxNew< FbxVector4 >((FbxVector4&)pV);
- #else
- mGeometricScaling = FbxNew< FbxVector4 >(pV);
- #endif
- }
- else
- {
- *mGeometricScaling = pV;
- }
- }
- inline EFbxRotationOrder GetRotationOrder() const { return mRotationOrder; }
- inline void SetRotationOrder(EFbxRotationOrder pROrder) { mRotationOrder = pROrder; }
- inline bool GetRotationSpaceForLimitOnly() const { return mRotationSpaceForLimitOnly; }
- inline void SetRotationSpaceForLimitOnly(bool pVal) { mRotationSpaceForLimitOnly = pVal; }
- inline EFbxQuatInterpMode GetQuaternionInterpolate() const { return mQuaternionInterpolate; }
- inline void SetQuaternionInterpolate(EFbxQuatInterpMode pVal) { mQuaternionInterpolate = pVal; }
- inline FbxNode::EPivotState GetPivotState() const { return mPivotState; }
- inline void SetPivotState(FbxNode::EPivotState pVal) { mPivotState = pVal; }
- private:
- FbxVector4* mRotationOffset;
- FbxVector4* mRotationPivot;
- FbxVector4* mPreRotation;
- FbxVector4* mPostRotation;
- FbxVector4* mScalingOffset;
- FbxVector4* mScalingPivot;
- FbxVector4* mGeometricTranslation;
- FbxVector4* mGeometricRotation;
- FbxVector4* mGeometricScaling;
- EFbxRotationOrder mRotationOrder;
- bool mRotationSpaceForLimitOnly;
- EFbxQuatInterpMode mQuaternionInterpolate;
- FbxNode::EPivotState mPivotState;
- };
- class FBXSDK_DLL Pivots
- {
- public:
- Pivots()
- {
- for( int i = 0; i < 2; i++ )
- {
- mIsDefault[i] = true;
- mPivotState[i] = FbxNode::ePivotReference;
- mPivot[i] = NULL;
- }
- }
- ~Pivots()
- {
- FbxDelete(mPivot[0]);
- FbxDelete(mPivot[1]);
- }
- Pivot& Get(int id)
- {
- FBX_ASSERT(id == 0 || id == 1);
- if (mPivot[id] == NULL && mIsDefault[id])
- {
- smDefaultPivot.SetPivotState(mPivotState[id]);
- return smDefaultPivot;
- }
- if (!mPivot[id])
- mPivot[id] = FbxNew< Pivot >();
- FBX_ASSERT(mPivot[id] != NULL);
- if (mPivot[id])
- mPivot[id]->SetPivotState(mPivotState[id]);
- return *mPivot[id];
- }
- #define MACRO_PIVOT_VECTOR_FCTS(name, defVect) \
- inline const FbxVector4& Get##name(int id) const \
- {\
- FBX_ASSERT(id == 0 || id == 1); \
- Pivot* p = mPivot[id]; \
- if (p == NULL) p = &smDefaultPivot; \
- return p->Get##name(); \
- }\
- inline void Set##name(int id, const FbxVector4& pV) \
- {\
- FBX_ASSERT(id == 0 || id == 1); \
- if (mIsDefault[id] && pV[0] == defVect[0] && pV[1] == defVect[1] && pV[2] == defVect[2]) return; \
- mIsDefault[id] = false; \
- Get(id).Set##name(pV); \
- }
- MACRO_PIVOT_VECTOR_FCTS(RotationOffset, Pivot::sZeroVector);
- MACRO_PIVOT_VECTOR_FCTS(RotationPivot, Pivot::sZeroVector);
- MACRO_PIVOT_VECTOR_FCTS(PreRotation, Pivot::sZeroVector);
- MACRO_PIVOT_VECTOR_FCTS(PostRotation, Pivot::sZeroVector);
- MACRO_PIVOT_VECTOR_FCTS(ScalingOffset, Pivot::sZeroVector);
- MACRO_PIVOT_VECTOR_FCTS(ScalingPivot, Pivot::sZeroVector);
- MACRO_PIVOT_VECTOR_FCTS(GeometricTranslation, Pivot::sZeroVector);
- MACRO_PIVOT_VECTOR_FCTS(GeometricRotation, Pivot::sZeroVector);
- MACRO_PIVOT_VECTOR_FCTS(GeometricScaling, Pivot::sOneVector);
- #define MACRO_PIVOT_BOOL_FCTS(name) \
- inline bool Get##name(int id) const \
- {\
- FBX_ASSERT(id == 0 || id == 1); \
- Pivot* p = mPivot[id]; \
- if (p == NULL) p = &smDefaultPivot; \
- return p->Get##name(); \
- }\
- inline void Set##name(int id, bool pV) \
- {\
- FBX_ASSERT(id == 0 || id == 1); \
- mIsDefault[id] = false; \
- Get(id).Set##name(pV); \
- }
- MACRO_PIVOT_BOOL_FCTS(RotationSpaceForLimitOnly);
- inline EFbxQuatInterpMode GetQuaternionInterpolate(int id) const
- {
- FBX_ASSERT(id == 0 || id == 1);
- Pivot* p = mPivot[id];
- if (p == NULL) p = &smDefaultPivot;
- return p->GetQuaternionInterpolate();
- }
- inline void SetQuaternionInterpolate(int id, EFbxQuatInterpMode pV)
- {
- FBX_ASSERT(id == 0 || id == 1);
- // If pivot has default values, and we want to set default eQuatInterpOff,
- // return to avoid allocating memory for the pivot (in Get(id).)
- if (mIsDefault[id] && pV == eQuatInterpOff) return;
- mIsDefault[id] = false;
- Get(id).SetQuaternionInterpolate(pV);
- }
- inline EFbxRotationOrder GetRotationOrder(int id) const
- {
- FBX_ASSERT(id == 0 || id == 1);
- Pivot* p = mPivot[id];
- if (p == NULL) p = &smDefaultPivot;
- return p->GetRotationOrder();
- }
- inline void SetRotationOrder(int id, EFbxRotationOrder pROrder)
- {
- FBX_ASSERT(id == 0 || id == 1);
- // If pivot has default values, and we want to set default rotation order eEulerXYZ,
- // return to avoid allocating memory for the pivot (in Get(id).)
- if (mIsDefault[id] && pROrder == eEulerXYZ) return;
- mIsDefault[id] = false;
- Get(id).SetRotationOrder(pROrder);
- }
- inline FbxNode::EPivotState GetPivotState(int id) const
- {
- FBX_ASSERT(id == 0 || id == 1);
- return mPivotState[id];
- }
- inline void SetPivotState(int id, FbxNode::EPivotState pVal)
- {
- FBX_ASSERT(id == 0 || id == 1);
- if (pVal == FbxNode::ePivotReference) return;
- mPivotState[id] = pVal;
- if (mPivot[id])
- mPivot[id]->SetPivotState(pVal);
- }
- #undef MACRO_PIVOT_VECTOR_FCTS
- #undef MACRO_PIVOT_BOOL_FCTS
- void Reset()
- {
- smDefaultPivot.Reset();
- for (int i = 0; i < 2; i++)
- {
- mIsDefault[i] = true;
- mPivotState[i] = FbxNode::ePivotReference;
- if (mPivot[i]) mPivot[i]->Reset();
- }
- }
- private:
- Pivot* mPivot[2];
- FbxNode::EPivotState mPivotState[2];
- bool mIsDefault[2];
- static Pivot smDefaultPivot;
- };
- class FBXSDK_DLL LinkToCharacter
- {
- public:
- bool operator==(LinkToCharacter& pLinkToCharacter)
- {
- if (mCharacter == pLinkToCharacter.mCharacter &&
- mType == pLinkToCharacter.mType &&
- mIndex == pLinkToCharacter.mIndex &&
- mSubIndex == pLinkToCharacter.mSubIndex)
- {
- return true;
- }
- else return false;
- }
- FbxCharacter* mCharacter;
- int mType;
- int mIndex;
- int mSubIndex;
- };
- void AddChildName(char* pChildName);
- char* GetChildName(FbxUInt pIndex) const;
- FbxUInt GetChildNameCount() const;
- FbxTransform& GetTransform();
- FbxLimits& GetTranslationLimits();
- FbxLimits& GetRotationLimits();
- FbxLimits& GetScalingLimits();
- Pivots& GetPivots();
- void UpdatePivotsAndLimitsFromProperties();
- void UpdatePropertiesFromPivotsAndLimits();
- void SetRotationActiveProperty(bool pVal);
- void PivotSetToMBTransform(EPivotSet pPivotSet);
- int AddCharacterLink(FbxCharacter* pCharacter, int pCharacterLinkType, int pNodeId, int pNodeSubId);
- int RemoveCharacterLink(FbxCharacter* pCharacter, int pCharacterLinkType, int pNodeId, int pNodeSubId);
- // Duplicate this node as well as all its node attributes and the Target and UpTarget objects.
- FbxNode* DeepCloneWithNodeAttributes();
- virtual FbxObject& Copy(const FbxObject& pObject);
- virtual const char* GetTypeName() const;
- virtual FbxStringList GetTypeFlags() const;
- virtual bool PropertyNotify(EPropertyNotifyType pType, FbxProperty& pProperty);
- enum ECullingType
- {
- eCullingOff,
- eCullingOnCCW,
- eCullingOnCW
- };
- ECullingType mCullingType;
- bool mCorrectInheritType;
- protected:
- virtual void Construct(const FbxObject* pFrom);
- virtual void ConstructProperties(bool pForceSet);
- virtual void Destruct(bool pRecursive);
- void Reset();
- bool GetAnimationIntervalRecursive(FbxTimeSpan& pTimeInterval, FbxAnimLayer* pAnimLayer);
- private:
- typedef FbxSet<FbxHandle> GeomInstSet;
- void ResetLimitsRecursive(FbxNode* pNode);
- void ConvertPivotAnimationRecurseLoop(FbxAnimStack* pAnimStack, const EPivotSet pConversionTarget, const double pFrameRate, const bool pKeyReduce, GeomInstSet& pGeomInstSet);
- void ConvertPivotAnimation(FbxAnimStack* pAnimStack, const EPivotSet pConversionTarget, const double pFrameRate, const bool pKeyReduce, GeomInstSet& pGeomInstSet);
- bool ConvertPivotAnimation_SetupMatrixConverter(FbxAnimCurveFilterMatrixConverter& pConverter, const EPivotSet& pSrcSet, const EPivotSet& pDstSet, const double pFrameRate, const bool pKeyReduce, GeomInstSet& pGeomInstSet);
- void ConvertPivotAnimation_ApplyGeometryPivot(const EPivotSet& pSrcSet, const EPivotSet& pDstSet, GeomInstSet& pGeomInstSet);
- FbxTransform mTransform;
- Pivots mPivots;
- FbxObject* mAnimCurveNodeContainer;
- FbxArray<FbxString*> mChildrenNameList;
- FbxVector4 mPostTargetRotation;
- FbxVector4 mTargetUpVector;
- FbxNode::EShadingMode mShadingMode;
- FbxArray<LinkToCharacter> mLinkToCharacter;
- #endif /* !DOXYGEN_SHOULD_SKIP_THIS *****************************************************************************************/
- };
- inline EFbxType FbxTypeOf(const EFbxRotationOrder&){ return eFbxEnum; }
- inline EFbxType FbxTypeOf(const FbxTransform::EInheritType&){ return eFbxEnum; }
- inline EFbxType FbxTypeOf(const EFbxQuatInterpMode&){ return eFbxEnum; }
- #include <fbxsdk/fbxsdk_nsend.h>
- #endif /* _FBXSDK_SCENE_GEOMETRY_NODE_H_ */
|