[brlcad-commits] SF.net SVN: brlcad:[60451] brlcad/trunk/src/libbrep/boolean.cpp
Open Source Solid Modeling CAD
Brought to you by:
brlcad
From: <n_...@us...> - 2014-04-29 17:52:48
|
Revision: 60451 http://sourceforge.net/p/brlcad/code/60451 Author: n_reed Date: 2014-04-29 17:52:44 +0000 (Tue, 29 Apr 2014) Log Message: ----------- In some cases union_intervals would be handed an empty list of intervals, which would cause an exception to be thrown and valid face intersection curves to be discarded. Allowing for empty interval sets (which are valid) prevents the spurious exceptions, fixes 8 test cases (4 subtraction, 4 intersection) and improves 5 others in 'librt/tests/brep_boolean_tests.g'. Modified Paths: -------------- brlcad/trunk/src/libbrep/boolean.cpp Modified: brlcad/trunk/src/libbrep/boolean.cpp =================================================================== --- brlcad/trunk/src/libbrep/boolean.cpp 2014-04-28 20:05:23 UTC (rev 60450) +++ brlcad/trunk/src/libbrep/boolean.cpp 2014-04-29 17:52:44 UTC (rev 60451) @@ -655,10 +655,20 @@ // 3. Merge the intervals and get the final result. try { - ON_Interval merged_interval1 = union_intervals(intervals1); - ON_Interval merged_interval2 = union_intervals(intervals2); - ON_Interval shared_interval = intersect_intervals(merged_interval1, merged_interval2); + ON_Interval merged_interval1, merged_interval2, shared_interval; + if (intervals1.Count() > 0 && intervals2.Count() > 0) { + merged_interval1 = union_intervals(intervals1); + merged_interval2 = union_intervals(intervals2); + shared_interval = intersect_intervals(merged_interval1, merged_interval2); + } else if (intervals1.Count() > 0) { + shared_interval = union_intervals(intervals1); + } else if (intervals2.Count() > 0) { + shared_interval = union_intervals(intervals2); + } else { + return -1; + } + if (DEBUG_BREP_BOOLEAN) { bu_log("shared_interval: [%g, %g]\n", shared_interval.Min(), shared_interval.Max()); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |