Пример #1
0
        private void GetExpression(object sender, RoutedEventArgs e)
        {
            var strXStart = TBXStart.Text;
            var strXEnd   = TBXEnd.Text;
            var strXStep  = TBXStep.Text;
            var function  = TBFunction.Text;

            try
            {
                var files  = new Files(this);
                var xStart = files.DoubleParser(strXStart);
                var xEnd   = files.DoubleParser(strXEnd);
                var xStep  = files.DoubleParser(strXStep);
                files.SaveExpression(xStart, xEnd, xStep, function);
                var expression = new logic.Expression(this);
                ShowFunctionInformation(expression);
                var valuemsOfY = expression.ValuemsOfY;
                if (valuemsOfY.Length > 1)
                {
                    isGrapticAvailable = true;
                    RedrawGraphic();
                }
            }
            catch (Exception exeption)
            {
                PrintError(exeption.Message);
            }
        }
Пример #2
0
        private void ShowFunctionInformation(logic.Expression expression)
        {
            var yValuems = expression.ValuemsOfY;

            TBYStart.Text      = yValuems[0].ToString();
            TBYEnd.Text        = yValuems[yValuems.Length - 1].ToString();
            TBRPNFunction.Text = expression.RPNExpression;
        }
Пример #3
0
        private List <Polyline> GetGraphic(logic.Expression expression)
        {
            var pointsCollections = new List <PointCollection>();
            var valuemsOfX        = expression.ValuemsOfX;
            var valuemsOfY        = expression.ValuemsOfY;
            var maxX = GetAbsolutMax(valuemsOfX) / (zoomMain * zoomX);
            var maxY = GetAbsolutMax(valuemsOfY) / (zoomMain * zoomY);

            this.maxX = maxX;
            for (int i = 0; i < valuemsOfX.Length; i++)
            {
                var point = GetPointForGraphic(maxX, maxY, valuemsOfX[i], valuemsOfY[i]);
                if (point.X <= CanGraphicFild.ActualWidth && point.Y <= CanGraphicFild.ActualHeight &&
                    (point.X >= 0 && point.Y >= 0))
                {
                    PointCollection points = new PointCollection();
                    while (point.X <= CanGraphicFild.ActualWidth && point.Y <= CanGraphicFild.ActualHeight &&
                           (point.X >= 0 && point.Y >= 0))
                    {
                        points.Add(point);
                        i++;
                        if (i == valuemsOfX.Length)
                        {
                            break;
                        }

                        point = GetPointForGraphic(maxX, maxY, valuemsOfX[i], valuemsOfY[i]);
                    }
                    pointsCollections.Add(points);
                }
                else
                {
                    while (point.X > CanGraphicFild.ActualWidth || point.Y > CanGraphicFild.ActualHeight ||
                           point.X < 0 || point.Y < 0)
                    {
                        i++;
                        if (i == valuemsOfX.Length)
                        {
                            break;
                        }

                        point = GetPointForGraphic(maxX, maxY, valuemsOfX[i], valuemsOfY[i]);
                    }
                }
            }
            var lines = new List <Polyline>();

            foreach (var points in pointsCollections)
            {
                lines.Add(new Polyline {
                    Points = points
                });
            }

            return(lines);
        }
Пример #4
0
 private void ShowTable(object sender, RoutedEventArgs e)
 {
     if (isGrapticAvailable)
     {
         GetExpression(null, null);
         var expression = new logic.Expression(this);
         var table      = new TableView(new logic.Table(expression.ValuemsOfX, expression.ValuemsOfY));
         table.Show();
     }
 }
Пример #5
0
        private List <TextBlock> GetLablesForNotches(Canvas grathicFild, logic.Expression expression)
        {
            var lables = new List <TextBlock>();
            var maxX   = GetAbsolutMax(expression.ValuemsOfX) / (zoomMain * zoomX);

            for (int i = 1; i < 20; i++)
            {
                if (i == 10)
                {
                    continue;
                }

                var xValue = Math.Round(-(maxX - (maxX / 10 * i)), 3);

                var xLable = new TextBlock
                {
                    Margin = new Thickness(grathicFild.ActualWidth / 20 * i - 7, grathicFild.ActualHeight / 2 + 6, grathicFild.ActualWidth / 20 * (20 - i) - 7, grathicFild.ActualHeight / 2 - 12),
                    Text   = xValue.ToString()
                };
                lables.Add(xLable);
            }

            var maxY = GetAbsolutMax(expression.ValuemsOfY) / (zoomMain * zoomY);

            for (int i = 1; i < 20; i++)
            {
                if (i == 10)
                {
                    continue;
                }

                var yValue = Math.Round(((-maxY + (maxY / 10 * i)) * -1), 3);

                var yLable = new TextBlock
                {
                    Margin = new Thickness(grathicFild.ActualWidth / 2 + 6, grathicFild.ActualHeight / 20 * i - 6, grathicFild.ActualWidth / 2 - 15, grathicFild.ActualHeight / 20 * (20 - i) - 6),
                    Text   = yValue.ToString()
                };
                lables.Add(yLable);
            }
            return(lables);
        }
