public void Load3ds(string path) { var reader = new StudioReader(); var objCol = reader.Read(path); AttachModelList(objCol); }
public List <Object3D> Load3ds(string path) { var reader = new StudioReader(); var list = reader.Read(path); return(list); }
public void Read_Skeleton_ValidModel() { var r = new StudioReader(); var model = r.Read(@"Models\3ds\skeleton.3ds"); Assert.AreEqual(1, model.Children.Count); var m0 = (MeshGeometry3D)((GeometryModel3D)model.Children[0]).Geometry; Assert.AreEqual(4595, m0.TriangleIndices.Count / 3); }
protected virtual Model3DGroup ReadModelFromFile(string filePath) { if (String.IsNullOrWhiteSpace(filePath)) { throw new ArgumentOutOfRangeException("filePath", "value should not be null or empty"); } var reader = new StudioReader(); Model3DGroup model3D = reader.Read(filePath); return(model3D); }
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); }
public Part(int id, string resourceName) { this.id = id; var assembly = Assembly.GetExecutingAssembly(); var ns = GetType().Namespace; string resourcePath = ns + "._3D_Models."; Stream stream = assembly.GetManifestResourceStream(resourcePath + resourceName); StreamReader stReader = new StreamReader(stream); var reader = new StudioReader(); this.objList = reader.Read(stream); }
public List <Object3D> Load3ds(string path) { if (path.EndsWith(".obj", StringComparison.CurrentCultureIgnoreCase)) { var reader = new ObjReader(); var list = reader.Read(path); return(list); } else if (path.EndsWith(".3ds", StringComparison.CurrentCultureIgnoreCase)) { var reader = new StudioReader(); var list = reader.Read(path); return(list); } else { return(new List <Object3D>()); } }
public Model3D LoadOjbect(string path) { Model3D o = null; if (this.m_loadedOjbs.TryGetValue(path, out o)) { //ATTENTIONE: cannot insert the same object twice in the same Viewport! -> TODO: clone! //ATTENTIONE: ModelVisual3D is not thread safe, Model3D only if .Freeze! //ModelVisual3D onew = new ModelVisual3D(); //onew.Content = o.Content.Clone(); //return onew; return(o); } bool useImporter = true; if (useImporter) { o = Scene3DLib.Scene3D.getModel(path); } else { //ATTENTIONE: does not work with .obj, only with .3ds if ((path.Length < 2) || (path.ElementAt(1) != ':')) { path = Scene3D.AssemblyDirectory + "/" + path; path = path.Replace("/", "\\"); } FileStream c = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read); var reader = new StudioReader(); reader.TexturePath = "."; o = reader.Read(c); } o.Freeze(); this.m_loadedOjbs[path] = o; return(o); }
private Model3DGroup LoadModel(Stream model, ModelDataType type, string textureFilePath = null, bool freeze = false) { ModelReader reader = null; switch (type) { case ModelDataType.OBJ: reader = new ObjReader(); break; case ModelDataType.STL: reader = new StLReader(); break; case ModelDataType.ThreeDS: reader = new StudioReader(); break; } if (reader == null) { throw new NotSupportedException("Given model type is not supported"); } reader.TexturePath = textureFilePath != null ? textureFilePath : ""; reader.Freeze = freeze; //using (model) return(reader.Read(model)); }
/// <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); }
private void ReadGeometryFromFile(string path) { if (string.IsNullOrEmpty(path)) { return; } try { _positions = new Point3DCollection(); _triangleIndices = new Int32Collection(); _monoTextureCoordinates = new PointCollection(); _overUnderTextureCoordinates = new PointCollection(); _sideBySideTextureCoordinates = new PointCollection(); var geometry = new MeshGeometry3D(); 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; } } if (geometry == null) { return; } //Positions var leftPositions = geometry.Positions.Clone(); var rightPositions = geometry.Positions.Clone(); foreach (var leftPosition in leftPositions) { leftPosition.Offset(-_distance, 0, 0); _positions.Add(leftPosition); } foreach (var rightPosition in rightPositions) { rightPosition.Offset(_distance, 0, 0); _positions.Add(rightPosition); } if (geometry.TextureCoordinates == null) { return; } //Textures var leftTextureCoordinates = geometry.TextureCoordinates.Clone(); var rightTextureCoordinates = geometry.TextureCoordinates.Clone(); foreach (var leftTextureCoordinate in leftTextureCoordinates) { _monoTextureCoordinates.Add(leftTextureCoordinate); _overUnderTextureCoordinates.Add(new Point(leftTextureCoordinate.X, leftTextureCoordinate.Y / 2)); _sideBySideTextureCoordinates.Add(new Point(leftTextureCoordinate.X / 2, leftTextureCoordinate.Y)); } foreach (var rightTextureCoordinate in rightTextureCoordinates) { _monoTextureCoordinates.Add(rightTextureCoordinate); _overUnderTextureCoordinates.Add(new Point(rightTextureCoordinate.X, rightTextureCoordinate.Y / 2 + 0.5)); _sideBySideTextureCoordinates.Add(new Point(rightTextureCoordinate.X / 2 + 0.5, rightTextureCoordinate.Y)); } //TriangleIndices var leftTriangleIndices = geometry.TriangleIndices.Clone(); var rightTriangleIndices = geometry.TriangleIndices.Clone(); int t = 0; foreach (var leftTriangleIndice in leftTriangleIndices) { if (leftTriangleIndice > t) { t = leftTriangleIndice; } _triangleIndices.Add(leftTriangleIndice); } foreach (var rightTriangleIndice in rightTriangleIndices) { if (rightTriangleIndice > t) { t = rightTriangleIndice; } _triangleIndices.Add(rightTriangleIndice + geometry.Positions.Count); } } catch (Exception exc) { Logger.Instance.Error("Error while generating file projection.", exc); } }