Ejemplo n.º 1
0
        public bool IsBelongRoute(PointF point)
        {
            this.nailSelected = -1;
            this.segmentSelected = -1;

            PointF current = this.GetStartingPoint();
            for (int i = 0; i < nails.Count; i++)
            {
                PointF nailPosition = nails[i].Center();
                if (GraphUltility.Distance(point, nailPosition) <= MAXIMUM_DISTANCE)
                {
                    this.nailSelected = i;
                    return true;
                }

                if (GraphUltility.Distance(current, point) + GraphUltility.Distance(point, nailPosition) - GraphUltility.Distance(current, nailPosition) <= MAXIMUM_DISTANCE)
                {
                    this.segmentSelected = i;
                    return true;
                }

                current = nailPosition;
            }

            PointF end = this.GetEndPoint();
            if (GraphUltility.Distance(current, point) + GraphUltility.Distance(point, end) - GraphUltility.Distance(current, end) <= MAXIMUM_DISTANCE)
            {
                this.segmentSelected = this.nails.Count;
                return true;
            }

            return false;
        }
Ejemplo n.º 2
0
        public virtual void DrawToGraphics(Graphics graphics)
        {
            Pen pen = Pens.Black;
            switch (this.CurrentState)
            {
                case ItemState.Free:
                    pen = new Pen(ColorDefinition.GetColorWhenFree());
                    break;

                case ItemState.Hover:
                    pen = new Pen(ColorDefinition.GetColorWhenHover());
                    break;

                case ItemState.Selected:
                    pen = new Pen(ColorDefinition.GetColorWhenSelected());
                    break;

                default:
                    break;
            } // switch

            setLinkKind(pen);

            List<PointF> tempNails = new List<PointF>();
            tempNails.Add(this.GetStartingPoint());
            foreach (NailItem nail in this.nails)
                tempNails.Add(nail.Center());
            tempNails.Add(this.GetEndPoint());

            float R = NailItem.R;
            if (this.CurrentState == ItemState.Free)
                R = NailItem.R + 5;

            PointF[] points = new PointF[3];
            PointF firstNail = PointF.Empty;
            firstNail = tempNails[0];
            for (int i = 0; i < tempNails.Count - 1; i++)
            {
                points[1] = tempNails[i + 1];
                points[0] = GraphUltility.FindPointByDistance(points[1], firstNail, R);
                graphics.DrawLine(pen, firstNail, points[0]);

                if (i + 2 < tempNails.Count)
                {
                    points[2] = GraphUltility.FindPointByDistance(points[1], tempNails[i + 2], R);
                    firstNail = points[2];

                    //Make the intersection curved
                    if (this.CurrentState == ItemState.Free)
                        graphics.DrawBezier(pen, points[0], points[1], points[1], points[2]);
                }
            }

            DrawRouteWithBigArrow(graphics, pen, firstNail, tempNails[tempNails.Count - 1]);
        }
Ejemplo n.º 3
0
        public PointF GetEndPoint()
        {
            StateItem to = (StateItem)this.to;
            if (this.nails.Count == 0)
            {
                StateItem from = (StateItem)this.from;
                return GraphUltility.FindPointByDistance(to.Center(), from.Center(), StateItem.R + 2);
            }

            return GraphUltility.FindPointByDistance(to.Center(), this.nails[this.nails.Count - 1].Center(), StateItem.R + 2);
        }
Ejemplo n.º 4
0
        public bool IsBelongRectange(Rectangle rect)
        {
            foreach (NailItem nail in this.nails)
            {
                if (!GraphUltility.IsBelongRectangle(rect, new PointF(nail.X, nail.Y)))
                    return false;
            }

            return GraphUltility.IsBelongRectangle(rect, new PointF(this.from.X, this.from.Y)) &&
                            GraphUltility.IsBelongRectangle(rect, new PointF(this.to.X, this.to.Y));
        }
Ejemplo n.º 5
0
        public PointF GetStartingPoint()
        {
            StateItem from = (StateItem)this.from;

            if (this.nails.Count == 0)
            {
                StateItem to = (StateItem)this.to;
                return(GraphUltility.FindPointByDistance(from.Center(), to.Center(), StateItem.R + 2));
            }

            return(GraphUltility.FindPointByDistance(from.Center(), this.nails[0].Center(), StateItem.R + 2));
        }