Пример #1
0
        private int eventCompare(bool p1_isStart, ref Vector2 p1_1, ref Vector2 p1_2, bool p2_isStart, ref Vector2 p2_1, ref Vector2 p2_2)
        {
            // compare the selected points first
            var comp = Epsilon.pointsCompare(p1_1, p2_1);

            if (comp != 0)
            {
                return(comp);
            }

            // the selected points are the same

            if (Epsilon.pointsSame(p1_2, p2_2)) // if the non-selected points are the same too...
            {
                return(0);                      // then the segments are equal
            }
            if (p1_isStart != p2_isStart)       // if one is a start and the other isn't...
            {
                return(p1_isStart ? 1 : -1);    // favor the one that isn't the start
            }
            // otherwise, we'll have to calculate which one is below the other manually
            return(Epsilon.pointAboveOrOnLine(
                       p1_2,
                       p2_isStart ? p2_1 : p2_2,          // order matters
                       p2_isStart ? p2_2 : p2_1
                       ) ? 1 : -1);
        }
Пример #2
0
        private int statusCompare(EventNode ev1, EventNode ev2)
        {
            var a1 = ev1.seg.start;
            var a2 = ev1.seg.end;
            var b1 = ev2.seg.start;
            var b2 = ev2.seg.end;

            if (Epsilon.pointsCollinear(a1, b1, b2))
            {
                if (Epsilon.pointsCollinear(a2, b1, b2))
                {
                    return(1);                   //eventCompare(true, a1, a2, true, b1, b2);
                }
                return(Epsilon.pointAboveOrOnLine(a2, b1, b2) ? 1 : -1);
            }

            return(Epsilon.pointAboveOrOnLine(a1, b1, b2) ? 1 : -1);
        }