Screenshot instructions:
Windows
Mac
Red Hat Linux
Ubuntu
Click URL instructions:
Rightclick on ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)
From: <phoenixyjll@us...>  20130802 13:20:31

Revision: 56464 http://sourceforge.net/p/brlcad/code/56464 Author: phoenixyjll Date: 20130802 13:20:28 +0000 (Fri, 02 Aug 2013) Log Message:  Remove the curves that doesn't have shared points on both starting point and end point (it's impossible for them to be a part of the loop) Modified Paths:  brlcad/trunk/src/libbrep/intersect.cpp Modified: brlcad/trunk/src/libbrep/intersect.cpp ===================================================================  brlcad/trunk/src/libbrep/intersect.cpp 20130802 13:18:03 UTC (rev 56463) +++ brlcad/trunk/src/libbrep/intersect.cpp 20130802 13:20:28 UTC (rev 56464) @@ 2855,10 +2855,62 @@ } } + // Find the neighbors for every overlap segment. + ON_SimpleArray<bool> start_linked(overlaps.Count()), end_linked(overlaps.Count()); for (int i = 0; i < overlaps.Count(); i++) { + // Initialization + start_linked[i] = end_linked[i] = false; + } + for (int i = 0; i < overlaps.Count(); i++) { if (!overlaps[i]  !overlaps[i]>m_curveA  !overlaps[i]>m_curveB  !overlaps[i]>m_curve3d) continue; + + if (overlaps[i]>m_curve3d>IsClosed() && overlaps[i]>m_curveA>IsClosed() && overlaps[i]>m_curveB>IsClosed()) { + start_linked[i] = end_linked[i] = true; + } + + for (int j = i + 1; j < overlaps.Count(); j++) { + if (!overlaps[j]  !overlaps[j]>m_curveA  !overlaps[j]>m_curveB  !overlaps[j]>m_curve3d) + continue; + // Merge the curves that link together. + if (overlaps[i]>m_curve3d>PointAtStart().DistanceTo(overlaps[j]>m_curve3d>PointAtEnd()) < intersection_tolerance + && overlaps[i]>m_curveA>PointAtStart().DistanceTo(overlaps[j]>m_curveA>PointAtEnd()) < intersection_tolerance_A + && overlaps[i]>m_curveB>PointAtStart().DistanceTo(overlaps[j]>m_curveB>PointAtEnd()) < intersection_tolerance_B) { + // end  start  end  start + start_linked[i] = end_linked[j] = true; + } else if (overlaps[i]>m_curve3d>PointAtEnd().DistanceTo(overlaps[j]>m_curve3d>PointAtStart()) < intersection_tolerance + && overlaps[i]>m_curveA>PointAtEnd().DistanceTo(overlaps[j]>m_curveA>PointAtStart()) < intersection_tolerance_A + && overlaps[i]>m_curveB>PointAtEnd().DistanceTo(overlaps[j]>m_curveB>PointAtStart()) < intersection_tolerance_B) { + // start  end  start  end + start_linked[j] = end_linked[i] = true; + } else if (overlaps[i]>m_curve3d>PointAtStart().DistanceTo(overlaps[j]>m_curve3d>PointAtStart()) < intersection_tolerance + && overlaps[i]>m_curveA>PointAtStart().DistanceTo(overlaps[j]>m_curveA>PointAtStart()) < intersection_tolerance_A + && overlaps[i]>m_curveB>PointAtStart().DistanceTo(overlaps[j]>m_curveB>PointAtStart()) < intersection_tolerance_B) { + // end  start  start  end + start_linked[i] = start_linked[j] = true; + } else if (overlaps[i]>m_curve3d>PointAtEnd().DistanceTo(overlaps[j]>m_curve3d>PointAtEnd()) < intersection_tolerance + && overlaps[i]>m_curveA>PointAtEnd().DistanceTo(overlaps[j]>m_curveA>PointAtEnd()) < intersection_tolerance_A + && overlaps[i]>m_curveB>PointAtEnd().DistanceTo(overlaps[j]>m_curveB>PointAtEnd()) < intersection_tolerance_B) { + // start  end  end  start + end_linked[i] = end_linked[j] = true; + } + } + } + + for (int i = 0; i < overlaps.Count(); i++) { + if (!overlaps[i]  !overlaps[i]>m_curveA  !overlaps[i]>m_curveB  !overlaps[i]>m_curve3d) + continue; + if (!start_linked[i]  !end_linked[i]) { + delete overlaps[i]; + overlaps[i] = NULL; + } + } + + for (int i = 0; i < overlaps.Count(); i++) { + if (!overlaps[i]  !overlaps[i]>m_curveA  !overlaps[i]>m_curveB  !overlaps[i]>m_curve3d) + continue; + for (int j = 0; j <= overlaps.Count(); j++) { if (overlaps[i]>m_curve3d>IsClosed() && overlaps[i]>m_curveA>IsClosed() && overlaps[i]>m_curveB>IsClosed()) { // The ith curve is close loop, we get a complete boundary of This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. 