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; }
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); }
/// <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); }
/// <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); }
public void SetUp() { _objReader = new ObjReader(); }
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); } }
/// <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; }
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); }
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); }
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; }
/// <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; }
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; }
/// <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; }