Beispiel #1
0
    void Start()
    {
        //Drawing to A texture
        texturePainter = new TexturePainter();

        GameObject plane = GameObject.FindGameObjectWithTag("Player");

        if (!enableTextureDrawer)
        {
            plane.SetActive(false);
        }
        plane.GetComponent <Renderer> ().material.mainTexture = texturePainter.texture;


        myslider = GameObject.Find("Slider").GetComponent <Slider>();

        symmetryDropDown = GameObject.Find("Dropdown").GetComponent <Dropdown>();
        List <System.String> options = new List <System.String> ();

        //Populate UI
        for (int i = 0; i < maxNumSymmetries; i++)
        {
            options.Add(i.ToString());
        }

        symmetryDropDown.AddOptions(options);

        vectorDrawer = this.GetComponent <VectorDrawer> ();
        //vectorDrawer.linePoints = linePoints;
        vectorDrawer.setNumberOfLines(numOfLineRenderers);
    }
Beispiel #2
0
        private string GenerateTree()
        {
            var expressionParserFactory = new DoubleExpressionParserFactory();
            var generatorParser         = new GeneratorParser <double>(expressionParserFactory);

            double constR = 1 / Math.Sqrt(2);
            double constU = 45;

            var input =
                "F(200)\n" +
                "F(l)->H(l) Uloz Doleva F(l*" + constR + ") Nacti Uloz Doprava F(l*" + constR + ") Nacti";

            var reader    = new StringReader(input);
            var generator = generatorParser.Parse(reader);

            generator.AdvanceNGenerations(8);
            var output = generator.CurrentGeneration;

            DrawingAction[] elements = new DrawingAction[]
            {
                new DrawingAction(0, canvas => canvas.AddToPath(new PathSegment(new IndexCanvasProperty <double>(0)))),
                new DrawingAction(1, canvas => canvas.AddToPath(new PathSegment(new IndexCanvasProperty <double>(0)))),
                new DrawingAction(2, canvas => canvas.PushToStack()),
                new DrawingAction(3, canvas => canvas.Rotate(new Rotation(new ValueCanvasProperty <double>(constU)))),
                new DrawingAction(4, canvas => canvas.PopFromStack()),
                new DrawingAction(5, canvas => canvas.Rotate(new Rotation(new ValueCanvasProperty <double>(-constU))))
            };

            var creator = new VectorDrawer(elements);

            string svg = creator.Draw(output, 0.3);

            return(svg);
        }
Beispiel #3
0
        public static void DRAWING_TEST_GOSPER()
        {
            var expressionParserFactory = new DoubleExpressionParserFactory();
            var generatorParser         = new GeneratorParser <double>(expressionParserFactory);

            var input =
                "L\n" +
                "L->L Doprava R Doprava Doprava R Doleva L Doleva Doleva L L Doleva R Doprava\n" +
                "R->Doleva L Doprava R R Doprava Doprava R Doprava L Doleva Doleva L Doleva R";

            var reader    = new StringReader(input);
            var generator = generatorParser.Parse(reader);

            generator.AdvanceNGenerations(5);
            var output = generator.CurrentGeneration;

            DrawingAction[] elements = new DrawingAction[]
            {
                new DrawingAction(0, canvas => canvas.AddToPath(new PathSegment(new ValueCanvasProperty <double>(10)))),
                new DrawingAction(1, canvas => canvas.Rotate(new Rotation(new ValueCanvasProperty <double>(60)))),
                new DrawingAction(2, canvas => canvas.AddToPath(new PathSegment(new ValueCanvasProperty <double>(10)))),
                new DrawingAction(3, canvas => canvas.Rotate(new Rotation(new ValueCanvasProperty <double>(-60))))
            };

            var creator = new VectorDrawer(elements);

            string svg = creator.Draw(output);

            Console.WriteLine(svg);
        }
