FBX node objects store the generic properties for a point in space.
The data for the “contents” of a given node—e.g., the data particular to a camera, light, mesh, or NURBS—is stored in another object. That object must be an instance of the appropriate class: KFbxCamera, KFbxLight, KFbxMesh, KFbxNurb, etc.
These classes are called node attributes, and are subclasses of Class KFbxNodeAttribute:
Each node has a node attribute (KFbxNode::GetNodeAttribute()), whose value is either:
If the node attribute is not null, then you can get from the node attribute object its attribute type (enum eAttributeType).
Class KFbxNull is used to create node attribute objects representing a null node in the tree. These objects are used by applications that need to represent a null node in its scene graph. A pointer to a KFbxNull object is not the same as null.
Here is how SceneTreeView creates the string that contains the name of the node and the attribute type:
KString GetNodeNameAndAttributeTypeName(const KFbxNode* pNode) { KString s = pNode->GetName(); KFbxNodeAttribute::EAttributeType lAttributeType; if(pNode->GetNodeAttribute() == NULL) { s += " (No node attribute type)"; } else { lAttributeType = (pNode->GetNodeAttribute()->GetAttributeType()); switch (lAttributeType) { case KFbxNodeAttribute::eMARKER: s += " (Marker)"; break; case KFbxNodeAttribute::eSKELETON: s += " (Skeleton)"; break; case KFbxNodeAttribute::eMESH: s += " (Mesh)"; break; case KFbxNodeAttribute::eCAMERA: s += " (Camera)"; break; case KFbxNodeAttribute::eLIGHT: s += " (Light)"; break; case KFbxNodeAttribute::eBOUNDARY: s += " (Boundary)"; break; case KFbxNodeAttribute::eTRIM_NURBS_SURFACE: s += " (Trim nurbs surface)"; break; ... } } return s; }
To access properties of a node attribute object that are specific to it being a camera, a NURBS, a light, etc., you can write similar code to cast the object to its appropriate class. This allows you to call the methods for that class:
... case KFbxNodeAttribute::eNURB: DisplayNurb(pNode); break; ... void DisplayNurb(KFbxNode* pNode) { KFbxNurb* lNurb = (KFbxNurb*) pNode->GetNodeAttribute (); ... int lControlPointsCount = lNurb->GetControlPointsCount(); KFbxVector4* lControlPoints = lNurb->GetControlPoints();