void CSParseFBXHandler()
    {
        // If only I could just do vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv :'(
        //m_csFBXHandler = (CSFBXHandler)Marshal.PtrToStructure(m_cppFBXHandler, typeof(CSFBXHandler));

        unsafe
        {
            CPPImportedFBXScene *tempFbxSCene = (CPPImportedFBXScene *)(((CPPFBXHandler *)m_cppFBXHandler.ToPointer())->m_fbxScene);

            m_csFBXHandler.m_fbxScene.m_numberOfObjects = tempFbxSCene->m_numberOfObjects;
            m_csFBXHandler.m_fbxScene.m_objects         = new CSObject[tempFbxSCene->m_numberOfObjects];

            CPPObject **sceneObjects = (CPPObject **)tempFbxSCene->m_objects;

            m_unityGameObjects = new List <GameObject>((int)m_csFBXHandler.m_fbxScene.m_numberOfObjects);

            for (uint currObjectIndex = 0; currObjectIndex < m_csFBXHandler.m_fbxScene.m_numberOfObjects; currObjectIndex++)
            {
                m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex] = new CSObject(sceneObjects[currObjectIndex]->m_numberOfChildren, sceneObjects[currObjectIndex]->m_numberOfMaterials, Marshal.PtrToStringAnsi(sceneObjects[currObjectIndex]->m_name));
                m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_arrayIndexID       = sceneObjects[currObjectIndex]->m_arrayIndexID;
                m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_parentArrayIndexID = sceneObjects[currObjectIndex]->m_parentArrayIndexID;

                m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_childrenArrayIndexIDs = new int[m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_numberOfChildren];

                int *children = (int *)sceneObjects[currObjectIndex]->m_childrenArrayIndexIDs.ToPointer();

                for (int currChildIndex = 0; currChildIndex < m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_numberOfChildren; currChildIndex++)
                {
                    m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_childrenArrayIndexIDs[currChildIndex] = children[currChildIndex];
                }

                CPPMesh *currentMesh = ((CPPMesh *)sceneObjects[currObjectIndex]->m_mesh.ToPointer());

                GameObject unityGameObject = new GameObject();
                m_unityGameObjects.Add(unityGameObject);

                MeshFilter   currMeshFilter   = unityGameObject.AddComponent <MeshFilter>();
                MeshRenderer currMeshRenderer = unityGameObject.AddComponent <MeshRenderer>();

                unityGameObject.name = m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_name;

                print("Object: " + m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_name + "\tMaterial Count: " + sceneObjects[currObjectIndex]->m_numberOfMaterials + "\tNumber of Children: " + sceneObjects[currObjectIndex]->m_numberOfChildren);

                if (currentMesh->m_vertexCount > 0)
                {
                    m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_mesh = new CSMesh(currentMesh->m_vertexCount, currentMesh->m_indexCount);

                    CMath.Vector3 *vertices = (CMath.Vector3 *)currentMesh->m_allVerticesPositions.ToPointer();
                    CMath.Vector3 *normals  = (CMath.Vector3 *)currentMesh->m_normals.ToPointer();
                    CMath.Vector2 *uvs      = (CMath.Vector2 *)currentMesh->m_uvs.ToPointer();

                    Vector3[] unityVerts   = new Vector3[m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_mesh.m_vertexCount];
                    Vector3[] unityNormals = new Vector3[m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_mesh.m_vertexCount];
                    Vector2[] unityUVs     = new Vector2[m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_mesh.m_vertexCount];

                    int[] unityIndices = new int[m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_mesh.m_indexCount];

                    for (uint currVertex = 0; currVertex < currentMesh->m_vertexCount; currVertex++)
                    {
                        unityVerts[currVertex].x = vertices[currVertex].x;
                        unityVerts[currVertex].y = vertices[currVertex].y;
                        unityVerts[currVertex].z = vertices[currVertex].z;

                        unityNormals[currVertex].x = normals[currVertex].x;
                        unityNormals[currVertex].y = normals[currVertex].y;
                        unityNormals[currVertex].z = normals[currVertex].z;

                        unityUVs[currVertex].x = uvs[currVertex].x;
                        unityUVs[currVertex].y = uvs[currVertex].y;

                        m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_mesh.m_allVerticesPositions[currVertex].x = vertices[currVertex].x;
                        m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_mesh.m_allVerticesPositions[currVertex].y = vertices[currVertex].y;
                        m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_mesh.m_allVerticesPositions[currVertex].z = vertices[currVertex].z;

                        m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_mesh.m_allVerticesNormals[currVertex].x = normals[currVertex].x;
                        m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_mesh.m_allVerticesNormals[currVertex].y = normals[currVertex].y;
                        m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_mesh.m_allVerticesNormals[currVertex].z = normals[currVertex].z;

                        m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_mesh.m_allVerticesUVs[currVertex].x = uvs[currVertex].x;
                        m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_mesh.m_allVerticesUVs[currVertex].y = uvs[currVertex].y;
                    }

                    uint *indices = (uint *)currentMesh->m_indices.ToPointer();

                    for (uint currIndex = 0; currIndex < currentMesh->m_indexCount; currIndex++)
                    {
                        unityIndices[currIndex] = (int)indices[currIndex];

                        m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_mesh.m_indices[currIndex] = indices[currIndex];
                    }

                    currMeshFilter.mesh.vertices  = unityVerts;
                    currMeshFilter.mesh.normals   = unityNormals;
                    currMeshFilter.mesh.uv        = unityUVs;
                    currMeshFilter.mesh.triangles = unityIndices;
                }

                if (sceneObjects[currObjectIndex]->m_numberOfMaterials > 0)
                {
                    currMeshRenderer.materials = new Material[sceneObjects[currObjectIndex]->m_numberOfMaterials];

                    for (int currMaterialIndex = 0; currMaterialIndex < sceneObjects[currObjectIndex]->m_numberOfMaterials; currMaterialIndex++)
                    {
                        CPPMaterial **materials = (CPPMaterial **)sceneObjects[currObjectIndex]->m_materials.ToPointer();

                        currMeshRenderer.materials[currMaterialIndex].shader = Shader.Find("Standard");

                        m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_materials[currMaterialIndex].m_materialType       = materials[currMaterialIndex]->m_materialType;
                        m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_materials[currMaterialIndex].m_materialProperties = new CSMaterial.CSPropertyData[(int)CMaterialInfo.PropertyType.PROPERTYTYPE_COUNT];
                        if (materials[currMaterialIndex]->m_textureCount > 0)
                        {
                            m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_materials[currMaterialIndex].m_textures = new Texture2D[materials[currMaterialIndex]->m_textureCount];
                        }

                        uint currentTextureIndex = 0;

                        for (int propertyIndex = 0; propertyIndex < (int)CMaterialInfo.PropertyType.PROPERTYTYPE_COUNT; propertyIndex++)
                        {
                            CPPMaterial.CPPPropertyData **propertyData = (CPPMaterial.CPPPropertyData * *)materials[currMaterialIndex]->m_materialProperties.ToPointer();
                            m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_materials[currMaterialIndex].m_materialProperties[propertyIndex].m_propertyType            = propertyData[propertyIndex]->m_propertyType;
                            m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_materials[currMaterialIndex].m_materialProperties[propertyIndex].m_textureRelativeFileName = Marshal.PtrToStringAnsi(propertyData[propertyIndex]->m_textureRelativeFileName);
                            m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_materials[currMaterialIndex].m_materialProperties[propertyIndex].m_textureAbsoluteFilePath = Marshal.PtrToStringAnsi(propertyData[propertyIndex]->m_textureAbsoluteFilePath);
                            m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_materials[currMaterialIndex].m_materialProperties[propertyIndex].m_dataColorValues         = propertyData[propertyIndex]->m_dataColorValues;

                            if (m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_materials[currMaterialIndex].m_materialProperties[propertyIndex].m_textureRelativeFileName != null ||
                                m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_materials[currMaterialIndex].m_materialProperties[propertyIndex].m_textureAbsoluteFilePath != null)
                            {
                                m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_materials[currMaterialIndex].m_textures[currentTextureIndex] = LoadPNG(m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_materials[currMaterialIndex].m_materialProperties[propertyIndex].m_textureAbsoluteFilePath);

                                Color color;
                                color.r = propertyData[propertyIndex]->m_dataColorValues.x;
                                color.g = propertyData[propertyIndex]->m_dataColorValues.y;
                                color.b = propertyData[propertyIndex]->m_dataColorValues.z;
                                color.a = propertyData[propertyIndex]->m_dataColorValues.w;

                                switch (propertyData[propertyIndex]->m_propertyType)
                                {
                                case CMaterialInfo.PropertyType.PROPERTYTYPE_EMISSIVE:
                                {
                                    currMeshRenderer.materials[currMaterialIndex].EnableKeyword("_EMISSION");
                                    currMeshRenderer.materials[currMaterialIndex].SetTexture("_EmissionMap", m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_materials[currMaterialIndex].m_textures[currentTextureIndex]);
                                    currMeshRenderer.materials[currMaterialIndex].SetColor("_EmissionColor", color);
                                }
                                break;

                                case CMaterialInfo.PropertyType.PROPERTYTYPE_AMBIENT:
                                    break;

                                case CMaterialInfo.PropertyType.PROPERTYTYPE_DIFFUSE:
                                {
                                    currMeshRenderer.materials[currMaterialIndex].EnableKeyword("_MainTex");
                                    currMeshRenderer.materials[currMaterialIndex].SetTexture("_MainTex", m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_materials[currMaterialIndex].m_textures[currentTextureIndex]);
                                    currMeshRenderer.materials[currMaterialIndex].SetColor("_MainTex", color);
                                }
                                break;

                                case CMaterialInfo.PropertyType.PROPERTYTYPE_NORMAL:
                                {
                                    currMeshRenderer.materials[currMaterialIndex].EnableKeyword("_BumpMap");
                                    currMeshRenderer.materials[currMaterialIndex].SetTexture("_BumpMap", m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_materials[currMaterialIndex].m_textures[currentTextureIndex]);
                                    currMeshRenderer.materials[currMaterialIndex].SetFloat("_BumpScale", color.a);
                                }
                                break;

                                case CMaterialInfo.PropertyType.PROPERTYTYPE_BUMP:
                                {
                                    currMeshRenderer.materials[currMaterialIndex].EnableKeyword("_BumpMap");
                                    currMeshRenderer.materials[currMaterialIndex].SetTexture("_BumpMap", m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_materials[currMaterialIndex].m_textures[currentTextureIndex]);
                                    currMeshRenderer.materials[currMaterialIndex].SetFloat("_BumpScale", color.a);
                                }
                                break;

                                case CMaterialInfo.PropertyType.PROPERTYTYPE_TRANSPARENCY:
                                    break;

                                case CMaterialInfo.PropertyType.PROPERTYTYPE_DISPLACEMENT:
                                    break;

                                case CMaterialInfo.PropertyType.PROPERTYTYPE_VECTOR_DISPLACEMENT:
                                    break;

                                case CMaterialInfo.PropertyType.PROPERTYTYPE_SPECULAR:
                                {
                                    currMeshRenderer.materials[currMaterialIndex].EnableKeyword("_METALLICGLOSSMAP");
                                    currMeshRenderer.materials[currMaterialIndex].SetTexture("_MetallicGlossMap", m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_materials[currMaterialIndex].m_textures[currentTextureIndex]);
                                    currMeshRenderer.materials[currMaterialIndex].SetFloat("Metallic", color.a);
                                }
                                break;

                                case CMaterialInfo.PropertyType.PROPERTYTYPE_SHININESS:
                                    break;

                                case CMaterialInfo.PropertyType.PROPERTYTYPE_REFLECTION:
                                {
                                    currMeshRenderer.materials[currMaterialIndex].EnableKeyword("_Glossiness");
                                    currMeshRenderer.materials[currMaterialIndex].SetFloat("Smoothness", color.a);
                                }
                                break;

                                case CMaterialInfo.PropertyType.PROPERTYTYPE_COUNT:
                                    break;

                                default:
                                    break;
                                }

                                ++currentTextureIndex;
                            }
                        }
                    }
                }
            }

            for (uint currObjectIndex = 0; currObjectIndex < m_csFBXHandler.m_fbxScene.m_numberOfObjects; currObjectIndex++)
            {
                m_unityGameObjects[(int)currObjectIndex].transform.parent = m_unityGameObjects[(int)m_csFBXHandler.m_fbxScene.m_objects[currObjectIndex].m_parentArrayIndexID].transform;
            }

            m_unityGameObjects[0].transform.parent = m_unityObjectTransform;
        }
    }
