static Grid RenderFlatGrid(Dictionary <string, string> gsa2names, Dictionary <string, RectList> name2rects, int rangeX, int rangeY, int rangeZ) { int width = rangeX * 64; int height = rangeZ * 64; Grid grid = RasterLib.RasterApi.CreateGrid(width, height, 1, 4); IPainter painter = RasterLib.RasterApi.Painter; for (int z = -rangeZ; z <= rangeZ; z++) { //for (int y = 0; y <= rangeY; y++) int y = 0; { for (int x = -rangeX; x <= rangeX; x++) { GridSpaceAddress gsa = new GridSpaceAddress(x, y, z); if (gsa2names.ContainsKey(gsa.ToString())) { string name = gsa2names[gsa.ToString()]; RectList cellRects = name2rects[name]; Console.WriteLine("Rendering " + name); Grid tempGrid = new Grid(64, 64, 64, 4); RasterLib.RasterApi.Renderer.RenderRectsToGrid(cellRects, tempGrid, 0, 0, 0); BirdsEye(tempGrid, grid, (x + rangeX) * 64 / 2, (z + rangeZ) * 64 / 2); } } } } GC.Collect(); return(grid); }
//Render rectangles out to Stl using a list to select shapes from public Triangles RenderRectsAsStlMapping(RectList rects, TrianglesList trianglesList) { if (rects == null || trianglesList == null) { return(null); } var renderedTriangleSoup = new List <Triangle>(); foreach (Rect rect in rects) { if (rect.Properties.ShapeId == 0 || rect.Properties.ShapeId >= trianglesList.Count) { rect.Properties.ShapeId = 1; } if (rect.Properties.ShapeId < trianglesList.Count) { Triangles triangles = trianglesList.GetTriangles(rect.Properties.ShapeId); MapRectToTriangles(ref renderedTriangleSoup, triangles, rect); } } Triangles triangleSet = new Triangles(); Triangle[] triangleArray = renderedTriangleSoup.ToArray(); triangleSet.SetTriangles(triangleArray); //Center entire grid/set on origin, mirror, and rotate to correct triangleSet.Translate(-rects.SizeX / 2.0f, -rects.SizeY / 2.0f, -rects.SizeZ / 2.0f); return(triangleSet); }
public void SpecificTest_PropertyRGBA() { const string code = @"Size3D4 8 1 8;Spawn 1 0 1;PenColorD4 31 127 255 255;PenGroup 2;Plot 1 0 1"; RectList rectSet = RasterLib.RasterApi.CodeToRects(RasterLib.RasterApi.CreateCode(code)); Assert.IsTrue(rectSet.GetRect(0).Properties.Rgba == 0xffff7f1f); }
public void TestSerializedRectsToRects() { SerializedRects serializedRects = RasterLib.RasterApi.CreateSerializedRects(SerializedFinalCubeCode); RectList rects = RasterLib.RasterApi.SerializedRectsToRects(serializedRects); Assert.IsTrue(rects.Count == 1); }
public void SpecificTest_PropertyAnim() { const string code = @"Size3D4 8 1 8;Spawn 1 0 1;PenColorD1 17;PenGroup 2;Plot 1 0 1"; RectList rectSet = RasterLib.RasterApi.CodeToRects(RasterLib.RasterApi.CreateCode(code)); Assert.IsTrue(rectSet.GetRect(0).Properties.GroupId == 2); }
//Render a grid into another grid with oblique perspective and iconic cells public static void RenderObliqueCellsSetRects(RectList rects, Grid gridDst) { GridContext bgc = new GridContext(gridDst); const int cellSize = 7; const int tinSize = 4; foreach (Rect rect in rects) { ulong u = rect.Properties.Rgba; bgc.Pen.SetColor(u); if (u != 0) { var x1 = (int)rect.Pt1[0]; var y1 = (int)rect.Pt1[1]; var z1 = (int)rect.Pt1[2]; int sx1 = x1 * cellSize + z1 * tinSize; int sy1 = gridDst.SizeY - (z1 + 1) * 4 - cellSize - 1 - y1 * cellSize; var x2 = (int)rect.Pt2[0]; var y2 = (int)rect.Pt2[1]; var z2 = (int)rect.Pt2[2]; int sx2 = x2 * cellSize + z2 * tinSize; int sy2 = gridDst.SizeY - (z2 + 1) * 4 - cellSize - 1 - y2 * cellSize; bgc.Pen.SetColor(u); RenderCell(bgc, sx1, sy1); bgc.Pen.SetColor(u); RenderCell(bgc, sx2, sy2); } } }
static Grid RenderNetGrid(Dictionary <string, string> gsa2names, Dictionary <string, RectList> name2rects, int rangeX, int rangeY, int rangeZ) { int width = rangeX * 64 * 2; int height = rangeY * 64 * 2; int depth = rangeZ * 64 * 2; Grid grid = RasterLib.RasterApi.CreateGrid(width, 64, depth, 4); int ox = width / 2; int oz = depth / 2; IPainter painter = RasterLib.RasterApi.Painter; for (int z = -rangeZ; z <= rangeZ; z++) { //for (int y = 0; y <= rangeY; y++) int y = 0; { for (int x = -rangeX; x <= rangeX; x++) { GridSpaceAddress gsa = new GridSpaceAddress(x, y, z); if (gsa2names.ContainsKey(gsa.ToString())) { string name = gsa2names[gsa.ToString()]; RectList cellRects = name2rects[name]; Console.WriteLine("Rendering " + name); RasterLib.RasterApi.Renderer.RenderRectsToGrid(cellRects, grid, x * 64 + ox, y * 64, z * 64 + oz); } } } } GC.Collect(); return(grid); }
public void TestCodeToRects() { Code code = RasterLib.RasterApi.CreateCode(FinalCubeCode); Grid grid = RasterLib.RasterApi.CodeToGrid(code); RectList rects = RasterLib.RasterApi.GridToRects(grid); Assert.IsTrue(rects.Count == 1); }
public void TestRectsToSerialized() { Code code = RasterLib.RasterApi.CreateCode(FinalCubeCode); Grid grid = RasterLib.RasterApi.CodeToGrid(code); RectList rects = RasterLib.RasterApi.GridToRects(grid); SerializedRects serializedRects = RasterLib.RasterApi.RectsToSerializedRects(rects); Assert.IsTrue((String.CompareOrdinal(serializedRects.SerializedData, SerializedFinalCubeCode) == 0)); }
public void TestRectsToTrianglesCube() { Code code = RasterLib.RasterApi.CreateCode(FinalCubeCode); Grid grid = RasterLib.RasterApi.CodeToGrid(code); RectList rects = RasterLib.RasterApi.GridToRects(grid); Triangles triangles = RasterLib.RasterApi.RectsToTrianglesCube(rects); Assert.IsTrue(triangles.GetTriangleArray().Length == 12); }
public static void Control(ScratchControl ctl, RectList rects) { //Then render that to triangles Console.WriteLine("Creating triangle library"); TrianglesList trianglesList = RasterLib.RasterApi.CreateTrianglesList(); foreach (string filename in ctl.FileNamesInStlLibrary) { trianglesList.ImportAndReduceToUnit(filename); } //Render the rectangles out as shapes(Triangles) to a new set of triangles Triangles triangles = RasterLib.RasterApi.Renderer.RenderRectsAsStlMapping(rects, trianglesList); Console.WriteLine("Rendering triangles to grid"); //Reduce scale to 1x1x1, making it 1mm x 1mm x 1mm triangles.CalcNormals(); triangles.ReduceToUnit(); triangles.Translate(0.5f, 0.5f, 0.5f); //Scale up to make an exactly sized models in inches then millimeters const float finalSizeInInches = 2; const float finalSizeInMillimeters = finalSizeInInches * 25.4f; //Inches to millimeters triangles.Scale(finalSizeInMillimeters, finalSizeInMillimeters, finalSizeInMillimeters); //Save final result to STL file Console.WriteLine("Saving triangles to {0}", ctl.FileNameOutStl); RasterLib.RasterApi.SaveTrianglesToStlAscii(ctl.FileNameOutStl, triangles); //So.. as long as we are here.. let's make a preview //Since we can, normalize it now triangles.ReduceToUnit(); //Save a rendering out to a PNG, why not, too. Console.WriteLine("Creating preview grid"); Grid gridFromStl = RasterLib.RasterApi.CreateGrid(96, 96, 96, 4); Console.WriteLine("Rendering triangles to grid"); RasterLib.RasterApi.Renderer.RenderTrianglesToGrid(triangles, gridFromStl); //Then render to a new grid Console.WriteLine("Rendering grid to oblique preview grid"); Grid gridObliqueRendered = RasterLib.RasterApi.Renderer.RenderObliqueCells(gridFromStl); //Then save if (ctl.FileNameOutStlPreview != null) { Console.WriteLine("Saving file to {0}", ctl.FileNameOutStlPreview); GraphicsApi.SaveFlatPng(ctl.FileNameOutStlPreview, gridObliqueRendered); } }
public static void GlycToPov(string glycFilename, string povFilename, string headerFilename) { string codeString = RasterLib.RasterApi.ReadGlyc(glycFilename).Replace(';', '\n'); Code code = new Code(codeString); code = RasterLib.RasterApi.CodeToRescaledCode(code, 31, 32, 31); Grid grid = RasterLib.RasterApi.CodeToGrid(code); RectList rects = RasterLib.RasterApi.GridToRects(grid); using (var file = new System.IO.StreamWriter(povFilename)) { InsertHeader(file, headerFilename); float scalex = 0.5f; float scaley = 0.5f; float scalez = 0.5f; float ox = -32 * scalex; float oy = 0; float oz = 32 * scalex; foreach (Rect rect in rects) { CellProperties cp = rect.Properties; file.WriteLine("box {"); file.WriteLine(" <{0},{1},{2}> <{3}, {4}, {5}>", rect.Pt1[0] * scalex - ox, rect.Pt1[1] * scaley - oy, rect.Pt1[2] * scalez - oz, rect.Pt2[0] * scalex - ox, rect.Pt2[1] * scaley - oy, rect.Pt2[2] * scalez - oz); OutputProperties(file, cp); } /*for (int z = 0; z < grid.SizeZ; z++) * { * for (int y = 0; y < grid.SizeY; y++) * { * for (int x = 0; x < grid.SizeX; x++) * { * CellProperties cp = grid.GetProperty(x, y, z); * * if (cp.Rgba > 0) * { * file.WriteLine("sphere {"); * file.WriteLine(" <{0},{1},{2}>,{3}", x - 32, y, z - 32, scalex * 1.5); * OutputProperties(file, cp); * } * } * } * }*/ } }
public void TestRectsToTrianglesCubeTime() { var sw = new Stopwatch(); Code rasterCode = RasterLib.RasterApi.CreateCode(ComplexCode); Grid grid = RasterLib.RasterApi.CodeToGrid(rasterCode); RectList rects = RasterLib.RasterApi.GridToRects(grid); sw.Start(); RasterLib.RasterApi.RectsToTrianglesCube(rects); sw.Stop(); long val = sw.ElapsedMilliseconds; Assert.IsTrue(val < 500); }
public string GetResponse(string query) { string serializedRectsString = query.Substring(1, query.Length - 1); SerializedRects srects = RasterLib.RasterApi.CreateSerializedRects(serializedRectsString); RectList rects = RasterLib.RasterApi.SerializedRectsToRects(srects); string response = "<title>SerializedRects-to-HTML</title><body>"; foreach (Rect rect in rects) { response += rect + "<br>"; } response += "</body>"; return(response); }
public void TestRectsToBoundaries() { Code code = RasterLib.RasterApi.CreateCode(FinalCubeCode); Grid grid = RasterLib.RasterApi.CodeToGrid(code); RectList rects = RasterLib.RasterApi.GridToRects(grid); Rect rect = RasterLib.RasterApi.RectsToBoundaries(rects); Assert.IsTrue(RasterLib.RasterApi.DoublesAreEqual(rect.Pt1[0], 0)); Assert.IsTrue(RasterLib.RasterApi.DoublesAreEqual(rect.Pt1[1], 0)); Assert.IsTrue(RasterLib.RasterApi.DoublesAreEqual(rect.Pt1[2], 0)); Assert.IsTrue(RasterLib.RasterApi.DoublesAreEqual(rect.Pt2[0], 7)); Assert.IsTrue(RasterLib.RasterApi.DoublesAreEqual(rect.Pt2[1], 7)); Assert.IsTrue(RasterLib.RasterApi.DoublesAreEqual(rect.Pt2[2], 7)); }
public void ConvertCodeToGridToRectsToQuadsToTriangles() { Code rasterCode = RasterLib.RasterApi.CreateCode(Code); Assert.IsNotNull(rasterCode); Grid grid = RasterLib.RasterApi.CodeToGrid(rasterCode); Assert.IsNotNull(grid); RectList rects = RasterLib.RasterApi.GridToRects(grid); Assert.IsNotNull(rects); QuadList quads = RasterLib.RasterApi.RectsToQuads(rects); Assert.IsNotNull(quads); Triangles triangles = RasterLib.RasterApi.QuadsToTriangles(quads); Assert.IsNotNull(triangles); }
public Simulations(Dictionary <string, string> megagridAddressDictionary, Digest digest) { foreach (KeyValuePair <string, string> kvp in megagridAddressDictionary) { if (!simulations.ContainsKey(kvp.Value.Trim())) { SimulationModel simModel = new SimulationModel(); CompiledCode code = digest.FindByName(kvp.Value); Grid grid = Pivot.ToGrid(new Code(code.minimalCode)); RectList rects = Pivot.ToRects(grid); simModel.grid = grid; RasterLib.RasterApi.BuildCircuit(rects, true); simModel.rects = rects; simModel.Build(); simulations.Add(kvp.Value.Trim(), simModel); } } }
public void CalculateCircuitModel(RectList rects) { circuitModel = new List <Tuple <int, int, int> >(); for (int id = 0; id < rects.Count; id++) { Rect rect = rects.GetRect(id); int pid = id + 1; if (rect.Properties.CircuitIds != null && rect.Properties.CircuitIds.Count > 0) { Console.WriteLine("Circuit Rect " + pid + " : " + rect); foreach (int cid in rect.Properties.CircuitIds) { Console.WriteLine(" CID " + cid); circuitModel.Add(new Tuple <int, int, int>(pid, rect.Properties.PhysicsId, cid)); } } } }
static void Main(string[] args) { Console.WriteLine("Test worlds"); Directory.SetCurrentDirectory("\\GitHub\\Glyphics2\\Crawler\\"); string glycFilename = "c:\\github\\glyphics2\\Crawler\\Home.glyc"; string codeString = RasterLib.RasterApi.ReadGlyc(glycFilename).Replace(';', '\n'); RectList rects = Pivot.ToRects(codeString); RasterLib.RasterApi.BuildCircuit(rects, true); SerializedRects rects255 = Pivot.ToSerialized255(rects); rects = Pivot.ToRects(rects255); RasterLib.RasterApi.BuildCircuit(rects, true); // Clipboard.SetText(rects255.SerializedData); Console.WriteLine("\nSerialized rects\n{0}", rects255.SerializedData); }
public Dictionary <string, RectList> Names2Rects(Dictionary <string, string> gsa2names) { Dictionary <string, RectList> names2rects = new Dictionary <string, RectList>(); foreach (KeyValuePair <string, string> kvp in gsa2names) { if (!names2rects.ContainsKey(kvp.Value)) { Console.WriteLine("Searching : " + kvp.Value); string srectData = RequestRects(kvp.Value); SerializedRects srects = new SerializedRects(srectData); RectList rects = RasterLib.RasterApi.SerializedRectsToRects(srects); Console.WriteLine(rects); names2rects.Add(kvp.Value, rects); } } return(names2rects); }
//Render a set of rects into a grid as little filled 3d rectangles public void RenderRectsToGrid(RectList rects, Grid grid) { if (rects == null || grid == null) { return; } GridContext bgc = new GridContext(grid); IPainter painter = new CPainter(); //Draw background painter.DrawFastFillRect(bgc, 0, 0, 0, bgc.Grid.SizeX, bgc.Grid.SizeY, bgc.Grid.SizeZ); //Then draw each triangle, adjusting for inclusive numbering const int inclusiveOffset = 1; foreach (Rect rect in rects) { bgc.Pen.SetColor(rect.Properties.Rgba); painter.DrawFastFillRect(bgc, (int)rect.Pt1[0], (int)rect.Pt1[1], (int)rect.Pt1[2], (int)rect.Pt2[0] - inclusiveOffset, (int)rect.Pt2[1] - inclusiveOffset, (int)rect.Pt2[2] - inclusiveOffset); } }
public void RunStlLoadSaveTest() { const string cubeCode = "Size3D4 4 4 4;PenColorD4 255 255 255 255;FillRect 0 0 0 4 4 4"; const string filename = "test.stl"; //Generate the triangles Code code = RasterLib.RasterApi.CreateCode(cubeCode); Grid grid = RasterLib.RasterApi.CodeToGrid(code); RectList rects = RasterLib.RasterApi.GridToRects(grid); Triangles trianglesOut = RasterLib.RasterApi.RectsToTrianglesCube(rects); //Write them out RasterLib.RasterApi.SaveTrianglesToStl(filename, trianglesOut); //Then read them back Triangles trianglesIn = RasterLib.RasterApi.StlToTriangles(filename); //First check initial sizes Assert.IsTrue(trianglesOut.GetTriangleArray().Length == trianglesIn.GetTriangleArray().Length); //Check every vertex of every triangle for (int i = 0; i < trianglesOut.GetTriangleArray().Length; i++) { Triangle t1 = trianglesOut.GetTriangleArray()[i]; Triangle t2 = trianglesIn.GetTriangleArray()[i]; Assert.IsTrue(RasterLib.RasterApi.FloatsAreEqual(t1.Vertex1[0], t2.Vertex1[0])); Assert.IsTrue(RasterLib.RasterApi.FloatsAreEqual(t1.Vertex1[1], t2.Vertex1[1])); Assert.IsTrue(RasterLib.RasterApi.FloatsAreEqual(t1.Vertex1[2], t2.Vertex1[2])); Assert.IsTrue(RasterLib.RasterApi.FloatsAreEqual(t1.Vertex2[0], t2.Vertex2[0])); Assert.IsTrue(RasterLib.RasterApi.FloatsAreEqual(t1.Vertex2[1], t2.Vertex2[1])); Assert.IsTrue(RasterLib.RasterApi.FloatsAreEqual(t1.Vertex2[2], t2.Vertex2[2])); Assert.IsTrue(RasterLib.RasterApi.FloatsAreEqual(t1.Vertex3[0], t2.Vertex3[0])); Assert.IsTrue(RasterLib.RasterApi.FloatsAreEqual(t1.Vertex3[1], t2.Vertex3[1])); } }
static void Main() { string name = "GateTimer"; string glycFilename = "c:\\github\\glyphics2\\glyph cores\\" + name + ".glyc"; string codeString = RasterLib.RasterApi.ReadGlyc(glycFilename).Replace(';', '\n'); Grid grid = Pivot.ToGrid(codeString); RectList rects = Pivot.ToRects(grid); //RasterLib.RasterApi.BuildCircuit(rects, true); //Console.WriteLine("Rects\n"); //Console.WriteLine(rects); SimulationModel model = new SimulationModel(); model.grid = grid; model.rects = rects; model.Build(); Console.ReadKey(); Simulation.RunSimulation(model, name); }
//Render obliquely and return public Grid RenderObliqueCellsRects(RectList rects) { if (rects == null) { return(null); } const int cellSize = 12; int ix = rects.SizeX * cellSize; int iy = rects.SizeY * cellSize; Grid grid2 = new Grid(ix, iy, 1, 4); GridContext bgc = new GridContext(grid2) { Pen = { Rgba = RasterLib.RasterApi.Rgba2Ulong(255, 255, 255, 255) } }; IPainter painter = new CPainter(); painter.DrawFastFillRect(bgc, 0, 0, 0, grid2.SizeX, grid2.SizeY, 1); RenderObliqueCellsSetRects(rects, grid2); return(grid2); }
static void Main(string[] args) { Console.WriteLine("Server Tests"); GridSpaceAddress gsa = new GridSpaceAddress(0, 0, 0); ServerLib.MegaGridClient client = new MegaGridClient("http://localhost:3838"); string name = client.RequestNameAtGSA(gsa); Console.WriteLine("\nGrid at (0,0,0) = '{0}'", name); string serializedRectsStr = client.RequestRects(name); Console.WriteLine("\nSerialized rects\n" + serializedRectsStr); RectList rects = Pivot.ToRects(serializedRectsStr); Console.WriteLine("\nRects\n" + rects); while (true) { Console.WriteLine("Live:{0}\n{1}", name, client.RequestLive(name)); Thread.Sleep(250); } }
public void ConvertCodeToGridToRectsToScene() { Code rasterCode = RasterLib.RasterApi.CreateCode(Code); Grid grid = RasterLib.RasterApi.CodeToGrid(rasterCode); RectList rectsFromGrid = RasterLib.RasterApi.GridToRects(grid); Grid gridFromRects = grid.Clone(); Assert.IsTrue(grid.IsEqualTo(gridFromRects)); RasterLib.RasterApi.Renderer.RenderRectsToGrid(rectsFromGrid, gridFromRects); Assert.IsTrue(grid.IsEqualTo(gridFromRects)); Scene sceneFromRects = RasterLib.RasterApi.RectsToScene(rectsFromGrid); RectList rectsFromScene = RasterLib.RasterApi.SceneToRects(sceneFromRects); Assert.IsTrue(rectsFromGrid.IsEqualTo(rectsFromScene)); Grid gridMega = grid.Clone(); RasterLib.RasterApi.Renderer.RenderRectsToGrid(rectsFromScene, gridMega); Assert.IsTrue(grid.IsEqualTo(gridMega)); }
public string GetResponse(string query) { string serializedRectsString = query.Substring(1, query.Length - 1); SerializedRects srects = RasterLib.RasterApi.CreateSerializedRects(serializedRectsString); RectList rects = RasterLib.RasterApi.SerializedRectsToRects(srects); string response = "<title>SerializedRects-to-JSON</title>"; response += "{\"rects\":[<br>\n"; StringBuilder sb = new StringBuilder(); foreach (Rect rect in rects) { string str = "{\"Pt1\":\"" + rect.Pt1 + "\"," + "\"Pt2\":\"" + rect.Pt2 + "\"," + "\"RGBA\":\"" + rect.Properties.Rgba + "\"}<br>\n"; sb.Append(str); } response += sb.ToString(); response += "]}"; return(response); }
static void Main(string[] args) { string folder = "\\GitHub\\Glyphics2\\crawler\\"; string filename = "Girl.glyc"; Console.WriteLine("Serialized 255"); Directory.SetCurrentDirectory(folder); string glycFilename = folder + filename; string codeString = RasterLib.RasterApi.ReadGlyc(glycFilename).Replace(';', '\n'); RectList rects = Pivot.ToRects(codeString); RasterLib.RasterApi.BuildCircuit(rects, true); SerializedRects rects255 = Pivot.ToSerialized255(rects); rects = Pivot.ToRects(rects255); RasterLib.RasterApi.BuildCircuit(rects, true); Clipboard.SetText(rects255.SerializedData); Console.WriteLine("\nSerialized rects\n{0}", rects255.SerializedData); //CircuitModel model = new CircuitModel(rects); }
static void Main() { //Simple Glyphics codeString const string code = @"Simple, #Size of Grid Size3D4 16 16 16; #Blue color ground PenColorD4 31 127 255 255;WallCube 1; #White border around ground's edge PenColorD4 255 255 255 255;Rect 0 0 0 15 0 15; #Red box in center PenColorD4 255 31 127 255;FillRect 4 1 4 11 2 11; #Green text letter 'A' (ascii 65) on top PenColorD4 31 255 127 255;Text 6 3 8 65"; //Glyphics codeString object Code rasterCode = RasterLib.RasterApi.CreateCode(code); //Save final result to PNG file string filename = "..\\..\\" + RasterLib.RasterApi.CodeToCodename(rasterCode).Name + ".PNG"; Grid grid = RasterLib.RasterApi.CodeToGrid(rasterCode); RectList rectsFromGrid = RasterLib.RasterApi.GridToRects(grid); Grid gridFromRects = grid.Clone(); if (grid.IsEqualTo(gridFromRects) == false) { Console.WriteLine("Grids are diff"); return; } RasterLib.RasterApi.Renderer.RenderRectsToGrid(rectsFromGrid, gridFromRects); if (grid.IsEqualTo(gridFromRects) == false) { Console.WriteLine("Grids are diff"); return; } Scene sceneFromRects = RasterLib.RasterApi.RectsToScene(rectsFromGrid); RectList rectsFromScene = RasterLib.RasterApi.SceneToRects(sceneFromRects); if (rectsFromGrid.IsEqualTo(rectsFromScene) == false) { Console.WriteLine("Rects are diff"); return; } Grid gridMega = grid.Clone(); RasterLib.RasterApi.Renderer.RenderRectsToGrid(rectsFromScene, gridMega); if (grid.IsEqualTo(gridMega) == false) { Console.WriteLine("Grids are diff"); return; } //Loops Code->Grid->Rects->Scene->Rects->Grid.. and all same Console.WriteLine("All conversions are okay"); }
/* Example: * Purpose: * * Example concepts: * 1) Create Code from code string * 2) Extracting codename from Code * 3) Loading library of Triangles * 4) Rendering Grid to Triangles * 5) Scaling for absolute real-world dimensions in inches * 6) Converting inches to millimeters * 7) Saving New STL to file */ static void Main() { //Glyphics codeString string /* * const string code = @"PrintableNexus,Size3D4 64 64 64;Spawn 25 5 25;PenShape 1; * PenColorD4 31 127 255 255;WallCube 1; * * PenColorD4 255 255 255 255;PenSize 1 2 1;Rect 0 0 0 31 0 31;Rect 0 0 32 31 0 63;Rect 32 0 0 63 0 31;Rect 32 0 32 63 0 63;Rect 16 0 16 48 0 48; * PenSize 1 1 1;PenColorD4 31 127 255 255;FillRect 17 0 17 47 0 47;FillRect 16 1 49 48 16 63; * PenColorD4 0 0 0 0; * FillRect 17 1 49 47 15 63; * Rect 0 1 0 63 63 63; * ImgEdgeX 255 255 255 255;ImgEdgeY 255 255 255 255;ImgEdgeZ 255 255 255 255; #Now draw the multicolor volumes * PenShape 2; * PenColorD3 127 255 127;FillRect 2 1 2 13 12 13; * PenColorD3 255 127 127;FillRect 2 1 18 13 12 29; * PenColorD3 127 127 255;FillRect 2 1 34 13 12 45; * PenColorD3 255 255 127;FillRect 2 1 50 13 12 61; * PenColorD3 255 127 255;FillRect 18 1 2 29 12 13; * # Shape on top # PenShape 3;PenColorD3 255 255 255;FillRect 26 17 51 36 28 62; # #Finally create a mirror image to the other side # ImgMirrorX # "; */ const string code = @"_Palette, Size3D4 16 16 16 PenShape 1 PenColorD4 31 127 255 255 WallCube 1 PenShape 1 Plot 2 1 2 Rect 1 1 1 14 2 14 FillRect 4 1 4 11 10 11 #Cylinders PenShape 2 Rect 1 3 1 2 12 2 #Cone PenShape 3 Rect 1 13 1 2 14 2 FillRect 4 10 4 11 16 11 ImgMirrorX ImgMirrorZ "; //Then render that to triangles string dir = "C:\\Github\\Glyphics2\\Stl Files\\"; Console.WriteLine("Creating triangle library"); TrianglesList trianglesList = RasterLib.RasterApi.CreateTrianglesList(); trianglesList.ImportAndReduceToUnit(dir + "Box.stl"); //1 trianglesList.ImportAndReduceToUnit(dir + "Cylinder.stl"); //2 trianglesList.ImportAndReduceToUnit(dir + "Cone.stl"); //3 trianglesList.ImportAndReduceToUnit(dir + "Wedge.stl"); //3 trianglesList.ImportAndReduceToUnit(dir + "WedgeCorn1.stl"); //4 trianglesList.ImportAndReduceToUnit(dir + "WedgeCorn2.stl"); //5 trianglesList.ImportAndReduceToUnit(dir + "WedgeCurved.stl"); //6 trianglesList.ImportAndReduceToUnit(dir + "WedgeCurvedCorner1.stl"); //7 trianglesList.ImportAndReduceToUnit(dir + "WedgeCurvedCorner2.stl"); //8 // const string codeString = @"PrintableNexus,Size3D4 4 4 4;PenColorD4 255 255 255 255;FillRect 0 0 0 4 4 4;"; Console.WriteLine("Code: {0}", code); //Glyphics codeString object Code rasterCode = RasterLib.RasterApi.CreateCode(code); //Extract codename from codeString object, to use for filename Codename codename = RasterLib.RasterApi.CodeToCodename(rasterCode); //Create filename string outputFilename = dir + codename.Name + ".STL"; Console.WriteLine("\nOutput Filename: {0}", outputFilename); //Convert the codeString to actual grid Console.WriteLine("Code to grid"); Grid grid = RasterLib.RasterApi.CodeToGrid(rasterCode); //Convert to rects Console.WriteLine("Grid to rects"); RectList rects = RasterLib.RasterApi.GridToRects(grid); // Triangles tris = trianglesList.GetTriangles(2); // Console.WriteLine(tris); /* * const string filename1 = "C:\\Github\\Glyphics2\\Examples\\ExampleCodeToSTL\\cube_ascii.stl"; * const string filename2 = "C:\\Github\\Glyphics2\\Examples\\ExampleCodeToSTL\\archquad.stl"; * const string filename3 = "C:\\Github\\Glyphics2\\Examples\\ExampleCodeToSTL\\pipesphere.stl"; * * //Import the models and make sure they are unit sized * trianglesList.ImportAndReduceToUnit(filename1); * trianglesList.ImportAndReduceToUnit(filename2); * trianglesList.ImportAndReduceToUnit(filename3); */ //Render the rectangles out as shapes(Triangles) to a new set of triangles Triangles triangles = RasterLib.RasterApi.Renderer.RenderRectsAsStlMapping(rects, trianglesList); Console.WriteLine("Rendering triangles to grid"); //Reduce scale to 1x1x1, making it 1mm x 1mm x 1mm triangles.CalcNormals(); triangles.ReduceToUnit(); triangles.Translate(0.5f, 0.5f, 0.5f); //Scale up to make an exactly sized models in inches then millimeters const float finalSizeInInches = 2; const float finalSizeInMillimeters = finalSizeInInches * 25.4f; //Inches to millimeters triangles.Scale(finalSizeInMillimeters, finalSizeInMillimeters, finalSizeInMillimeters); //Save final result to STL file Console.WriteLine("Saving triangles to {0}", outputFilename); RasterLib.RasterApi.SaveTrianglesToStlAscii(outputFilename, triangles); //So.. as long as we are here.. let's make a preview //Since we can, normalize it now triangles.ReduceToUnit(); //Save a rendering out to a PNG, why not, too. Console.WriteLine("Creating preview grid"); Grid gridFromStl = RasterLib.RasterApi.CreateGrid(96, 96, 96, 4); Console.WriteLine("Rendering triangles to grid"); RasterLib.RasterApi.Renderer.RenderTrianglesToGrid(triangles, gridFromStl); //Then render to a new grid Console.WriteLine("Rendering grid to oblique preview grid"); Grid gridObliqueRendered = RasterLib.RasterApi.Renderer.RenderObliqueCells(gridFromStl); //Then save //const string filenamePreview = "..\\..\\preview.png"; //Console.WriteLine("Saving file to {0}", filenamePreview); //GraphicsApi.SaveFlatPng(filenamePreview, gridObliqueRendered); //.. and write finish Console.WriteLine("\nDone."); }