Exemple #1
0
        private static DataBody ReadDataBodyAscii(DataHeader header, StreamReader reader)
        {
            DataBody data = new DataBody(header.vertexCount);

            string line;

            while ((line = reader.ReadLine()) != null)
            {
                string[] strings = line.Split(' ');
                if (strings.Length > 6)
                {
                    try
                    {
                        float x = float.Parse(strings[0], CultureInfo.InvariantCulture);
                        float y = float.Parse(strings[1], CultureInfo.InvariantCulture);
                        float z = float.Parse(strings[2], CultureInfo.InvariantCulture);
                        byte  r = byte.Parse(strings[3], CultureInfo.InvariantCulture);
                        byte  g = byte.Parse(strings[4], CultureInfo.InvariantCulture);
                        byte  b = byte.Parse(strings[5], CultureInfo.InvariantCulture);

                        data.AddPoint(x, y, z, r, g, b);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("[ERROR] Line not well formated (Only works with CloudCompare): " + line + " " + e.Message);
                    }
                }
            }

            return(data);
        }
    DataBody ReadDataBody(DataHeader header, FileStream stream)
    {
        var   data = new DataBody(header.vertexCount);
        float x = 0, y = 0, z = 0;
        float nx = 0, ny = 0, nz = 0;
        Byte  r = 255, g = 255, b = 255, a = 255;

        if (header.pcType == PlyType.Binary)
        {
            for (var i = 0; i < header.vertexCount; i++)
            {
                (x, y, z, r, g, b, a, nx, ny, nz) = ParseBinaryData(header, new BinaryReader(stream));
                data.AddPoint(x, y, z, r, g, b, a, nx, ny, nz);
            }
        }
        else if (header.pcType == PlyType.Ascii)
        {
            StreamReader reader = new StreamReader(stream);
            reader.ReadLine();
            reader.ReadLine();
            for (var i = 0; i < header.vertexCount; i++)
            {
                (x, y, z, r, g, b, a, nx, ny, nz) = ParseAsciiData(header, reader);
                data.AddPoint(x, y, z, r, g, b, a, nx, ny, nz);
            }
        }
        return(data);
    }
        DataBody ReadDataBody(DataHeader header, BinaryReader reader)
        {
            var data = new DataBody(header.vertexCount);

            float x = 0, y = 0, z = 0;
            Byte  r = 255, g = 255, b = 255, a = 255;

            for (var i = 0; i < header.vertexCount; i++)
            {
                foreach (var prop in header.properties)
                {
                    switch (prop)
                    {
                    case DataProperty.R8: r = reader.ReadByte(); break;

                    case DataProperty.G8: g = reader.ReadByte(); break;

                    case DataProperty.B8: b = reader.ReadByte(); break;

                    case DataProperty.A8: a = reader.ReadByte(); break;

                    case DataProperty.R16: r = (byte)(reader.ReadUInt16() >> 8); break;

                    case DataProperty.G16: g = (byte)(reader.ReadUInt16() >> 8); break;

                    case DataProperty.B16: b = (byte)(reader.ReadUInt16() >> 8); break;

                    case DataProperty.A16: a = (byte)(reader.ReadUInt16() >> 8); break;

                    case DataProperty.SingleX: x = reader.ReadSingle(); break;

                    case DataProperty.SingleY: y = reader.ReadSingle(); break;

                    case DataProperty.SingleZ: z = reader.ReadSingle(); break;

                    case DataProperty.DoubleX: x = (float)reader.ReadDouble(); break;

                    case DataProperty.DoubleY: y = (float)reader.ReadDouble(); break;

                    case DataProperty.DoubleZ: z = (float)reader.ReadDouble(); break;

                    case DataProperty.Data8: reader.ReadByte(); break;

                    case DataProperty.Data16: reader.BaseStream.Position += 2; break;

                    case DataProperty.Data32: reader.BaseStream.Position += 4; break;

                    case DataProperty.Data64: reader.BaseStream.Position += 8; break;
                    }
                }

                data.AddPoint(x, y, z, r, g, b, a);
            }

            return(data);
        }
        DataBody ReadDataBody(DataHeader header, BinaryReader reader, int KNN)
        {
            var data = new DataBody(header.vertexCount);

            float x = 0, y = 0, z = 0;
            Byte  r = 255, g = 255, b = 255, a = 255;

            for (var i = 0; i < header.vertexCount; i++)
            {
                foreach (var prop in header.properties)
                {
                    switch (prop)
                    {
                    case DataProperty.X: x = reader.ReadSingle(); break;

                    case DataProperty.Y: y = reader.ReadSingle(); break;

                    case DataProperty.Z: z = reader.ReadSingle(); break;

                    case DataProperty.R: r = reader.ReadByte(); break;

                    case DataProperty.G: g = reader.ReadByte(); break;

                    case DataProperty.B: b = reader.ReadByte(); break;

                    case DataProperty.A: a = reader.ReadByte(); break;

                    //case DataProperty.Size: size = reader.ReadSingle(); break;
                    case DataProperty.Data8: reader.ReadByte(); break;

                    case DataProperty.Data16: reader.BaseStream.Position += 2; break;

                    case DataProperty.Data32: reader.BaseStream.Position += 4; break;
                    }
                }

                data.AddPoint(x, y, z, r, g, b, a);
            }
            if (KNN > 0)
            {
                data.CalculatePointSize(header.vertexCount, KNN);
            }

            return(data);
        }