Пример #2
0
    private int CSLoadFBXFile(string _fbxFilePath)
    {
        int result  = CPPDLLLoadMeshFromFBXFile(m_cppImportedFBXScene, _fbxFilePath);
        int result2 = CPPDLLLoadMaterialFromFBXFile(m_cppImportedFBXScene, _fbxFilePath);

        if (result == 0)
        {
            print("Incorrect file path");
            return(0);
        }

        else if (result == 1)
        {
            m_csImportedFBXScene = (CSImportedFBXScene)Marshal.PtrToStructure(m_cppImportedFBXScene, typeof(CSImportedFBXScene));

            m_csImportedFBXScene.m_mesh = (CSImportedFBXScene.CPPMesh)Marshal.PtrToStructure(m_csImportedFBXScene.m_CPPMeshPtr, typeof(CSImportedFBXScene.CPPMesh));

            uint vertexCount   = m_csImportedFBXScene.m_mesh.m_vertexCount;
            uint indexCount    = m_csImportedFBXScene.m_mesh.m_indexCount;
            uint materialCount = m_csImportedFBXScene.m_mesh.m_materialCount;

            m_csMesh.m_vertexCount   = vertexCount;
            m_csMesh.m_indexCount    = indexCount;
            m_csMesh.m_materialCount = materialCount;

            if (vertexCount > 0)
            {
                m_csMesh.m_allVerticesPositions = new CSMesh.Vector3[vertexCount];
                m_csMesh.m_indices = new uint[indexCount];

                unsafe
                {
                    CSMesh.Vector3 *vertices = (CSMesh.Vector3 *)m_csImportedFBXScene.m_mesh.m_allVerticesPositions.ToPointer();
                    if (vertices != null)
                    {
                        for (int i = 0; i < vertexCount; i++)
                        {
                            m_csMesh.m_allVerticesPositions[i].x = vertices[i].x;
                            m_csMesh.m_allVerticesPositions[i].y = vertices[i].y;
                            m_csMesh.m_allVerticesPositions[i].z = vertices[i].z;
                        }
                    }

                    else
                    {
                        print("The mesh VERTEX POSITION data did not get read properly.");
                    }

                    uint *indices = (uint *)m_csImportedFBXScene.m_mesh.m_indices.ToPointer();
                    if (indices != null)
                    {
                        for (int i = 0; i < indexCount; i++)
                        {
                            m_csMesh.m_indices[i] = indices[i];
                        }
                    }

                    else
                    {
                        print("The mesh INDICE data did not get read properly.");
                    }

                    CSMesh.Vector3 *normals = (CSMesh.Vector3 *)m_csImportedFBXScene.m_mesh.m_normals.ToPointer();
                    if (normals != null)
                    {
                        m_csMesh.m_allVerticesNormals = new CSMesh.Vector3[vertexCount];

                        for (int i = 0; i < vertexCount; i++)
                        {
                            m_csMesh.m_allVerticesNormals[i].x = normals[i].x;
                            m_csMesh.m_allVerticesNormals[i].y = normals[i].y;
                            m_csMesh.m_allVerticesNormals[i].z = normals[i].z;
                        }
                    }
                    else
                    {
                        print("This mesh did not have NORMALS");
                    }

                    CSMesh.Vector2 *uvs = (CSMesh.Vector2 *)m_csImportedFBXScene.m_mesh.m_uvs.ToPointer();
                    if (uvs != null)
                    {
                        m_csMesh.m_allVerticesUVs = new CSMesh.Vector2[vertexCount];

                        for (int i = 0; i < vertexCount; i++)
                        {
                            m_csMesh.m_allVerticesUVs[i].x = uvs[i].x;
                            m_csMesh.m_allVerticesUVs[i].y = uvs[i].y;
                        }

                        if (materialCount > 0)
                        {
                            m_csMesh.m_materials     = new CSMaterial[materialCount];
                            m_meshRenderer.materials = new Material[materialCount];
                            CPPMaterial **materials = (CPPMaterial **)m_csImportedFBXScene.m_mesh.m_materials.ToPointer();

                            for (int i = 0; i < materialCount; i++)
                            {
                                m_meshRenderer.materials[i].shader = Shader.Find("Standard");

                                m_csMesh.m_materials[i].m_materialType       = materials[i]->m_materialType;
                                m_csMesh.m_materials[i].m_materialProperties = new CSMaterial.PropertyData[(int)PropertyType.PROPERTYTYPE_COUNT];
                                if (materials[i]->m_textureCount > 0)
                                {
                                    m_csMesh.m_materials[i].m_textures = new Texture2D[materials[i]->m_textureCount];
                                }
                                uint currentTextureIndex = 0;

                                for (int j = 0; j < (int)PropertyType.PROPERTYTYPE_COUNT; j++)
                                {
                                    CPPMaterial.PropertyData **propertyData = (CPPMaterial.PropertyData * *)materials[i]->m_materialProperties.ToPointer();
                                    m_csMesh.m_materials[i].m_materialProperties[j].m_propertyType            = propertyData[j]->m_propertyType;
                                    m_csMesh.m_materials[i].m_materialProperties[j].m_textureRelativeFileName = Marshal.PtrToStringAnsi(propertyData[j]->m_textureRelativeFileName);
                                    m_csMesh.m_materials[i].m_materialProperties[j].m_textureAbsoluteFilePath = Marshal.PtrToStringAnsi(propertyData[j]->m_textureAbsoluteFilePath);
                                    m_csMesh.m_materials[i].m_materialProperties[j].m_dataColorValues         = propertyData[j]->m_dataColorValues;

                                    if (m_csMesh.m_materials[i].m_materialProperties[j].m_textureRelativeFileName != null || m_csMesh.m_materials[i].m_materialProperties[j].m_textureAbsoluteFilePath != null)
                                    {
                                        m_csMesh.m_materials[i].m_textures[currentTextureIndex] = LoadPNG(m_csMesh.m_materials[i].m_materialProperties[j].m_textureAbsoluteFilePath);

                                        Color color;
                                        color.r = propertyData[j]->m_dataColorValues.x;
                                        color.g = propertyData[j]->m_dataColorValues.y;
                                        color.b = propertyData[j]->m_dataColorValues.z;
                                        color.a = propertyData[j]->m_dataColorValues.w;

                                        switch (propertyData[j]->m_propertyType)
                                        {
                                        case PropertyType.PROPERTYTYPE_EMISSIVE:
                                        {
                                            m_meshRenderer.materials[i].EnableKeyword("_EMISSION");
                                            m_meshRenderer.materials[i].SetTexture("_EmissionMap", m_csMesh.m_materials[i].m_textures[currentTextureIndex]);
                                            m_meshRenderer.materials[i].SetColor("_EmissionColor", color);
                                        }
                                        break;

                                        case PropertyType.PROPERTYTYPE_AMBIENT:
                                            break;

                                        case PropertyType.PROPERTYTYPE_DIFFUSE:
                                        {
                                            m_meshRenderer.materials[i].EnableKeyword("_MainTex");
                                            m_meshRenderer.materials[i].SetTexture("_MainTex", m_csMesh.m_materials[i].m_textures[currentTextureIndex]);
                                            m_meshRenderer.materials[i].SetColor("_MainTex", color);
                                        }
                                        break;

                                        case PropertyType.PROPERTYTYPE_NORMAL:
                                        {
                                            m_meshRenderer.materials[i].EnableKeyword("_BumpMap");
                                            m_meshRenderer.materials[i].SetTexture("_BumpMap", m_csMesh.m_materials[i].m_textures[currentTextureIndex]);
                                            m_meshRenderer.materials[i].SetFloat("_BumpScale", color.a);
                                        }
                                        break;

                                        case PropertyType.PROPERTYTYPE_BUMP:
                                        {
                                            m_meshRenderer.materials[i].EnableKeyword("_BumpMap");
                                            m_meshRenderer.materials[i].SetTexture("_BumpMap", m_csMesh.m_materials[i].m_textures[currentTextureIndex]);
                                            m_meshRenderer.materials[i].SetFloat("_BumpScale", color.a);
                                        }
                                        break;

                                        case PropertyType.PROPERTYTYPE_TRANSPARENCY:
                                            break;

                                        case PropertyType.PROPERTYTYPE_DISPLACEMENT:
                                            break;

                                        case PropertyType.PROPERTYTYPE_VECTOR_DISPLACEMENT:
                                            break;

                                        case PropertyType.PROPERTYTYPE_SPECULAR:
                                        {
                                            m_meshRenderer.materials[i].EnableKeyword("_METALLICGLOSSMAP");
                                            m_meshRenderer.materials[i].SetTexture("_MetallicGlossMap", m_csMesh.m_materials[i].m_textures[currentTextureIndex]);
                                            m_meshRenderer.materials[i].SetFloat("Metallic", color.a);
                                        }
                                        break;

                                        case PropertyType.PROPERTYTYPE_SHININESS:
                                            break;

                                        case PropertyType.PROPERTYTYPE_REFLECTION:
                                        {
                                            m_meshRenderer.materials[i].EnableKeyword("_Glossiness");
                                            m_meshRenderer.materials[i].SetFloat("Smoothness", color.a);
                                        }
                                        break;

                                        case PropertyType.PROPERTYTYPE_COUNT:
                                            break;

                                        default:
                                            break;
                                        }

                                        ++currentTextureIndex;
                                    }
                                }
                            }
                        }

                        if (materialCount == 1)
                        {
                            print("This mesh had 1 material.");
                        }
                        else
                        {
                            print("This mesh had " + materialCount + " materials.");
                        }
                    }
                    else
                    {
                        print("This mesh did not have UVS");
                    }
                }

                return(1);
            }

            // Return false if the file loaded but some of the mesh data was incorrect
            return(-1);
        }

        else
        {
            return(result);
        }
    }