Exemplo n.º 1
0
        private void ExportFile()
        {
            string path = SaveFileDialog("3D model files (*.obj;|*.obj;");

            if (string.IsNullOrEmpty(path))
            {
                return;
            }
            var exporter = new ObjExporter(path);

            exporter.Export(ModelGeometry[0]);
            exporter.Close();
            MessageBox.Show($"Export Finished. {path}");
        }
Exemplo n.º 2
0
        public void Export(MeshGeometryModel3D[] modelList, string filename, string texturePath = "", bool exportTexture = false)
        {
            var path = Path.GetDirectoryName(filename);

            var objFile = filename;

            var mtlFile = path + @"\" + Path.GetFileNameWithoutExtension(filename) + ".mtl";

            int offset = 0;

            var objWriter = new StreamWriter(objFile);

            StreamWriter mtlWriter = null;

            if (exportTexture)
            {
                mtlWriter = new StreamWriter(mtlFile);
            }

            if (exportTexture)
            {
                objWriter.WriteLine("mtllib " + Path.GetFileName(mtlFile));
                objWriter.WriteLine();
            }

            objWriter.WriteLine("o " + Path.GetFileNameWithoutExtension(filename));

            var translate = -findPointOfGravity(modelList);

            foreach (var element in modelList)
            {
                var modelName = IfcViewerWrapper.GetValidPathName(element.Name);

                var tmpFile = path + @"\" + modelName + ".obj";

                List <string> vList  = new List <string>();
                List <string> vtList = new List <string>();
                List <string> vnList = new List <string>();

                List <string> fList = new List <string>();

                var exp = new ObjExporter(tmpFile);
                exp.ExportNormals = true;

                exp.ExportMesh((MeshGeometry3D)element.Geometry, Transform3D.Identity);
                exp.Close();

                using (StreamReader sr = File.OpenText(tmpFile))
                {
                    string s = "";
                    while ((s = sr.ReadLine()) != null)
                    {
                        switch (s.Split(' ')[0])
                        {
                        case "v":
                            var e  = s.Split(' ');
                            var sl = "v " + (Convert.ToDouble(e[1]) + translate.X) + " " + (-Convert.ToDouble(e[3]) + translate.Y) + " " + (Convert.ToDouble(e[2]) + translate.Z);
                            vList.Add(sl);
                            break;

                        case "vt":
                            vtList.Add(s);
                            break;

                        case "vn":
                            vnList.Add(s);
                            break;

                        case "f":
                            var split = s.Split(' ');
                            var st    = "f ";
                            for (int i = 3; i > 0; i--)
                            {
                                var ad = split[i].Split('/');
                                st += (Convert.ToInt32(ad[0]) + offset) + "/" +
                                      (Convert.ToInt32(ad[2]) + offset) +
                                      "/" + (Convert.ToInt32(ad[1]) + offset) + " ";
                            }
                            fList.Add(st);
                            break;
                        }
                    }
                }

                File.Delete(tmpFile);

                var tmpMtlFile = Path.GetFileName(tmpFile).Split('.');
                tmpMtlFile[tmpMtlFile.Length - 1] = "mtl";
                File.Delete(Path.GetDirectoryName(tmpFile) + @"\" + String.Join(".", tmpMtlFile));

                offset += vList.Count;

                objWriter.WriteLine();
                objWriter.WriteLine("g " + modelName);

                foreach (var line in vList)
                {
                    objWriter.WriteLine(line);
                }

                foreach (var line in vtList)
                {
                    objWriter.WriteLine(line);
                }

                foreach (var line in vnList)
                {
                    objWriter.WriteLine(line);
                }

                if (exportTexture)
                {
                    objWriter.WriteLine();
                    objWriter.WriteLine("usemtl material_" + modelName);
                }

                foreach (var f in fList)
                {
                    objWriter.WriteLine(f);
                }

                if (exportTexture)
                {
                    mtlWriter.WriteLine("newmtl material_" + modelName + "\n" +
                                        "Ks 0.000 0.000 0.000     # black (off)" + "\n" +
                                        "map_Kd " + modelName + ".jpg" + "\n");
                }

                var textureFile = texturePath + @"\" + modelName + ".jpg";

                if (!texturePath.Equals("") && File.Exists(textureFile))
                {
                    File.Copy(textureFile, path + @"\" + Path.GetFileName(textureFile));
                }
            }

            objWriter.Close();

            if (exportTexture)
            {
                mtlWriter.Close();
            }
        }
Exemplo n.º 3
0
        private void FileExportRaw()
        {
            var path = FileDialogService.SaveFileDialog(null, null, Exporters.Filter, ".png");

            if (path == null)
            {
                return;
            }
            //HelixView.Export(path);
            ///*
            Stopwatch stopWatch = new Stopwatch();

            stopWatch.Start();

            var ext = Path.GetExtension(path).ToLowerInvariant();

            switch (ext)
            {
            case ".png":
            case ".jpg":
                HelixView.Export(path);
                break;

            case ".xaml":
            {
                var e = new XamlExporter(path);
                e.Export(CurrentModel);
                e.Close();
                break;
            }

            case ".xml":
            {
                var e = new KerkytheaExporter(path);
                e.Export(HelixView.Viewport);
                e.Close();
                break;
            }

            case ".obj":
            {
                var patient = new Patient();
                var e       = new SmileObjExporter(path);
                //e.Export(CurrentModel);
                ((SmileObjExporter)e).rawVisual = RawVisual;
                ((SmileObjExporter)e).Export(RawVisual, patient);
                e.Close();
                break;
            }

            case ".objz":
            {
                var tmpPath = Path.ChangeExtension(path, ".obj");
                var e       = new ObjExporter(tmpPath);
                e.Export(CurrentModel);
                e.Close();
                GZipHelper.Compress(tmpPath);
                break;
            }

            case ".x3d":
            {
                var e = new X3DExporter(path);
                e.Export(CurrentModel);
                e.Close();
                break;
            }
            }
            showStatus(stopWatch, "Exported");
            //*/
        }