public static void InsertSite(Site siteBeforeInsertion, GPoint point) { //creating the new site Site first = siteBeforeInsertion; Site second = first.Next; var s = new Site(first, point, second); }
public static Site GetPreviousSite(SmoothedPolyline sm, GPoint point) { Site prevSite = sm.HeadSite; Site nextSite = prevSite.Next; do { if (BetweenSites(prevSite, nextSite, point)) { return(prevSite); } prevSite = nextSite; nextSite = nextSite.Next; } while (nextSite != null); return(null); }
internal static SmoothedPolyline CreateUnderlyingPolylineForSelfEdge(GPoint p0, double dx, double dy) { var p1 = p0 + new GPoint(0, dy); var p2 = p0 + new GPoint(dx, dy); var p3 = p0 + new GPoint(dx, -dy); var p4 = p0 + new GPoint(0, -dy); var site = new Site(p0); var polyline = new SmoothedPolyline(site); site = new Site(site, p1); site = new Site(site, p2); site = new Site(site, p3); site = new Site(site, p4); new Site(site, p0); return(polyline); }
public static Tuple <Site, PolylineCornerType> AnalyzeInsertOrDeletePolylineCorner(SmoothedPolyline sm, GPoint point, double tolerance) { //tolerance += SelectedEdge.Edge.Attr.LineWidth; Site corner = FindCornerForEdit(sm, point, tolerance); if (corner != null) { return(new Tuple <Site, PolylineCornerType>(corner, PolylineCornerType.CornerToDelete)); } corner = GetPreviousSite(sm, point); if (corner != null) { return(new Tuple <Site, PolylineCornerType>(corner, PolylineCornerType.PreviousCornerForInsertion)); } return(null); }
public static Site FindCornerForEdit(SmoothedPolyline underlyingPolyline, GPoint mousePoint, double tolerance) { Site site = underlyingPolyline.HeadSite.Next; tolerance *= tolerance; //square the tolerance do { if (site.Previous == null || site.Next == null) { continue; //don't return the first and the last corners } GPoint diff = mousePoint - site.Point; if (diff * diff <= tolerance) { return(site); } site = site.Next; } while (site.Next != null); return(null); }
public static void DeleteSite(Site site) { site.Previous.Next = site.Next; //removing the site from the list site.Next.Previous = site.Previous; }
static bool BetweenSites(Site prevSite, Site nextSite, GPoint point) { double par = GPoint.ClosestParameterOnLineSegment(point, prevSite.Point, nextSite.Point); return(par > 0.1 && par < 0.9); }