Exemple #1
0
        public override byte[] Write(Shape shape)
        {
            var stlShape = StlHelper.ToStlShape(shape);

            var sb = new StringBuilder();

            sb.AppendLine($"solid {stlShape.Name}");

            foreach (var triangle in stlShape.Triangles)
            {
                sb.AppendLine("\tfacet normal " + Ascii_Vector3Format(triangle.Normal));
                sb.AppendLine("\t\touter loop");

                foreach (var position in triangle.Positions)
                {
                    sb.AppendLine("\t\t\tvertex " + Ascii_Vector3Format(position));
                }

                sb.AppendLine("\t\tendloop");
                sb.AppendLine("\tendfacet");
            }

            sb.AppendLine("endsolid");

            return(Encoding.ASCII.GetBytes(sb.ToString()));
        }
Exemple #2
0
        public override byte[] Write(Shape shape)
        {
            var stlShape = StlHelper.ToStlShape(shape);

            using var stream = new MemoryStream();
            using var writer = new BinaryWriter(stream);

            byte[] header        = new byte[80];
            uint   triangleCount = (uint)stlShape.Triangles.Length;

            writer.Write(header);
            writer.Write(triangleCount);

            foreach (var triangle in stlShape.Triangles)
            {
                writer.Write(triangle.Normal.X);
                writer.Write(triangle.Normal.Y);
                writer.Write(triangle.Normal.Z);

                foreach (var position in triangle.Positions)
                {
                    writer.Write(position.X);
                    writer.Write(position.Y);
                    writer.Write(position.Z);
                }

                writer.Write(triangle.Attribute);
            }

            return(stream.ToArray());
        }