public override void Start(object sender) { if (sender is Ellipse) { Ellipse pointShape = (Ellipse)sender; HandlePoint point = CanvasHolder.GetHandlePointByShape(pointShape); if (point is AnchorPoint) { CanvasHolder.SelectHandlePoint(point); moveAnchor = true; ProgressTimer.Start(); } } else if (sender is Shape) { Shape shape = (Shape)sender; ShapeHolder shapeHolder = CanvasHolder.GetShapeHolderByShape(shape); AnchorPoint anchorPoint = shapeHolder.AnchorPoint; Point mousePosition = Mouse.GetPosition(CanvasHolder.Canvas); if (anchorPoint == null) { anchorPoint = new AnchorPoint(mousePosition, shapeHolder); shapeHolder.AnchorPoint = anchorPoint; CanvasHolder.SelectHandlePoint(anchorPoint); moveAnchor = true; ProgressTimer.Start(); } else { position = mousePosition; moveAnchor = false; ProgressTimer.Start(); } } }
public override void ModifyByPoint(HandlePoint activeHandlePoint) { Rectangle rectangle = (Rectangle)Shape; bool index = activeHandlePoint == HandlePoints[1]; if (!index) { Canvas.SetLeft(rectangle, HandlePoints[1].X); Canvas.SetTop(rectangle, HandlePoints[1].Y); if (activeHandlePoint.X - HandlePoints[1].X > 0) { rectangle.Width = activeHandlePoint.X - HandlePoints[1].X; } if (activeHandlePoint.X - HandlePoints[1].Y > 0) { rectangle.Height = activeHandlePoint.Y - HandlePoints[1].Y; } } else { Canvas.SetLeft(rectangle, activeHandlePoint.X); Canvas.SetTop(rectangle, activeHandlePoint.Y); if (HandlePoints[0].X - activeHandlePoint.X > 0) { rectangle.Width = HandlePoints[0].X - activeHandlePoint.X; } if (HandlePoints[0].Y - activeHandlePoint.Y > 0) { rectangle.Height = HandlePoints[0].Y - activeHandlePoint.Y; } } }
protected override void Progress() { HandlePoint activeHandlePoint = CanvasHolder.ActiveHandlePoint; Point mousePosition = Mouse.GetPosition(CanvasHolder.Canvas); activeHandlePoint.Move(mousePosition); activeHandlePoint.ModifyShape(); }
public void SelectHandlePoint(HandlePoint handlePoint) { if (ActiveHandlePoint != null) { ActiveHandlePoint.Unselect(); } ActiveHandlePoint = handlePoint; ActiveHandlePoint.Select(); }
private void Scale_OnClick(object sender, RoutedEventArgs e) { HandlePoint point = CanvasHolder.ActiveHandlePoint; if (point != null) { double ratio = Convert.ToDouble(tbRatio.Text); point.ShapeHolder.Scale(ratio); } }
public override void Start(object sender) { if (sender is Ellipse) { Ellipse pointShape = (Ellipse)sender; HandlePoint activeHandlePoint = CanvasHolder.GetHandlePointByShape(pointShape); CanvasHolder.SelectHandlePoint(activeHandlePoint); ProgressTimer.Start(); } }
public override void CreateByPoint(HandlePoint activeHandlePoint) { Line line = new Line(); line.Stroke = Brushes.Black; line.StrokeThickness = CanvasHolder.CurrentStrokeThickness; HandlePoints[0] = activeHandlePoint; HandlePoints[1] = new HandlePoint(activeHandlePoint.Position, this); CanvasHolder.Canvas.Children.Add(line); Shape = line; }
public override void CreateByPoint(HandlePoint activeHandlePoint) { Ellipse circle = new Ellipse(); circle.Stroke = Brushes.Black; circle.StrokeThickness = CanvasHolder.CurrentStrokeThickness; HandlePoints[0] = activeHandlePoint; HandlePoints[1] = new HandlePoint(activeHandlePoint.Position, this); CanvasHolder.Canvas.Children.Add(circle); Shape = circle; }
private void Rotate_OnClick(object sender, RoutedEventArgs e) { HandlePoint point = CanvasHolder.ActiveHandlePoint; if (point != null) { double degrees = Convert.ToDouble(tbAngle.Text); double radians = Math.PI * degrees / 180.0; point.ShapeHolder.Rotate(radians); } }
public override void CreateByPoint(HandlePoint activeHandlePoint) { Rectangle rectangle = new Rectangle(); rectangle.Stroke = Brushes.Black; rectangle.StrokeThickness = CanvasHolder.CurrentStrokeThickness; HandlePoints[0] = activeHandlePoint; HandlePoints[1] = new HandlePoint(activeHandlePoint.Position, this); CanvasHolder.Canvas.Children.Add(rectangle); Shape = rectangle; }
public override void FromString(string input) { string[] words = input.Split(null); for (int i = 0; i < words.Length; i += 2) { double x = Convert.ToDouble(words[i]); double y = Convert.ToDouble(words[i + 1]); Point position = new Point(x, y); HandlePoint handlePoint = new HandlePoint(position, this); CreateByPoint(handlePoint); } ModifyByPoint(null); }
public override void ModifyByPoint(HandlePoint activeHandlePoint) { Ellipse circle = (Ellipse)Shape; bool index = activeHandlePoint == HandlePoints[1]; if (!index) { double radius = Math.Sqrt(Math.Pow(activeHandlePoint.X - HandlePoints[1].X, 2) + Math.Pow(activeHandlePoint.Y - HandlePoints[1].Y, 2)); Canvas.SetLeft(circle, HandlePoints[1].X - radius); Canvas.SetTop(circle, HandlePoints[1].Y - radius); circle.Width = radius * 2; circle.Height = circle.Width; } }
public override void ModifyByPoint(HandlePoint activeHandlePoint) { int n = HandlePoints.Count - 1, k; double b, bp, tp = 0, t; Point point, characteristic; for (int i = 0; i < T; i++) { point = new Point(); point.X = 0; point.Y = 0; t = (double)i / T; b = Math.Pow(1 - t, n); tp = 1; bp = b; for (int j = 0; j <= n; j++) { characteristic = HandlePoints[j].Position; k = j == 0 || j == n ? 1 : n; point.X += (k * bp * tp * characteristic.X); point.Y += (k * bp * tp * characteristic.Y); bp /= (1 - t); tp *= t; } CurvePoints[i] = point; } point = new Point(); characteristic = HandlePoints[n].Position; point.X = characteristic.X; point.Y = characteristic.Y; CurvePoints[T] = point; for (int i = 0; i < T; i++) { Lines[i].X1 = CurvePoints[i].X; Lines[i].Y1 = CurvePoints[i].Y; Lines[i].X2 = CurvePoints[i + 1].X; Lines[i].Y2 = CurvePoints[i + 1].Y; if (Lines[i].Visibility == Visibility.Hidden) { Lines[i].Visibility = Visibility.Visible; } } }
public override void TranslateByPoint(HandlePoint activeHandlePoint) { Rectangle rectangle = (Rectangle)Shape; bool index = activeHandlePoint == HandlePoints[1]; Point translateVector = new Point(); Point absolutePosition = new Point(); Point previousPosition = activeHandlePoint.PreviousPosition; if (!index) { translateVector.X = activeHandlePoint.X - previousPosition.X; translateVector.Y = activeHandlePoint.Y - previousPosition.Y; absolutePosition.X = HandlePoints[1].X + translateVector.X / 3; absolutePosition.Y = HandlePoints[1].Y + translateVector.Y / 3; HandlePoints[1].Move(absolutePosition); Canvas.SetLeft(rectangle, HandlePoints[1].X); Canvas.SetTop(rectangle, HandlePoints[1].Y); if (activeHandlePoint.X - HandlePoints[1].X > 0) { rectangle.Width = activeHandlePoint.X - HandlePoints[1].X; } if (activeHandlePoint.X - HandlePoints[1].Y > 0) { rectangle.Height = activeHandlePoint.Y - HandlePoints[1].Y; } } else { translateVector.X = activeHandlePoint.X - previousPosition.X; translateVector.Y = activeHandlePoint.Y - previousPosition.Y; absolutePosition.X = HandlePoints[0].X + translateVector.X / 3; absolutePosition.Y = HandlePoints[0].Y + translateVector.Y / 3; HandlePoints[0].Move(absolutePosition); Canvas.SetLeft(rectangle, activeHandlePoint.X); Canvas.SetTop(rectangle, activeHandlePoint.Y); if (HandlePoints[0].X - activeHandlePoint.X > 0) { rectangle.Width = HandlePoints[0].X - activeHandlePoint.X; } if (HandlePoints[0].Y - activeHandlePoint.Y > 0) { rectangle.Height = HandlePoints[0].Y - activeHandlePoint.Y; } } }
public override void Start(object sender) { if (sender is Canvas) { Canvas canvas = (Canvas)sender; Point mousePosition = Mouse.GetPosition(canvas); ShapeHolder newShapeHolder = ShapeHolderFactory.CreateShapeHolder(CanvasHolder); HandlePoint newHandlePoint = new HandlePoint(mousePosition, newShapeHolder); newShapeHolder.CreateByPoint(newHandlePoint); CanvasHolder.SelectHandlePoint(newHandlePoint); ProgressTimer.Start(); } }
protected override void Progress() { HandlePoint activeHandlePoint = CanvasHolder.ActiveHandlePoint; Point mousePosition = Mouse.GetPosition(CanvasHolder.Canvas); if (moveAnchor) { activeHandlePoint.Move(mousePosition); } else { double angle = getAngle(activeHandlePoint.Position, position, mousePosition); ShapeHolder shapeHolder = activeHandlePoint.ShapeHolder; shapeHolder.Rotate(angle); position = mousePosition; } }
public override void ModifyByPoint(HandlePoint activeHandlePoint) { PointCollection points = new PointCollection(); foreach (HandlePoint handlePoint in HandlePoints) { points.Add(handlePoint.Position); } Polygon polygon = Shape as Polygon; polygon.Points = points; if (polygon.Visibility == Visibility.Hidden) { polygon.Visibility = Visibility.Visible; } }
private void Draw_OnClick(object sender, RoutedEventArgs e) { Point position1 = new Point(); Point position2 = new Point(); position1.X = Convert.ToDouble(tbPositionX1.Text); position1.Y = Convert.ToDouble(tbPositionY1.Text); position2.X = Convert.ToDouble(tbPositionX2.Text); position2.Y = Convert.ToDouble(tbPositionY2.Text); ShapeHolder newShapeHolder = ShapeHolderFactory.CreateShapeHolder(CanvasHolder); HandlePoint newHandlePoint = new HandlePoint(position1, newShapeHolder); newShapeHolder.CreateByPoint(newHandlePoint); CanvasHolder.SelectHandlePoint(newHandlePoint); newHandlePoint.Move(position2); newHandlePoint.ModifyShape(); }
protected override void Progress() { HandlePoint activeHandlePoint = CanvasHolder.ActiveHandlePoint; Point mousePosition = Mouse.GetPosition(CanvasHolder.Canvas); if (moveAnchor) { activeHandlePoint.Move(mousePosition); } else { double distance = getDistance(activeHandlePoint.Position, mousePosition); double ratio = distance / oldDistance; ShapeHolder shapeHolder = activeHandlePoint.ShapeHolder; shapeHolder.Scale(ratio); position = mousePosition; oldDistance = distance; } }
public override void ModifyByPoint(HandlePoint activeHandlePoint) { Line line = (Line)Shape; bool index = activeHandlePoint == HandlePoints[1]; if (!index) { line.X1 = activeHandlePoint.X; line.Y1 = activeHandlePoint.Y; line.X2 = HandlePoints[1].X; line.Y2 = HandlePoints[1].Y; } else { line.X1 = HandlePoints[0].X; line.Y1 = HandlePoints[0].Y; line.X2 = activeHandlePoint.X; line.Y2 = activeHandlePoint.Y; } }
public override void Start(object sender) { if (sender is Canvas) { Canvas canvas = (Canvas)sender; Point mousePosition = Mouse.GetPosition(canvas); ShapeHolder shapeHolder = CanvasHolder.ActiveShapeHolder; if (shapeHolder == null) { shapeHolder = ShapeHolderFactory.CreateShapeHolder(CanvasHolder); CanvasHolder.ActiveShapeHolder = shapeHolder; } HandlePoint newHandlePoint = new HandlePoint(mousePosition, shapeHolder); shapeHolder.CreateByPoint(newHandlePoint); if (shapeHolder.HandlePoints.Count > 2) { shapeHolder.ModifyByPoint(newHandlePoint); } } }
public override void TranslateByPoint(HandlePoint activeHandlePoint) { Ellipse circle = (Ellipse)Shape; bool index = activeHandlePoint == HandlePoints[1]; Point translateVector = new Point(); Point absolutePosition = new Point(); Point previousPosition = activeHandlePoint.PreviousPosition; if (!index) { translateVector.X = activeHandlePoint.X - previousPosition.X; translateVector.Y = activeHandlePoint.Y - previousPosition.Y; absolutePosition.X = HandlePoints[1].X + translateVector.X / 3; absolutePosition.Y = HandlePoints[1].Y + translateVector.Y / 3; HandlePoints[1].Move(absolutePosition); double radius = Math.Sqrt(Math.Pow(activeHandlePoint.X - HandlePoints[1].X, 2) + Math.Pow(activeHandlePoint.Y - HandlePoints[1].Y, 2)); Canvas.SetLeft(circle, HandlePoints[1].X - radius); Canvas.SetTop(circle, HandlePoints[1].Y - radius); circle.Width = radius * 2; circle.Height = circle.Width; } else { translateVector.X = activeHandlePoint.X - previousPosition.X; translateVector.Y = activeHandlePoint.Y - previousPosition.Y; absolutePosition.X = HandlePoints[0].X + translateVector.X / 3; absolutePosition.Y = HandlePoints[0].Y + translateVector.Y / 3; HandlePoints[0].Move(absolutePosition); double radius = Math.Sqrt(Math.Pow(HandlePoints[0].X - activeHandlePoint.X, 2) + Math.Pow(HandlePoints[0].Y - activeHandlePoint.Y, 2)); Canvas.SetLeft(circle, activeHandlePoint.X - radius); Canvas.SetTop(circle, activeHandlePoint.Y - radius); circle.Width = radius * 2; circle.Height = circle.Width; } }
private void AddPoint_OnClick(object sender, RoutedEventArgs e) { Point position = new Point(); position.X = Convert.ToDouble(tbPositionX.Text); position.Y = Convert.ToDouble(tbPositionY.Text); ShapeHolder shapeHolder = CanvasHolder.ActiveShapeHolder; if (shapeHolder == null) { shapeHolder = ShapeHolderFactory.CreateShapeHolder(CanvasHolder); CanvasHolder.ActiveShapeHolder = shapeHolder; } HandlePoint newHandlePoint = new HandlePoint(position, shapeHolder); shapeHolder.CreateByPoint(newHandlePoint); if (shapeHolder.HandlePoints.Count > 2) { shapeHolder.ModifyByPoint(newHandlePoint); } }
public override void TranslateByPoint(HandlePoint activeHandlePoint) { Line line = (Line)Shape; bool index = activeHandlePoint == HandlePoints[1]; Point translateVector = new Point(); Point absolutePosition = new Point(); Point previousPosition = activeHandlePoint.PreviousPosition; if (!index) { translateVector.X = activeHandlePoint.X - previousPosition.X; translateVector.Y = activeHandlePoint.Y - previousPosition.Y; absolutePosition.X = HandlePoints[1].X + translateVector.X / 3; absolutePosition.Y = HandlePoints[1].Y + translateVector.Y / 3; HandlePoints[1].Move(absolutePosition); line.X1 = activeHandlePoint.X; line.Y1 = activeHandlePoint.Y; line.X2 = HandlePoints[1].X; line.Y2 = HandlePoints[1].Y; } else { translateVector.X = activeHandlePoint.X - previousPosition.X; translateVector.Y = activeHandlePoint.Y - previousPosition.Y; absolutePosition.X = HandlePoints[0].X + translateVector.X / 3; absolutePosition.Y = HandlePoints[0].Y + translateVector.Y / 3; HandlePoints[0].Move(absolutePosition); line.X1 = HandlePoints[0].X; line.Y1 = HandlePoints[0].Y; line.X2 = activeHandlePoint.X; line.Y2 = activeHandlePoint.Y; } }
public abstract void TranslateByPoint(HandlePoint activeHandlePoint);
public void AddHandlePoint(HandlePoint handlePoint) { HandlePoints.Add(handlePoint); }
public abstract void CreateByPoint(HandlePoint activeHandlePoint);
public abstract void ModifyByPoint(HandlePoint activeHandlePoint);
public override void TranslateByPoint(HandlePoint activeHandlePoint) { }
public override void CreateByPoint(HandlePoint activeHandlePoint) { HandlePoints.Add(activeHandlePoint); }