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); } }
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; }
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); }
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(); } }
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); }
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"; } } }
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); } } }