Revision: 43413
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43413
Author: nazgul
Date: 2012-01-16 07:34:15 +0000 (Mon, 16 Jan 2012)
Log Message:
-----------
Carve booleans: Respect classification against both closed and open meshes
Modified Paths:
--------------
branches/carve_booleans/extern/carve/lib/csg_collector.cpp
Modified: branches/carve_booleans/extern/carve/lib/csg_collector.cpp
===================================================================
--- branches/carve_booleans/extern/carve/lib/csg_collector.cpp 2012-01-16
07:32:38 UTC (rev 43412)
+++ branches/carve_booleans/extern/carve/lib/csg_collector.cpp 2012-01-16
07:34:15 UTC (rev 43413)
@@ -119,22 +119,33 @@
}
FaceClass fc = FACE_UNCLASSIFIED;
+
+ unsigned fc_closed_bits = 0;
+ unsigned fc_open_bits = 0;
unsigned fc_bits = 0;
for (std::list<ClassificationInfo>::const_iterator i =
grp->classification.begin(), e = grp->classification.end(); i != e; ++i) {
if ((*i).intersected_mesh == NULL) {
// classifier only returns global info
- fc_bits = class_to_class_bit((*i).classification);
+ fc_closed_bits = class_to_class_bit((*i).classification);
break;
}
+ if ((*i).classification == FACE_UNCLASSIFIED) continue;
if ((*i).intersectedMeshIsClosed()) {
- if ((*i).classification == FACE_UNCLASSIFIED) continue;
- fc_bits |= class_to_class_bit((*i).classification);
+ fc_closed_bits |= class_to_class_bit((*i).classification);
+ } else {
+ fc_open_bits |= class_to_class_bit((*i).classification);
}
}
+ if (fc_closed_bits) {
+ fc_bits = fc_closed_bits;
+ } else {
+ fc_bits = fc_open_bits;
+ }
+
fc = class_bit_to_class(fc_bits);
// handle the complex cases where a group is classified differently
with respect to two or more closed manifolds.
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs