string WriteOFF() { IEnumerable <float> coords = mesh.vertices.ToFloats(); DMesh3 dmesh3 = DMesh3Builder.Build <float, int, float>(coords.ToArray(), mesh.triangles); WriteMesh writeMesh = new WriteMesh { Mesh = dmesh3, Name = meshHash }; OFFWriter OFFwriter = new OFFWriter(); string OFF = Application.dataPath + "/VolumetricMeshes/" + meshHash + "/" + meshHash + ".off"; Directory.CreateDirectory(Application.dataPath + "/VolumetricMeshes/" + meshHash + "/"); FileStream OFFfile = File.OpenWrite(OFF); TextWriter textWriter = new StreamWriter(OFFfile); WriteOptions options = new WriteOptions() { RealPrecisionDigits = 7 }; OFFwriter.Write(textWriter, new List <WriteMesh>() { writeMesh }, options); textWriter.Flush(); textWriter.Close(); return(OFF); }
public static void WriteFile(this DMesh3 mesh, string filePath, WriteOptions opts) { var writer = new StandardMeshWriter(); var m = new WriteMesh(mesh); var result = writer.Write(filePath, new List <WriteMesh> { m }, opts); if (!result.Equals(IOWriteResult.Ok)) { throw new Exception($"Failed to write file to {filePath} with result {result.ToString()}"); } }
private void bake_unwrap_uvs_Click(object sender, EventArgs e) { mmRemote = new mm.RemoteControl(); if (mmRemote.Initialize()) { statusLabel.Text = "Connected!"; } else { statusLabel.Text = "Could not connect!"; return; } List <int> vSelected = mmRemote.ListSelectedObjects(); if (vSelected.Count == 1) { statusLabel.Text = "Reading..."; DenseMeshUVSet uvSet; DMesh3 mesh = g3Conversion.ConvertUnwrapToUVs(mmRemote, out uvSet); //statusLabel.Text = "Writing..."; StandardMeshWriter writer = new StandardMeshWriter(); WriteOptions options = WriteOptions.Defaults; options.bWriteGroups = true; options.bWriteUVs = true; options.AsciiHeaderFunc = () => { return("mtllib default.mtl\r\nusemtl Texture_0\r\n"); }; WriteMesh wm = new WriteMesh(mesh) { UVs = uvSet }; writer.Write("c:\\scratch\\___EXPORT_UV.obj", new List <WriteMesh>() { wm }, options); statusLabel.Text = "Done!"; } else { MessageBox.Show("This command only works if a single object is selected"); } mmRemote.Shutdown(); statusLabel.Text = "(disconnected)"; }
private void ExportMesh(ToolpathPreviewMesh mesh, string filePath) { var dmesh3 = new DMesh3(); foreach (var vertex in mesh.Vertices) { dmesh3.AppendVertex(vertex.Point); } for (int i = 0; i < mesh.Triangles.Count; i += 3) { dmesh3.AppendTriangle(mesh.Triangles[i], mesh.Triangles[i + 1], mesh.Triangles[i + 2]); } var writeMesh = new WriteMesh(dmesh3, "Name"); var stlWriter = new STLWriter(); using var writer = File.CreateText(filePath); stlWriter.Write(writer, new List <WriteMesh>() { writeMesh }, WriteOptions.Defaults); }
// // [TODO] // static void Main(string[] args) { CommandArgumentSet arguments = new CommandArgumentSet(); arguments.Register("-output", ""); if (arguments.Parse(args) == false) { return; } if (arguments.Filenames.Count != 1) { print_usage(); return; } string sInputFile = arguments.Filenames[0]; string sFilenameRoot = Path.GetFileNameWithoutExtension(sInputFile); if (!File.Exists(sInputFile)) { System.Console.WriteLine("cannot find file " + sInputFile); return; } DMesh3Builder builder = new DMesh3Builder(); StandardMeshReader reader = new StandardMeshReader() { MeshBuilder = builder }; ReadOptions read_options = ReadOptions.Defaults; read_options.ReadMaterials = true; IOReadResult readOK = reader.Read(sInputFile, read_options); if (readOK.code != IOCode.Ok) { System.Console.WriteLine("Error reading " + sInputFile); System.Console.WriteLine(readOK.message); return; } if (builder.Meshes.Count == 0) { System.Console.WriteLine("did not find any valid meshes in " + sInputFile); return; } // [TODO] out if count == 0 string sOutRoot = arguments.Strings["-output"]; if (sOutRoot.Length > 0) { bool bOutIsFolder = Directory.Exists(sOutRoot); if (!bOutIsFolder) { System.Console.WriteLine("-output folder {0} does not exist", sOutRoot); return; } } Dictionary <int, List <int> > MeshesByMaterial = new Dictionary <int, List <int> >(); MeshesByMaterial[-1] = new List <int>(); for (int i = 0; i < builder.Materials.Count; ++i) { MeshesByMaterial[i] = new List <int>(); } int N = builder.Meshes.Count; for (int i = 0; i < N; ++i) { int mati = builder.MaterialAssignment[i]; if (mati >= builder.Materials.Count) { mati = -1; } MeshesByMaterial[mati].Add(i); } int file_i = 0; foreach (int mat_i in MeshesByMaterial.Keys) { List <int> mesh_idxs = MeshesByMaterial[mat_i]; if (mesh_idxs.Count == 0) { continue; } WriteMesh[] write_meshes = new WriteMesh[mesh_idxs.Count]; for (int i = 0; i < mesh_idxs.Count; ++i) { write_meshes[i] = new WriteMesh(builder.Meshes[mesh_idxs[i]]); } string suffix = string.Format("_material{0}", file_i++); string sOutPath = Path.Combine(sOutRoot, sFilenameRoot + suffix + ".obj"); StandardMeshWriter writer = new StandardMeshWriter(); WriteOptions write_options = WriteOptions.Defaults; if (mat_i != -1) { write_options.bWriteMaterials = true; write_options.bPerVertexUVs = true; write_options.MaterialFilePath = Path.Combine(sOutRoot, sFilenameRoot + suffix + ".mtl"); GenericMaterial mat = builder.Materials[mat_i]; List <GenericMaterial> matList = new List <GenericMaterial>() { mat }; ConstantIndexMap idxmap = new ConstantIndexMap(0); for (int i = 0; i < write_meshes.Length; ++i) { write_meshes[i].Materials = matList; write_meshes[i].TriToMaterialMap = idxmap; } } IOWriteResult writeOK = writer.Write(sOutPath, new List <WriteMesh>(write_meshes), write_options); if (writeOK.code != IOCode.Ok) { System.Console.WriteLine("Error writing " + sOutPath); System.Console.WriteLine(writeOK.message); } } // ok done! //System.Console.ReadKey(); }