Пример #6
0
 private void ShowCurrentCoordinte(object sender, MouseEventArgs e)
 {
     if (isGrapticAvailable)
     {
         var files       = new Files(this);
         var coordinateX = ((e.GetPosition((IInputElement)sender).X - CanGraphicFild.ActualWidth / 2)
                            / CanGraphicFild.ActualWidth * maxX) * 2;
         files.SaveExpression(coordinateX, coordinateX + 0.5, 1, TBFunction.Text);
         try
         {
             var expression = new logic.Expression(this);
             TBCurrentX.Text = (expression.ValuemsOfX[0]).ToString();
             TBCurrentY.Text = (expression.ValuemsOfY[0]).ToString();
         }
         catch (Exception)
         {
             TBCurrentX.Text = "Err";
             TBCurrentY.Text = "Err";
         }
     }
 }
Пример #7
0
        private void RedrawGraphic()
        {
            CanGraphicFild.Children.Clear();
            Polygon whiteBackGround = new Polygon();

            whiteBackGround.Points.Add(new Point(CanGraphicFild.ActualWidth - 2, CanGraphicFild.ActualHeight - 2));
            whiteBackGround.Points.Add(new Point(1, CanGraphicFild.ActualHeight - 2));
            whiteBackGround.Points.Add(new Point(1, 1));
            whiteBackGround.Points.Add(new Point(CanGraphicFild.ActualWidth - 2, 1));
            whiteBackGround.Fill = Brushes.White;
            CanGraphicFild.Children.Add(whiteBackGround);
            var xAsic = new Line
            {
                X1 = 0,
                X2 = CanGraphicFild.ActualWidth,
                Y1 = CanGraphicFild.ActualHeight / 2
            };

            xAsic.Y2              = xAsic.Y1;
            xAsic.Stroke          = Brushes.Black;
            xAsic.StrokeThickness = 1;

            var yAsic = new Line
            {
                X1              = CanGraphicFild.ActualWidth / 2,
                X2              = CanGraphicFild.ActualWidth / 2,
                Y1              = CanGraphicFild.ActualHeight,
                Y2              = 0,
                Stroke          = Brushes.Black,
                StrokeThickness = 1
            };

            var xTriangle = new Polygon();

            xTriangle.Points.Add(new Point(CanGraphicFild.ActualWidth, CanGraphicFild.ActualHeight / 2));
            xTriangle.Points.Add(new Point(CanGraphicFild.ActualWidth - 10, CanGraphicFild.ActualHeight / 2 + 5));
            xTriangle.Points.Add(new Point(CanGraphicFild.ActualWidth - 10, CanGraphicFild.ActualHeight / 2 - 5));
            xTriangle.Fill = Brushes.Black;

            var yTriangle = new Polygon();

            yTriangle.Points.Add(new Point(CanGraphicFild.ActualWidth / 2, 0));
            yTriangle.Points.Add(new Point(CanGraphicFild.ActualWidth / 2 - 5, 10));
            yTriangle.Points.Add(new Point(CanGraphicFild.ActualWidth / 2 + 5, 10));
            yTriangle.Fill = Brushes.Black;

            var TBXLable = new TextBlock
            {
                Margin = new Thickness(CanGraphicFild.ActualWidth - 12, CanGraphicFild.ActualHeight / 2 + 6, 0, CanGraphicFild.ActualHeight / 2 + 18),
                Text   = "X"
            };

            var TBYLable = new TextBlock
            {
                Margin = new Thickness(CanGraphicFild.ActualWidth / 2 - 12, 0, CanGraphicFild.ActualWidth / 2, CanGraphicFild.ActualHeight - 6),
                Text   = "Y"
            };

            var TBZeroLable = new TextBlock
            {
                Margin = new Thickness(CanGraphicFild.ActualWidth / 2 - 10, CanGraphicFild.ActualHeight / 2 + 4, CanGraphicFild.ActualWidth / 2 + 4, CanGraphicFild.ActualHeight / 2 - 10),
                Text   = "0"
            };

            var notches = GetNotches(CanGraphicFild);

            CanGraphicFild.Children.Add(xAsic);
            CanGraphicFild.Children.Add(yAsic);
            CanGraphicFild.Children.Add(xTriangle);
            CanGraphicFild.Children.Add(yTriangle);
            CanGraphicFild.Children.Add(TBXLable);
            CanGraphicFild.Children.Add(TBYLable);
            CanGraphicFild.Children.Add(TBZeroLable);
            foreach (var notch in notches)
            {
                CanGraphicFild.Children.Add(notch);
            }

            if (isGrapticAvailable)
            {
                var expression = new logic.Expression(this);

                var lables = GetLablesForNotches(CanGraphicFild, expression);

                foreach (var lable in lables)
                {
                    CanGraphicFild.Children.Add(lable);
                }

                var lines = GetGraphic(expression);
                foreach (var line in lines)
                {
                    line.Stroke          = Brushes.Black;
                    line.StrokeThickness = 1;
                    CanGraphicFild.Children.Add(line);
                }
            }
        }