/// <summary> /// Compare intersection events. /// </summary> /// <param name="eventA">The first intersection event to compare.</param> /// <param name="eventB">The second intersection event to compare.</param> /// <param name="relativePointTolerance">The comparison tolerance. If RhinoMath.UnsetValue, then RhinoMath.SqrtEpsilon is used.</param> /// <param name="log">If not null and false is returned, then a description of the error is appended to log.</param> /// <returns></returns> /// <since>7.0</since> public static bool CompareEquivalent(IntersectionEvent eventA, IntersectionEvent eventB, double relativePointTolerance, Pixel.Rhino.FileIO.TextLog log) { // compare to match if (relativePointTolerance == RhinoMath.UnsetValue) { relativePointTolerance = RhinoMath.SqrtEpsilon; } bool rc = true; if (eventA.m_type != eventB.m_type) { if (log != null) { log.Print("Event types mismatch."); } rc = false; } else { for (int ei = 0; ei < 2; ei++) { if (ei == 1 && eventA.m_type != 4) // ON_X_EVENT::TYPE::csx_overlap { continue; } Point3d AActual = (ei == 0) ? eventA.m_A0 : eventA.m_A1; Point3d BActual = (ei == 0) ? eventA.m_B0 : eventA.m_B1; Point3d AExp = (ei == 0) ? eventB.m_A0 : eventB.m_A1; Point3d BExp = (ei == 0) ? eventB.m_B0 : eventB.m_B1; double sz = AExp.MaximumCoordinate; double dist = AActual.DistanceTo(AExp); if (dist > relativePointTolerance * (1 + sz)) { if (log != null) { log.Print("Event mismatch. Distance between expected and actual m_A{0} was {1}.\n", ei * 2, dist); } rc = false; } dist = BActual.DistanceTo(BExp); if (dist > relativePointTolerance * (1 + sz)) { if (log != null) { log.Print("Event mismatch. Distance between expected and actual m_B{0} was {1}.\n", ei * 2, dist); } rc = false; } } } return(rc); }
/// <summary> /// Compare intersection events. /// </summary> /// <param name="eventA">The first intersection event to compare.</param> /// <param name="eventB">The second intersection event to compare.</param> /// <param name="relativePointTolerance">The comparison tolerance. If RhinoMath.UnsetValue, then RhinoMath.SqrtEpsilon is used.</param> /// <returns>true if the two inputs represent the same intersection, false otherwise.</returns> /// <since>7.0</since> public static bool CompareEquivalent(IntersectionEvent eventA, IntersectionEvent eventB, double relativePointTolerance) { return(CompareEquivalent(eventA, eventB, relativePointTolerance, null)); }