Beispiel #4
0
    public void MouseUp()
    {
        clickStarted = false;

        List <Vector3> pong = new List <Vector3> (linePoints);

        VectorDrawer.smoothGauss(linePoints, pong);
        Draw();



//		if (enableTextureDrawer) {
//			//LateDraw ();
//			texturePainter.drawTexture(linePoints);
//			texturePainter.texture.Apply (false);
//				vectorDrawer.undo ();
//		}



        //colorPickerTint = GameObject.FindGameObjectWithTag ("colorPickerUI").GetComponent<ColorPickerAdvanced> ().RGBAColor;

        //allPoints.Add (linePoints);
        //linePoints = new List<Vector3> ();


        linePoints.Clear();
        vectorDrawer.Clear();
    }
Beispiel #5
0
    private void DrawTransform(Transform transform)
    {
        using (new GUILayout.VerticalScope())
        {
            if (showGlobal)
            {
                using (new GUILayout.HorizontalScope())
                {
                    GUILayout.Label("Global Position", NitroxGUILayout.DrawerLabel, GUILayout.Width(LABEL_WIDTH));
                    NitroxGUILayout.Separator();
                    VectorDrawer.DrawVector3(transform.position, VECTOR_MAX_WIDTH);
                }

                using (new GUILayout.HorizontalScope())
                {
                    GUILayout.Label("Global Rotation", NitroxGUILayout.DrawerLabel, GUILayout.Width(LABEL_WIDTH));
                    NitroxGUILayout.Separator();
                    VectorDrawer.DrawVector3(transform.rotation.eulerAngles, VECTOR_MAX_WIDTH);
                }

                using (new GUILayout.HorizontalScope())
                {
                    GUILayout.Label("Lossy Scale", NitroxGUILayout.DrawerLabel, GUILayout.Width(LABEL_WIDTH));
                    NitroxGUILayout.Separator();
                    VectorDrawer.DrawVector3(transform.lossyScale, VECTOR_MAX_WIDTH);
                }
            }
            else
            {
                using (new GUILayout.HorizontalScope())
                {
                    GUILayout.Label("Local  Position", NitroxGUILayout.DrawerLabel, GUILayout.Width(LABEL_WIDTH));
                    NitroxGUILayout.Separator();
                    transform.localPosition = VectorDrawer.DrawVector3(transform.localPosition, VECTOR_MAX_WIDTH);
                }

                using (new GUILayout.HorizontalScope())
                {
                    GUILayout.Label("Local  Rotation", NitroxGUILayout.DrawerLabel, GUILayout.Width(LABEL_WIDTH));
                    NitroxGUILayout.Separator();
                    transform.localRotation = Quaternion.Euler(VectorDrawer.DrawVector3(transform.localRotation.eulerAngles, VECTOR_MAX_WIDTH));
                }

                using (new GUILayout.HorizontalScope())
                {
                    GUILayout.Label("Local  Scale", NitroxGUILayout.DrawerLabel, GUILayout.Width(LABEL_WIDTH));
                    NitroxGUILayout.Separator();
                    transform.localScale = VectorDrawer.DrawVector3(transform.localScale, VECTOR_MAX_WIDTH);
                }
            }

            GUILayout.Space(5);

            if (GUILayout.Button("Toggle Local/Global", GUILayout.MaxWidth(125)))
            {
                showGlobal = !showGlobal;
            }
        }
    }
