internal void combineSegments(float SaveCurrX, float SaveCurrY) { PointF pStart; PointF pEnd; if (shapeSegments.Count > MinNumLines) { for (int i = 0; i < shapeSegments.Count; ++i) { Segment s1 = (Segment)shapeSegments[i]; Segment s2 = (Segment)shapeSegments[(i + 1) % shapeSegments.Count]; if (s1.hitTest(new PointF(SaveCurrX, SaveCurrY)) && s2.hitTest(new PointF(SaveCurrX, SaveCurrY))) { saveIndex = i; pStart = s1.GetStartPoint(); pEnd = s2.GetEndPoint(); shapeSegments.Remove(s1); shapeSegments.Remove(s2); Segment sCombinedLine = new LineSegment(pStart, pEnd); shapeSegments.Insert(i, sCombinedLine); break; } } } }
internal override bool hitTest(PointF p) { for (int i = 0; i < shapeSegments.Count; ++i) { Segment s1 = (Segment)shapeSegments[i]; Segment s2 = (Segment)shapeSegments[(i + 1) % shapeSegments.Count]; if (s1.hitTest(p)) { if (!s1.checkCommonPointStart() && !s1.checkCommonPointEnd() && showPoints) { currSegment = s1; belongSegment = null; return(true); } else if (s1.checkCommonPointEnd() && s2.hitTest(p) && showPoints) { currSegment = s1; belongSegment = s2; return(true); } } } return(false); }
// end Constructor internal override bool hitTest(PointF p) { if (!base.hitTest(p)) { BelongSegment = null; Segment s1 = (Segment)shapeSegments[0]; Segment s2 = (Segment)shapeSegments[shapeSegments.Count - 1]; if (s1.hitTest(p) && s1.checkCommonPointStart()) { currSegment = s1; return(true); } if (s2.hitTest(p) && s2.checkCommonPointEnd()) { currSegment = s2; return(true); } return(false); } return(true); }