mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-10-02 21:12:07 +00:00
Check boolean result manifoldness for shells individually. Fixes #516.
This commit is contained in:
@@ -235,16 +235,26 @@ namespace {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool is_manifold(const TopoDS_Shape& a) {
|
bool is_manifold(const TopoDS_Shape& a) {
|
||||||
TopTools_IndexedDataMapOfShapeListOfShape map;
|
if (a.ShapeType() == TopAbs_COMPOUND) {
|
||||||
TopExp::MapShapesAndAncestors(a, TopAbs_EDGE, TopAbs_FACE, map);
|
TopoDS_Iterator it(a);
|
||||||
|
for (; it.More(); it.Next()) {
|
||||||
for (int i = 1; i <= map.Extent(); ++i) {
|
if (!is_manifold(it.Value())) {
|
||||||
if (map.FindFromIndex(i).Extent() != 2) {
|
return false;
|
||||||
return false;
|
}
|
||||||
}
|
}
|
||||||
}
|
return true;
|
||||||
|
} else {
|
||||||
|
TopTools_IndexedDataMapOfShapeListOfShape map;
|
||||||
|
TopExp::MapShapesAndAncestors(a, TopAbs_EDGE, TopAbs_FACE, map);
|
||||||
|
|
||||||
return true;
|
for (int i = 1; i <= map.Extent(); ++i) {
|
||||||
|
if (map.FindFromIndex(i).Extent() != 2) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_manifold(const TopTools_ListOfShape& l) {
|
bool is_manifold(const TopTools_ListOfShape& l) {
|
||||||
|
|||||||
Reference in New Issue
Block a user