Exemple #5
0
        public PLYToSchematic(string path, float scale, int colorLimit, bool holes, bool flood, bool lonely) : base(path, scale, colorLimit, holes, flood, lonely)
        {
            MemoryMappedFile       mmf = MemoryMappedFile.CreateFromFile(path, FileMode.Open);
            MemoryMappedViewStream mms = mmf.CreateViewStream();

            DataHeader header = ReadDataHeader(new StreamReader(mms));

            Console.WriteLine("[LOG] Start reading PLY data...");
            DataBody body = header.binary ? ReadDataBodyBinary(header, new BinaryReader(mms)) : ReadDataBodyAscii(header, new StreamReader(mms));

            mms.Close();
            Console.WriteLine("[LOG] Done.");

            VoxelizeData(new BodyDataDTO()
            {
                BodyVertices = body.vertices,
                BodyColors   = body.colors
            });
        }
Exemple #6
0
    public void LoadBodies(String json)
    {
        try
        {
            Body.DestroyAllBodies();
            Body.bodies.Clear();

            BodyList bl = JSONLoader.LoadStars(json);
            DataBody.LoadBodiesInGame(bl);

            GameObject tempParentGo = GameObject.Find("Bodies");
            foreach (GameObject go in Body.bodies)
            {
                go.transform.SetParent(tempParentGo.transform);
            }
        }
        catch (Exception e)
        {
            Logger.Error("Exception while loading: " + e);
        }
    }
Exemple #7
0
        DataBody ReadDataBody(DataHeader header, BinaryReader reader)
        {
            var data = new DataBody(header.nb_3D_points);

            float x = 0, y = 0, z = 0;
            Byte  r = 255, g = 255, b = 255, a = 255;

            for (var i = 0; i < header.nb_3D_points; i++)
            {
                x = reader.ReadSingle(); break;
                y = reader.ReadSingle(); break;
                z = reader.ReadSingle(); break;
                r = reader.ReadByte(); break;
                g = reader.ReadByte(); break;
                b = reader.ReadByte(); break;
                //         case DataProperty.A: a = reader.ReadByte(); break;

                //         case DataProperty.Data8: reader.ReadByte(); break;
                //        case DataProperty.Data16: reader.BaseStream.Position += 2; break;
                //        case DataProperty.Data32: reader.BaseStream.Position += 4; break;
                data.AddPoint(x, y, z, r, g, b, a);
            }
            return(data);
        }
