private void SaveBodyModel() { var dialog = new SaveFileDialog { Title = "Save Model", Filter = "Wavefront OBJ|*.obj|STL (binary)|*.stl|PLY (text)|*.ply", FilterIndex = 0, DefaultExt = ".obj" }; if (dialog.ShowDialog() == true) { var flipAxes = true; switch (Path.GetExtension(dialog.FileName).ToLowerInvariant()) { case ".obj": using (var writer = File.CreateText(dialog.FileName)) { ModelIO.SaveAsciiObjMesh(engine.ScannedMesh, writer, flipAxes); } break; case ".stl": using (var file = File.Create(dialog.FileName)) using (var writer = new BinaryWriter(file)) { ModelIO.SaveBinaryStlMesh(engine.ScannedMesh, writer, flipAxes); } break; case ".ply": using (var writer = File.CreateText(dialog.FileName)) { ModelIO.SaveAsciiPlyMesh(engine.ScannedMesh, writer, flipAxes); } break; default: uis.ShowError("Unsupported file format"); break; } } }
/// <summary> /// Saves the mesh with using ModelIO.cs. Saves the skeleton.csv, gets the values from WindowControl.cs. /// </summary> private void SaveBodyModel() { var dialogCSV = new SaveFileDialog { Title = "Save Model", Filter = "CSV|*.csv", FilterIndex = 0, DefaultExt = ".csv", InitialDirectory = Directory.GetCurrentDirectory() + "\\Recorded_Data" }; string dateTime = DateTime.Now.ToString("yyyyMMdd_hhmmss"); dialogCSV.FileName = dateTime; if (dialogCSV.ShowDialog() == true) { fileName = dialogCSV.FileName; using (var writer = File.CreateText(dialogCSV.FileName)) { writer.Write("Joints," + "X," + "Y," + "Z"); writer.WriteLine(); } } WindowControl.namePass = true; WindowControl.nameHolder = Path.GetFileNameWithoutExtension(dialogCSV.FileName); using (StreamWriter writer = new StreamWriter(fileName, true)) { writer.Write("Degree" + "," + WindowControl.degree + "," + WindowControl.degree + "," + WindowControl.degree + "\nSpineBase" + "," + WindowControl.spineBase_X + "," + WindowControl.spineBase_Y + "," + WindowControl.spineBase_Z + "\nSpineMid" + "," + WindowControl.spineMid_X + "," + WindowControl.spineMid_Y + "," + WindowControl.spineMid_Z + "\nNeck" + "," + WindowControl.neck_X + "," + WindowControl.neck_Y + "," + WindowControl.neck_Z + "\nHead" + "," + WindowControl.head_X + "," + WindowControl.head_Y + "," + WindowControl.head_Z + "\nShoulderLeft" + "," + WindowControl.shoulderLeft_X + "," + WindowControl.shoulderLeft_Y + "," + WindowControl.shoulderLeft_Z + "\nElbowLeft" + "," + WindowControl.elbowLeft_X + "," + WindowControl.elbowLeft_Y + "," + WindowControl.elbowLeft_Z + "\nWristLeft" + "," + WindowControl.wristLeft_X + "," + WindowControl.wristLeft_Y + "," + WindowControl.wristLeft_Z + "\nHandLeft" + "," + WindowControl.handLeft_X + "," + WindowControl.handLeft_Y + "," + WindowControl.handLeft_Z + "\nShoulderRight" + "," + WindowControl.shoulderRight_X + "," + WindowControl.shoulderRight_Y + "," + WindowControl.shoulderRight_Z + "\nElbowRight" + "," + WindowControl.elbowRight_X + "," + WindowControl.elbowRight_Y + "," + WindowControl.elbowRight_Z + "\nWristRight" + "," + WindowControl.wristRight_X + "," + WindowControl.wristRight_Y + "," + WindowControl.wristRight_Z + "\nHandRight" + "," + WindowControl.handRight_X + "," + WindowControl.handRight_Y + "," + WindowControl.handRight_Z + "\nHipLeft" + "," + WindowControl.hipLeft_X + "," + WindowControl.hipLeft_Y + "," + WindowControl.hipLeft_Z + "\nKneeLeft" + "," + WindowControl.kneeLeft_X + "," + WindowControl.kneeLeft_Y + "," + WindowControl.kneeLeft_Z + "\nAnkleLeft" + "," + WindowControl.ankleLeft_X + "," + WindowControl.ankleLeft_Y + "," + WindowControl.ankleLeft_Z + "\nFootLeft" + "," + WindowControl.footLeft_X + "," + WindowControl.footLeft_Y + "," + WindowControl.footLeft_Z + "\nHipRight" + "," + WindowControl.hipRight_X + "," + WindowControl.hipRight_Y + "," + WindowControl.hipRight_Z + "\nKneeRight" + "," + WindowControl.kneeRight_X + "," + WindowControl.kneeRight_Y + "," + WindowControl.kneeRight_Z + "\nAnkleRight" + "," + WindowControl.ankleRight_X + "," + WindowControl.ankleRight_Y + "," + WindowControl.ankleRight_Z + "\nFootRight" + "," + WindowControl.footRight_X + "," + WindowControl.footRight_Y + "," + WindowControl.footRight_Z + "\nSpineShoulder" + "," + WindowControl.spineShoulder_X + "," + WindowControl.spineShoulder_Y + "," + WindowControl.spineShoulder_Z + "\nHandTipLeft" + "," + WindowControl.handTipLeft_X + "," + WindowControl.handTipLeft_Y + "," + WindowControl.handTipLeft_Z + "\nThumbLeft" + "," + WindowControl.thumbLeft_X + "," + WindowControl.thumbLeft_Y + "," + WindowControl.thumbLeft_Z + "\nHandTipRight" + "," + WindowControl.handTipRight_X + "," + WindowControl.handTipRight_Y + "," + WindowControl.handTipRight_Z + "\nThumbRight" + "," + WindowControl.thumbRight_X + "," + WindowControl.thumbRight_Y + "," + WindowControl.thumbRight_Z); writer.WriteLine(); } var dialog = new SaveFileDialog { Title = "Save Model", Filter = "Wavefront OBJ|*.obj|STL (binary)|*.stl|PLY (text)|*.ply", FilterIndex = 0, DefaultExt = ".obj" }; // Checks If the 3d object will have the same name with skeleton.csv. if (WindowControl.namePass) { dialog.FileName = WindowControl.nameHolder; } else { dialog.FileName = DateTime.Now.ToString("yyyyMMdd_hhmmss"); } if (saveFormat == ".obj") { dialog.Filter = "OBJ|*.obj"; dialog.DefaultExt = ".obj"; } else if (saveFormat == ".stl") { dialog.Filter = "STL|*.stl"; dialog.DefaultExt = ".stl"; } else if (saveFormat == ".ply") { dialog.Filter = "PLY|*.ply"; dialog.DefaultExt = ".ply"; } if (dialog.ShowDialog() == true) { var flipAxes = true; switch (Path.GetExtension(dialog.FileName).ToLowerInvariant()) { case ".obj": using (var writer = File.CreateText(dialog.FileName)) { ModelIO.SaveAsciiObjMesh(engine.ScannedMesh, writer, flipAxes); } break; case ".stl": using (var file = File.Create(dialog.FileName)) using (var writer = new BinaryWriter(file)) { ModelIO.SaveBinaryStlMesh(engine.ScannedMesh, writer, flipAxes); } break; case ".ply": using (var writer = File.CreateText(dialog.FileName)) { ModelIO.SaveAsciiPlyMesh(engine.ScannedMesh, writer, flipAxes); } break; default: uis.ShowError("Unsupported file format"); break; } // If convertToPCD is true, executes a sub program called pcl_converter_release from Point Cloud Library. if (convertToPCD) { string filePath = dialog.FileName; string fileName = Path.GetFileNameWithoutExtension(filePath); string directoryName = Path.GetDirectoryName(dialog.FileName); string extension = Path.GetExtension(dialog.FileName).ToLowerInvariant(); Process cmd = new Process(); cmd.StartInfo.FileName = "cmd.exe"; cmd.StartInfo.RedirectStandardInput = true; cmd.StartInfo.RedirectStandardOutput = true; cmd.StartInfo.CreateNoWindow = true; cmd.StartInfo.UseShellExecute = false; cmd.Start(); cmd.StandardInput.WriteLine(Directory.GetCurrentDirectory() + "\\pcl_converter_release -c " + filePath + " " + directoryName + "\\" + fileName + ".pcd"); cmd.StandardInput.Flush(); cmd.StandardInput.Close(); cmd.WaitForExit(); Console.WriteLine(cmd.StandardOutput.ReadToEnd()); // After converting, starts a new process to view the converted PCD file. Process cmd2 = new Process(); cmd.StartInfo.FileName = "cmd.exe"; cmd.StartInfo.RedirectStandardInput = true; cmd.StartInfo.RedirectStandardOutput = true; cmd.StartInfo.CreateNoWindow = true; cmd.StartInfo.UseShellExecute = false; cmd.Start(); cmd.StandardInput.WriteLine(Directory.GetCurrentDirectory() + "\\pcl_viewer_release.exe " + directoryName + "\\" + fileName + ".pcd"); cmd.StandardInput.Flush(); cmd.StandardInput.Close(); cmd.WaitForExit(); Console.WriteLine(cmd.StandardOutput.ReadToEnd()); } } }