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; }
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]); }
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); }
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)); }
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)); }