Exemple #8
0
        private static DataBody ReadDataBodyBinary(DataHeader header, BinaryReader reader)
        {
            DataBody data = new DataBody(header.vertexCount);

            float x = 0, y = 0, z = 0;
            byte  r = 255, g = 255, b = 255, a = 255;

            using (ProgressBar progressBar = new ProgressBar())
            {
                for (int i = 0; i < header.vertexCount; i++)
                {
                    foreach (DataProperty prop in header.properties)
                    {
                        switch (prop)
                        {
                        case DataProperty.R8:
                            r = reader.ReadByte();
                            break;

                        case DataProperty.G8:
                            g = reader.ReadByte();
                            break;

                        case DataProperty.B8:
                            b = reader.ReadByte();
                            break;

                        case DataProperty.A8:
                            a = reader.ReadByte();
                            break;

                        case DataProperty.R16:
                            r = (byte)(reader.ReadUInt16() >> 8);
                            break;

                        case DataProperty.G16:
                            g = (byte)(reader.ReadUInt16() >> 8);
                            break;

                        case DataProperty.B16:
                            b = (byte)(reader.ReadUInt16() >> 8);
                            break;

                        case DataProperty.A16:
                            a = (byte)(reader.ReadUInt16() >> 8);
                            break;

                        case DataProperty.SingleX:
                            x = reader.ReadSingle();
                            break;

                        case DataProperty.SingleY:
                            y = reader.ReadSingle();
                            break;

                        case DataProperty.SingleZ:
                            z = reader.ReadSingle();
                            break;

                        case DataProperty.DoubleX:
                            x = (float)reader.ReadDouble();
                            break;

                        case DataProperty.DoubleY:
                            y = (float)reader.ReadDouble();
                            break;

                        case DataProperty.DoubleZ:
                            z = (float)reader.ReadDouble();
                            break;

                        case DataProperty.Data8:
                            reader.ReadByte();
                            break;

                        case DataProperty.Data16:
                            reader.BaseStream.Position += 2;
                            break;

                        case DataProperty.Data32:
                            reader.BaseStream.Position += 4;
                            break;

                        case DataProperty.Data64:
                            reader.BaseStream.Position += 8;
                            break;
                        }
                    }

                    data.AddPoint(x, y, z, r, g, b);
                    progressBar.Report(i / (float)header.vertexCount);
                }
            }

            return(data);
        }
Exemple #9
0
        DataBody ReadDataBody(DataHeader header, BinaryReader reader)
        {
            var data = new DataBody(header.vertexCount, header.triangleCount);

            float x = 0, y = 0, z = 0;
            Byte  r = 255, g = 255, b = 255, a = 255;

            // read vertices xyzrgba
            for (var i = 0; i < header.vertexCount; i++)
            {
                foreach (var prop in header.properties)
                {
                    switch (prop)
                    {
                    case DataProperty.R8: r = reader.ReadByte(); break;

                    case DataProperty.G8: g = reader.ReadByte(); break;

                    case DataProperty.B8: b = reader.ReadByte(); break;

                    case DataProperty.A8: a = reader.ReadByte(); break;

                    case DataProperty.R16: r = (byte)(reader.ReadUInt16() >> 8); break;

                    case DataProperty.G16: g = (byte)(reader.ReadUInt16() >> 8); break;

                    case DataProperty.B16: b = (byte)(reader.ReadUInt16() >> 8); break;

                    case DataProperty.A16: a = (byte)(reader.ReadUInt16() >> 8); break;

                    case DataProperty.SingleX: x = reader.ReadSingle(); break;

                    case DataProperty.SingleY: y = reader.ReadSingle(); break;

                    case DataProperty.SingleZ: z = reader.ReadSingle(); break;

                    case DataProperty.DoubleX: x = (float)reader.ReadDouble(); break;

                    case DataProperty.DoubleY: y = (float)reader.ReadDouble(); break;

                    case DataProperty.DoubleZ: z = (float)reader.ReadDouble(); break;

                    case DataProperty.Data8: reader.ReadByte(); break;

                    case DataProperty.Data16: reader.BaseStream.Position += 2; break;

                    case DataProperty.Data32: reader.BaseStream.Position += 4; break;

                    case DataProperty.Data64: reader.BaseStream.Position += 8; break;
                    }
                }
                data.AddPoint(x, y, z, r, g, b, a);
            }

            int v1, v2, v3;

            // read triangles
            for (var i = 0; i < header.triangleCount; i++)
            {
                reader.ReadByte(); // number of vertices of the triangle, always 3
                v1 = reader.ReadInt32();
                v2 = reader.ReadInt32();
                v3 = reader.ReadInt32();
                data.AddTriangle(v1, v2, v3);
            }

            return(data);
        }
 public PlyFile(DataHeader _header, DataBody _body)
 {
     header = _header;
     body   = _body;
 }
