public void BeginAdd(_Line line) { _addLine = line; this.Visibility = Visibility.Visible; this.PreviewMouseMove -= AddLinePoint1Canvas_PreviewMouseMove; this.PreviewMouseLeftButtonUp -= AddLinePoint1Canvas_PreviewMouseLeftButtonUp; this.PreviewMouseMove -= AddLinePoint2Canvas_PreviewMouseMove; this.PreviewMouseLeftButtonUp -= AddLinePoint2Canvas_PreviewMouseLeftButtonUp; this.PreviewMouseMove += AddLinePoint1Canvas_PreviewMouseMove; this.PreviewMouseLeftButtonUp += AddLinePoint1Canvas_PreviewMouseLeftButtonUp; }
private Point OnLinePoint2Added(_Line source, Point a, Point b) { if (!DesginCanvas.IsAutoAlign) { return a; } AlignCanvas.Clear(); Point point = new Point(double.NaN, double.NaN); foreach (UIElement ui in DesginCanvas.Children) { if (DesginCanvas.SelectedControls.Contains(ui as _Control)) { continue; } if (ui is _Line) { _Line line = ui as _Line; point = AlignCanvas.MeasurePoint(a, b, new Point(line.Line.X1 + line.Left, line.Line.Y1 + line.Top), new Point(line.Line.X2 + line.Left, line.Line.Y2 + line.Top)); if (!double.IsNaN(point.X)) { return new Point(point.X - source.Left, point.Y - source.Top); } } else if (ui is _Rectangle) { _Control element = ui as _Control; Point a1 = new Point(element.Left, element.Top); Point b1 = new Point(element.Left + element.Width, element.Top); Point c1 = new Point(element.Left + element.Width, element.Top + element.Height); Point d1 = new Point(element.Left, element.Top + element.Height); point = AlignCanvas.MeasurePoint(a, b, a1, b1); if (!double.IsNaN(point.X)) { return point; } else if (!double.IsNaN((point = AlignCanvas.MeasurePoint(a, b1, c1)).X)) { return point; } else if (!double.IsNaN((point = AlignCanvas.MeasurePoint(a, c1, d1)).X)) { return point; } else if (!double.IsNaN((point = AlignCanvas.MeasurePoint(a, d1, a1)).X)) { return point; } } } return AlignCanvas.Orthogonal(a, b); }
private void OnLinePoint2Adding(_Line source, Point a, Point b) { if (!DesginCanvas.IsAutoAlign) { return; } LineAddingMode(source, a, b); }
private void OnLinePoint1Adding(_Line source, Point a) { if (!DesginCanvas.IsAutoAlign) { return; } List<Point> points = new List<Point>(); foreach (UIElement ui in DesginCanvas.Children) { if (DesginCanvas.SelectedControls.Contains(ui as _Control)) { continue; } if (ui is _Line) { _Line line = ui as _Line; Point point = AlignCanvas.MeasurePoint(a, new Point(line.Line.X1 + line.Left, line.Line.Y1 + line.Top), new Point(line.Line.X2 + line.Left, line.Line.Y2 + line.Top)); if (!double.IsNaN(point.X)) { points.Add(point); } } else if (ui is _Rectangle) { _Control element = ui as _Control; Point a1 = new Point(element.Left, element.Top); Point b1 = new Point(element.Left + element.Width, element.Top); Point c1 = new Point(element.Left + element.Width, element.Top + element.Height); Point d1 = new Point(element.Left, element.Top + element.Height); Point point = AlignCanvas.MeasurePoint(a, a1, b1); if (!double.IsNaN(point.X)) { points.Add(point); } else if (!double.IsNaN((point = AlignCanvas.MeasurePoint(a, b1, c1)).X)) { points.Add(point); } else if (!double.IsNaN((point = AlignCanvas.MeasurePoint(a, c1, d1)).X)) { points.Add(point); } else if (!double.IsNaN((point = AlignCanvas.MeasurePoint(a, d1, a1)).X)) { points.Add(point); } } } AlignCanvas.DrawAlignPoints(points); }
public void OnLineMoving(_Line source, Point a, Point b) { if (!DesginCanvas.IsAutoAlign) { return; } a.X += source.Left; a.Y += source.Top; b.X += source.Left; b.Y += source.Top; LineAddingMode(source, a, b); }
public LineAdorner(_Line line) : base(line) { _line = line; }