PartDesign::Transformed: Transformed shapes that touch are now rejected as overlapping in the interest of boolean operation stability

This commit is contained in:
Jan Rheinländer 2013-12-19 19:43:23 +01:00 committed by Stefan Tröger
parent 7839099fea
commit 1772eb70bc

View File

@ -284,8 +284,10 @@ App::DocumentObjectExecReturn *Transformed::execute(void)
// If there is only one transformed feature, we allow an overlap (though it might seem
// illogical to the user why we allow overlapping shapes in this case!)
if (v_transformedShapes.size() > 1)
if (Part::checkIntersection(shape, v_transformedShapes.front(), false, false)) {
if (Part::checkIntersection(shape, v_transformedShapes.front(), false, true)) {
// For single transformations, if one overlaps, all overlap, as long as we have uniform increments
// Shapes that touch are also marked as overlapping, since compounding them and then doing a boolean
// operation with the compound might be unstable because of coincident faces.
for (trsf_it_vec::const_iterator v = v_transformations.begin(); v != v_transformations.end(); v++)
overlapping_trsfms[*o].insert(*v);
v_transformedShapes.clear();
@ -308,9 +310,9 @@ App::DocumentObjectExecReturn *Transformed::execute(void)
rejected_iterators.insert(s1);
overlapping_trsfms[*o].insert(*t1);
}
// Check intersection with other transformations
// Check intersection with other transformations (including touching)
for (; s2 != v_transformedShapes.end(); ++s2, ++t2)
if (Part::checkIntersection(*s1, *s2, false, false)) {
if (Part::checkIntersection(*s1, *s2, false, true)) {
rejected_iterators.insert(s1);
rejected_iterators.insert(s2);
overlapping_trsfms[*o].insert(*t1);