Пример #1
0
    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);
    }
Пример #2
0
        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()}");
            }
        }
Пример #3
0
        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)";
        }
Пример #4
0
        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);
        }
Пример #5
0
        //
        // [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();
        }