diff --git a/LiveScan.sln b/LiveScan.sln
index 58a4671..08a6f62 100644
--- a/LiveScan.sln
+++ b/LiveScan.sln
@@ -12,64 +12,36 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LiveScanServer", "LiveScanS
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ICP", "ICP\ICP.vcxproj", "{973EE923-B423-4BCD-AA08-B03DA40CB51F}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LiveScanPlayer", "LiveScanPlayer\LiveScanPlayer.csproj", "{E52AB19C-F67D-4932-90BD-CC549C1FEC8B}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Debug|Mixed Platforms = Debug|Mixed Platforms
Debug|Win32 = Debug|Win32
- Release ICP as exe|Any CPU = Release ICP as exe|Any CPU
- Release ICP as exe|Mixed Platforms = Release ICP as exe|Mixed Platforms
Release ICP as exe|Win32 = Release ICP as exe|Win32
- Release|Any CPU = Release|Any CPU
- Release|Mixed Platforms = Release|Mixed Platforms
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {9B550BBA-EAFB-4D12-8B1C-8FDA39361F52}.Debug|Any CPU.ActiveCfg = Debug|Win32
- {9B550BBA-EAFB-4D12-8B1C-8FDA39361F52}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {9B550BBA-EAFB-4D12-8B1C-8FDA39361F52}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{9B550BBA-EAFB-4D12-8B1C-8FDA39361F52}.Debug|Win32.ActiveCfg = Debug|Win32
{9B550BBA-EAFB-4D12-8B1C-8FDA39361F52}.Debug|Win32.Build.0 = Debug|Win32
- {9B550BBA-EAFB-4D12-8B1C-8FDA39361F52}.Release ICP as exe|Any CPU.ActiveCfg = Release|Win32
- {9B550BBA-EAFB-4D12-8B1C-8FDA39361F52}.Release ICP as exe|Mixed Platforms.ActiveCfg = Release|Win32
- {9B550BBA-EAFB-4D12-8B1C-8FDA39361F52}.Release ICP as exe|Mixed Platforms.Build.0 = Release|Win32
{9B550BBA-EAFB-4D12-8B1C-8FDA39361F52}.Release ICP as exe|Win32.ActiveCfg = Release|Win32
- {9B550BBA-EAFB-4D12-8B1C-8FDA39361F52}.Release ICP as exe|Win32.Build.0 = Release|Win32
- {9B550BBA-EAFB-4D12-8B1C-8FDA39361F52}.Release|Any CPU.ActiveCfg = Release|Win32
- {9B550BBA-EAFB-4D12-8B1C-8FDA39361F52}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {9B550BBA-EAFB-4D12-8B1C-8FDA39361F52}.Release|Mixed Platforms.Build.0 = Release|Win32
{9B550BBA-EAFB-4D12-8B1C-8FDA39361F52}.Release|Win32.ActiveCfg = Release|Win32
{9B550BBA-EAFB-4D12-8B1C-8FDA39361F52}.Release|Win32.Build.0 = Release|Win32
- {78422B2C-0EF1-4A28-A40E-2A7C4A9204B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {78422B2C-0EF1-4A28-A40E-2A7C4A9204B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {78422B2C-0EF1-4A28-A40E-2A7C4A9204B1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {78422B2C-0EF1-4A28-A40E-2A7C4A9204B1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{78422B2C-0EF1-4A28-A40E-2A7C4A9204B1}.Debug|Win32.ActiveCfg = Debug|Any CPU
- {78422B2C-0EF1-4A28-A40E-2A7C4A9204B1}.Release ICP as exe|Any CPU.ActiveCfg = Release|Any CPU
- {78422B2C-0EF1-4A28-A40E-2A7C4A9204B1}.Release ICP as exe|Any CPU.Build.0 = Release|Any CPU
- {78422B2C-0EF1-4A28-A40E-2A7C4A9204B1}.Release ICP as exe|Mixed Platforms.ActiveCfg = Release|Any CPU
- {78422B2C-0EF1-4A28-A40E-2A7C4A9204B1}.Release ICP as exe|Mixed Platforms.Build.0 = Release|Any CPU
+ {78422B2C-0EF1-4A28-A40E-2A7C4A9204B1}.Debug|Win32.Build.0 = Debug|Any CPU
{78422B2C-0EF1-4A28-A40E-2A7C4A9204B1}.Release ICP as exe|Win32.ActiveCfg = Release|Any CPU
- {78422B2C-0EF1-4A28-A40E-2A7C4A9204B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {78422B2C-0EF1-4A28-A40E-2A7C4A9204B1}.Release|Any CPU.Build.0 = Release|Any CPU
- {78422B2C-0EF1-4A28-A40E-2A7C4A9204B1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {78422B2C-0EF1-4A28-A40E-2A7C4A9204B1}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{78422B2C-0EF1-4A28-A40E-2A7C4A9204B1}.Release|Win32.ActiveCfg = Release|Any CPU
- {973EE923-B423-4BCD-AA08-B03DA40CB51F}.Debug|Any CPU.ActiveCfg = Debug|Win32
- {973EE923-B423-4BCD-AA08-B03DA40CB51F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {973EE923-B423-4BCD-AA08-B03DA40CB51F}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {78422B2C-0EF1-4A28-A40E-2A7C4A9204B1}.Release|Win32.Build.0 = Release|Any CPU
{973EE923-B423-4BCD-AA08-B03DA40CB51F}.Debug|Win32.ActiveCfg = Debug|Win32
{973EE923-B423-4BCD-AA08-B03DA40CB51F}.Debug|Win32.Build.0 = Debug|Win32
- {973EE923-B423-4BCD-AA08-B03DA40CB51F}.Release ICP as exe|Any CPU.ActiveCfg = Release|Win32
- {973EE923-B423-4BCD-AA08-B03DA40CB51F}.Release ICP as exe|Mixed Platforms.ActiveCfg = Release|Win32
- {973EE923-B423-4BCD-AA08-B03DA40CB51F}.Release ICP as exe|Mixed Platforms.Build.0 = Release|Win32
{973EE923-B423-4BCD-AA08-B03DA40CB51F}.Release ICP as exe|Win32.ActiveCfg = Release|Win32
{973EE923-B423-4BCD-AA08-B03DA40CB51F}.Release ICP as exe|Win32.Build.0 = Release|Win32
- {973EE923-B423-4BCD-AA08-B03DA40CB51F}.Release|Any CPU.ActiveCfg = Release DLL|Win32
- {973EE923-B423-4BCD-AA08-B03DA40CB51F}.Release|Mixed Platforms.ActiveCfg = Release DLL|Win32
- {973EE923-B423-4BCD-AA08-B03DA40CB51F}.Release|Mixed Platforms.Build.0 = Release DLL|Win32
{973EE923-B423-4BCD-AA08-B03DA40CB51F}.Release|Win32.ActiveCfg = Release DLL|Win32
{973EE923-B423-4BCD-AA08-B03DA40CB51F}.Release|Win32.Build.0 = Release DLL|Win32
+ {E52AB19C-F67D-4932-90BD-CC549C1FEC8B}.Debug|Win32.ActiveCfg = Debug|Any CPU
+ {E52AB19C-F67D-4932-90BD-CC549C1FEC8B}.Debug|Win32.Build.0 = Debug|Any CPU
+ {E52AB19C-F67D-4932-90BD-CC549C1FEC8B}.Release ICP as exe|Win32.ActiveCfg = Release|Any CPU
+ {E52AB19C-F67D-4932-90BD-CC549C1FEC8B}.Release|Win32.ActiveCfg = Release|Any CPU
+ {E52AB19C-F67D-4932-90BD-CC549C1FEC8B}.Release|Win32.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/LiveScanPlayer/App.config b/LiveScanPlayer/App.config
new file mode 100644
index 0000000..8e15646
--- /dev/null
+++ b/LiveScanPlayer/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/LiveScanPlayer/FrameFileReader.cs b/LiveScanPlayer/FrameFileReader.cs
new file mode 100644
index 0000000..c972864
--- /dev/null
+++ b/LiveScanPlayer/FrameFileReader.cs
@@ -0,0 +1,122 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.IO;
+
+namespace LiveScanPlayer
+{
+ class FrameFileReader
+ {
+ BinaryReader binaryReader;
+ int currentFrameIdx = 0;
+ string filename;
+
+ public FrameFileReader(string filename)
+ {
+ this.filename = filename;
+ binaryReader = new BinaryReader(File.Open(this.filename, FileMode.Open));
+ }
+
+ ~FrameFileReader()
+ {
+ Dispose();
+ }
+
+ public int frameIdx
+ {
+ get
+ {
+ return currentFrameIdx;
+ }
+ set
+ {
+ JumpToFrame(value);
+ }
+ }
+
+ public void Dispose()
+ {
+ binaryReader.Dispose();
+ }
+
+ public void ReadFrame(List vertices, List colors)
+ {
+ if (binaryReader.BaseStream.Position == binaryReader.BaseStream.Length)
+ Rewind();
+
+ string[] lineParts = ReadLine().Split(' ');
+ int nPoints = Int32.Parse(lineParts[1]);
+ lineParts = ReadLine().Split(' ');
+ int frameTimestamp = Int32.Parse(lineParts[1]);
+
+ Console.WriteLine((frameTimestamp / 1000).ToString());
+
+ short[] tempVertices = new short[3 * nPoints];
+ byte[] tempColors = new byte[4 * nPoints];
+
+ int bytesPerVertexPoint = 3 * sizeof(short);
+ int bytesPerColorPoint = 4 * sizeof(byte);
+ int bytesPerPoint = bytesPerVertexPoint + bytesPerColorPoint;
+
+ byte[] frameData = binaryReader.ReadBytes(bytesPerPoint * nPoints);
+
+ if (frameData.Length < bytesPerPoint * nPoints)
+ {
+ Rewind();
+ ReadFrame(vertices, colors);
+ return;
+ }
+
+ int vertexDataSize = nPoints * bytesPerVertexPoint;
+ int colorDataSize = nPoints * bytesPerColorPoint;
+ Buffer.BlockCopy(frameData, 0, tempVertices, 0, vertexDataSize);
+ Buffer.BlockCopy(frameData, vertexDataSize, tempColors, 0, colorDataSize);
+
+ for (int i = 0; i < nPoints; i++)
+ {
+ for (int j = 0; j < 3; j++)
+ {
+ vertices.Add(tempVertices[3 * i + j] / 1000.0f);
+ colors.Add(tempColors[4 * i + j]);
+ }
+ }
+
+ binaryReader.ReadByte();
+
+ currentFrameIdx++;
+ }
+
+ public void JumpToFrame(int frameIdx)
+ {
+ Rewind();
+ for (int i = 0; i < frameIdx; i++)
+ {
+ List vertices = new List();
+ List colors = new List();
+ ReadFrame(vertices, colors);
+ }
+ }
+
+ public string ReadLine()
+ {
+ StringBuilder builder = new StringBuilder();
+ byte buffer = binaryReader.ReadByte();
+
+ while (buffer != '\n')
+ {
+ builder.Append((char)buffer);
+ buffer = binaryReader.ReadByte();
+ }
+
+ return builder.ToString();
+ }
+
+ public void Rewind()
+ {
+ currentFrameIdx = 0;
+ binaryReader.BaseStream.Seek(0, SeekOrigin.Begin);
+ }
+ }
+}
diff --git a/LiveScanPlayer/LiveScanPlayer.csproj b/LiveScanPlayer/LiveScanPlayer.csproj
new file mode 100644
index 0000000..189145c
--- /dev/null
+++ b/LiveScanPlayer/LiveScanPlayer.csproj
@@ -0,0 +1,99 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {E52AB19C-F67D-4932-90BD-CC549C1FEC8B}
+ WinExe
+ Properties
+ LiveScanPlayer
+ LiveScanPlayer
+ v4.5
+ 512
+
+
+ AnyCPU
+ true
+ full
+ false
+ ..\bin\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ ..\bin\
+ TRACE
+ prompt
+ 4
+
+
+
+ False
+ ..\bin\OpenTK.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ PlayerWindowForm.cs
+
+
+
+
+
+ PlayerWindowForm.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
+ {78422b2c-0ef1-4a28-a40e-2a7c4a9204b1}
+ LiveScanServer
+
+
+
+
+
\ No newline at end of file
diff --git a/LiveScanPlayer/PlayerWindowForm.Designer.cs b/LiveScanPlayer/PlayerWindowForm.Designer.cs
new file mode 100644
index 0000000..ba27998
--- /dev/null
+++ b/LiveScanPlayer/PlayerWindowForm.Designer.cs
@@ -0,0 +1,156 @@
+namespace LiveScanPlayer
+{
+ partial class PlayerWindowForm
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.btSelect = new System.Windows.Forms.Button();
+ this.btStart = new System.Windows.Forms.Button();
+ this.btShow = new System.Windows.Forms.Button();
+ this.updateWorker = new System.ComponentModel.BackgroundWorker();
+ this.OpenGLWorker = new System.ComponentModel.BackgroundWorker();
+ this.btRewind = new System.Windows.Forms.Button();
+ this.btRemove = new System.Windows.Forms.Button();
+ this.lFrameFilesListView = new System.Windows.Forms.ListView();
+ this.chSaveFrames = new System.Windows.Forms.CheckBox();
+ this.SuspendLayout();
+ //
+ // btSelect
+ //
+ this.btSelect.Location = new System.Drawing.Point(12, 41);
+ this.btSelect.Name = "btSelect";
+ this.btSelect.Size = new System.Drawing.Size(75, 23);
+ this.btSelect.TabIndex = 0;
+ this.btSelect.Text = "Select files";
+ this.btSelect.UseVisualStyleBackColor = true;
+ this.btSelect.Click += new System.EventHandler(this.btSelect_Click);
+ //
+ // btStart
+ //
+ this.btStart.Location = new System.Drawing.Point(12, 12);
+ this.btStart.Name = "btStart";
+ this.btStart.Size = new System.Drawing.Size(75, 23);
+ this.btStart.TabIndex = 1;
+ this.btStart.Text = "Start player";
+ this.btStart.UseVisualStyleBackColor = true;
+ this.btStart.Click += new System.EventHandler(this.btStart_Click);
+ //
+ // btShow
+ //
+ this.btShow.Location = new System.Drawing.Point(12, 128);
+ this.btShow.Name = "btShow";
+ this.btShow.Size = new System.Drawing.Size(75, 23);
+ this.btShow.TabIndex = 2;
+ this.btShow.Text = "Show live";
+ this.btShow.UseVisualStyleBackColor = true;
+ this.btShow.Click += new System.EventHandler(this.btShow_Click);
+ //
+ // updateWorker
+ //
+ this.updateWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.updateWorker_DoWork);
+ //
+ // OpenGLWorker
+ //
+ this.OpenGLWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.OpenGLWorker_DoWork);
+ //
+ // btRewind
+ //
+ this.btRewind.Location = new System.Drawing.Point(12, 99);
+ this.btRewind.Name = "btRewind";
+ this.btRewind.Size = new System.Drawing.Size(75, 23);
+ this.btRewind.TabIndex = 5;
+ this.btRewind.Text = "Rewind";
+ this.btRewind.UseVisualStyleBackColor = true;
+ this.btRewind.Click += new System.EventHandler(this.btRewind_Click);
+ //
+ // btRemove
+ //
+ this.btRemove.Location = new System.Drawing.Point(12, 70);
+ this.btRemove.Name = "btRemove";
+ this.btRemove.Size = new System.Drawing.Size(75, 23);
+ this.btRemove.TabIndex = 6;
+ this.btRemove.Text = "Remove file";
+ this.btRemove.UseVisualStyleBackColor = true;
+ this.btRemove.Click += new System.EventHandler(this.btRemove_Click);
+ //
+ // lFrameFilesListView
+ //
+ this.lFrameFilesListView.LabelEdit = true;
+ this.lFrameFilesListView.Location = new System.Drawing.Point(93, 12);
+ this.lFrameFilesListView.MultiSelect = false;
+ this.lFrameFilesListView.Name = "lFrameFilesListView";
+ this.lFrameFilesListView.Size = new System.Drawing.Size(422, 97);
+ this.lFrameFilesListView.TabIndex = 7;
+ this.lFrameFilesListView.UseCompatibleStateImageBehavior = false;
+ this.lFrameFilesListView.View = System.Windows.Forms.View.Details;
+ this.lFrameFilesListView.AfterLabelEdit += new System.Windows.Forms.LabelEditEventHandler(this.lFrameFilesListView_AfterLabelEdit);
+ this.lFrameFilesListView.DoubleClick += new System.EventHandler(this.lFrameFilesListView_DoubleClick);
+ //
+ // chSaveFrames
+ //
+ this.chSaveFrames.AutoSize = true;
+ this.chSaveFrames.Location = new System.Drawing.Point(435, 128);
+ this.chSaveFrames.Name = "chSaveFrames";
+ this.chSaveFrames.Size = new System.Drawing.Size(83, 17);
+ this.chSaveFrames.TabIndex = 8;
+ this.chSaveFrames.Text = "save frames";
+ this.chSaveFrames.UseVisualStyleBackColor = true;
+ //
+ // PlayerWindowForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(527, 166);
+ this.Controls.Add(this.chSaveFrames);
+ this.Controls.Add(this.lFrameFilesListView);
+ this.Controls.Add(this.btRemove);
+ this.Controls.Add(this.btRewind);
+ this.Controls.Add(this.btShow);
+ this.Controls.Add(this.btStart);
+ this.Controls.Add(this.btSelect);
+ this.Name = "PlayerWindowForm";
+ this.Text = "LiveScanPlayer";
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.PlayerWindowForm_FormClosing);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Button btSelect;
+ private System.Windows.Forms.Button btStart;
+ private System.Windows.Forms.Button btShow;
+ private System.ComponentModel.BackgroundWorker updateWorker;
+ private System.ComponentModel.BackgroundWorker OpenGLWorker;
+ private System.Windows.Forms.Button btRewind;
+ private System.Windows.Forms.Button btRemove;
+ private System.Windows.Forms.ListView lFrameFilesListView;
+ private System.Windows.Forms.CheckBox chSaveFrames;
+ }
+}
+
diff --git a/LiveScanPlayer/PlayerWindowForm.cs b/LiveScanPlayer/PlayerWindowForm.cs
new file mode 100644
index 0000000..e9fdfae
--- /dev/null
+++ b/LiveScanPlayer/PlayerWindowForm.cs
@@ -0,0 +1,219 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using System.Threading;
+using System.IO;
+using KinectServer;
+
+namespace LiveScanPlayer
+{
+ public partial class PlayerWindowForm : Form
+ {
+ BindingList lFrameFiles = new BindingList();
+ bool bPlayerRunning = false;
+
+ List lAllVertices = new List();
+ List lAllColors = new List();
+
+ TransferServer oTransferServer = new TransferServer();
+
+ AutoResetEvent eUpdateWorkerFinished = new AutoResetEvent(false);
+
+ public PlayerWindowForm()
+ {
+ InitializeComponent();
+
+ oTransferServer.lVertices = lAllVertices;
+ oTransferServer.lColors = lAllColors;
+
+ lFrameFilesListView.Columns.Add("Current frame", 75);
+ lFrameFilesListView.Columns.Add("Filename", 300);
+ }
+
+ private void PlayerWindowForm_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ bPlayerRunning = false;
+ oTransferServer.StopServer();
+ }
+
+ private void btSelect_Click(object sender, EventArgs e)
+ {
+ OpenFileDialog dialog = new OpenFileDialog();
+ dialog.Multiselect = true;
+ dialog.ShowDialog();
+
+ lock (lFrameFiles)
+ {
+ for (int i = 0; i < dialog.FileNames.Length; i++)
+ {
+ lFrameFiles.Add(new FrameFileReader(dialog.FileNames[i]));
+
+ var item = new ListViewItem(new [] { "0", dialog.FileNames[i]});
+ lFrameFilesListView.Items.Add(item);
+ }
+ }
+ }
+
+ private void btStart_Click(object sender, EventArgs e)
+ {
+ bPlayerRunning = !bPlayerRunning;
+
+ if (bPlayerRunning)
+ {
+ oTransferServer.StartServer();
+ updateWorker.RunWorkerAsync();
+ btStart.Text = "Stop player";
+ }
+ else
+ {
+ oTransferServer.StopServer();
+ btStart.Text = "Start player";
+ eUpdateWorkerFinished.WaitOne();
+ }
+ }
+
+ private void btRemove_Click(object sender, EventArgs e)
+ {
+ if (lFrameFilesListView.SelectedIndices.Count == 0)
+ return;
+
+ lock (lFrameFiles)
+ {
+ int idx = lFrameFilesListView.SelectedIndices[0];
+ lFrameFilesListView.Items.RemoveAt(idx);
+ lFrameFiles[idx].Dispose();
+ lFrameFiles.RemoveAt(idx);
+ }
+ }
+
+ private void btRewind_Click(object sender, EventArgs e)
+ {
+ lock (lFrameFiles)
+ {
+ for (int i = 0; i < lFrameFiles.Count; i++)
+ {
+ lFrameFiles[i].Rewind();
+ lFrameFilesListView.Items[i].Text = "0";
+ }
+ }
+ }
+
+ private void btShow_Click(object sender, EventArgs e)
+ {
+ if (!OpenGLWorker.IsBusy)
+ OpenGLWorker.RunWorkerAsync();
+ }
+
+ private void updateWorker_DoWork(object sender, DoWorkEventArgs e)
+ {
+ int curFrameIdx = 0;
+ string outDir = "outPlayer\\";
+ DirectoryInfo di = Directory.CreateDirectory(outDir);
+
+ while (bPlayerRunning)
+ {
+ Thread.Sleep(50);
+
+ List tempAllVertices = new List();
+ List tempAllColors = new List();
+
+ lock (lFrameFiles)
+ {
+ for (int i = 0; i < lFrameFiles.Count; i++)
+ {
+ List vertices = new List();
+ List colors = new List();
+ lFrameFiles[i].ReadFrame(vertices, colors);
+
+ tempAllVertices.AddRange(vertices);
+ tempAllColors.AddRange(colors);
+ }
+ }
+
+ Thread frameIdxUpdate = new Thread(() => this.Invoke((MethodInvoker)delegate { this.UpdateDisplayedFrameIndices(); }));
+ frameIdxUpdate.Start();
+
+ lock (lAllVertices)
+ {
+ lAllVertices.Clear();
+ lAllColors.Clear();
+ lAllVertices.AddRange(tempAllVertices);
+ lAllColors.AddRange(tempAllColors);
+ }
+
+ if (chSaveFrames.Checked)
+ SaveCurrentFrameToFile(outDir, curFrameIdx);
+
+
+ curFrameIdx++;
+ }
+
+ eUpdateWorkerFinished.Set();
+ }
+
+ private void OpenGLWorker_DoWork(object sender, DoWorkEventArgs e)
+ {
+ OpenGLWindow openGLWindow = new OpenGLWindow();
+
+ openGLWindow.vertices = lAllVertices;
+ openGLWindow.colors = lAllColors;
+
+ openGLWindow.Run();
+ }
+
+ private void lFrameFilesListView_DoubleClick(object sender, EventArgs e)
+ {
+ lFrameFilesListView.SelectedItems[0].BeginEdit();
+ }
+
+ private void lFrameFilesListView_AfterLabelEdit(object sender, LabelEditEventArgs e)
+ {
+ int fileIdx = lFrameFilesListView.SelectedIndices[0];
+ int frameIdx;
+ bool res = Int32.TryParse(e.Label, out frameIdx);
+
+ if (!res)
+ {
+ e.CancelEdit = true;
+ return;
+ }
+
+ lock (lFrameFiles)
+ {
+ lFrameFiles[fileIdx].JumpToFrame(frameIdx);
+ }
+
+ }
+
+ private void UpdateDisplayedFrameIndices()
+ {
+ lock (lFrameFiles)
+ {
+ for (int i = 0; i < lFrameFiles.Count; i++)
+ {
+ lFrameFilesListView.Items[i].SubItems[0].Text = lFrameFiles[i].frameIdx.ToString();
+ }
+ }
+ }
+
+ private void SaveCurrentFrameToFile(string outDir, int frameIdx)
+ {
+ List lVertices = new List();
+ List lColors = new List();
+
+ lock (lAllVertices)
+ {
+ lVertices.AddRange(lAllVertices);
+ lColors.AddRange(lAllColors);
+ }
+ string outputFilename = outDir + frameIdx.ToString().PadLeft(5, '0') + ".ply";
+ Utils.saveToPly(outputFilename, lVertices, lColors, true);
+ }
+ }
+}
diff --git a/LiveScanPlayer/PlayerWindowForm.resx b/LiveScanPlayer/PlayerWindowForm.resx
new file mode 100644
index 0000000..ba43598
--- /dev/null
+++ b/LiveScanPlayer/PlayerWindowForm.resx
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 133, 17
+
+
+ 263, 17
+
+
\ No newline at end of file
diff --git a/LiveScanPlayer/Program.cs b/LiveScanPlayer/Program.cs
new file mode 100644
index 0000000..f21fc5d
--- /dev/null
+++ b/LiveScanPlayer/Program.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace LiveScanPlayer
+{
+ static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new PlayerWindowForm());
+ }
+ }
+}
diff --git a/LiveScanPlayer/Properties/AssemblyInfo.cs b/LiveScanPlayer/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..e6c3a18
--- /dev/null
+++ b/LiveScanPlayer/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("LiveScanPlayer")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("LiveScanPlayer")]
+[assembly: AssemblyCopyright("Copyright © 2017")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("b435173f-8157-41c6-b94f-3cc1feb6153e")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/LiveScanPlayer/Properties/Resources.Designer.cs b/LiveScanPlayer/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..5c92f51
--- /dev/null
+++ b/LiveScanPlayer/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace LiveScanPlayer.Properties
+{
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources
+ {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources()
+ {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("LiveScanPlayer.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/LiveScanPlayer/Properties/Resources.resx b/LiveScanPlayer/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/LiveScanPlayer/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/LiveScanPlayer/Properties/Settings.Designer.cs b/LiveScanPlayer/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..04b12e7
--- /dev/null
+++ b/LiveScanPlayer/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace LiveScanPlayer.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/LiveScanPlayer/Properties/Settings.settings b/LiveScanPlayer/Properties/Settings.settings
new file mode 100644
index 0000000..3964565
--- /dev/null
+++ b/LiveScanPlayer/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/LiveScanServer/KinectSettings.cs b/LiveScanServer/KinectSettings.cs
index f5ed1d8..3627eb3 100644
--- a/LiveScanServer/KinectSettings.cs
+++ b/LiveScanServer/KinectSettings.cs
@@ -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()
diff --git a/LiveScanServer/MainWindowForm.Designer.cs b/LiveScanServer/MainWindowForm.Designer.cs
index d8d7fbf..927f778 100644
--- a/LiveScanServer/MainWindowForm.Designer.cs
+++ b/LiveScanServer/MainWindowForm.Designer.cs
@@ -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);
diff --git a/LiveScanServer/MainWindowForm.cs b/LiveScanServer/MainWindowForm.cs
index f4632a0..93eaff0 100644
--- a/LiveScanServer/MainWindowForm.cs
+++ b/LiveScanServer/MainWindowForm.cs
@@ -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 vertices, List 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)
diff --git a/LiveScanServer/OpenGLWindow.cs b/LiveScanServer/OpenGLWindow.cs
index f8969e7..5a5c570 100644
--- a/LiveScanServer/OpenGLWindow.cs
+++ b/LiveScanServer/OpenGLWindow.cs
@@ -33,7 +33,7 @@ enum ECameraMode
namespace KinectServer
{
- class OpenGLWindow : GameWindow
+ public class OpenGLWindow : GameWindow
{
int PointCount;
int LineCount;
diff --git a/LiveScanServer/TransferServer.cs b/LiveScanServer/TransferServer.cs
index 70ccd06..ebedd5f 100644
--- a/LiveScanServer/TransferServer.cs
+++ b/LiveScanServer/TransferServer.cs
@@ -11,7 +11,7 @@ using System.Net;
namespace KinectServer
{
- class TransferServer
+ public class TransferServer
{
public List lVertices = new List();
public List lColors = new List();
@@ -22,6 +22,11 @@ namespace KinectServer
object oClientSocketLock = new object();
bool bServerRunning = false;
+ ~TransferServer()
+ {
+ StopServer();
+ }
+
public void StartServer()
{
if (!bServerRunning)
diff --git a/LiveScanServer/TransferSocket.cs b/LiveScanServer/TransferSocket.cs
index 9d2c141..489b18d 100644
--- a/LiveScanServer/TransferSocket.cs
+++ b/LiveScanServer/TransferSocket.cs
@@ -9,7 +9,7 @@ using System.Runtime.Serialization.Formatters.Binary;
namespace KinectServer
{
- class TransferSocket
+ public class TransferSocket
{
TcpClient oSocket;
diff --git a/LiveScanServer/Utils.cs b/LiveScanServer/Utils.cs
index f3e600e..4ab3753 100644
--- a/LiveScanServer/Utils.cs
+++ b/LiveScanServer/Utils.cs
@@ -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 lJoints;
public List lJointsInColorSpace;
}
+
+ public class Utils
+ {
+ public static void saveToPly(string filename, List vertices, List 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/include/LiveScanClient/liveScanClient.h b/include/LiveScanClient/liveScanClient.h
index 51684b5..cec4563 100644
--- a/include/LiveScanClient/liveScanClient.h
+++ b/include/LiveScanClient/liveScanClient.h
@@ -55,7 +55,6 @@ private:
bool m_bShowDepth;
bool m_bFrameCompression;
int m_iCompressionLevel;
- bool m_bCaptureToFile; // false if capture frames to memory
FrameFileWriterReader m_framesFileWriterReader;
@@ -66,8 +65,6 @@ private:
std::vector m_vLastFrameVertices;
std::vector m_vLastFrameRGB;
std::vector m_vLastFrameBody;
- std::vector> m_vGatheredVertices;
- std::vector> m_vGatheredRGBPoints;
HWND m_hWnd;
INT64 m_nLastCounter;
diff --git a/src/LiveScanClient/frameFileWriterReader.cpp b/src/LiveScanClient/frameFileWriterReader.cpp
index d13b9ef..fe33503 100644
--- a/src/LiveScanClient/frameFileWriterReader.cpp
+++ b/src/LiveScanClient/frameFileWriterReader.cpp
@@ -46,7 +46,7 @@ void FrameFileWriterReader::openNewFileForWriting()
char filename[1024];
time_t t = time(0);
struct tm * now = localtime(&t);
- sprintf(filename, "recording_%04d_%02d_%02d_%02d_%02d.bin", now->tm_year, now->tm_mon, now->tm_mday, now->tm_hour, now->tm_min, now->tm_sec);
+ sprintf(filename, "recording_%04d_%02d_%02d_%02d_%02d.bin", now->tm_year + 1900, now->tm_mon + 1, now->tm_mday, now->tm_hour, now->tm_min, now->tm_sec);
m_sFilename = filename;
m_pFileHandle = fopen(filename, "wb");
diff --git a/src/LiveScanClient/liveScanClient.cpp b/src/LiveScanClient/liveScanClient.cpp
index 28f2721..c852c27 100644
--- a/src/LiveScanClient/liveScanClient.cpp
+++ b/src/LiveScanClient/liveScanClient.cpp
@@ -53,7 +53,6 @@ LiveScanClient::LiveScanClient() :
m_bFilter(false),
m_bStreamOnlyBodies(false),
m_bCaptureFrame(false),
- m_bCaptureToFile(true),
m_bConnected(false),
m_bConfirmCaptured(false),
m_bConfirmCalibrated(false),
@@ -208,19 +207,9 @@ void LiveScanClient::UpdateFrame()
if (m_bCaptureFrame)
{
- if (m_bCaptureToFile)
- {
- m_framesFileWriterReader.writeFrame(m_vLastFrameVertices, m_vLastFrameRGB);
- m_bConfirmCaptured = true;
- m_bCaptureFrame = false;
- }
- else
- {
- m_vGatheredVertices.push_back(m_vLastFrameVertices);
- m_vGatheredRGBPoints.push_back(m_vLastFrameRGB);
- m_bConfirmCaptured = true;
- m_bCaptureFrame = false;
- }
+ m_framesFileWriterReader.writeFrame(m_vLastFrameVertices, m_vLastFrameRGB);
+ m_bConfirmCaptured = true;
+ m_bCaptureFrame = false;
}
}
@@ -340,8 +329,6 @@ LRESULT CALLBACK LiveScanClient::DlgProc(HWND hWnd, UINT message, WPARAM wParam,
}
else
{
- m_vGatheredVertices.clear();
- m_vGatheredRGBPoints.clear();
try
{
char address[20];
@@ -532,33 +519,16 @@ void LiveScanClient::HandleSocket()
{
byteToSend = MSG_STORED_FRAME;
m_pClientSocket->SendBytes(&byteToSend, 1);
- if (m_bCaptureToFile)
- {
- vector points;
- vector colors;
- bool res = m_framesFileWriterReader.readFrame(points, colors);
- if (res == false)
- {
- int size = -1;
- m_pClientSocket->SendBytes((char*)&size, 4);
- } else
- SendFrame(points, colors, m_vLastFrameBody);
- }
- else
- {
- if (m_vGatheredRGBPoints.size() > 0)
- {
- SendFrame(m_vGatheredVertices[0], m_vGatheredRGBPoints[0], m_vLastFrameBody);
- m_vGatheredRGBPoints.erase(m_vGatheredRGBPoints.begin(), m_vGatheredRGBPoints.begin() + 1);
- m_vGatheredVertices.erase(m_vGatheredVertices.begin(), m_vGatheredVertices.begin() + 1);
- }
- else
- {
- int size = -1;
- m_pClientSocket->SendBytes((char*)&size, 4);
- }
- }
+ vector points;
+ vector colors;
+ bool res = m_framesFileWriterReader.readFrame(points, colors);
+ if (res == false)
+ {
+ int size = -1;
+ m_pClientSocket->SendBytes((char*)&size, 4);
+ } else
+ SendFrame(points, colors, m_vLastFrameBody);
}
//send last frame
else if (received[i] == MSG_REQUEST_LAST_FRAME)
@@ -591,8 +561,7 @@ void LiveScanClient::HandleSocket()
}
else if (received[i] == MSG_CLEAR_STORED_FRAMES)
{
- m_vGatheredVertices.clear();
- m_vGatheredRGBPoints.clear();
+ m_framesFileWriterReader.closeFileIfOpened();
}
}
@@ -644,7 +613,6 @@ void LiveScanClient::SendFrame(vector vertices, vector RGB, vector
buffer[pos++] = RGB[i].rgbGreen;
buffer[pos++] = RGB[i].rgbBlue;
-
memcpy(buffer.data() + pos, ptr2, sizeof(short)* 3);
ptr2 += sizeof(short) * 3;
pos += sizeof(short) * 3;