Revision: 56304
http://sourceforge.net/p/brlcad/code/56304
Author: phoenixyjll
Date: 2013-07-29 04:08:36 +0000 (Mon, 29 Jul 2013)
Log Message:
-----------
Remove duplicated curves.
Modified Paths:
--------------
brlcad/trunk/src/libbrep/intersect.cpp
Modified: brlcad/trunk/src/libbrep/intersect.cpp
===================================================================
--- brlcad/trunk/src/libbrep/intersect.cpp 2013-07-29 02:55:22 UTC (rev
56303)
+++ brlcad/trunk/src/libbrep/intersect.cpp 2013-07-29 04:08:36 UTC (rev
56304)
@@ -2666,6 +2666,36 @@
}
for (int i = 0; i < overlaps.Count(); i++) {
+ for (int j = i + 1; j < overlaps.Count(); j++) {
+ if (!overlaps[i] || !overlaps[i]->m_curve3d ||
!overlaps[i]->m_curveA || !overlaps[i]->m_curveB || !overlaps[j] ||
!overlaps[j]->m_curve3d || !overlaps[i]->m_curveA || !overlaps[i]->m_curveB)
+ continue;
+ // Eliminate duplications.
+ ON_SimpleArray<ON_X_EVENT> x_event1, x_event2;
+ if (ON_Intersect(overlaps[i]->m_curveA, overlaps[j]->m_curveA,
x_event1, intersection_tolerance_A)
+ && ON_Intersect(overlaps[i]->m_curveB, overlaps[j]->m_curveB,
x_event2, intersection_tolerance_B)) {
+ if (x_event1[0].m_type == ON_X_EVENT::ccx_overlap
+ && x_event2[0].m_type == ON_X_EVENT::ccx_overlap) {
+ if (ON_NearZero(x_event1[0].m_a[0] -
overlaps[i]->m_curveA->Domain().Min())
+ && ON_NearZero(x_event1[0].m_a[1] -
overlaps[i]->m_curveA->Domain().Max())
+ && ON_NearZero(x_event2[0].m_b[0] -
overlaps[i]->m_curveB->Domain().Min())
+ && ON_NearZero(x_event2[0].m_b[1] -
overlaps[i]->m_curveB->Domain().Max())) {
+ // overlaps[i] is completely inside overlaps[j]
+ delete overlaps[i];
+ overlaps[i] = NULL;
+ } else if (ON_NearZero(x_event1[0].m_a[0] -
overlaps[j]->m_curveA->Domain().Min())
+ && ON_NearZero(x_event1[0].m_a[1] -
overlaps[j]->m_curveA->Domain().Max())
+ && ON_NearZero(x_event2[0].m_b[0] -
overlaps[j]->m_curveB->Domain().Min())
+ && ON_NearZero(x_event2[0].m_b[1] -
overlaps[j]->m_curveB->Domain().Max())) {
+ // overlaps[j] is completely inside overlaps[i]
+ delete overlaps[j];
+ overlaps[j] = 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;
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits