mirror of
https://github.com/storytold/LiveScan3D.git
synced 2026-10-09 00:09:58 +00:00
Added LiveScanPlayer, as well as some bug fixes and improvements.
This commit is contained in:
@@ -39,7 +39,7 @@ namespace KinectServer
|
||||
|
||||
public int nNumICPIterations = 10;
|
||||
public int nNumRefineIters = 2;
|
||||
public bool bMergeScansForSave = false;
|
||||
public bool bMergeScansForSave = true;
|
||||
public bool bSaveAsBinaryPLY = true;
|
||||
|
||||
public KinectSettings()
|
||||
|
||||
+1
@@ -80,6 +80,7 @@
|
||||
// lClientListBox
|
||||
//
|
||||
this.lClientListBox.FormattingEnabled = true;
|
||||
this.lClientListBox.HorizontalScrollbar = true;
|
||||
this.lClientListBox.Location = new System.Drawing.Point(113, 12);
|
||||
this.lClientListBox.Name = "lClientListBox";
|
||||
this.lClientListBox.Size = new System.Drawing.Size(219, 108);
|
||||
|
||||
@@ -42,7 +42,7 @@ namespace KinectServer
|
||||
static extern float ICP(IntPtr verts1, IntPtr verts2, int nVerts1, int nVerts2, float[] R, float[] t, int maxIter = 200);
|
||||
|
||||
KinectServer oServer;
|
||||
TransferServer oTranfserServer;
|
||||
TransferServer oTransferServer;
|
||||
|
||||
//Those three variables are shared with the OpenGLWindow class and are used to exchange data with it.
|
||||
//Vertices from all of the sensors
|
||||
@@ -83,9 +83,9 @@ namespace KinectServer
|
||||
|
||||
oServer = new KinectServer(oSettings);
|
||||
oServer.eSocketListChanged += new SocketListChangedHandler(UpdateListView);
|
||||
oTranfserServer = new TransferServer();
|
||||
oTranfserServer.lVertices = lAllVertices;
|
||||
oTranfserServer.lColors = lAllColors;
|
||||
oTransferServer = new TransferServer();
|
||||
oTransferServer.lVertices = lAllVertices;
|
||||
oTransferServer.lColors = lAllColors;
|
||||
|
||||
InitializeComponent();
|
||||
}
|
||||
@@ -100,7 +100,7 @@ namespace KinectServer
|
||||
stream.Close();
|
||||
|
||||
oServer.StopServer();
|
||||
oTranfserServer.StopServer();
|
||||
oTransferServer.StopServer();
|
||||
}
|
||||
|
||||
//Starts the server
|
||||
@@ -111,13 +111,13 @@ namespace KinectServer
|
||||
if (bServerRunning)
|
||||
{
|
||||
oServer.StartServer();
|
||||
oTranfserServer.StartServer();
|
||||
oTransferServer.StartServer();
|
||||
btStart.Text = "Stop server";
|
||||
}
|
||||
else
|
||||
{
|
||||
oServer.StopServer();
|
||||
oTranfserServer.StopServer();
|
||||
oTransferServer.StopServer();
|
||||
btStart.Text = "Start server";
|
||||
}
|
||||
}
|
||||
@@ -224,7 +224,7 @@ namespace KinectServer
|
||||
if (!oSettings.bMergeScansForSave)
|
||||
{
|
||||
string outputFilename = outDir + "\\" + nFrames.ToString().PadLeft(5, '0') + i.ToString() + ".ply";
|
||||
saveToPly(outputFilename, lFrameVertsAllDevices[i], lFrameRGBAllDevices[i], oSettings.bSaveAsBinaryPLY);
|
||||
Utils.saveToPly(outputFilename, lFrameVertsAllDevices[i], lFrameRGBAllDevices[i], oSettings.bSaveAsBinaryPLY);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -232,7 +232,7 @@ namespace KinectServer
|
||||
if (oSettings.bMergeScansForSave)
|
||||
{
|
||||
string outputFilename = outDir + "\\" + nFrames.ToString().PadLeft(5, '0') + ".ply";
|
||||
saveToPly(outputFilename, lFrameVerts, lFrameRGB, oSettings.bSaveAsBinaryPLY);
|
||||
Utils.saveToPly(outputFilename, lFrameVerts, lFrameRGB, oSettings.bSaveAsBinaryPLY);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -457,55 +457,6 @@ namespace KinectServer
|
||||
refineWorker.RunWorkerAsync();
|
||||
}
|
||||
|
||||
private void saveToPly(string filename, List<Single> vertices, List<byte> colors, bool binary)
|
||||
{
|
||||
int nVertices = vertices.Count / 3;
|
||||
|
||||
FileStream fileStream = File.Open(filename, FileMode.Create);
|
||||
|
||||
System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(fileStream);
|
||||
System.IO.BinaryWriter binaryWriter = new System.IO.BinaryWriter(fileStream);
|
||||
|
||||
//PLY file header is written here.
|
||||
if (binary)
|
||||
streamWriter.WriteLine("ply\nformat binary_little_endian 1.0");
|
||||
else
|
||||
streamWriter.WriteLine("ply\nformat ascii 1.0\n");
|
||||
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();
|
||||
|
||||
//Vertex and color data are written here.
|
||||
if (binary)
|
||||
{
|
||||
for (int j = 0; j < vertices.Count / 3; j++)
|
||||
{
|
||||
for (int k = 0; k < 3; k++)
|
||||
binaryWriter.Write(vertices[j * 3 + k]);
|
||||
for (int k = 0; k < 3; k++)
|
||||
{
|
||||
byte temp = colors[j * 3 + k];
|
||||
binaryWriter.Write(temp);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int j = 0; j < vertices.Count / 3; j++)
|
||||
{
|
||||
string s = "";
|
||||
for (int k = 0; k < 3; k++)
|
||||
s += vertices[j * 3 + k].ToString(CultureInfo.InvariantCulture) + " ";
|
||||
for (int k = 0; k < 3; k++)
|
||||
s += colors[j * 3 + k].ToString(CultureInfo.InvariantCulture) + " ";
|
||||
streamWriter.WriteLine(s);
|
||||
}
|
||||
}
|
||||
streamWriter.Flush();
|
||||
binaryWriter.Flush();
|
||||
fileStream.Close();
|
||||
}
|
||||
|
||||
void RestartUpdateWorker()
|
||||
{
|
||||
if (!updateWorker.IsBusy)
|
||||
|
||||
@@ -33,7 +33,7 @@ enum ECameraMode
|
||||
|
||||
namespace KinectServer
|
||||
{
|
||||
class OpenGLWindow : GameWindow
|
||||
public class OpenGLWindow : GameWindow
|
||||
{
|
||||
int PointCount;
|
||||
int LineCount;
|
||||
|
||||
@@ -11,7 +11,7 @@ using System.Net;
|
||||
|
||||
namespace KinectServer
|
||||
{
|
||||
class TransferServer
|
||||
public class TransferServer
|
||||
{
|
||||
public List<float> lVertices = new List<float>();
|
||||
public List<byte> lColors = new List<byte>();
|
||||
@@ -22,6 +22,11 @@ namespace KinectServer
|
||||
object oClientSocketLock = new object();
|
||||
bool bServerRunning = false;
|
||||
|
||||
~TransferServer()
|
||||
{
|
||||
StopServer();
|
||||
}
|
||||
|
||||
public void StartServer()
|
||||
{
|
||||
if (!bServerRunning)
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Runtime.Serialization.Formatters.Binary;
|
||||
|
||||
namespace KinectServer
|
||||
{
|
||||
class TransferSocket
|
||||
public class TransferSocket
|
||||
{
|
||||
TcpClient oSocket;
|
||||
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
// }
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Globalization;
|
||||
|
||||
namespace KinectServer
|
||||
{
|
||||
@@ -157,4 +159,56 @@ namespace KinectServer
|
||||
public List<Joint> lJoints;
|
||||
public List<Point2f> lJointsInColorSpace;
|
||||
}
|
||||
|
||||
public class Utils
|
||||
{
|
||||
public static void saveToPly(string filename, List<Single> vertices, List<byte> colors, bool binary)
|
||||
{
|
||||
int nVertices = vertices.Count / 3;
|
||||
|
||||
FileStream fileStream = File.Open(filename, FileMode.Create);
|
||||
|
||||
System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(fileStream);
|
||||
System.IO.BinaryWriter binaryWriter = new System.IO.BinaryWriter(fileStream);
|
||||
|
||||
//PLY file header is written here.
|
||||
if (binary)
|
||||
streamWriter.WriteLine("ply\nformat binary_little_endian 1.0");
|
||||
else
|
||||
streamWriter.WriteLine("ply\nformat ascii 1.0\n");
|
||||
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();
|
||||
|
||||
//Vertex and color data are written here.
|
||||
if (binary)
|
||||
{
|
||||
for (int j = 0; j < vertices.Count / 3; j++)
|
||||
{
|
||||
for (int k = 0; k < 3; k++)
|
||||
binaryWriter.Write(vertices[j * 3 + k]);
|
||||
for (int k = 0; k < 3; k++)
|
||||
{
|
||||
byte temp = colors[j * 3 + k];
|
||||
binaryWriter.Write(temp);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int j = 0; j < vertices.Count / 3; j++)
|
||||
{
|
||||
string s = "";
|
||||
for (int k = 0; k < 3; k++)
|
||||
s += vertices[j * 3 + k].ToString(CultureInfo.InvariantCulture) + " ";
|
||||
for (int k = 0; k < 3; k++)
|
||||
s += colors[j * 3 + k].ToString(CultureInfo.InvariantCulture) + " ";
|
||||
streamWriter.WriteLine(s);
|
||||
}
|
||||
}
|
||||
streamWriter.Flush();
|
||||
binaryWriter.Flush();
|
||||
fileStream.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user