public static Mesh createCube(string name) { Surface surf = new Surface (name); surf.AddVertex(-1.0f,-1.0f,-1.0f); surf.AddVertex(-1.0f, 1.0f,-1.0f); surf.AddVertex( 1.0f, 1.0f,-1.0f); surf.AddVertex( 1.0f,-1.0f,-1.0f); surf.AddVertex(-1.0f,-1.0f, 1.0f); surf.AddVertex(-1.0f, 1.0f, 1.0f); surf.AddVertex( 1.0f, 1.0f, 1.0f); surf.AddVertex( 1.0f,-1.0f, 1.0f); surf.AddVertex(-1.0f,-1.0f, 1.0f); surf.AddVertex(-1.0f, 1.0f, 1.0f); surf.AddVertex( 1.0f, 1.0f, 1.0f); surf.AddVertex( 1.0f,-1.0f, 1.0f); surf.AddVertex(-1.0f,-1.0f,-1.0f); surf.AddVertex(-1.0f, 1.0f,-1.0f); surf.AddVertex( 1.0f, 1.0f,-1.0f); surf.AddVertex( 1.0f,-1.0f,-1.0f); surf.AddVertex(-1.0f,-1.0f, 1.0f); surf.AddVertex(-1.0f, 1.0f, 1.0f); surf.AddVertex( 1.0f, 1.0f, 1.0f); surf.AddVertex( 1.0f,-1.0f, 1.0f); surf.AddVertex(-1.0f,-1.0f,-1.0f); surf.AddVertex(-1.0f, 1.0f,-1.0f); surf.AddVertex( 1.0f, 1.0f,-1.0f); surf.AddVertex( 1.0f,-1.0f,-1.0f); surf.VertexNormal(0,0.0f,0.0f,-1.0f); surf.VertexNormal(1,0.0f,0.0f,-1.0f); surf.VertexNormal(2,0.0f,0.0f,-1.0f); surf.VertexNormal(3,0.0f,0.0f,-1.0f); surf.VertexNormal(4,0.0f,0.0f,1.0f); surf.VertexNormal(5,0.0f,0.0f,1.0f); surf.VertexNormal(6,0.0f,0.0f,1.0f); surf.VertexNormal(7,0.0f,0.0f,1.0f); surf.VertexNormal(8,0.0f,-1.0f,0.0f); surf.VertexNormal(9,0.0f,1.0f,0.0f); surf.VertexNormal(10,0.0f,1.0f,0.0f); surf.VertexNormal(11,0.0f,-1.0f,0.0f); surf.VertexNormal(12,0.0f,-1.0f,0.0f); surf.VertexNormal(13,0.0f,1.0f,0.0f); surf.VertexNormal(14,0.0f,1.0f,0.0f); surf.VertexNormal(15,0.0f,-1.0f,0.0f); surf.VertexNormal(16,-1.0f,0.0f,0.0f); surf.VertexNormal(17,-1.0f,0.0f,0.0f); surf.VertexNormal(18,1.0f,0.0f,0.0f); surf.VertexNormal(19,1.0f,0.0f,0.0f); surf.VertexNormal(20,-1.0f,0.0f,0.0f); surf.VertexNormal(21,-1.0f,0.0f,0.0f); surf.VertexNormal(22,1.0f,0.0f,0.0f); surf.VertexNormal(23,1.0f,0.0f,0.0f); surf.VertexTexCoords(0,0.0f,1.0f,0.0f,0); surf.VertexTexCoords(1,0.0f,0.0f,0.0f,0); surf.VertexTexCoords(2,1.0f,0.0f,0.0f,0); surf.VertexTexCoords(3,1.0f,1.0f,0.0f,0); surf.VertexTexCoords(4,1.0f,1.0f,0.0f,0); surf.VertexTexCoords(5,1.0f,0.0f,0.0f,0); surf.VertexTexCoords(6,0.0f,0.0f,0.0f,0); surf.VertexTexCoords(7,0.0f,1.0f,0.0f,0); surf.VertexTexCoords(8,0.0f,1.0f,0.0f,0); surf.VertexTexCoords(9,0.0f,0.0f,0.0f,0); surf.VertexTexCoords(10,1.0f,0.0f,0.0f,0); surf.VertexTexCoords(11,1.0f,1.0f,0.0f,0); surf.VertexTexCoords(12,0.0f,0.0f,0.0f,0); surf.VertexTexCoords(13,0.0f,1.0f,0.0f,0); surf.VertexTexCoords(14,1.0f,1.0f,0.0f,0); surf.VertexTexCoords(15,1.0f,0.0f,0.0f,0); surf.VertexTexCoords(16,0.0f,1.0f,0.0f,0); surf.VertexTexCoords(17,0.0f,0.0f,0.0f,0); surf.VertexTexCoords(18,1.0f,0.0f,0.0f,0); surf.VertexTexCoords(19,1.0f,1.0f,0.0f,0); surf.VertexTexCoords(20,1.0f,1.0f,0.0f,0); surf.VertexTexCoords(21,1.0f,0.0f,0.0f,0); surf.VertexTexCoords(22,0.0f,0.0f,0.0f,0); surf.VertexTexCoords(23,0.0f,1.0f,0.0f,0); surf.VertexTexCoords(0,0.0f,1.0f,0.0f,1); surf.VertexTexCoords(1,0.0f,0.0f,0.0f,1); surf.VertexTexCoords(2,1.0f,0.0f,0.0f,1); surf.VertexTexCoords(3,1.0f,1.0f,0.0f,1); surf.VertexTexCoords(4,1.0f,1.0f,0.0f,1); surf.VertexTexCoords(5,1.0f,0.0f,0.0f,1); surf.VertexTexCoords(6,0.0f,0.0f,0.0f,1); surf.VertexTexCoords(7,0.0f,1.0f,0.0f,1); surf.VertexTexCoords(8,0.0f,1.0f,0.0f,1); surf.VertexTexCoords(9,0.0f,0.0f,0.0f,1); surf.VertexTexCoords(10,1.0f,0.0f,0.0f,1); surf.VertexTexCoords(11,1.0f,1.0f,0.0f,1); surf.VertexTexCoords(12,0.0f,0.0f,0.0f,1); surf.VertexTexCoords(13,0.0f,1.0f,0.0f,1); surf.VertexTexCoords(14,1.0f,1.0f,0.0f,1); surf.VertexTexCoords(15,1.0f,0.0f,0.0f,1); surf.VertexTexCoords(16,0.0f,1.0f,0.0f,1); surf.VertexTexCoords(17,0.0f,0.0f,0.0f,1); surf.VertexTexCoords(18,1.0f,0.0f,0.0f,1); surf.VertexTexCoords(19,1.0f,1.0f,0.0f,1); surf.VertexTexCoords(20,1.0f,1.0f,0.0f,1); surf.VertexTexCoords(21,1.0f,0.0f,0.0f,1); surf.VertexTexCoords(22,0.0f,0.0f,0.0f,1); surf.VertexTexCoords(23,0.0f,1.0f,0.0f,1); surf.AddTriangle(0,1,2); // front surf.AddTriangle(0,2,3); surf.AddTriangle(6,5,4); // back surf.AddTriangle(7,6,4); surf.AddTriangle(6+8,5+8,1+8); // top surf.AddTriangle(2+8,6+8,1+8); surf.AddTriangle(0+8,4+8,7+8); // bottom surf.AddTriangle(0+8,7+8,3+8); surf.AddTriangle(6+16,2+16,3+16); // right surf.AddTriangle(7+16,6+16,3+16); surf.AddTriangle(0+16,1+16,5+16); // left surf.AddTriangle(0 + 16, 5 + 16, 4 + 16); surf.build (); return surf.getMesh (); }
private void GetBinarySurfaces() { Logging.Print("DETECTED BINARY STL"); byte[] numFacets = new byte[STLInfo.STL_BIN_NUM_FACET_LENGTH]; // Skip header fileStream.Seek(STLInfo.STL_BIN_HEADER_LENGTH, SeekOrigin.Begin); // Read facets fileStream.Read(numFacets, 0, STLInfo.STL_BIN_NUM_FACET_LENGTH / 2); // Facets count is little endian if (!BitConverter.IsLittleEndian) { // TODO: Transpose bytes into big endian throw new NotImplementedException("BIG ENDIAN SYSTEMS NOT YET SUPPORTED."); } NumFacets = BitConverter.ToInt64(numFacets, 0); if (NumFacets > MAX_BIN_STL_FACETS_PRINT_LOADING) { Logging.OpenPercentageIndicator(NumFacets, true); } byte[] facet = new byte[STLInfo.STL_BIN_FACET_LENGTH]; for (long i = 0; i < NumFacets; i++) { // TODO: More efficient way to do this? Surface thisSurface = new Surface(); Vector3D <float> normal = new Vector3D <float>(); Vector3D <float> vX = new Vector3D <float>(); Vector3D <float> vY = new Vector3D <float>(); Vector3D <float> vZ = new Vector3D <float>(); fileStream.Read(facet, 0, STLInfo.STL_BIN_FACET_LENGTH); if (!BitConverter.IsLittleEndian) { // TODO: Transpose to big endian throw new NotImplementedException("BIG ENDIAN SYSTEMS NOT YET SUPPORTED."); } // Normal normal.X = BitConverter.ToSingle(facet, 0); normal.Z = BitConverter.ToSingle(facet, 8); normal.Y = BitConverter.ToSingle(facet, 4); // X vX.X = BitConverter.ToSingle(facet, 12); vX.Y = BitConverter.ToSingle(facet, 16); vX.Z = BitConverter.ToSingle(facet, 20); // Y vY.X = BitConverter.ToSingle(facet, 24); vY.Y = BitConverter.ToSingle(facet, 28); vY.Z = BitConverter.ToSingle(facet, 32); // Z vZ.X = BitConverter.ToSingle(facet, 36); vZ.Y = BitConverter.ToSingle(facet, 40); vZ.Z = BitConverter.ToSingle(facet, 44); // Byte Count (ignored, 2 bytes) // Set surface thisSurface.SetNormal(normal); thisSurface.AddVertex(vX); thisSurface.AddVertex(vY); thisSurface.AddVertex(vZ); // Add surface to list Surfaces.Add(thisSurface); if (Logging.IsPercentageIndicatorOpen) { Logging.UpdatePercentageIndicator(i); } } if (Logging.IsPercentageIndicatorOpen) { Logging.ClosePercentageIndicator(); } }
public static Mesh createCube(string name) { Surface surf = new Surface(name); surf.AddVertex(-1.0f, -1.0f, -1.0f); surf.AddVertex(-1.0f, 1.0f, -1.0f); surf.AddVertex(1.0f, 1.0f, -1.0f); surf.AddVertex(1.0f, -1.0f, -1.0f); surf.AddVertex(-1.0f, -1.0f, 1.0f); surf.AddVertex(-1.0f, 1.0f, 1.0f); surf.AddVertex(1.0f, 1.0f, 1.0f); surf.AddVertex(1.0f, -1.0f, 1.0f); surf.AddVertex(-1.0f, -1.0f, 1.0f); surf.AddVertex(-1.0f, 1.0f, 1.0f); surf.AddVertex(1.0f, 1.0f, 1.0f); surf.AddVertex(1.0f, -1.0f, 1.0f); surf.AddVertex(-1.0f, -1.0f, -1.0f); surf.AddVertex(-1.0f, 1.0f, -1.0f); surf.AddVertex(1.0f, 1.0f, -1.0f); surf.AddVertex(1.0f, -1.0f, -1.0f); surf.AddVertex(-1.0f, -1.0f, 1.0f); surf.AddVertex(-1.0f, 1.0f, 1.0f); surf.AddVertex(1.0f, 1.0f, 1.0f); surf.AddVertex(1.0f, -1.0f, 1.0f); surf.AddVertex(-1.0f, -1.0f, -1.0f); surf.AddVertex(-1.0f, 1.0f, -1.0f); surf.AddVertex(1.0f, 1.0f, -1.0f); surf.AddVertex(1.0f, -1.0f, -1.0f); surf.VertexNormal(0, 0.0f, 0.0f, -1.0f); surf.VertexNormal(1, 0.0f, 0.0f, -1.0f); surf.VertexNormal(2, 0.0f, 0.0f, -1.0f); surf.VertexNormal(3, 0.0f, 0.0f, -1.0f); surf.VertexNormal(4, 0.0f, 0.0f, 1.0f); surf.VertexNormal(5, 0.0f, 0.0f, 1.0f); surf.VertexNormal(6, 0.0f, 0.0f, 1.0f); surf.VertexNormal(7, 0.0f, 0.0f, 1.0f); surf.VertexNormal(8, 0.0f, -1.0f, 0.0f); surf.VertexNormal(9, 0.0f, 1.0f, 0.0f); surf.VertexNormal(10, 0.0f, 1.0f, 0.0f); surf.VertexNormal(11, 0.0f, -1.0f, 0.0f); surf.VertexNormal(12, 0.0f, -1.0f, 0.0f); surf.VertexNormal(13, 0.0f, 1.0f, 0.0f); surf.VertexNormal(14, 0.0f, 1.0f, 0.0f); surf.VertexNormal(15, 0.0f, -1.0f, 0.0f); surf.VertexNormal(16, -1.0f, 0.0f, 0.0f); surf.VertexNormal(17, -1.0f, 0.0f, 0.0f); surf.VertexNormal(18, 1.0f, 0.0f, 0.0f); surf.VertexNormal(19, 1.0f, 0.0f, 0.0f); surf.VertexNormal(20, -1.0f, 0.0f, 0.0f); surf.VertexNormal(21, -1.0f, 0.0f, 0.0f); surf.VertexNormal(22, 1.0f, 0.0f, 0.0f); surf.VertexNormal(23, 1.0f, 0.0f, 0.0f); surf.VertexTexCoords(0, 0.0f, 1.0f, 0.0f, 0); surf.VertexTexCoords(1, 0.0f, 0.0f, 0.0f, 0); surf.VertexTexCoords(2, 1.0f, 0.0f, 0.0f, 0); surf.VertexTexCoords(3, 1.0f, 1.0f, 0.0f, 0); surf.VertexTexCoords(4, 1.0f, 1.0f, 0.0f, 0); surf.VertexTexCoords(5, 1.0f, 0.0f, 0.0f, 0); surf.VertexTexCoords(6, 0.0f, 0.0f, 0.0f, 0); surf.VertexTexCoords(7, 0.0f, 1.0f, 0.0f, 0); surf.VertexTexCoords(8, 0.0f, 1.0f, 0.0f, 0); surf.VertexTexCoords(9, 0.0f, 0.0f, 0.0f, 0); surf.VertexTexCoords(10, 1.0f, 0.0f, 0.0f, 0); surf.VertexTexCoords(11, 1.0f, 1.0f, 0.0f, 0); surf.VertexTexCoords(12, 0.0f, 0.0f, 0.0f, 0); surf.VertexTexCoords(13, 0.0f, 1.0f, 0.0f, 0); surf.VertexTexCoords(14, 1.0f, 1.0f, 0.0f, 0); surf.VertexTexCoords(15, 1.0f, 0.0f, 0.0f, 0); surf.VertexTexCoords(16, 0.0f, 1.0f, 0.0f, 0); surf.VertexTexCoords(17, 0.0f, 0.0f, 0.0f, 0); surf.VertexTexCoords(18, 1.0f, 0.0f, 0.0f, 0); surf.VertexTexCoords(19, 1.0f, 1.0f, 0.0f, 0); surf.VertexTexCoords(20, 1.0f, 1.0f, 0.0f, 0); surf.VertexTexCoords(21, 1.0f, 0.0f, 0.0f, 0); surf.VertexTexCoords(22, 0.0f, 0.0f, 0.0f, 0); surf.VertexTexCoords(23, 0.0f, 1.0f, 0.0f, 0); surf.VertexTexCoords(0, 0.0f, 1.0f, 0.0f, 1); surf.VertexTexCoords(1, 0.0f, 0.0f, 0.0f, 1); surf.VertexTexCoords(2, 1.0f, 0.0f, 0.0f, 1); surf.VertexTexCoords(3, 1.0f, 1.0f, 0.0f, 1); surf.VertexTexCoords(4, 1.0f, 1.0f, 0.0f, 1); surf.VertexTexCoords(5, 1.0f, 0.0f, 0.0f, 1); surf.VertexTexCoords(6, 0.0f, 0.0f, 0.0f, 1); surf.VertexTexCoords(7, 0.0f, 1.0f, 0.0f, 1); surf.VertexTexCoords(8, 0.0f, 1.0f, 0.0f, 1); surf.VertexTexCoords(9, 0.0f, 0.0f, 0.0f, 1); surf.VertexTexCoords(10, 1.0f, 0.0f, 0.0f, 1); surf.VertexTexCoords(11, 1.0f, 1.0f, 0.0f, 1); surf.VertexTexCoords(12, 0.0f, 0.0f, 0.0f, 1); surf.VertexTexCoords(13, 0.0f, 1.0f, 0.0f, 1); surf.VertexTexCoords(14, 1.0f, 1.0f, 0.0f, 1); surf.VertexTexCoords(15, 1.0f, 0.0f, 0.0f, 1); surf.VertexTexCoords(16, 0.0f, 1.0f, 0.0f, 1); surf.VertexTexCoords(17, 0.0f, 0.0f, 0.0f, 1); surf.VertexTexCoords(18, 1.0f, 0.0f, 0.0f, 1); surf.VertexTexCoords(19, 1.0f, 1.0f, 0.0f, 1); surf.VertexTexCoords(20, 1.0f, 1.0f, 0.0f, 1); surf.VertexTexCoords(21, 1.0f, 0.0f, 0.0f, 1); surf.VertexTexCoords(22, 0.0f, 0.0f, 0.0f, 1); surf.VertexTexCoords(23, 0.0f, 1.0f, 0.0f, 1); surf.AddTriangle(0, 1, 2); // front surf.AddTriangle(0, 2, 3); surf.AddTriangle(6, 5, 4); // back surf.AddTriangle(7, 6, 4); surf.AddTriangle(6 + 8, 5 + 8, 1 + 8); // top surf.AddTriangle(2 + 8, 6 + 8, 1 + 8); surf.AddTriangle(0 + 8, 4 + 8, 7 + 8); // bottom surf.AddTriangle(0 + 8, 7 + 8, 3 + 8); surf.AddTriangle(6 + 16, 2 + 16, 3 + 16); // right surf.AddTriangle(7 + 16, 6 + 16, 3 + 16); surf.AddTriangle(0 + 16, 1 + 16, 5 + 16); // left surf.AddTriangle(0 + 16, 5 + 16, 4 + 16); surf.build(); return(surf.getMesh()); }