Beispiel #6
0
    private static void DrawLayoutGroup(HorizontalOrVerticalLayoutGroup layoutGroup)
    {
        using (new GUILayout.HorizontalScope())
        {
            GUILayout.Label("Padding", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
            NitroxGUILayout.Separator();
            Tuple <int, int, int, int> padding = VectorDrawer.DrawInt4(layoutGroup.padding.left, layoutGroup.padding.right,
                                                                       layoutGroup.padding.top, layoutGroup.padding.bottom);

            layoutGroup.padding.left   = padding.Item1;
            layoutGroup.padding.right  = padding.Item2;
            layoutGroup.padding.top    = padding.Item3;
            layoutGroup.padding.bottom = padding.Item4;
        }

        using (new GUILayout.HorizontalScope())
        {
            GUILayout.Label("Spacing", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
            NitroxGUILayout.Separator();
            layoutGroup.spacing = NitroxGUILayout.FloatField(layoutGroup.spacing);
        }

        using (new GUILayout.HorizontalScope())
        {
            GUILayout.Label("Child Alignment", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
            NitroxGUILayout.Separator();
            layoutGroup.childAlignment = NitroxGUILayout.EnumPopup(layoutGroup.childAlignment);
        }

        using (new GUILayout.HorizontalScope())
        {
            GUILayout.Label("Control Child Size", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
            NitroxGUILayout.Separator();
            layoutGroup.childControlWidth  = NitroxGUILayout.BoolField(layoutGroup.childControlWidth, "Width");
            layoutGroup.childControlHeight = NitroxGUILayout.BoolField(layoutGroup.childControlHeight, "Height");
        }

        using (new GUILayout.HorizontalScope())
        {
            GUILayout.Label("Use Child Scale", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
            NitroxGUILayout.Separator();
            layoutGroup.childScaleWidth  = NitroxGUILayout.BoolField(layoutGroup.childScaleWidth, "Width");
            layoutGroup.childScaleHeight = NitroxGUILayout.BoolField(layoutGroup.childScaleHeight, "Height");
        }

        using (new GUILayout.HorizontalScope())
        {
            GUILayout.Label("Child Force Expand", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
            NitroxGUILayout.Separator();
            layoutGroup.childForceExpandWidth  = NitroxGUILayout.BoolField(layoutGroup.childForceExpandWidth, "Width");
            layoutGroup.childForceExpandHeight = NitroxGUILayout.BoolField(layoutGroup.childForceExpandHeight, "Height");
        }
    }
Beispiel #7
0
        public static void DRAWING_TEST_LEAF()
        {
            var expressionParserFactory = new DoubleExpressionParserFactory();
            var generatorParser         = new GeneratorParser <double>(expressionParserFactory);

            var input =
                "Uloz Otoc S(50) Nacti Uloz X Nacti Uloz Y Nacti\n" +
                "X->Uloz Doprava X Vytvor_polygon Polygon Nacti Polygon Z Polygon Ukonci_polygon \n" +
                "Y->Uloz Doleva Y Vytvor_polygon Polygon Nacti Polygon Z Polygon Ukonci_polygon\n" +
                "Z->Z F(100)\n" +
                "S(len)->F(len) Rotace(1) S(len)";

            var reader    = new StringReader(input);
            var generator = generatorParser.Parse(reader);

            generator.AdvanceNGenerations(20);
            var output = generator.CurrentGeneration;

            var greenLine = new PathSegment(new IndexCanvasProperty <double>(0));
            var polygon   = new Polygon();

            polygon.FillColor   = Color.Green;
            polygon.StrokeColor = Color.Black;

            DrawingAction[] elements = new DrawingAction[]
            {
                new DrawingAction(0, canvas => canvas.PushToStack()),
                new DrawingAction(1, canvas => canvas.Rotate(new Rotation(new ValueCanvasProperty <double>(180)))),
                new DrawingAction(2, canvas => canvas.AddToPath(greenLine)),
                new DrawingAction(3, canvas => canvas.PopFromStack()),
                new DrawingAction(4, canvas => { }),
                new DrawingAction(5, canvas => { }),
                new DrawingAction(6, canvas => canvas.Rotate(new Rotation(new ValueCanvasProperty <double>(10)))),
                new DrawingAction(7, canvas => canvas.CreatePolygon(polygon)),
                new DrawingAction(8, canvas => canvas.AddPositionToPolygon()),
                new DrawingAction(9, canvas => { }),
                new DrawingAction(10, canvas => canvas.ClosePolygon()),
                new DrawingAction(11, canvas => canvas.Rotate(new Rotation(new ValueCanvasProperty <double>(-10)))),
                new DrawingAction(12, canvas => canvas.AddToPath(greenLine)),
                new DrawingAction(13, canvas => canvas.Rotate(new Rotation(new IndexCanvasProperty <double>(0))))
            };

            var creator = new VectorDrawer(elements);

            string svg = creator.Draw(output);

            Console.WriteLine(svg);
        }
Beispiel #8
0
        public static void DRAWING_TEST_ROSE()
        {
            var expressionParserFactory = new DoubleExpressionParserFactory();
            var generatorParser         = new GeneratorParser <double>(expressionParserFactory);

            var input =
                "Uloz Vytvor_polygon X(0,0) Polygon Ukonci_polygon Nacti Uloz Vytvor_polygon X(0,1) Polygon Ukonci_polygon\n" +
                "X(t,d):d=0->Polygon G(5, 1.15, -1) Polygon Uloz Doprava Y(t) G(3, 1.19, t) Polygon Ukonci_polygon Nacti Uloz Doprava Y(t) Vytvor_polygon Polygon Nacti X(t+1,d)\n" +
                "X(t,d):d=1->Polygon G(5, 1.15, -1) Polygon Uloz Doleva Y(t) G(3, 1.19, t) Polygon Ukonci_polygon Nacti Uloz Doleva Y(t) Vytvor_polygon Polygon Nacti X(t+1, d)\n" +
                "Y(t):t>0->G(1.3, 1.25, -1) Y(t-1)\n" +
                "G(s,r,t):t>1->G(s*r, r, t-1)\n" +
                "G(s,r,t):t=-1->G(s*r, r, -1)";

            var reader    = new StringReader(input);
            var generator = generatorParser.Parse(reader);

            generator.AdvanceNGenerations(25);
            var output = generator.CurrentGeneration;

            var polygon = new Polygon();

            polygon.FillColor   = Color.Green;
            polygon.StrokeColor = Color.Black;

            var moduleParser = generatorParser.ModuleParser;

            DrawingAction[] elements = new DrawingAction[]
            {
                new DrawingAction(moduleParser.GetModuleId("Uloz"), canvas => canvas.PushToStack()),
                new DrawingAction(moduleParser.GetModuleId("Nacti"), canvas => canvas.PopFromStack()),
                new DrawingAction(moduleParser.GetModuleId("Doprava"), canvas => canvas.Rotate(new Rotation(new ValueCanvasProperty <double>(60)))),
                new DrawingAction(moduleParser.GetModuleId("Doleva"), canvas => canvas.Rotate(new Rotation(new ValueCanvasProperty <double>(-60)))),
                new DrawingAction(moduleParser.GetModuleId("Vytvor_polygon"), canvas => canvas.CreatePolygon(polygon)),
                new DrawingAction(moduleParser.GetModuleId("Ukonci_polygon"), canvas => canvas.ClosePolygon()),
                new DrawingAction(moduleParser.GetModuleId("Polygon"), canvas => canvas.AddPositionToPolygon()),
                new DrawingAction(moduleParser.GetModuleId("X"), canvas => canvas.Move(new Move(new IndexCanvasProperty <double>(0)))),
                new DrawingAction(moduleParser.GetModuleId("Y"), canvas => canvas.Move(new Move(new IndexCanvasProperty <double>(0)))),
                new DrawingAction(moduleParser.GetModuleId("G"), canvas => canvas.Move(new Move(new IndexCanvasProperty <double>(0)))),
            };

            var creator = new VectorDrawer(elements);

            string svg = creator.Draw(output);

            Console.WriteLine(svg);
        }
Beispiel #9
0
        public static void DRAWING_TEST_TREE()
        {
            var expressionParserFactory = new DoubleExpressionParserFactory();
            var generatorParser         = new GeneratorParser <double>(expressionParserFactory);

            var input =
                "Mlada\n" +
                "Mlada->StaraUlozDopravaMladaNactiUlozDolevaMladaNactiStaraMlada\n" +
                "Stara->StaraStara";

            var reader    = new StringReader(input);
            var generator = generatorParser.Parse(reader);

            generator.AdvanceNGenerations(4);
            var output = generator.CurrentGeneration;

            var blackLine = new PathSegment(new ValueCanvasProperty <double>(10));

            blackLine.FgColor = Color.Black;
            var greenLine = new PathSegment(new ValueCanvasProperty <double>(10));

            greenLine.FgColor = Color.Green;

            DrawingAction[] elements = new DrawingAction[]
            {
                new DrawingAction(0, canvas => canvas.AddToPath(greenLine)),
                new DrawingAction(1, canvas => canvas.AddToPath(blackLine)),
                new DrawingAction(2, canvas => canvas.PushToStack()),
                new DrawingAction(3, canvas => canvas.Rotate(new Rotation(new ValueCanvasProperty <double>(45)))),
                new DrawingAction(4, canvas => canvas.PopFromStack()),
                new DrawingAction(5, canvas => canvas.Rotate(new Rotation(new ValueCanvasProperty <double>(-45))))
            };

            var creator = new VectorDrawer(elements);

            string svg = creator.Draw(output);

            Console.WriteLine(svg);
        }
Beispiel #10
0
    private static void DrawCanvasScaler(CanvasScaler canvasScaler)
    {
        if (canvasScaler.GetComponent <Canvas>().renderMode == RenderMode.WorldSpace)
        {
            using (new GUILayout.HorizontalScope())
            {
                GUILayout.Label("Dynamic Pixels Per Unit", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
                NitroxGUILayout.Separator();
                canvasScaler.dynamicPixelsPerUnit = NitroxGUILayout.FloatField(canvasScaler.dynamicPixelsPerUnit);
            }
        }
        else
        {
            using (new GUILayout.HorizontalScope())
            {
                GUILayout.Label("UI Scale Mode", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
                NitroxGUILayout.Separator();
                canvasScaler.uiScaleMode = NitroxGUILayout.EnumPopup(canvasScaler.uiScaleMode);
            }

            if (canvasScaler.uiScaleMode == CanvasScaler.ScaleMode.ConstantPixelSize)
            {
                using (new GUILayout.HorizontalScope())
                {
                    GUILayout.Label("Scale Factor", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
                    NitroxGUILayout.Separator();
                    canvasScaler.scaleFactor = NitroxGUILayout.FloatField(canvasScaler.scaleFactor);
                }
            }
            else if (canvasScaler.uiScaleMode == CanvasScaler.ScaleMode.ScaleWithScreenSize)
            {
                using (new GUILayout.HorizontalScope())
                {
                    GUILayout.Label("Reference Resolution", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
                    NitroxGUILayout.Separator();
                    canvasScaler.referenceResolution = VectorDrawer.DrawVector2(canvasScaler.referenceResolution);
                }

                using (new GUILayout.HorizontalScope())
                {
                    GUILayout.Label("Screen Match Mode", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
                    NitroxGUILayout.Separator();
                    canvasScaler.screenMatchMode = NitroxGUILayout.EnumPopup(canvasScaler.screenMatchMode);
                }

                using (new GUILayout.HorizontalScope())
                {
                    GUILayout.Label("Match", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
                    NitroxGUILayout.Separator();
                    float newMatchValue = NitroxGUILayout.FloatField(canvasScaler.matchWidthOrHeight);
                    canvasScaler.matchWidthOrHeight = Mathf.Max(0, Mathf.Min(newMatchValue, 1));
                }
            }
            else
            {
                using (new GUILayout.HorizontalScope())
                {
                    GUILayout.Label("Physical Unit", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
                    NitroxGUILayout.Separator();
                    canvasScaler.physicalUnit = NitroxGUILayout.EnumPopup(canvasScaler.physicalUnit);
                }

                using (new GUILayout.HorizontalScope())
                {
                    GUILayout.Label("Fallback Screen DPI", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
                    NitroxGUILayout.Separator();
                    canvasScaler.matchWidthOrHeight = NitroxGUILayout.FloatField(canvasScaler.fallbackScreenDPI);
                }

                using (new GUILayout.HorizontalScope())
                {
                    GUILayout.Label("Default Sprite DPI", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
                    NitroxGUILayout.Separator();
                    float newDefaultSpriteDPI = NitroxGUILayout.FloatField(canvasScaler.defaultSpriteDPI);
                    canvasScaler.defaultSpriteDPI = Mathf.Max(1, newDefaultSpriteDPI);
                }
            }
        }

        using (new GUILayout.HorizontalScope())
        {
            GUILayout.Label("Reference Pixels Per Unit", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
            NitroxGUILayout.Separator();
            canvasScaler.referencePixelsPerUnit = NitroxGUILayout.FloatField(canvasScaler.referencePixelsPerUnit);
        }
    }
Beispiel #11
0
    private static void DrawRectTransform(RectTransform rectTransform)
    {
        using (new GUILayout.VerticalScope())
        {
            //TODO: Implement position display like the Unity editor
            using (new GUILayout.HorizontalScope())
            {
                GUILayout.Label("Local Position", NitroxGUILayout.DrawerLabel, GUILayout.Width(LABEL_WIDTH));
                NitroxGUILayout.Separator();
                rectTransform.localPosition = VectorDrawer.DrawVector3(rectTransform.localPosition, VECTOR_MAX_WIDTH);
            }

            using (new GUILayout.HorizontalScope())
            {
                GUILayout.Label("Local  Rotation", NitroxGUILayout.DrawerLabel, GUILayout.Width(LABEL_WIDTH));
                NitroxGUILayout.Separator();
                rectTransform.localRotation = Quaternion.Euler(VectorDrawer.DrawVector3(rectTransform.localRotation.eulerAngles, VECTOR_MAX_WIDTH));
            }

            using (new GUILayout.HorizontalScope())
            {
                GUILayout.Label("Local  Scale", NitroxGUILayout.DrawerLabel, GUILayout.Width(LABEL_WIDTH));
                NitroxGUILayout.Separator();
                rectTransform.localScale = VectorDrawer.DrawVector3(rectTransform.localScale, VECTOR_MAX_WIDTH);
            }

            GUILayout.Space(20);

            using (new GUILayout.HorizontalScope())
            {
                GUILayout.Label("Size", NitroxGUILayout.DrawerLabel, GUILayout.Width(LABEL_WIDTH));
                NitroxGUILayout.Separator();
                rectTransform.sizeDelta = VectorDrawer.DrawVector2(rectTransform.sizeDelta, VECTOR_MAX_WIDTH);
            }

            using (new GUILayout.HorizontalScope())
            {
                GUILayout.Label("Anchor", NitroxGUILayout.DrawerLabel, GUILayout.Width(LABEL_WIDTH));
                NitroxGUILayout.Separator();
                AnchorMode anchorMode = VectorToAnchorMode(rectTransform.anchorMin, rectTransform.anchorMax);

                if (anchorMode == AnchorMode.NONE)
                {
                    VectorDrawer.DrawVector2(rectTransform.anchorMin, VECTOR_MAX_WIDTH * 0.5f);
                    VectorDrawer.DrawVector2(rectTransform.anchorMax, VECTOR_MAX_WIDTH * 0.5f);
                }
                else
                {
                    anchorMode = NitroxGUILayout.EnumPopup(anchorMode, VECTOR_MAX_WIDTH);

                    // Vector2[] anchorVectors = AnchorModeToVector(anchorMode);
                    // rectTransform.anchorMin = anchorVectors[0];
                    // rectTransform.anchorMax = anchorVectors[1];
                }
            }

            using (new GUILayout.HorizontalScope())
            {
                GUILayout.Label("Pivot", NitroxGUILayout.DrawerLabel, GUILayout.Width(LABEL_WIDTH));
                NitroxGUILayout.Separator();
                rectTransform.pivot = VectorDrawer.DrawVector2(rectTransform.pivot, VECTOR_MAX_WIDTH);
            }
        }
    }
Beispiel #12
0
        private void GenerateSVG()
        {
            if (_modules.Count == 0)
            {
                ErrorMsg = "You have not defined any modules, please define them first!";
                return;
            }

            if (_axiom.Count == 0)
            {
                ErrorMsg = "Your axiom is empty, please fill it first!";
                return;
            }


            var expressionParserFactory = new DoubleExpressionParserFactory();
            var sqrt = new Function <double>("sqrt",
                                             expressions => { return(parameters => Math.Sqrt(expressions[0](parameters))); });

            expressionParserFactory.Functions = new[] { sqrt };
            var generatorParser = new GeneratorParser <double>(expressionParserFactory);

            var builder = new StringBuilder();

            builder.AppendLine(CreateAxiomInput());
            foreach (var rule in _rules)
            {
                builder.AppendLine(CreateRuleInput(rule));
            }

            var input = builder.ToString();

            Generator <double> generator;
            var reader = new StringReader(input);

            try
            {
                generator = generatorParser.Parse(reader);
            }
            catch (ParserException)
            {
                ErrorMsg = "Error while processing your input. Please check if all rules are correct";
                return;
            }

            generator.AdvanceNGenerations(GenerationsCount);
            var output = generator.CurrentGeneration;

            if (output.Count > 1000000)
            {
                ErrorMsg = "Resulting image is too complex, please try reducing number of generations";
                return;
            }

            DrawingAction[] elements;
            try
            {
                elements = CreateDrawingActions(generatorParser.ModuleParser);
            }
            catch (ArgumentException)
            {
                ErrorMsg = "You have mistake in modules definition! Please revise them";
                return;
            }

            var creator = new VectorDrawer(elements);

            try
            {
                if (RandomizationPercent != 0)
                {
                    double randomFactor = ((double)RandomizationPercent) / 100;
                    Svg = creator.Draw(output, randomFactor);
                }
                else
                {
                    Svg = creator.Draw(output);
                }
            }
            catch (Exception)
            {
                ErrorMsg = "Internal error while drawing your image";
                return;
            }
        }
    private static void DrawGridLayoutGroup(GridLayoutGroup gridLayoutGroup)
    {
        using (new GUILayout.HorizontalScope())
        {
            GUILayout.Label("Padding", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
            NitroxGUILayout.Separator();
            Tuple <int, int, int, int> padding = VectorDrawer.DrawInt4(gridLayoutGroup.padding.left, gridLayoutGroup.padding.right,
                                                                       gridLayoutGroup.padding.top, gridLayoutGroup.padding.bottom);

            gridLayoutGroup.padding.left   = padding.Item1;
            gridLayoutGroup.padding.right  = padding.Item2;
            gridLayoutGroup.padding.top    = padding.Item3;
            gridLayoutGroup.padding.bottom = padding.Item4;
        }

        using (new GUILayout.HorizontalScope())
        {
            GUILayout.Label("Cell Size", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
            NitroxGUILayout.Separator();
            gridLayoutGroup.cellSize = VectorDrawer.DrawVector2(gridLayoutGroup.cellSize);
        }

        using (new GUILayout.HorizontalScope())
        {
            GUILayout.Label("Spacing", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
            NitroxGUILayout.Separator();
            gridLayoutGroup.spacing = VectorDrawer.DrawVector2(gridLayoutGroup.spacing);
        }

        using (new GUILayout.HorizontalScope())
        {
            GUILayout.Label("Start Corner", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
            NitroxGUILayout.Separator();
            gridLayoutGroup.startCorner = NitroxGUILayout.EnumPopup(gridLayoutGroup.startCorner);
        }

        using (new GUILayout.HorizontalScope())
        {
            GUILayout.Label("Start Axis", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
            NitroxGUILayout.Separator();
            gridLayoutGroup.startAxis = NitroxGUILayout.EnumPopup(gridLayoutGroup.startAxis);
        }

        using (new GUILayout.HorizontalScope())
        {
            GUILayout.Label("Child Alignment", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
            NitroxGUILayout.Separator();
            gridLayoutGroup.childAlignment = NitroxGUILayout.EnumPopup(gridLayoutGroup.childAlignment);
        }

        using (new GUILayout.HorizontalScope())
        {
            GUILayout.Label("Constraint", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
            NitroxGUILayout.Separator();
            gridLayoutGroup.constraint = NitroxGUILayout.EnumPopup(gridLayoutGroup.constraint);
        }

        if (gridLayoutGroup.constraint != GridLayoutGroup.Constraint.Flexible)
        {
            using (new GUILayout.HorizontalScope())
            {
                GUILayout.Label("Constraint Count", NitroxGUILayout.DrawerLabel, GUILayout.Width(NitroxGUILayout.DEFAULT_LABEL_WIDTH));
                NitroxGUILayout.Separator();
                gridLayoutGroup.constraintCount = Math.Max(1, NitroxGUILayout.IntField(gridLayoutGroup.constraintCount));
            }
        }
    }