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"); }
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()); }