public AbstractArrow(IFigure figure) { AbstractArrow arrow = (AbstractArrow)figure; Points = new List <Point>(); _pen = new Pen(arrow._pen.Color, arrow._pen.Width); for (int i = 0; i < arrow.Points.Count; i++) { Point point = new Point(arrow.Points[i].X, arrow.Points[i].Y); Points.Add(point); } DataCommon = new List <DataCommon>(); StartDirectionAxis = arrow.StartDirectionAxis; EndDirectionAxis = arrow.EndDirectionAxis; SelectedZone = new ZoneOfArrow(); SetEndCap(); }
public bool CheckSelection(Point startPoint, Point endPoint, int inaccuracy = 0) { bool selected = false; int maxX; int minX; int maxY; int minY; CoreUML coreUML = CoreUML.GetCoreUML(); for (int i = 1; i < Points.Count; i++) { if (Points[i - 1].X > Points[i].X) { maxX = Points[i - 1].X + inaccuracy; minX = Points[i].X - inaccuracy; } else { minX = Points[i - 1].X - inaccuracy; maxX = Points[i].X + inaccuracy; } if (Points[i - 1].Y > Points[i].Y) { maxY = Points[i - 1].Y + inaccuracy; minY = Points[i].Y - inaccuracy; } else { minY = Points[i - 1].Y - inaccuracy; maxY = Points[i].Y + inaccuracy; } if (!(startPoint.X > maxX || startPoint.Y > maxY || endPoint.X < minX || endPoint.Y < minY )) { selected = true; Axis axis; if (Points[i - 1].X == Points[i].X) { axis = Axis.X; } else { axis = Axis.Y; } ZoneType linkType; if (i - 1 == 0) { linkType = ZoneType.FirstPoint; } else if (i == Points.Count - 1) { linkType = ZoneType.LastPoint; } else { linkType = ZoneType.MiddleLink; } SelectedZone = new ZoneOfArrow(i - 1, i, axis, linkType); return(selected); } } return(selected); }