public void Load3ds(string path)
        {
            var reader = new StudioReader();
            var objCol = reader.Read(path);

            AttachModelList(objCol);
        }
Exemplo n.º 2
0
        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);
 }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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>());
     }
 }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        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));
        }
Exemplo n.º 11
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);
                        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;
        }
Exemplo n.º 12
0
        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);
        }
Exemplo n.º 13
0
        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);
            }
        }