public void WriteAsSTL(string filename) { for (int i = 0; i < Frames.Count; i++) { string tmp = Path.GetExtension(filename); string tmp2 = filename.Replace(tmp, ""); string streamName = tmp2 + " Frame " + i + tmp; using (var writer = new StreamWriter(File.Create(streamName))) { writer.WriteLine("solid obj"); var vertices = new Frame.Vertex[FaceVerticiesCount]; for (int v = 0; v < Faces.Count; v += FaceVerticiesCount) { for (int ii = 0; ii < FaceVerticiesCount; ++ii) { vertices[ii] = Frames[i].Vertices[Faces[v + ii]]; } writer.WriteLine(" facet normal 0.000000 0.000000 1.000000"); writer.WriteLine(" outer loop"); writer.WriteLine(WriteVertex(vertices[0])); writer.WriteLine(WriteVertex(vertices[1])); writer.WriteLine(WriteVertex(vertices[2])); writer.WriteLine(" endloop"); writer.WriteLine(" endfacet"); if (FaceVerticiesCount == 4) { writer.WriteLine(" facet normal 0.000000 0.000000 1.000000"); writer.WriteLine(" outer loop"); writer.WriteLine(WriteVertex(vertices[0])); writer.WriteLine(WriteVertex(vertices[2])); writer.WriteLine(WriteVertex(vertices[3])); writer.WriteLine(" endloop"); writer.WriteLine(" endfacet"); } } writer.WriteLine("endsolid"); } } string WriteVertex(Frame.Vertex vertex) { return(string.Format(" vertex {0} {1:} {2:}", vertex.x, vertex.z, vertex.y)); } }
public void WriteAsSTLBinary(Writer writer) { Debugger.Launch(); byte[] junk = Encoding.ASCII.GetBytes("Kimi no sei kimi no sei kimi no sei de watashi Oh Okubyou de kakkou tsukanai kimi no sei da yo"); writer.Write(junk, 0, 0x50); writer.Write((int)(Faces.Count / FaceVerticiesCount)); // Triangle var vertices = new Frame.Vertex[FaceVerticiesCount]; for (int v = 0; v < Faces.Count; v += FaceVerticiesCount) { for (int ii = 0; ii < FaceVerticiesCount; ++ii) { vertices[ii] = Frames[0].Vertices[Faces[v + ii]]; } // Normal writer.Write(vertices[0].normal.x); writer.Write(vertices[0].normal.y); writer.Write(vertices[0].normal.z); // Vector 1 writer.Write(vertices[0].x); writer.Write(vertices[0].z); writer.Write(vertices[0].y); // Vector 2 writer.Write(vertices[1].x); writer.Write(vertices[1].z); writer.Write(vertices[1].y); // Vector 3 writer.Write(vertices[2].x); writer.Write(vertices[2].z); writer.Write(vertices[2].y); // Attribute if (HasColours) { int colour = Faces[v]; ushort attb = (ushort)(ToRGB555(Colours[colour].r, Colours[colour].g, Colours[colour].b)); writer.Write(attb); } else { writer.Write((short)0); } if (FaceVerticiesCount == 4) { // Normal writer.Write(vertices[0].normal.x); writer.Write(vertices[0].normal.y); writer.Write(vertices[0].normal.z); // Vector 1 writer.Write(vertices[0].x); writer.Write(vertices[0].z); writer.Write(vertices[0].y); // Vector 2 writer.Write(vertices[2].x); writer.Write(vertices[2].z); writer.Write(vertices[2].y); // Vector 3 writer.Write(vertices[3].x); writer.Write(vertices[3].z); writer.Write(vertices[3].y); // Attribute if (HasColours) { int colour = Faces[v]; ushort attb = (ushort)(ToRGB555(Colours[colour].r, Colours[colour].g, Colours[colour].b)); writer.Write(attb); } else { writer.Write((short)0); } } } writer.Close(); }