A Wavefront .obj file reader.
Inheritance: HelixToolkit.Wpf.ModelReader
 public void Read_CornellBox_ValidModel()
 {
     var r = new ObjReader();
     var model = r.Read(@"Models\obj\cornell_box.obj");
     Assert.AreEqual(9, model.Children.Count);
     var gm1 = model.Children[1] as GeometryModel3D;
     Assert.NotNull(gm1);
     var mg1 = gm1.Geometry as MeshGeometry3D;
     Assert.NotNull(mg1);
     //// Assert.AreEqual(69451, mg1.TriangleIndices.Count / 3);
 }
        public static Model3D Load(string model)
        {
            Model3D device = null;

            try
            {
                device = new ObjReader().Read(model);
            }
            catch (Exception)
            {
                // what could possibly go wrong?
            }

            return device;
        }
Esempio n. 3
0
        bool LoadModel(string PathToModel, Color DModelColor, bool LoadTexture, bool NewModel)
        {
            try
            {
                if (NewModel)
                {
                    LocalPath.CopyDirectoryToResources(System.IO.Path.GetDirectoryName(PathToModel));
                }

                Debug.WriteLine("Dir Name: " + System.IO.Path.GetFileName(System.IO.Path.GetDirectoryName(PathToModel)) + "   FileName: " + System.IO.Path.GetFileName(PathToModel));

                string Lpathtomod = System.IO.Path.GetFileName(System.IO.Path.GetDirectoryName(PathToModel)) + "\\" + System.IO.Path.GetFileName(PathToModel);
                string pathtomod  = System.IO.Path.Combine(LocalPath.GetResourcesPath(), Lpathtomod);

                Debug.WriteLine("Lpath: " + Lpathtomod + " path: " + pathtomod);

                Model3DGroup mgroup = new Model3DGroup();

                string ext = System.IO.Path.GetExtension(PathToModel);
                if (ext == ".obj")
                {
                    ObjReader reader = new HelixToolkit.Wpf.ObjReader();
                    try
                    {
                        reader.DefaultMaterial = new DiffuseMaterial(new SolidColorBrush(DModelColor));


                        if (LoadTexture)
                        {
                            mgroup = reader.Read(pathtomod);
                        }
                        else
                        {
                            reader.TexturePath = ".";
                            mgroup             = reader.Read(RichTextBoxWorker.StreamFromString(File.ReadAllText(pathtomod)));
                        }
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine("Error Load obj First Try: Loading texture error?: " + LoadTexture);
                        if (LoadTexture)
                        {
                            reader = new HelixToolkit.Wpf.ObjReader();
                            reader.DefaultMaterial = new DiffuseMaterial(new SolidColorBrush(DModelColor));
                            reader.TexturePath     = ".";
                            mgroup = reader.Read(RichTextBoxWorker.StreamFromString(File.ReadAllText(pathtomod)));
                        }
                        else
                        {
                            Debug.WriteLine("Error Load 3D model: " + ex);
                            MessageBox.Show(Strings.ResStrings.NotSaved, Strings.ResStrings.NotSavedTitle, MessageBoxButton.OK, MessageBoxImage.Warning);
                        }
                    }
                }
                else
                {
                    ModelImporter modelImporter = new ModelImporter();
                    modelImporter.DefaultMaterial = new DiffuseMaterial(new SolidColorBrush(DModelColor));
                    mgroup = modelImporter.Load(pathtomod);
                }

                ModelVisual3D model = new ModelVisual3D();
                model.Content = mgroup;

                DefaultLights defaultLights = new DefaultLights();

                cont.Children.Clear();
                cont.Children.Add(model);
                cont.Children.Add(defaultLights);

                Debug.WriteLine("Adding model tag: " + Lpathtomod);

                if (cont.Tag == null)
                {
                    List <object> list = new List <object>(2);
                    list.Add(null);
                    list.Add(null);
                    cont.Tag = list;
                    ((List <object>)cont.Tag)[0] = new ModelPath(Lpathtomod, LoadTexture, DModelColor);
                }
                else
                {
                    ((List <object>)cont.Tag)[0] = new ModelPath(Lpathtomod, LoadTexture, DModelColor);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Error Load 3D model: " + ex);
                MessageBox.Show(Strings.ResStrings.ErrorLoadModel, Strings.ResStrings.Error, MessageBoxButton.OK, MessageBoxImage.Warning);
                return(false);
            }
            return(true);
        }
Esempio n. 4
0
        /// <summary>
        /// Loads a model from the specified path.
        /// </summary>
        /// <param name="path">The path.</param>
        /// <param name="dispatcher">The dispatcher used to create the model.</param>
        /// <param name="freeze">Freeze the model if set to <c>true</c>.</param>
        /// <returns>A model.</returns>
        /// <exception cref="System.InvalidOperationException">File format not supported.</exception>
        public Model3DGroup Load(string path, Dispatcher dispatcher = null, bool freeze = false)
        {
            if (path == null)
            {
                return(null);
            }

            if (dispatcher == null)
            {
                dispatcher = Dispatcher.CurrentDispatcher;
            }

            Model3DGroup model;
            var          ext = Path.GetExtension(path);

            if (ext != null)
            {
                ext = ext.ToLower();
            }

            switch (ext)
            {
            case ".3ds":
            {
                var r = new StudioReader(dispatcher)
                {
                    DefaultMaterial = this.DefaultMaterial, Freeze = freeze
                };
                model = r.Read(path, ApplyNormalToFace);
                break;
            }

            case ".lwo":
            {
                var r = new LwoReader(dispatcher)
                {
                    DefaultMaterial = this.DefaultMaterial, Freeze = freeze
                };
                model = r.Read(path);

                break;
            }

            case ".obj":
            {
                var r = new ObjReader(dispatcher)
                {
                    DefaultMaterial = this.DefaultMaterial, Freeze = freeze
                };
                model = r.Read(path);
                break;
            }

            case ".objz":
            {
                var r = new ObjReader(dispatcher)
                {
                    DefaultMaterial = this.DefaultMaterial, Freeze = freeze
                };
                model = r.ReadZ(path);
                break;
            }

            case ".stl":
            {
                var r = new StLReader(dispatcher)
                {
                    DefaultMaterial = this.DefaultMaterial, Freeze = freeze
                };
                model = r.Read(path);
                break;
            }

            case ".off":
            {
                var r = new OffReader(dispatcher)
                {
                    DefaultMaterial = this.DefaultMaterial, Freeze = freeze
                };
                model = r.Read(path);
                break;
            }

            default:
                throw new InvalidOperationException("File format not supported.");
            }

            //if (!freeze)
            //{
            //    dispatcher.Invoke(new Action(() => model.SetName(Path.GetFileName(path))));
            //}

            return(model);
        }
Esempio n. 5
0
        /// <summary>
        /// Loads a model from the specified path.
        /// </summary>
        /// <param name="path">The path.</param>
        /// <returns>
        /// A model.
        /// </returns>
        /// <exception cref="System.InvalidOperationException">File format not supported.</exception>
        public Model3DGroup Load(string path)
        {
            if (path == null)
            {
                return(null);
            }

            Model3DGroup model;
            var          ext = Path.GetExtension(path);

            if (ext != null)
            {
                ext = ext.ToLower();
            }

            switch (ext)
            {
            case ".3ds":
            {
                var r = new StudioReader();
                model = r.Read(path);
                break;
            }

            case ".lwo":
            {
                var r = new LwoReader {
                    DefaultMaterial = this.DefaultMaterial
                };
                model = r.Read(path);

                break;
            }

            case ".obj":
            {
                var r = new ObjReader {
                    DefaultMaterial = this.DefaultMaterial
                };
                model = r.Read(path);
                break;
            }

            case ".objz":
            {
                var r = new ObjReader {
                    DefaultMaterial = this.DefaultMaterial
                };
                model = r.ReadZ(path);
                break;
            }

            case ".stl":
            {
                var r = new StLReader {
                    DefaultMaterial = this.DefaultMaterial
                };
                model = r.Read(path);
                break;
            }

            case ".off":
            {
                var r = new OffReader {
                    DefaultMaterial = this.DefaultMaterial
                };
                model = r.Read(path);
                break;
            }

            default:
                throw new InvalidOperationException("File format not supported.");
            }

            return(model);
        }
Esempio n. 6
0
 public void SetUp() 
 {
     _objReader = new ObjReader();
 }
Esempio n. 7
0
        private void LoadModel(HelixViewport3D cont, string path)
        {
            try
            {
                Model3DGroup mgroup = new Model3DGroup();

                string ext = System.IO.Path.GetExtension(path);
                if (ext == ".obj")
                {
                    ObjReader reader = new HelixToolkit.Wpf.ObjReader();
                    try
                    {
                        reader.DefaultMaterial = new DiffuseMaterial(new SolidColorBrush(modelp.DefaultColor));


                        if (modelp.LoadTexture)
                        {
                            mgroup = reader.Read(path);
                        }
                        else
                        {
                            reader.TexturePath = ".";
                            mgroup             = reader.Read(RichTextBoxWorker.StreamFromString(File.ReadAllText(path)));
                        }
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine("Error Load obj First Try: Loading texture error?: " + modelp.LoadTexture);
                        if (modelp.LoadTexture)
                        {
                            reader = new HelixToolkit.Wpf.ObjReader();
                            reader.DefaultMaterial = new DiffuseMaterial(new SolidColorBrush(modelp.DefaultColor));
                            reader.TexturePath     = ".";
                            mgroup = reader.Read(RichTextBoxWorker.StreamFromString(File.ReadAllText(path)));
                        }
                        else
                        {
                            Debug.WriteLine("Error Load 3D model: " + ex);
                        }
                    }
                }
                else
                {
                    ModelImporter modelImporter = new ModelImporter();
                    modelImporter.DefaultMaterial = new DiffuseMaterial(new SolidColorBrush(modelp.DefaultColor));
                    mgroup = modelImporter.Load(path);
                }

                ModelVisual3D model = new ModelVisual3D();
                model.Content = mgroup;

                cont.Children.Clear();
                cont.Children.Add(model);

                cont.Tag = modelp;
            }
            catch (Exception ex)
            {
                Debug.WriteLine("" + ex);
            }
        }
Esempio n. 8
-1
        /// <summary>
        /// Loads a model from the specified path.
        /// </summary>
        /// <param name="path">
        /// The path.
        /// </param>
        /// <returns>
        /// A model.
        /// </returns>
        public static Model3DGroup Load(string path)
        {
            if (path == null)
            {
                return null;
            }

            Model3DGroup model = null;
            string ext = Path.GetExtension(path).ToLower();
            switch (ext)
            {
                case ".3ds":
                    {
                        var r = new StudioReader();
                        model = r.Read(path);
                        break;
                    }

                case ".lwo":
                    {
                        var r = new LwoReader();
                        model = r.Read(path);

                        break;
                    }

                case ".obj":
                    {
                        var r = new ObjReader();
                        model = r.Read(path);
                        break;
                    }

                case ".objz":
                    {
                        var r = new ObjReader();
                        model = r.ReadZ(path);
                        break;
                    }

                case ".stl":
                    {
                        var r = new StLReader();
                        model = r.Read(path);
                        break;
                    }

                case ".off":
                    {
                        var r = new OffReader();
                        model = r.Read(path);
                        break;
                    }

                default:
                    throw new InvalidOperationException("File format not supported.");
            }

            return model;
        }
Esempio n. 9
-1
 public void Read_SmoothingOff_ValidModel()
 {
     var r = new ObjReader();
     var model = r.Read(@"Models\obj\SmoothingOff.obj");
     Assert.AreEqual(1, model.Children.Count);
     var gm1 = model.Children[0] as GeometryModel3D;
     Assert.NotNull(gm1);
     var mg1 = gm1.Geometry as MeshGeometry3D;
     Assert.NotNull(mg1);
     Assert.AreEqual(4, mg1.TriangleIndices.Count / 3);
 }
Esempio n. 10
-1
 public void Read_Ducky_ValidModel()
 {
     var r = new ObjReader();
     var model = r.Read(@"Models\obj\ducky.obj");
     Assert.AreEqual(4, model.Children.Count);
     var m0 = (MeshGeometry3D)((GeometryModel3D)model.Children[0]).Geometry;
     var m1 = (MeshGeometry3D)((GeometryModel3D)model.Children[1]).Geometry;
     var m2 = (MeshGeometry3D)((GeometryModel3D)model.Children[2]).Geometry;
     var m3 = (MeshGeometry3D)((GeometryModel3D)model.Children[3]).Geometry;
     Assert.AreEqual(5632, m0.TriangleIndices.Count / 3);
     Assert.AreEqual(4800, m1.TriangleIndices.Count / 3);
     Assert.AreEqual(3024, m2.TriangleIndices.Count / 3);
     Assert.AreEqual(672, m3.TriangleIndices.Count / 3);
 }
Esempio n. 11
-1
        private MeshGeometry3D ReadGeometryFromFile(string path)
        {
            var geometry = new MeshGeometry3D();

            if (string.IsNullOrEmpty(path))
                return geometry;

            var models = new Model3DGroup();
            
            var fileInfo = new FileInfo(path);

            if (fileInfo.Extension == ".obj")
            {
                var reader = new ObjReader();
                try
                {
                    models = reader.Read(fileInfo.FullName);
                }
                catch (Exception exc)
                {
                    Logger.Instance.Error(string.Format("Error while loading obj file '{0}'.", path), exc);
                }
            }

            if (fileInfo.Extension == ".3ds")
            {
                var reader = new StudioReader();
                try
                {
                    models = reader.Read(fileInfo.FullName);
                }
                catch (Exception exc)
                {
                    Logger.Instance.Error(string.Format("Error while loading 3ds file '{0}'.", path), exc);
                }
            }

            if (models.Children.Count > 0)
            {
                var model = models.Children[0] as GeometryModel3D;
                if (model != null) geometry = model.Geometry as MeshGeometry3D;
            }

            return geometry;
        }
Esempio n. 12
-1
        /// <summary>
        /// Loads a model from the specified path.
        /// </summary>
        /// <param name="path">The path.</param>
        /// <param name="dispatcher">The dispatcher used to create the model.</param>
        /// <param name="freeze">Freeze the model if set to <c>true</c>.</param>
        /// <returns>A model.</returns>
        /// <exception cref="System.InvalidOperationException">File format not supported.</exception>
        public Model3DGroup Load(string path, Dispatcher dispatcher = null, bool freeze = false)
        {
            if (path == null)
            {
                return null;
            }

            if (dispatcher == null)
            {
                dispatcher = Dispatcher.CurrentDispatcher;
            }

            Model3DGroup model;
            var ext = Path.GetExtension(path);
            if (ext != null)
            {
                ext = ext.ToLower();
            }

            switch (ext)
            {
                case ".3ds":
                    {
                        var r = new StudioReader(dispatcher) { DefaultMaterial = this.DefaultMaterial, Freeze = freeze };
                        model = r.Read(path);
                        break;
                    }

                case ".lwo":
                    {
                        var r = new LwoReader(dispatcher) { DefaultMaterial = this.DefaultMaterial, Freeze = freeze };
                        model = r.Read(path);

                        break;
                    }

                case ".obj":
                    {
                        var r = new ObjReader(dispatcher) { DefaultMaterial = this.DefaultMaterial, Freeze = freeze };
                        model = r.Read(path);
                        break;
                    }

                case ".objz":
                    {
                        var r = new ObjReader(dispatcher) { DefaultMaterial = this.DefaultMaterial, Freeze = freeze };
                        model = r.ReadZ(path);
                        break;
                    }

                case ".stl":
                    {
                        var r = new StLReader(dispatcher) { DefaultMaterial = this.DefaultMaterial, Freeze = freeze };
                        model = r.Read(path);
                        break;
                    }

                case ".off":
                    {
                        var r = new OffReader(dispatcher) { DefaultMaterial = this.DefaultMaterial, Freeze = freeze };
                        model = r.Read(path);
                        break;
                    }

                default:
                    throw new InvalidOperationException("File format not supported.");
            }

            //if (!freeze)
            //{
            //    dispatcher.Invoke(new Action(() => model.SetName(Path.GetFileName(path))));
            //}

            return model;
        }
Esempio n. 13
-1
        public static Model3DGroup Load(string path, Dispatcher dispatcher = null, bool freeze = false, bool ignoreErrors = false)
        {
            if (path == null)
            {
                return null;
            }

            var defaultMaterial = Materials.Blue;

            if (dispatcher == null)
            {
                dispatcher = Dispatcher.CurrentDispatcher;
            }

            Model3DGroup model;
            var ext = Path.GetExtension(path).ToLower();

            switch (ext)
            {
                case ".3ds":
                    {
                        var r = new StudioReader(dispatcher) { DefaultMaterial = defaultMaterial, Freeze = freeze };
                        model = r.Read(path);
                        break;
                    }

                case ".lwo":
                    {
                        var r = new LwoReader(dispatcher) { DefaultMaterial = defaultMaterial, Freeze = freeze };
                        model = r.Read(path);
                        break;
                    }

                case ".obj":
                    {
                        var r = new ObjReader(dispatcher) { DefaultMaterial = defaultMaterial, Freeze = freeze, IgnoreErrors = ignoreErrors };
                        model = r.Read(path);
                        break;
                    }

                case ".objx":
                    {
                        var r = new ObjReader(dispatcher) { DefaultMaterial = defaultMaterial, Freeze = freeze, IgnoreErrors = ignoreErrors };
                        model = r.ReadZ(path);
                        break;
                    }

                case ".stl":
                    {
                        var r = new StLReader(dispatcher) { DefaultMaterial = defaultMaterial, Freeze = freeze };
                        model = r.Read(path);
                        break;
                    }

                case ".off":
                    {
                        var r = new OffReader(dispatcher) { DefaultMaterial = defaultMaterial, Freeze = freeze };
                        model = r.Read(path);
                        break;
                    }

                default:
                    throw new InvalidOperationException("File format not supported.");
            }

            return model;
        }
Esempio n. 14
-1
        /// <summary>
        ///     Read FileData
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public ContainerUIElement3D ReadFileData(string path)
        {
            var extension = Path.GetExtension(path);
            // var visModel = new ModelVisual3D();
            var container = new ContainerUIElement3D();

            switch (extension)
            {
                case ".obj":
                    var currentHelixObjReader = new ObjReader();
                    try
                    {
                        var myModel = currentHelixObjReader.Read(path);

                        foreach (var model in myModel.Children)
                        {
                            if (model is GeometryModel3D)
                            {
                                var geom = model as GeometryModel3D;

                                var element = new ModelUIElement3D {Model = geom};
                                element.MouseDown += (sender1, e1) => OnElementMouseDown(sender1, e1, this);
                                container.Children.Add(element);
                            }
                        }
                    }
                    catch (Exception)
                    {
                        // ignore
                    }
                    break;
                case ".stl":
                    var currentHelixStlReader = new StLReader();
                    try
                    {
                        var myModel = currentHelixStlReader.Read(path);

                        foreach (var model in myModel.Children)
                        {
                            if (model is GeometryModel3D)
                            {
                                var geom = model as GeometryModel3D;

                                var element = new ModelUIElement3D {Model = geom};
                                element.MouseDown += (sender1, e1) => OnElementMouseDown(sender1, e1, this);
                                container.Children.Add(element);
                            }
                        }
                    }
                    catch (Exception)
                    {
                        // ignore
                    }
                    break;
            }

            return container;
        }