public BoundHolder LoadMeshes(DirectoryInfo dir, int id)
        {
            string directoryPath = dir.FullName;

            int    countOfFiles = 0;
            string extension    = ".dat";

            foreach (FileInfo f in dir.GetFiles())
            {
                //UnityEngine.Debug.Log(f.FullName);
                if (extension.Equals(Path.GetExtension(f.FullName)))
                {
                    countOfFiles++;
                }
            }

            BoundHolder result   = new BoundHolder();
            string      filename = "Mesh_With_BoundingBox_" + id + extension;
            string      filepath = Path.Combine(directoryPath, filename);

            byte[] readByteArray = File.ReadAllBytes(filepath).Skip(24).ToArray();
            result = result.DesirializeMeshes(readByteArray);

            return(result);
        }
    public void SplitBounds()
    {
        float   sizeX   = (bounds.max.x - bounds.min.x) / xDirCount;
        float   sizeY   = (bounds.max.y - bounds.min.y) / yDirCount;
        float   sizeZ   = (bounds.max.z - bounds.min.z) / zDirCount;
        Vector3 subSize = new Vector3(sizeX, sizeY, sizeZ);

        Vector3 subCenter;
        int     index       = 0;
        float   xStartPoint = bounds.min.x;
        float   yStartPoint = bounds.min.y;
        float   zStartPoint = bounds.min.z;

        for (int i = 0; i < zDirCount; i++)
        {
            for (int j = 0; j < yDirCount; j++)
            {
                for (int k = 0; k < xDirCount; k++)
                {
                    subCenter          = new Vector3(xStartPoint + sizeX / 2, yStartPoint + sizeY / 2, zStartPoint + sizeZ / 2);
                    subBounds[index++] = new BoundHolder(subCenter, subSize);
                    xStartPoint       += sizeX;
                }
                xStartPoint  = bounds.min.x;
                yStartPoint += sizeY;
            }
            xStartPoint  = bounds.min.x;
            yStartPoint  = bounds.min.y;
            zStartPoint += sizeZ;
        }
    }
        public BoundHolder[] LoadBoundingBox(DirectoryInfo Dir)
        {
            string directoryPath = Dir.FullName;

            int    countOfFiles = 0;
            string extension    = ".dat";

            foreach (FileInfo f in Dir.GetFiles())
            {
                //UnityEngine.Debug.Log(f.FullName);
                if (extension.Equals(Path.GetExtension(f.FullName)))
                {
                    countOfFiles++;
                }
            }

            BoundHolder[] results = new BoundHolder[countOfFiles];

            for (int i = 0; i < countOfFiles; i++)
            {
                string filename = "Mesh_With_BoundingBox_" + i + extension;
                string filepath = Path.Combine(directoryPath, filename);

                byte[] readByteArray = File.ReadAllBytes(filepath);
                results[i]    = new BoundHolder();
                results[i]    = results[i].DesirializeBounds(readByteArray);
                results[i].id = i;
            }

            return(results);
        }
    public void LoadMesh(int index)
    {
        List <DirectoryInfo> directoryInfoList = rs.GetDirectoryList();
        int         selected = rs.GetSelectedRoom();
        BoundHolder bh       = rs.LoadMeshes(directoryInfoList[selected], index);

        loadedMeshes[index] = new LoadedMeshHolder(bh);
    }
    public BoundHolder DesirializeBounds(byte[] data)
    {
        BoundHolder result = new BoundHolder();

        using (MemoryStream ms = new MemoryStream(data))
        {
            using (BinaryReader br = new BinaryReader(ms))
            {
                result.subBound = readBounds(br);
            }
            return(result);
        }
    }
    public BoundHolder DesirializeMeshes(byte[] data)
    {
        BoundHolder result = new BoundHolder();

        using (MemoryStream ms = new MemoryStream(data))
        {
            using (BinaryReader br = new BinaryReader(ms))
            {
                result.meshInBBox = readMesh(br);
            }
            return(result);
        }
    }
Beispiel #7
0
 private void putTrianglesIntoBoundingBox(Mesh m)
 {
     for (int index = 0; index < m.triangles.Length; index += 3)
     {
         int         vertexIndex = m.triangles[0 + index];
         Vector3     worldPoint  = trans.TransformPoint(m.vertices[vertexIndex]);
         BoundHolder b           = FindBoundingBox(worldPoint);
         int[]       triangle    = new int[3];
         triangle[0] = m.triangles[0 + index];
         triangle[1] = m.triangles[1 + index];
         triangle[2] = m.triangles[2 + index];
         b.AddTriangle(triangle);
     }
 }
    private void putTrianglesIntoBoundingBox(Mesh[] meshes, Transform[] transforms)
    {
        for (int i = 0; i < meshes.Length; i++)
        {
            int         vertexIndex = 0;
            BoundHolder b           = null;
            int[]       triangle    = new int[3];

            Vector3[] verticesCopy  = meshes[i].vertices;
            Vector3[] normalsCopy   = meshes[i].normals;
            Color[]   colorsCopy    = meshes[i].colors;
            int[]     trianglesCopy = meshes[i].triangles;


            for (int index = 0; index < trianglesCopy.Length; index += 3)
            {
                vertexIndex = trianglesCopy[0 + index];
                Vector3 worldPoint = transforms[i].TransformPoint(verticesCopy[vertexIndex]);
                b = FindBoundingBox(worldPoint);

                triangle[0] = trianglesCopy[0 + index];
                triangle[1] = trianglesCopy[1 + index];
                triangle[2] = trianglesCopy[2 + index];

                if (!(b.meshes.ContainsKey(i)))
                {
                    MeshInBBox m = new MeshInBBox(i);
                    m.AddArrays(triangle, verticesCopy, normalsCopy, colorsCopy, trianglesCopy);
                    b.meshes.Add(i, m);
                }
                else
                {
                    b.meshes[i].AddArrays(triangle, verticesCopy, normalsCopy, colorsCopy, trianglesCopy);
                }
            }
        }
    }
 public LoadedMeshHolder(BoundHolder bh)
 {
     meshes = bh.meshInBBox;
 }