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); }
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 }); }
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); } }
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); }
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); }
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; }
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); }
/// <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); }