public Mainapp()
        {
            InitializeComponent();
            g = DrawAreaPanel.CreateGraphics();
            p = new Pen(showColorbox.BackColor);

            int x_canvas = DrawAreaPanel.Width / 2;
            int y_canvas = DrawAreaPanel.Height / 2;

            lbl_StartPosX.Text = x_canvas.ToString();
            lbl_StartPosY.Text = y_canvas.ToString();
            lbl_canvasx.Text   = x_canvas.ToString();
            lbl_canvasy.Text   = y_canvas.ToString();

            bb = new HatchBrush(HatchStyle.Vertical, Color.Red, Color.FromArgb(255, 128, 255, 255));
            g.FillEllipse(bb, 0, 0, 100, 60);
        }
        private void btnConsoleRun_Click(object sender, EventArgs e)
        {
            Regex regex1 = new Regex(@"drawto (.*[\d])([,])(.*[\d]) line (.*[\d])([,])(.*[\d])");
            Regex regex2 = new Regex(@"drawto (.*[\d])([,])(.*[\d]) rectangle (.*[\d])([,])(.*[\d])");
            Regex regex3 = new Regex(@"drawto (.*[\d])([,])(.*[\d]) circle (.*[\d])");
            Regex regex4 = new Regex(@"drawto (.*[\d])([,])(.*[\d]) triangle (.*[\d])([,])(.*[\d])([,])(.*[\d])");
            Regex regex5 = new Regex(@"drawto (.*[\d])([,])(.*[\d]) pentagon point2 (.*[\d])([,])(.*[\d]) point3 (.*[\d])([,])(.*[\d]) point4 (.*[\d])([,])(.*[\d]) point5 (.*[\d])([,])(.*[\d])");

            Regex regexClear = new Regex(@"clear board");
            Regex regexMT    = new Regex(@"moveto (.*[\d])([,])(.*[\d])");

            Regex regexR = new Regex(@"rectangle (.*[\d])([,])(.*[\d])");
            Regex regexC = new Regex(@"circle (.*[\d])");
            Regex regexT = new Regex(@"triangle (.*[\d])([,])(.*[\d])([,])(.*[\d])");

            Regex regexRepeat = new Regex(@"repeat (.*[\d])");

            Regex regexIfelse = new Regex(@"if drawto x= (.*[\d]) >= 0 or y= (.*[\d]) >= 0 ");

            //if drawto x= 9 >= 0 or y= 19 >= 0
            //----------------------------------------------------------------------------------------------------------------------
            //----------------------------------------------------------------------------------------------------------------------
            Match match1 = regex1.Match(rtxtConsole.Text.ToLower());
            Match match2 = regex2.Match(rtxtConsole.Text.ToLower());
            Match match3 = regex3.Match(rtxtConsole.Text.ToLower());
            Match match4 = regex4.Match(rtxtConsole.Text.ToLower());
            Match match5 = regex5.Match(rtxtConsole.Text.ToLower());

            Match matchClear = regexClear.Match(rtxtConsole.Text.ToLower());
            Match matchMT    = regexMT.Match(rtxtConsole.Text.ToLower());

            Match matchR = regexR.Match(rtxtConsole.Text.ToLower());
            Match matchC = regexC.Match(rtxtConsole.Text.ToLower());
            Match matchT = regexT.Match(rtxtConsole.Text.ToLower());

            Match matchRepeat = regexRepeat.Match(rtxtConsole.Text.ToLower());

            Match matchIfelse = regexIfelse.Match(rtxtConsole.Text.ToLower());

            //============================== DRAWING LINE =========================================
            if (match1.Success)
            {
                try
                {
                    g      = DrawAreaPanel.CreateGraphics();
                    _size1 = int.Parse(match1.Groups[1].Value);
                    _size2 = int.Parse(match1.Groups[3].Value);
                    _size3 = int.Parse(match1.Groups[4].Value);
                    _size4 = int.Parse(match1.Groups[6].Value);

                    ClassShapeFactory shapeFactory = new ClassShapeFactory();
                    ClassShape        c            = shapeFactory.GetShape("line");
                    c.set(texturestyle, bb, paintcolor, _size1, _size2, _size3, _size4);
                    c.draw(g);
                }
                catch (Exception ex)
                {
                    rtxtErrors.AppendText(ex.Message + Environment.NewLine);
                    //MessageBox.Show(ex.Message);
                }
            }
            //=============================== RECTANGLE with DrawTo ====================================================
            else if (match2.Success)
            {
                try
                {
                    g      = DrawAreaPanel.CreateGraphics();
                    _size1 = int.Parse(match2.Groups[1].Value);
                    _size2 = int.Parse(match2.Groups[3].Value);
                    _size3 = int.Parse(match2.Groups[4].Value);
                    _size4 = int.Parse(match2.Groups[6].Value);

                    ClassShapeFactory shapeFactory = new ClassShapeFactory();
                    ClassShape        c            = shapeFactory.GetShape("rectangle");

                    c.set(texturestyle, bb, paintcolor, _size1, _size2, _size3, _size4);
                    c.draw(g);
                }
                catch (Exception ex)
                {
                    rtxtErrors.AppendText(ex.Message + Environment.NewLine);
                    //MessageBox.Show(ex.Message);
                }
            }

            //=================================== RECTANGLE ==============================================================
            else if (matchR.Success)
            {
                try
                {
                    g      = DrawAreaPanel.CreateGraphics();
                    _size1 = int.Parse(lbl_StartPosX.Text);
                    _size2 = int.Parse(lbl_StartPosY.Text);
                    _size3 = int.Parse(matchR.Groups[1].Value);
                    _size4 = int.Parse(matchR.Groups[3].Value);

                    ClassShapeFactory shapeFactory = new ClassShapeFactory();
                    ClassShape        c            = shapeFactory.GetShape("rectangle");
                    c.set(texturestyle, bb, paintcolor, _size1, _size2, _size3, _size4);
                    c.draw(g);
                }
                catch (Exception ex)
                {
                    rtxtErrors.AppendText(ex.Message + Environment.NewLine);
                }
            }

            //================================== CIRCLE with Drawto ======================================
            else if (match3.Success)
            {
                try
                {
                    g      = DrawAreaPanel.CreateGraphics();
                    _size1 = int.Parse(match3.Groups[1].Value);
                    _size2 = int.Parse(match3.Groups[3].Value);
                    _size3 = int.Parse(match3.Groups[4].Value);

                    ClassShapeFactory shapeFactory = new ClassShapeFactory();
                    ClassShape        c            = shapeFactory.GetShape("circle");
                    c.set(texturestyle, bb, paintcolor, _size1, _size2, _size3 * 2, _size3 * 2);
                    c.draw(g);
                }
                catch (Exception ex)
                {
                    rtxtErrors.AppendText(ex.Message + Environment.NewLine);
                }
            }

            //=========================================== Circle =======================================================
            else if (matchC.Success)
            {
                try
                {
                    g      = DrawAreaPanel.CreateGraphics();
                    _size1 = int.Parse(lbl_StartPosX.Text);
                    _size2 = int.Parse(lbl_StartPosY.Text);
                    _size3 = int.Parse(matchC.Groups[1].Value);

                    ClassShapeFactory shapeFactory = new ClassShapeFactory();
                    ClassShape        c            = shapeFactory.GetShape("circle");
                    c.set(texturestyle, bb, paintcolor, _size1, _size2, _size3 * 2, _size3 * 2);
                    //c.draw(set);
                    c.draw(g);
                }
                catch (Exception ex)
                {
                    rtxtErrors.AppendText(ex.Message + Environment.NewLine);
                    // MessageBox.Show(ex.Message);
                }
            }

            //==================================== TRIANGLE with DrawTo ===================================================
            else if (match4.Success)
            {
                try
                {
                    g      = DrawAreaPanel.CreateGraphics();
                    _size1 = int.Parse(match4.Groups[1].Value);
                    _size2 = int.Parse(match4.Groups[3].Value);

                    _size3 = int.Parse(match4.Groups[4].Value);
                    _size4 = int.Parse(match4.Groups[6].Value);
                    _size5 = int.Parse(match4.Groups[8].Value);

                    xi1 = _size1;
                    yi1 = _size2;
                    xi2 = Math.Abs(_size3);
                    yi2 = _size2;

                    xii1 = _size1;
                    yii1 = _size2;
                    xii2 = _size1;
                    yii2 = Math.Abs(_size4);

                    xiii1 = Math.Abs(_size3);
                    yiii1 = _size2;
                    xiii2 = _size1;
                    yiii2 = Math.Abs(_size4);

                    ClassShapeFactory shapeFactory = new ClassShapeFactory();
                    ClassShape        c            = shapeFactory.GetShape("triangle");
                    c.set(texturestyle, bb, paintcolor, xi1, yi1, xi2, yi2, xii1, yii1, xii2, yii2, xiii1, yiii1, xiii2, yiii2);
                    c.draw(g);
                }
                catch (Exception ex)
                {
                    rtxtErrors.AppendText(ex.Message + Environment.NewLine);
                }
            }

            //==================================================== Triangle =====================================================
            else if (matchT.Success)
            {
                try
                {
                    g      = DrawAreaPanel.CreateGraphics();
                    _size1 = int.Parse(lbl_StartPosX.Text);
                    _size2 = int.Parse(lbl_StartPosY.Text);

                    _size3 = int.Parse(matchT.Groups[1].Value);
                    _size4 = int.Parse(matchT.Groups[3].Value);
                    _size5 = int.Parse(matchT.Groups[5].Value);

                    xi1 = _size1;
                    yi1 = _size2;
                    xi2 = Math.Abs(_size3);
                    yi2 = _size2;

                    xii1 = _size1;
                    yii1 = _size2;
                    xii2 = _size1;
                    yii2 = Math.Abs(_size4);

                    xiii1 = Math.Abs(_size3);
                    yiii1 = _size2;
                    xiii2 = _size1;
                    yiii2 = Math.Abs(_size4);

                    ClassShapeFactory shapeFactory = new ClassShapeFactory();
                    ClassShape        c            = shapeFactory.GetShape("triangle"); //new rectangles();
                    c.set(texturestyle, bb, paintcolor, xi1, yi1, xi2, yi2, xii1, yii1, xii2, yii2, xiii1, yiii1, xiii2, yiii2);
                    c.draw(g);
                }
                catch (Exception ex)
                {
                    rtxtErrors.AppendText(ex.Message + Environment.NewLine);
                }
            }

            //================================================= PENTAGON ==============================================================

            if (match5.Success)
            {
                try
                {
                    //1,3,4,6,7,9,10,12,13,15,16,18
                    g       = DrawAreaPanel.CreateGraphics();
                    _size1  = int.Parse(match5.Groups[1].Value);
                    _size2  = int.Parse(match5.Groups[3].Value);
                    _size3  = int.Parse(match5.Groups[4].Value);
                    _size4  = int.Parse(match5.Groups[6].Value);
                    _size5  = int.Parse(match5.Groups[7].Value);
                    _size6  = int.Parse(match5.Groups[9].Value);
                    _size7  = int.Parse(match5.Groups[10].Value);
                    _size8  = int.Parse(match5.Groups[12].Value);
                    _size9  = int.Parse(match5.Groups[13].Value);
                    _size10 = int.Parse(match5.Groups[15].Value);

                    ClassShapeFactory shapeFactory = new ClassShapeFactory();
                    ClassShape        c            = shapeFactory.GetShape("pentagon");
                    c.set(texturestyle, bb, paintcolor, _size1, _size2, _size3, _size4, _size5, _size6, _size7, _size8, _size9, _size10);
                    c.draw(g);
                }
                catch (Exception ex)
                {
                    rtxtErrors.AppendText(ex.Message + Environment.NewLine);
                    //MessageBox.Show(ex.Message);
                }
            }

            //================================================ CLEAR BOARD ====================================================================

            else if (matchClear.Success)
            {
                DrawAreaPanel.Refresh();
                this.DrawAreaPanel.BackgroundImage = null;
            }

            //================================================= MOVETO ==========================================================
            else if (matchMT.Success)
            {
                try
                {
                    _size1 = int.Parse(matchMT.Groups[1].Value);
                    _size2 = int.Parse(matchMT.Groups[3].Value);

                    lbl_StartPosX.Text = _size1.ToString();
                    lbl_StartPosY.Text = _size2.ToString();
                }
                catch (Exception ex)
                {
                    rtxtErrors.AppendText(ex.Message + Environment.NewLine);
                    //MessageBox.Show(ex.Message);
                }
            }

            //======================================================== REPEAT ====================================================
            else if (matchRepeat.Success)
            {
                try
                {
                    _repeatNo = int.Parse(matchRepeat.Groups[1].Value);

                    //=================================================== Repeat Shapes ====================================

                    //Regex regexRepCircle = new Regex(@"circle radius (.*[\d]) by radius (.*[\d]) end");

                    Regex regexRepCircle = new Regex(@"circle radius (.*[\d]) by (.*[\d]) end");
                    //repeat 4 circle radius 30 by 20 end

                    Regex regexRepRectangle = new Regex(@"rectangle width (.*[\d]) height (.*[\d]) by width (.*[\d]) height (.*[\d]) end");
                    //repeat 4 rectangle width 90 height 120 by width 20 height 20

                    Match matchRepCircle    = regexRepCircle.Match(rtxtConsole.Text.ToLower());
                    Match matchRepRectangle = regexRepRectangle.Match(rtxtConsole.Text.ToLower());

                    //================================================== Repeat Circle ================================================
                    if (matchRepCircle.Success)
                    {
                        int _repeatAdd = 0;
                        int _repeatAddConstant;
                        _size1             = int.Parse(lbl_StartPosX.Text);
                        _size2             = int.Parse(lbl_StartPosY.Text);
                        _size3             = int.Parse(matchRepCircle.Groups[1].Value);
                        _repeatAdd         = int.Parse(matchRepCircle.Groups[2].Value);
                        _repeatAddConstant = int.Parse(matchRepCircle.Groups[2].Value);

                        ClassShapeFactory shapeFactory = new ClassShapeFactory();
                        ClassShape        c            = shapeFactory.GetShape("circle");

                        for (int i = 0; i < _repeatNo; i++)
                        {
                            c.set(texturestyle, bb, paintcolor, _size1, _size2, (_size3 + _repeatAdd), (_size3 + _repeatAdd));
                            c.draw(g);
                            _size1     = _size1 - (_repeatAddConstant / 2);
                            _size2     = _size2 - (_repeatAddConstant / 2);
                            _repeatAdd = _repeatAdd + _repeatAddConstant;

                            //_repeatAdd = _repeatAdd + _repeatAdd;
                        }
                    }

                    //=================================================== Repeat Rectangle ==============================================
                    else if (matchRepRectangle.Success)
                    {
                        try
                        {
                            int _repeatAddWidth = 0;
                            int _repeatAddConstantWidth;
                            int _repeatAddHeight = 0;
                            int _repeatAddConstantHeight;

                            //g = DrawAreaPanel.CreateGraphics();
                            _size1 = int.Parse(lbl_StartPosX.Text);
                            _size2 = int.Parse(lbl_StartPosY.Text);
                            _size3 = int.Parse(matchRepRectangle.Groups[1].Value);
                            _size4 = int.Parse(matchRepRectangle.Groups[2].Value);

                            _repeatAddWidth         = int.Parse(matchRepRectangle.Groups[3].Value);
                            _repeatAddConstantWidth = int.Parse(matchRepRectangle.Groups[3].Value);

                            _repeatAddHeight         = int.Parse(matchRepRectangle.Groups[4].Value);
                            _repeatAddConstantHeight = int.Parse(matchRepRectangle.Groups[4].Value);

                            ClassShapeFactory shapeFactory = new ClassShapeFactory();
                            ClassShape        c            = shapeFactory.GetShape("rectangle");

                            for (int i = 0; i < _repeatNo; i++)
                            {
                                c.set(texturestyle, bb, paintcolor, _size1, _size2, _size3 + _repeatAddWidth, _size4 + _repeatAddHeight);
                                c.draw(g);
                                _size1           = _size1 - (_repeatAddConstantWidth / 2);
                                _size2           = _size2 - (_repeatAddConstantHeight / 2);
                                _repeatAddWidth  = _repeatAddWidth + _repeatAddConstantWidth;
                                _repeatAddHeight = _repeatAddHeight + _repeatAddConstantHeight;
                            }
                        }
                        catch (Exception ex)
                        {
                            rtxtErrors.AppendText(ex.Message + Environment.NewLine);
                            //MessageBox.Show(ex.Message);
                        }
                    }

                    //=============================================== IF ELSE ==================================================

                    else if (matchIfelse.Success)
                    {
                        try
                        {
                            int checkX, checkY;

                            //g = drawareapanel.CreateGraphics();
                            checkX             = int.Parse(matchIfelse.Groups[1].Value);
                            checkY             = int.Parse(matchIfelse.Groups[2].Value);
                            lbl_StartPosX.Text = checkX.ToString();
                            lbl_StartPosY.Text = checkY.ToString();
                            _size1             = checkX;
                            _size2             = checkY;

                            if (checkX > 0 && checkY > 0)
                            {
                                Regex regexIfelseCircle = new Regex(@"draw circle (.*[\d])");
                                Match matchIfelseCircle = regexIfelseCircle.Match(rtxtConsole.Text.ToLower());

                                Regex regexIfelseRectangle = new Regex(@"draw rectangle (.*[\d])([,])(.*[\d])");
                                Match matchIfelseRectangle = regexIfelseRectangle.Match(rtxtConsole.Text.ToLower());

                                //if drawto x= 9 >= 0 or y= 19 >= 0 draw circle 90
                                //draw circle 90
                                //draw rectangle 90,70
                                if (matchIfelseCircle.Success)
                                {
                                    try
                                    {
                                        _size3 = int.Parse(matchIfelseCircle.Groups[1].Value);

                                        ClassShapeFactory shapeFactory = new ClassShapeFactory();
                                        ClassShape        c            = shapeFactory.GetShape("circle");
                                        c.set(texturestyle, bb, paintcolor, _size1, _size2, _size3 * 2, _size3 * 2);
                                        c.draw(g);
                                    }
                                    catch (Exception ex)
                                    {
                                        rtxtErrors.AppendText(ex.Message + Environment.NewLine);
                                        // MessageBox.Show(ex.Message);
                                    }
                                }
                                else if (matchIfelseRectangle.Success)
                                {
                                    try
                                    {
                                        _size3 = int.Parse(matchIfelseRectangle.Groups[1].Value);
                                        _size4 = int.Parse(matchIfelseRectangle.Groups[3].Value);

                                        ClassShapeFactory shapeFactory = new ClassShapeFactory();
                                        ClassShape        c            = shapeFactory.GetShape("rectangle");
                                        c.set(texturestyle, bb, paintcolor, _size1, _size2, _size3, _size4);
                                        c.draw(g);
                                    }
                                    catch (Exception ex)
                                    {
                                        rtxtErrors.AppendText(ex.Message + Environment.NewLine);
                                    }
                                }
                            }
                            else
                            {
                                if (checkX < 0)
                                {
                                    MessageBox.Show("Drawto X= " + checkX + " cannot be less than zero(0)");
                                }
                                else
                                {
                                    MessageBox.Show("Drawto Y= " + checkY + " cannot be less than zero(0)");
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            rtxtErrors.AppendText(ex.Message + Environment.NewLine);
                            //MessageBox.Show(ex.Message);
                        }
                    }
                }
                catch (Exception ex)
                {
                    rtxtErrors.AppendText(ex.Message + Environment.NewLine);
                }
            }

            //=================================================== HISTORY RECORDING ===============================================
            rtxtHistory.AppendText(rtxtConsole.Text + Environment.NewLine);
            //=================================================== ***************** ==============================================
        }
 private void btnNew_Click(object sender, EventArgs e)
 {
     DrawAreaPanel.Refresh();
     this.DrawAreaPanel.BackgroundImage = null;
 }