Exemple #11
0
        DataBody ReadDataBody(BinaryReader reader)
        {
            int            bufferType = reader.ReadInt32();
            int            bufferSize = reader.ReadInt32();
            List <Vector3> vertices   = null;
            List <Vector3> normals    = null;
            List <Vector2> uvs        = null;
            List <int>     indices    = null;

            if (bufferType == 0)
            {
                int vertexCount = bufferSize / ((3 + 3) * 4); // ( pos + norm ) * sizeof float
                vertices = new List <Vector3>(vertexCount);
                normals  = new List <Vector3>(vertexCount);

                for (var i = 0; i < vertexCount; i++)
                {
                    Vector3 vertex;
                    vertex.x = reader.ReadSingle();
                    vertex.y = reader.ReadSingle();
                    vertex.z = reader.ReadSingle();

                    vertices.Add(vertex);

                    Vector3 normal;
                    normal.x = reader.ReadSingle();
                    normal.y = reader.ReadSingle();
                    normal.z = reader.ReadSingle();

                    normals.Add(normal);
                }

                bufferType = reader.ReadInt32();
                bufferSize = reader.ReadInt32();
            }

            if (bufferType == 1)
            {
                int vertexCount = bufferSize / (2 * 4); // uv * sizeof float
                uvs = new List <Vector2>(vertexCount);

                for (var i = 0; i < vertexCount; i++)
                {
                    Vector2 uv;
                    uv.x = reader.ReadSingle();
                    uv.y = reader.ReadSingle();

                    uvs.Add(uv);
                }

                bufferType = reader.ReadInt32();
                bufferSize = reader.ReadInt32();
            }

            if (bufferType == 2)
            {
                int indexCount = bufferSize / 2; // sizeof of short
                indices = new List <int>(indexCount);

                for (var i = 0; i < indexCount; i++)
                {
                    indices.Add(reader.ReadInt16());
                }

                //indices.Reverse(); //CCW
            }

            var data = new DataBody(vertices, normals, uvs, indices);

            return(data);
        }
