Esempio n. 1
0
        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);
        }
Esempio n. 4
0
        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);
                }
            }
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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));
        }
Esempio n. 10
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);
        }
Esempio n. 11
0
        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);
            }
        }
Esempio n. 12
0
        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);
        }
Esempio n. 14
0
        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);
        }
Esempio n. 15
0
        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);
        }
Esempio n. 17
0
        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));
                    }
                }
            }
        }
Esempio n. 19
0
        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);
        }
Esempio n. 20
0
        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);
            }
        }
Esempio n. 22
0
        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]));
            }
        }
Esempio n. 23
0
        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);
        }
Esempio n. 25
0
        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);
        }
Esempio n. 28
0
        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);
        }
Esempio n. 29
0
        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");
        }
Esempio n. 30
0
        /* 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.");
        }