コード例 #1
0
 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);
 }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
 public static void DeleteSite(Site site)
 {
     site.Previous.Next = site.Next; //removing the site from the list
     site.Next.Previous = site.Previous;
 }
コード例 #7
0
        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);
        }