//------------------------------------------------------------------------------------------------------------------------------------------- bool FBXReader::transferData(FbxNode* node, Node* modelNode){ if (node == NULL){ throw new Exception("node is NULL!"); } if (modelNode == NULL){ throw new Exception("modelNode is NULL!"); } modelNode->NodeName = node->GetName(); FbxNodeAttribute::EType nodeAttributeType = node->GetNodeAttribute()->GetAttributeType(); FbxMesh* fbxMesh = (FbxMesh*)node->GetNodeAttribute(); Mesh* newMesh = NULL; switch (nodeAttributeType){ case FbxNodeAttribute::eMarker: // Do nothing break; case FbxNodeAttribute::eSkeleton: // Do nothing break; case FbxNodeAttribute::eMesh: newMesh = new Mesh(); transferMesh(fbxMesh, newMesh); modelNode->Meshes.push_back(newMesh); modelNode->NumMeshes = modelNode->Meshes.size(); break; case FbxNodeAttribute::eNurbs: // Do nothing break; case FbxNodeAttribute::ePatch: // Do nothing break; case FbxNodeAttribute::eCamera: // Do nothing break; case FbxNodeAttribute::eLight: // Do nothing break; case FbxNodeAttribute::eLODGroup: // Do nothing break; default: LOG_WARNING << "Can not identify the type of this mesh !"; break; } // Read geometric transformation transferGeometricTransformation(node, modelNode); LOG_DEBUG << "Transfer data successfully! " << "Node's name: " << modelNode->NodeName; for (int i = 0; i < node->GetChildCount(); i++) { Node* newNode = new Node(); if (transferData(node->GetChild(i), newNode)){ modelNode->Children.push_back(newNode); modelNode->NumChildren = modelNode->Children.size(); } } if (modelNode->NumChildren == 0 && modelNode->NumMeshes == 0){ return false; } return true; }
void GeomData::dataTransfer(pMesh theMesh){ transferCijData(theMesh); transferDijData(theMesh); transferVolData(theMesh); transferMesh(theMesh); }