예제 #1
0
        static void Main()
        {
            const string inputFilenameStl = "..\\..\\archquad.stl";

            Console.WriteLine("Input filename: {0}", inputFilenameStl);

            //Load the triangles from the STL file and reduce to a unit 1x1x1 size
            Triangles triangles = RasterLib.RasterApi.StlToTriangles(inputFilenameStl);

            Console.WriteLine("Triangle count: {0}", triangles.Count);

            //Say the dimensions of it too
            Rect triangleBoundaries = triangles.TrianglesBoundaries;

            Console.WriteLine("{0} dimensions {1}mm x {2}mm x {3}mm",
                              inputFilenameStl,
                              (int)triangleBoundaries.Width,
                              (int)triangleBoundaries.Height,
                              (int)triangleBoundaries.Depth);

            //Create four (for the quad)
            Console.WriteLine("Cloning quads");
            Triangles trianglesNw = triangles.Clone();
            Triangles trianglesNe = triangles.Clone();
            Triangles trianglesSw = triangles.Clone();
            Triangles trianglesSe = triangles.Clone();

            Triangles trianglesQuad = RasterLib.RasterApi.CreateTriangles();

            //Get the boundaries of the STL model, use that to calculate offset sizes
            Rect boundaries = trianglesNw.TrianglesBoundaries;

            //Calculate offsets
            var offsetX = (float)boundaries.Width;
            var offsetZ = (float)boundaries.Depth;

            //Translate each model out to four corners
            Console.WriteLine("Translating quads");
            trianglesNw.Translate(-offsetX, 0, offsetZ);
            trianglesNe.Translate(offsetX, 0, offsetZ);
            trianglesSw.Translate(-offsetX, 0, -offsetZ);
            trianglesSe.Translate(offsetX, 0, -offsetZ);

            //Add them all to triangle array
            Console.WriteLine("Creating final model");
            trianglesQuad.Add(trianglesNw);
            trianglesQuad.Add(trianglesNe);
            trianglesQuad.Add(trianglesSw);
            trianglesQuad.Add(trianglesSe);

            //Write model
            const string outputFilenameStl = "..\\..\\ArchQuad-X4.stl";

            Console.WriteLine("Writing " + outputFilenameStl);
            RasterLib.RasterApi.SaveTrianglesToStl(outputFilenameStl, trianglesQuad);

            Console.WriteLine("Done");
        }
예제 #2
0
        static void Main()
        {
            const string inputFilenameStl = "..\\..\\archquad.stl";

            Console.WriteLine("Input filename: {0}", inputFilenameStl);

            //Load STL file
            Triangles triangles = RasterLib.RasterApi.StlToTriangles(inputFilenameStl);

            //Write message if encountered problem
            if (triangles == null)
            {
                Console.WriteLine("Error loading " + inputFilenameStl);
                return;
            }

            //Just output # of triangles to show it is real data
            Console.WriteLine("Triangle count (source): {0}", triangles.Count);

            //Say the dimensions of it too
            Rect triangleBoundariesInput = triangles.TrianglesBoundaries;

            Console.WriteLine("Input {0} Dimensions = {1}mm x {2}mm x {3}mm",
                              inputFilenameStl,
                              (int)triangleBoundariesInput.Width,
                              (int)triangleBoundariesInput.Height,
                              (int)triangleBoundariesInput.Depth);

            //Clone the triangles
            Triangles trianglesResized = triangles.Clone();

            //Scale everything up by 2.5
            const float scale = 2.5f;

            Console.WriteLine("Scaling model size up by {0}%", scale * 100.0f);
            trianglesResized.Scale(scale, scale, scale);

            //Just state the dRectory we are writing to.
            const string outputfilenameStl = "..\\..\\archquad-resized.stl";

            Console.WriteLine("Output filename: {0}", outputfilenameStl);

            //Say the dimensions of it too
            Rect triangleBoundariesOutput = trianglesResized.TrianglesBoundaries;

            Console.WriteLine("Output {0} Dimensions = {1}mm x {2}mm x {3}mm",
                              outputfilenameStl,
                              (int)triangleBoundariesOutput.Width,
                              (int)triangleBoundariesOutput.Height,
                              (int)triangleBoundariesOutput.Depth);

            trianglesResized.PutOnGround();

            //Finally save out the resized triangles back to STL file
            Console.WriteLine("Writing file {0}", outputfilenameStl);
            RasterLib.RasterApi.SaveTrianglesToStlAscii(outputfilenameStl, trianglesResized);


            Console.WriteLine("Done.");
        }
        //Assumes triangle are already unit-normalized to 1x1x1
        public static void MapRectToTriangles(ref List <Triangle> renderedTriangleSoup, Triangles triangles, Rect rect)
        {
            double midX = (rect.Width) / 2 + rect.Pt1[0];
            double midY = (rect.Height) / 2 + rect.Pt1[1];
            double midZ = (rect.Depth) / 2 + rect.Pt1[2];

            Triangles trianglesClone = triangles.Clone();

            trianglesClone.Scale((float)rect.Width, (float)rect.Height, (float)rect.Depth);
            trianglesClone.Translate((float)midX, (float)midY, (float)midZ);

            renderedTriangleSoup.AddRange(trianglesClone.GetTriangleArray());
        }