Ejemplo n.º 1
0
	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 ();

	}
Ejemplo n.º 2
0
            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();
                }
            }
Ejemplo n.º 3
0
    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());
    }