Beispiel #1
0
 /// <summary>
 /// Initializing using constructors
 /// </summary>
 /// <param name="g"></param>
 public Drawing(Graphics g)
 {
     this.g       = g;
     v            = new Variable();
     m            = new methods();
     commandCheck = new commandCheck();
     xposition    = yposition = 0;
     p            = new Pen(Color.Black, 1);
     Brush        = new SolidBrush(Color.Black);
 }
        /// <summary>
        /// To Check the user entered commands
        /// </summary>
        /// <param name="split"></param>
        /// <param name="newDrawing"></param>
        /// <param name="x"></param>
        public void CommandsEntered(String[] split, Drawing newDrawing, int n)
        {
            commandCheck commandCheck = new commandCheck();

            try
            {
                String[] method = split[0].Split('(', ')');


                //Checking entered commands and having their outputs
                if (split[0].Equals("moveto"))
                {
                    String[] parameters = split[1].Split(',');
                    int      x          = 0;
                    int      y          = 0;
                    bool     parameter  = false;

                    try
                    {
                        if (!int.TryParse(parameters[0], out x))
                        {
                            if (!newDrawing.v.exisitingVariable(parameters[0]))
                            {
                                parameter = true;
                            }
                            else
                            {
                                x = newDrawing.v.pullData(parameters[0]);
                            }
                            if (parameter)
                            {
                                newDrawing.commandCheck.Parameterscheck(false, parameters[0], n, newDrawing, numberOfLine);
                                numberOfLine = numberOfLine + 20;
                            }
                        }
                        if (!int.TryParse(parameters[1], out y))
                        {
                            if (!newDrawing.v.exisitingVariable(parameters[1]))
                            {
                                parameter = true;
                            }
                            else
                            {
                                y = newDrawing.v.pullData(parameters[1]);
                            }
                            if (parameter)
                            {
                                newDrawing.commandCheck.Parameterscheck(false, parameters[1], n, newDrawing, numberOfLine);
                                numberOfLine = numberOfLine + 20;
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        newDrawing.commandCheck.Parameterscheck(e, newDrawing, n, numberOfLine);
                        numberOfLine = numberOfLine + 20;
                    }
                    if (!newDrawing.error)
                    {
                        newDrawing.moveTo(x, y);
                    }
                }

                else if (split[0].Equals("drawto"))
                {
                    String[] data     = split[1].Split(',');
                    int      x        = 0;
                    int      y        = 0;
                    bool     variable = false;

                    try
                    {
                        if (!int.TryParse(data[0], out x))
                        {
                            if (!newDrawing.v.exisitingVariable(data[0]))
                            {
                                variable = true;
                            }
                            else
                            {
                                x = newDrawing.v.pullData(data[0]);
                            }
                            if (variable)
                            {
                                newDrawing.commandCheck.Parameterscheck(false, data[0], n, newDrawing, numberOfLine);
                                numberOfLine = numberOfLine + 20;
                            }
                        }
                        if (!int.TryParse(data[1], out y))
                        {
                            if (!newDrawing.v.exisitingVariable(data[1]))
                            {
                                variable = true;
                            }
                            else
                            {
                                y = newDrawing.v.pullData(data[1]);
                            }
                            if (variable)
                            {
                                newDrawing.commandCheck.Parameterscheck(false, data[1], n, newDrawing, numberOfLine);
                                numberOfLine = numberOfLine + 20;
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        newDrawing.commandCheck.Parameterscheck(e, newDrawing, n, numberOfLine);
                        numberOfLine = numberOfLine + 20;
                    }
                    if (!newDrawing.error)
                    {
                        newDrawing.drawTo(x, y);
                    }
                }

                else if (split[0].Equals("polygon"))
                {
                    String[]   data       = split[1].Split(',');
                    List <int> tempPoints = new List <int>();
                    int        i          = 0;
                    int        x          = 0;
                    int        y          = 0;
                    int        z          = 0;
                    bool       var        = false;

                    try
                    {
                        while (data.Length > i)
                        {
                            if (!int.TryParse(data[i], out x))
                            {
                                if (!newDrawing.v.exisitingVariable(data[i]))
                                {
                                    var = true;
                                }
                                else
                                {
                                    tempPoints.Add(newDrawing.v.pullData(data[i]));
                                }
                                if (var)
                                {
                                    newDrawing.commandCheck.Parameterscheck(false, data[i], n, newDrawing, numberOfLine);
                                    numberOfLine = numberOfLine + 20;
                                }
                            }
                            tempPoints.Add(x);
                            i++;
                        }
                    }
                    catch (Exception e)
                    {
                        newDrawing.commandCheck.Parameterscheck(e, newDrawing, n, numberOfLine);
                        numberOfLine = numberOfLine + 20;
                    }
                    if (!newDrawing.error)
                    {
                        int[] arr     = tempPoints.ToArray();
                        Shape polygon = new DrawPolygon(arr);
                        polygon.draw(newDrawing);
                    }
                }

                else if (split[0].Equals("rectangle"))
                {
                    String[] data = split[1].Split(',');
                    int      w    = 0;
                    int      h    = 0;

                    bool variable = false;

                    try
                    {
                        if (!int.TryParse(data[0], out w))
                        {
                            if (!newDrawing.v.exisitingVariable(data[0]))
                            {
                                variable = true;
                            }
                            else
                            {
                                w = newDrawing.v.pullData(data[0]);
                            }
                            if (variable)
                            {
                                newDrawing.commandCheck.Parameterscheck(false, data[0], n, newDrawing, numberOfLine);
                                numberOfLine = numberOfLine + 20;
                            }
                        }

                        if (!int.TryParse(data[1], out h))
                        {
                            if (!newDrawing.v.exisitingVariable(data[1]))
                            {
                                variable = true;
                            }
                            else
                            {
                                h = newDrawing.v.pullData(data[1]);
                            }
                            if (variable)
                            {
                                newDrawing.commandCheck.Parameterscheck(false, data[1], n, newDrawing, numberOfLine);
                                numberOfLine = numberOfLine + 20;
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        newDrawing.commandCheck.Parameterscheck(e, newDrawing, n, numberOfLine);
                        numberOfLine = numberOfLine + 20;
                    }
                    if (!newDrawing.error)
                    {
                        Shape rectangle = new DrawRectangle(w, h);
                        rectangle.draw(newDrawing);
                    }
                }

                else if (split[0].Equals("square"))
                {
                    String[] data = split[1].Split(',');
                    int      s    = 0;

                    bool variable = false;

                    try
                    {
                        if (!int.TryParse(data[0], out s))
                        {
                            if (!newDrawing.v.exisitingVariable(data[0]))
                            {
                                variable = true;
                            }
                            else
                            {
                                s = newDrawing.v.pullData(data[0]);
                            }
                            if (variable)
                            {
                                newDrawing.commandCheck.Parameterscheck(false, data[0], n, newDrawing, numberOfLine);
                                numberOfLine = numberOfLine + 20;
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        newDrawing.commandCheck.Parameterscheck(e, newDrawing, n, numberOfLine);
                        numberOfLine = numberOfLine + 20;
                    }
                    if (!newDrawing.error)
                    {
                        Shape square = new DrawRectangle(s, s);
                        square.draw(newDrawing);
                    }
                }

                else if (split[0].Equals("circle"))
                {
                    String[] data     = split[1].Split(',');
                    int      r        = 0;
                    bool     variable = false;
                    try
                    {
                        if (!int.TryParse(data[0], out r))
                        {
                            if (!newDrawing.v.exisitingVariable(data[0]))
                            {
                                variable = true;
                            }
                            else
                            {
                                r = newDrawing.v.pullData(data[0]);
                            }
                            if (variable)
                            {
                                newDrawing.commandCheck.Parameterscheck(false, data[0], n, newDrawing, numberOfLine);
                                numberOfLine = numberOfLine + 20;
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        newDrawing.commandCheck.Parameterscheck(e, newDrawing, n, numberOfLine);
                        numberOfLine = numberOfLine + 20;
                    }
                    if (!newDrawing.error)
                    {
                        Shape circle = new DrawCircle(r);
                        circle.draw(newDrawing);
                    }
                }

                else if (split[0].Equals("triangle"))
                {
                    String[] data = split[1].Split(',');
                    int      h    = 0;
                    int      b    = 0;
                    int      a    = 0;

                    bool variable = false;
                    try
                    {
                        if (!int.TryParse(data[0], out h))
                        {
                            if (!newDrawing.v.exisitingVariable(data[0]))
                            {
                                variable = true;
                            }
                            else
                            {
                                h = newDrawing.v.pullData(data[0]);
                            }
                            if (variable)
                            {
                                newDrawing.commandCheck.Parameterscheck(false, data[0], n, newDrawing, numberOfLine);
                                numberOfLine = numberOfLine + 20;
                            }
                        }

                        if (!int.TryParse(data[1], out b))
                        {
                            if (!newDrawing.v.exisitingVariable(data[1]))
                            {
                                variable = true;
                            }
                            else
                            {
                                b = newDrawing.v.pullData(data[1]);
                            }
                            if (variable)
                            {
                                newDrawing.commandCheck.Parameterscheck(false, data[1], n, newDrawing, numberOfLine);
                                numberOfLine = numberOfLine + 20;
                            }
                        }

                        if (!int.TryParse(data[0], out a))
                        {
                            if (!newDrawing.v.exisitingVariable(data[0]))
                            {
                                variable = true;
                            }
                            else
                            {
                                a = newDrawing.v.pullData(data[0]);
                            }
                            if (variable)
                            {
                                newDrawing.commandCheck.Parameterscheck(false, data[0], n, newDrawing, numberOfLine);
                                numberOfLine = numberOfLine + 20;
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        newDrawing.commandCheck.Parameterscheck(e, newDrawing, n, numberOfLine);
                        numberOfLine = numberOfLine + 20;
                    }
                    if (!newDrawing.error)
                    {
                        Shape triangle = new DrawTriangle(h, b, a);
                        triangle.draw(newDrawing);
                    }
                }

                else if (split[0].Equals("pen"))
                {
                    Color pencolor = Color.FromName(split[1]);
                    if (pencolor.IsKnownColor == false)
                    {
                        commandCheck.Parameterscheck(false, split[1], n, newDrawing, numberOfLine);
                        numberOfLine = numberOfLine + 20;
                    }
                    if (!newDrawing.error)
                    {
                        newDrawing.set_penColor(pencolor);
                    }
                }

                else if (split[0].Equals("fill"))
                {
                    bool valueOn  = split[1].Equals("on");
                    bool valueOff = split[1].Equals("off");

                    if (valueOn == false && valueOff == false)
                    {
                        commandCheck.Parameterscheck(false, split[1], n, newDrawing, numberOfLine);
                        numberOfLine = numberOfLine + 20;
                    }
                    if (!newDrawing.error)
                    {
                        if (valueOn)
                        {
                            newDrawing.fill = true;
                        }
                        else if (valueOff)
                        {
                            newDrawing.fill = false;
                        }
                    }
                }

                else if (split[0].Equals("reset"))
                {
                    newDrawing.reset();
                }

                else if (split[0].Equals("clear"))
                {
                    newDrawing.clear();
                }

                else if (split[0].Equals("exit"))
                {
                    Application.Exit();
                }

                else if (newDrawing.m.existingMethod(method[0]))
                {
                    String[] methodValue   = (newDrawing.m.getMethod(method[0])).Split(',');
                    String   methodCmd     = method[0] + "command";
                    String   methodCommand = newDrawing.m.getMethod(methodCmd);
                    String[] userValue     = method[1].Split(',');
                    int      x             = 0;
                    while (methodValue.Length > x)
                    {
                        String[] valueStore = (methodValue[x] + "=" + userValue[x]).Split(' ');
                        CommandsEntered(valueStore, newDrawing, n);
                        x++;
                    }
                    multiplecommands(methodCommand, newDrawing);
                }

                else if (split[1].Equals("="))
                {
                    try
                    {
                        if (split[3].Equals("+"))
                        {
                            int  variableValue;
                            int  x        = 0;
                            int  y        = 0;
                            bool variable = false;
                            try
                            {
                                if (!int.TryParse(split[2], out x))
                                {
                                    if (!newDrawing.v.exisitingVariable(split[2]))
                                    {
                                        variable = true;
                                    }
                                    else
                                    {
                                        x = newDrawing.v.pullData(split[2]);
                                    }
                                }
                                if (!int.TryParse(split[4], out y))
                                {
                                    if (!newDrawing.v.exisitingVariable(split[4]))
                                    {
                                        variable = true;
                                    }
                                    else
                                    {
                                        y = newDrawing.v.pullData(split[4]);
                                    }
                                }
                                if (variable)
                                {
                                    commandCheck.Parameterscheck(false, split[2], n, newDrawing, numberOfLine);
                                    numberOfLine = numberOfLine + 20;
                                }
                            }
                            catch (Exception e)
                            {
                                commandCheck.Parameterscheck(e, newDrawing, n, numberOfLine);
                                numberOfLine = numberOfLine + 20;
                            }
                            variableValue = x + y;
                            newDrawing.v.UpdateVariable(split[0], variableValue);
                        }

                        if (split[3].Equals("*"))
                        {
                            int  variableValue;
                            int  x        = 0;
                            int  y        = 0;
                            bool variable = false;

                            try
                            {
                                if (!int.TryParse(split[2], out x))
                                {
                                    if (!newDrawing.v.exisitingVariable(split[2]))
                                    {
                                        variable = true;
                                    }
                                    else
                                    {
                                        x = newDrawing.v.pullData(split[2]);
                                    }
                                }
                                if (!int.TryParse(split[4], out y))
                                {
                                    if (!newDrawing.v.exisitingVariable(split[4]))
                                    {
                                        variable = true;
                                    }
                                    else
                                    {
                                        y = newDrawing.v.pullData(split[4]);
                                    }
                                }
                                if (variable)
                                {
                                    commandCheck.Parameterscheck(false, split[2], n, newDrawing, numberOfLine);
                                    numberOfLine = numberOfLine + 20;
                                }
                            }
                            catch (Exception e)
                            {
                                commandCheck.Parameterscheck(e, newDrawing, n, numberOfLine);
                                numberOfLine = numberOfLine + 20;
                            }
                            variableValue = x * y;
                            newDrawing.v.UpdateVariable(split[0], variableValue);
                        }

                        if (split[3].Equals("-"))
                        {
                            int  variableValue;
                            int  x        = 0;
                            int  y        = 0;
                            bool variable = false;

                            try
                            {
                                if (!int.TryParse(split[2], out x))
                                {
                                    if (!newDrawing.v.exisitingVariable(split[2]))
                                    {
                                        variable = true;
                                    }
                                    else
                                    {
                                        x = newDrawing.v.pullData(split[2]);
                                    }
                                }

                                if (!int.TryParse(split[4], out y))
                                {
                                    if (!newDrawing.v.exisitingVariable(split[4]))
                                    {
                                        variable = true;
                                    }
                                    else
                                    {
                                        y = newDrawing.v.pullData(split[4]);
                                    }
                                }

                                if (variable)
                                {
                                    commandCheck.Parameterscheck(false, split[2], n, newDrawing, numberOfLine);
                                    numberOfLine = numberOfLine + 20;
                                }
                            }

                            catch (Exception e)
                            {
                                commandCheck.Parameterscheck(e, newDrawing, n, numberOfLine);
                                numberOfLine = numberOfLine + 20;
                            }
                            variableValue = x - y;
                            newDrawing.v.UpdateVariable(split[0], variableValue);
                        }

                        if (split[3].Equals("/"))
                        {
                            int  variableValue;
                            int  x        = 0;
                            int  y        = 0;
                            bool variable = false;

                            try
                            {
                                if (!int.TryParse(split[2], out x))
                                {
                                    if (!newDrawing.v.exisitingVariable(split[2]))
                                    {
                                        variable = true;
                                    }
                                    else
                                    {
                                        x = newDrawing.v.pullData(split[2]);
                                    }
                                }
                                if (!int.TryParse(split[4], out y))
                                {
                                    if (!newDrawing.v.exisitingVariable(split[4]))
                                    {
                                        variable = true;
                                    }
                                    else
                                    {
                                        y = newDrawing.v.pullData(split[4]);
                                    }
                                }
                                if (variable)
                                {
                                    commandCheck.Parameterscheck(false, split[2], n, newDrawing, numberOfLine);
                                    numberOfLine = numberOfLine + 20;
                                }
                            }
                            catch (Exception e)
                            {
                                commandCheck.Parameterscheck(e, newDrawing, n, numberOfLine);
                                numberOfLine = numberOfLine + 20;
                            }
                            variableValue = x / y;
                            newDrawing.v.UpdateVariable(split[0], variableValue);
                        }
                    }
                    catch
                    {
                        int x = 0;

                        try
                        {
                            bool variable = false;
                            if (!int.TryParse(split[2], out x))
                            {
                                if (!newDrawing.v.exisitingVariable(split[2]))
                                {
                                    variable = true;
                                }
                                else
                                {
                                    x = newDrawing.v.pullData(split[2]);
                                }
                                if (variable)
                                {
                                    newDrawing.commandCheck.Parameterscheck(false, split[2], n, newDrawing, numberOfLine);
                                    numberOfLine = numberOfLine + 20;
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            newDrawing.commandCheck.Parameterscheck(e, newDrawing, n, numberOfLine);
                            numberOfLine = numberOfLine + 20;
                        }
                        if (!newDrawing.error)
                        {
                            if (!newDrawing.v.exisitingVariable(split[0]))
                            {
                                newDrawing.v.storeData(split[0], x);
                            }
                            else
                            {
                                newDrawing.v.UpdateVariable(split[0], x);
                            }
                        }
                    }
                }
                else
                {
                    commandCheck.Commands_Check(newDrawing, n, numberOfLine);
                    numberOfLine = numberOfLine + 20;
                }
            }
            catch
            {
                commandCheck.Commands_Check(newDrawing, n, numberOfLine);
                numberOfLine = numberOfLine + 20;
            }
        }