Exemple #12
0
        /// <summary>
        /// Poisson format
        /// </summary>
        /// <param name="header"></param>
        /// <param name="reader"></param>
        /// <returns></returns>
        private static DataBody ReadDataBodyBinary(DataHeader header, BinaryReader reader)
        {
            DataBody data = new DataBody(header.vertexCount, header.faceCount);

            float x = 0, y = 0, z = 0;
            byte  r = 255, g = 255, b = 255, a = 255;
            int   f0 = 0, f1 = 0, f2 = 0;

            //for(int i = 0; i < header.vertexCount; i++) {
            //    int m = i % 6;
            //    switch (m) {
            //        case (0):
            //        x = reader.ReadSingle();
            //        break;
            //        case (1):
            //        y = reader.ReadSingle();
            //        break;
            //        case (2):
            //        z = reader.ReadSingle();
            //        break;
            //        case (3):
            //        r = reader.ReadByte();
            //        break;
            //        case (4):
            //        r = reader.ReadByte();
            //        break;
            //        case (5):
            //            r = reader.ReadByte();
            //        break;
            //    }
            //    data.AddPoint(x, y, z, r, g, b);
            //}


            //reader.BaseStream.Position = readCount;
            //Console.WriteLine("Number of properties:   " + header.properties.Count().ToString());
            for (int i = 0; i < header.vertexCount; i++)         //header.vertexCount
            {
                foreach (DataProperty prop in header.properties) //iterate six properties
                //Console.WriteLine(prop.ToString());

                {
                    switch (prop)
                    {
                    case DataProperty.R8:
                        r = reader.ReadByte();
                        Console.WriteLine("R8" + r.ToString());
                        break;

                    case DataProperty.G8:
                        g = reader.ReadByte();
                        Console.WriteLine("G8" + g.ToString());
                        break;

                    case DataProperty.B8:
                        b = reader.ReadByte();
                        Console.WriteLine("B8" + b.ToString());
                        break;

                    case DataProperty.A8:
                        a = reader.ReadByte();
                        Console.WriteLine("A8" + a.ToString());
                        break;

                    case DataProperty.R16:
                        r = (byte)(reader.ReadUInt16() >> 8);
                        Console.WriteLine("R16" + r.ToString());
                        break;

                    case DataProperty.G16:
                        g = (byte)(reader.ReadUInt16() >> 8);
                        Console.WriteLine("G16" + g.ToString());
                        break;

                    case DataProperty.B16:
                        b = (byte)(reader.ReadUInt16() >> 8);
                        Console.WriteLine("B16" + b.ToString());
                        break;

                    case DataProperty.A16:
                        a = (byte)(reader.ReadUInt16() >> 8);
                        Console.WriteLine("A16" + a.ToString());
                        break;

                    case DataProperty.SingleX:
                        x = reader.ReadSingle();
                        Console.WriteLine("SingleX" + x.ToString());
                        break;

                    case DataProperty.SingleY:
                        y = reader.ReadSingle();
                        Console.WriteLine("SingleY" + y.ToString());
                        break;

                    case DataProperty.SingleZ:
                        z = reader.ReadSingle();
                        Console.WriteLine("SingleZ" + z.ToString());
                        break;

                    case DataProperty.DoubleX:
                        x = (float)reader.ReadDouble();
                        Console.WriteLine("DoubleX" + x.ToString());
                        break;

                    case DataProperty.DoubleY:
                        y = (float)reader.ReadDouble();
                        Console.WriteLine("DoubleY" + y.ToString());
                        break;

                    case DataProperty.DoubleZ:
                        z = (float)reader.ReadDouble();
                        Console.WriteLine("DoubleZ" + z.ToString());
                        break;

                    case DataProperty.Data8:
                        Console.WriteLine("reader.ReadByte();");
                        reader.ReadByte();
                        break;

                    case DataProperty.Data16:
                        Console.WriteLine("reader.BaseStream.Position ");
                        reader.BaseStream.Position += 2;
                        break;

                    case DataProperty.Data32:
                        reader.BaseStream.Position += 4;
                        Console.WriteLine("reader.BaseStream.Position ");
                        break;

                    case DataProperty.Data64:
                        reader.BaseStream.Position += 8;
                        Console.WriteLine("reader.BaseStream.Position ");
                        break;
                    }
                }

                data.AddPoint(x, y, z, r, g, b);
            }

            //Header
            //Vertex List
            //Face List
            //(lists of other elements)
            // Console.WriteLine("Hiiiiiiiii");
            int[] f       = new int[0];
            int   n       = 0;
            int   counter = 0;
            bool  flag    = true;

            for (int i = 0; i < header.faceCount; i++)
            {
                if (flag)
                {
                    n = reader.ReadInt32();
                    //Console.WriteLine("number of indices " + n);
                    f    = new int[n];
                    flag = false;
                }
                else
                {
                    int v = reader.ReadInt32();
                    f[counter] = v;
                    //Console.WriteLine("id " + v);
                    counter++;


                    if (counter == n)
                    {
                        data.AddFace(f);
                        counter = 0;
                        flag    = true;
                    }
                }
            }
            Console.WriteLine("Hiiiiiiiii");

            return(data);
        }