Ejemplo n.º 1
0
        /// <summary>
        /// read stl format
        /// </summary>
        /// <param name="stream">stl file stream</param>
        /// <returns>stl data</returns>
        public StlModel Read(Stream stream)
        {
            var model = new StlModel();

            using (var reader = new StreamReader(stream))
            {
                // skip header(solid [name])
                reader.ReadLine();

                // read facet loop
                while (!reader.EndOfStream)
                {
                    Facet facet = null;

                    if ((facet = ReadFacet(reader)) == null)
                    {
                        break;
                    }

                    model.Facets.Add(facet);
                }
            }

            return(model);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// read stl format
        /// </summary>
        /// <param name="stream">stl file stream</param>
        /// <returns>stl data</returns>
        public StlModel Read(Stream stream)
        {
            var model = new StlModel();

            using (var reader = new BinaryReader(stream, Encoding.ASCII))
            {
                // skip header
                reader.ReadBytes(80);

                uint triangleCount = reader.ReadUInt32();

                for (int i = 0; i < triangleCount; i++)
                {
                    var facet = ReadFacet(reader);
                    model.Facets.Add(facet);
                }
            }

            return(model);
        }
Ejemplo n.º 3
0
        private void UpdateStlModel(StlModel stlModel)
        {
            Model3DGroup.Children.Clear();
            if (stlModel == null)
            {
                return;
            }
            var mesh = new MeshGeometry3D();
            var idPt = 0;

            foreach (var triangle in stlModel.Triangles)
            {
                mesh.Positions.Add(triangle.X);
                mesh.TriangleIndices.Add(idPt++);
                mesh.Positions.Add(triangle.Y);
                mesh.TriangleIndices.Add(idPt++);
                mesh.Positions.Add(triangle.Z);
                mesh.TriangleIndices.Add(idPt++);
            }
            _stlModel3D = new GeometryModel3D(mesh, new DiffuseMaterial(new SolidColorBrush(_color)));
            Model3DGroup.Children.Add(_stlModel3D);
            var range = new List <double>
            {
                stlModel.Max.X - stlModel.Min.X,
                stlModel.Max.Y - stlModel.Min.Y,
                stlModel.Max.Z - stlModel.Min.Z
            }.Max();
            var scale     = Math.Abs(range) < float.Epsilon ? 1 : 1 / range;
            var transform = new Transform3DGroup();

            transform.Children.Add(new TranslateTransform3D(-(stlModel.Max.X + stlModel.Min.X) / 2,
                                                            -(stlModel.Max.Y + stlModel.Min.Y) / 2, -(stlModel.Max.Z + stlModel.Min.Z) / 2));
            _scaleTransform = new ScaleTransform3D(scale, scale, scale);
            transform.Children.Add(_scaleTransform);
            _rotateTransform = new RotateTransform3D(new QuaternionRotation3D());
            transform.Children.Add(_rotateTransform);
            Model3DGroup.Transform = transform;
        }
Ejemplo n.º 4
0
 public static void SetStlModel(StlControl control, StlModel model)
 {
     control.StlModel = model;
 }