コード例 #1
0
        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();
        }
コード例 #2
0
        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);
        }