/// <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); }
/// <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); }
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; }
public static void SetStlModel(StlControl control, StlModel model) { control.StlModel = model; }