예제 #1
0
        /// <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);
        }
예제 #2
0
 /// <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));
 }