From 5fe7e31cab013d2d5b75de525aa7ad94470bede3 Mon Sep 17 00:00:00 2001 From: Hexx2bin Date: Fri, 8 Jun 2018 11:07:28 -0500 Subject: [PATCH 1/3] added code for save mesh ply --- LiveScanServer/Utils.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/LiveScanServer/Utils.cs b/LiveScanServer/Utils.cs index 4ab3753..88ba7f6 100644 --- a/LiveScanServer/Utils.cs +++ b/LiveScanServer/Utils.cs @@ -206,6 +206,17 @@ namespace KinectServer streamWriter.WriteLine(s); } } + + // Sequentially write the 3 vertex indices of the triangle face, for each triangle, 0-referenced in PLY files + for (int i = 0; i < nVertices; i++) + { + string baseIndex0 = (i * 3).ToString(CultureInfo.InvariantCulture); + string baseIndex1 = ((i * 3) + 1).ToString(CultureInfo.InvariantCulture); + string baseIndex2 = ((i * 3) + 2).ToString(CultureInfo.InvariantCulture); + + string faceString = "3 " + baseIndex0 + " " + baseIndex1 + " " + baseIndex2; + streamWriter.WriteLine(faceString); + } streamWriter.Flush(); binaryWriter.Flush(); fileStream.Close(); From fe53bc50cb1eadb6a6c62a7ca03694d9df7b2844 Mon Sep 17 00:00:00 2001 From: Hexx2bin Date: Wed, 13 Jun 2018 17:04:11 -0500 Subject: [PATCH 2/3] added code in savePLY function to save a mesh in ply --- LiveScanServer/Utils.cs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/LiveScanServer/Utils.cs b/LiveScanServer/Utils.cs index 88ba7f6..9b5e9a8 100644 --- a/LiveScanServer/Utils.cs +++ b/LiveScanServer/Utils.cs @@ -165,6 +165,7 @@ namespace KinectServer public static void saveToPly(string filename, List vertices, List colors, bool binary) { int nVertices = vertices.Count / 3; + int faces = nVertices / 3; FileStream fileStream = File.Open(filename, FileMode.Create); @@ -175,10 +176,19 @@ namespace KinectServer if (binary) streamWriter.WriteLine("ply\nformat binary_little_endian 1.0"); else - streamWriter.WriteLine("ply\nformat ascii 1.0\n"); + streamWriter.WriteLine("ply\nformat ascii 1.0"); streamWriter.Write("element vertex " + nVertices.ToString() + "\n"); - streamWriter.Write("property float x\nproperty float y\nproperty float z\nproperty uchar red\nproperty uchar green\nproperty uchar blue\nend_header\n"); - streamWriter.Flush(); + streamWriter.WriteLine("property float x"); + streamWriter.WriteLine("property float y"); + streamWriter.WriteLine("property float z"); + + streamWriter.WriteLine("property uchar red"); + streamWriter.WriteLine("property uchar green"); + streamWriter.WriteLine("property uchar blue"); + + streamWriter.WriteLine("element face " + faces.ToString(CultureInfo.InvariantCulture)); + streamWriter.WriteLine("property list uchar int vertex_index"); + streamWriter.WriteLine("end_header"); //Vertex and color data are written here. if (binary) @@ -208,7 +218,7 @@ namespace KinectServer } // Sequentially write the 3 vertex indices of the triangle face, for each triangle, 0-referenced in PLY files - for (int i = 0; i < nVertices; i++) + for (int i = 0; i < faces; i++) { string baseIndex0 = (i * 3).ToString(CultureInfo.InvariantCulture); string baseIndex1 = ((i * 3) + 1).ToString(CultureInfo.InvariantCulture); From ec666bf05543fff870cc06dfba4b314ce34e9faf Mon Sep 17 00:00:00 2001 From: Hexx2bin Date: Mon, 25 Jun 2018 16:41:33 -0500 Subject: [PATCH 3/3] fixed the error with the ply header --- LiveScanServer/Utils.cs | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/LiveScanServer/Utils.cs b/LiveScanServer/Utils.cs index 9b5e9a8..027adb8 100644 --- a/LiveScanServer/Utils.cs +++ b/LiveScanServer/Utils.cs @@ -173,11 +173,18 @@ namespace KinectServer System.IO.BinaryWriter binaryWriter = new System.IO.BinaryWriter(fileStream); //PLY file header is written here. + streamWriter.WriteLine("ply"); + if (binary) - streamWriter.WriteLine("ply\nformat binary_little_endian 1.0"); + { + streamWriter.WriteLine("format binary_little_endian 1.0"); + } else - streamWriter.WriteLine("ply\nformat ascii 1.0"); - streamWriter.Write("element vertex " + nVertices.ToString() + "\n"); + { + streamWriter.WriteLine("format ascii 1.0"); + } + + streamWriter.WriteLine("element vertex " + nVertices.ToString()); streamWriter.WriteLine("property float x"); streamWriter.WriteLine("property float y"); streamWriter.WriteLine("property float z"); @@ -186,9 +193,10 @@ namespace KinectServer streamWriter.WriteLine("property uchar green"); streamWriter.WriteLine("property uchar blue"); - streamWriter.WriteLine("element face " + faces.ToString(CultureInfo.InvariantCulture)); - streamWriter.WriteLine("property list uchar int vertex_index"); + //streamWriter.WriteLine("element face " + faces.ToString(CultureInfo.InvariantCulture)); + //streamWriter.WriteLine("property list uchar int vertex_index"); streamWriter.WriteLine("end_header"); + streamWriter.Flush(); //Vertex and color data are written here. if (binary) @@ -218,7 +226,7 @@ namespace KinectServer } // Sequentially write the 3 vertex indices of the triangle face, for each triangle, 0-referenced in PLY files - for (int i = 0; i < faces; i++) + /*for (int i = 0; i < faces; i++) { string baseIndex0 = (i * 3).ToString(CultureInfo.InvariantCulture); string baseIndex1 = ((i * 3) + 1).ToString(CultureInfo.InvariantCulture); @@ -226,7 +234,7 @@ namespace KinectServer string faceString = "3 " + baseIndex0 + " " + baseIndex1 + " " + baseIndex2; streamWriter.WriteLine(faceString); - } + }*/ streamWriter.Flush(); binaryWriter.Flush(); fileStream.Close();