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