Esempio n. 1
0
//-------------------------------------------------------------------------------------------------------------------------------------------
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);
	}