private void buttonOpen_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Title = "Open Scene File"; ofd.Filter = "Wavefront OBJ Files|*.obj;*.obj.gz" + "|Polygon File Format|*.ply" + "|All scene types|*.obj;*.ply"; ofd.FilterIndex = 1; ofd.FileName = ""; if (ofd.ShowDialog() != DialogResult.OK) { return; } string ext = Path.GetExtension(ofd.FileName); StanfordPly plyReader; WavefrontObj objReader; if (ext == ".ply") { plyReader = new StanfordPly(); if (plyReader.ReadBrep(ofd.FileName, scene) == -1) { MessageBox.Show("Invalid .ply file"); } } else { objReader = new WavefrontObj(); objReader.MirrorConversion = false; objReader.TextureUpsideDown = checkOrientation.Checked; objReader.ReadBrep(ofd.FileName, scene); } scene.BuildCornerTable(); diameter = scene.GetDiameter(out center); scene.GenerateColors(12); scene.ComputeNormals(); UpdateParams(textParam.Text); tb.Center = center; tb.Diameter = diameter; SetLight(diameter, ref light); tb.Reset(); labelFile.Text = string.Format("{0} @ {1} vertices, {2} edges ({3}), {4} faces", ofd.SafeFileName, scene.Vertices, scene.statEdges, scene.statShared, scene.Triangles); PrepareDataBuffers(); glControl1.Invalidate(); // Supports point selection selectedPoints = new Selection(scene); commandManager = new CommandManager(); }
private void buttonExportPly_Click(object sender, EventArgs e) { if (scene == null || scene.Triangles < 1) { return; } SaveFileDialog sfd = new SaveFileDialog(); sfd.Title = "Save file"; sfd.Filter = "PLY Files|*.ply" + "|OBJ Files|*.obj"; sfd.AddExtension = true; sfd.FileName = ""; if (sfd.ShowDialog() != DialogResult.OK) { return; } string ext = Path.GetExtension(sfd.FileName); switch (ext) { case ".ply": StanfordPly plyWriter = new StanfordPly(); plyWriter.TextFormat = true; plyWriter.NativeNewLine = true; plyWriter.Orientation = checkOrientation.Checked; //plyWriter.DoNormals = false; //plyWriter.DoTxtCoords = false; plyWriter.DoColors = false; using (StreamWriter writer = new StreamWriter(new FileStream(sfd.FileName, FileMode.Create))) { plyWriter.WriteBrep(writer, scene); } break; case ".obj": WavefrontObj objWriter = new WavefrontObj(); using (StreamWriter writer = new StreamWriter(new FileStream(sfd.FileName, FileMode.Create))) { objWriter.WriteBrep(writer, scene); } break; default: break; } }
private void buttonExportPly_Click(object sender, EventArgs e) { if (scene == null || scene.Triangles < 1) { return; } SaveFileDialog sfd = new SaveFileDialog(); sfd.Title = "Save OBJ/PLY file"; sfd.Filter = "OBJ Files|*.obj|PLY Files|*.ply"; sfd.AddExtension = true; sfd.FileName = ""; if (sfd.ShowDialog() != DialogResult.OK) { return; } if (sfd.FileName.EndsWith(".ply")) { // Stanford PLY format. StanfordPly plyWriter = new StanfordPly(); plyWriter.TextFormat = true; plyWriter.NativeNewLine = true; plyWriter.Orientation = checkOrientation.Checked; //plyWriter.DoNormals = false; //plyWriter.DoTxtCoords = false; plyWriter.DoColors = false; using (StreamWriter writer = new StreamWriter(new FileStream(sfd.FileName, FileMode.Create))) { plyWriter.WriteBrep(writer, scene); } } else { // Wavefront OBJ format. WavefrontObj objWriter = new WavefrontObj(); objWriter.MirrorConversion = true; using (StreamWriter writer = new StreamWriter(new FileStream(sfd.FileName, FileMode.Create))) { objWriter.WriteBrep(writer, scene); } } }
private async void button_ExportSelection_Click(object sender, EventArgs e) { if (scene == null || scene.Triangles < 1) { return; } if (selectedPoints.GetCount() == 0) { MessageBox.Show("No points on the source mesh are selected."); return; } SaveFileDialog sfd = new SaveFileDialog(); sfd.Title = "Save file"; sfd.Filter = "PLY Files|*.ply" + "|OBJ Files|*.obj"; sfd.AddExtension = true; sfd.FileName = ""; if (sfd.ShowDialog() != DialogResult.OK) { return; } string ext = Path.GetExtension(sfd.FileName); WavefrontObj objWriter = null; switch (ext) { case ".ply": StanfordPly plyWriter = new StanfordPly(); plyWriter.TextFormat = true; plyWriter.NativeNewLine = true; plyWriter.Orientation = checkOrientation.Checked; plyWriter.DoColors = false; handler = new WriteBrepHandler(plyWriter.WriteBrepSelection); break; case ".obj": objWriter = new WavefrontObj(); handler = new WriteBrepHandler(objWriter.WriteBrepSelection); break; default: break; } // lambda will be run on the UI thread var progress = new Progress <string>(ReportProgress); label_percentageReport.Text = "Saving 0%"; // writing the file is run on the thread pool StreamWriter writer = null; stopButton.Visible = true; // get prepared triangle and vertex pointers List <int> trianglePointers = null; List <int> vertexPointers = null; try { cts = new CancellationTokenSource(); writer = new StreamWriter(new FileStream(sfd.FileName, FileMode.Create)); await Task.Run(() => handler( writer, scene, selectedPoints, progress, cts.Token, out trianglePointers, out vertexPointers )); } catch (OperationCanceledException) { } finally { RewriteReportLabel(); cts = null; if (writer != null) { writer.Close(); } } // support: Export batch String name = null; if (sender is ToolStripMenuItem) { name = (sender as ToolStripMenuItem).Name; } if (name == "exportBatch") { cts = new CancellationTokenSource(); ExportBatch eb = new ExportBatch(vertexPointers, trianglePointers, Path.GetDirectoryName(sfd.FileName), ext); Task task = new Task(() => eb.ProcessDirectory(progress, cts.Token, () => RewriteReportLabel())); task.RunSynchronously(); stopButton.Visible = true; } }