From 8384235e103e8b6e28dfd90537dcd74fca348624 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 10 May 2021 11:47:16 +0200 Subject: [PATCH] Tree API extensions in wrapper --- src/ifcopenshell-python/ifcopenshell/geom/main.py | 5 +++++ src/ifcwrap/IfcGeomWrapper.i | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/geom/main.py b/src/ifcopenshell-python/ifcopenshell/geom/main.py index 56bfed239a..e82c0a7e4a 100644 --- a/src/ifcopenshell-python/ifcopenshell/geom/main.py +++ b/src/ifcopenshell-python/ifcopenshell/geom/main.py @@ -149,9 +149,14 @@ class tree(ifcopenshell_wrapper.tree): args = [self, unwrap(value)] if isinstance(value, entity_instance): args.append(kwargs.get("completely_within", False)) + if "extend" in kwargs: + args.append(kwargs["extend"]) elif has_occ: if isinstance(value, TopoDS.TopoDS_Shape): args[1] = utils.serialize_shape(value) + args.append(kwargs.get("completely_within", False)) + if "extend" in kwargs: + args.append(kwargs["extend"]) return [entity_instance(e) for e in ifcopenshell_wrapper.tree.select(*args)] def select_box(self, value, **kwargs): diff --git a/src/ifcwrap/IfcGeomWrapper.i b/src/ifcwrap/IfcGeomWrapper.i index f41d0c394d..73564da30c 100644 --- a/src/ifcwrap/IfcGeomWrapper.i +++ b/src/ifcwrap/IfcGeomWrapper.i @@ -77,11 +77,11 @@ return IfcGeom_tree_vector_to_list(ps); } - IfcEntityList::ptr select(IfcUtil::IfcBaseClass* e, bool completely_within = false) const { + IfcEntityList::ptr select(IfcUtil::IfcBaseClass* e, bool completely_within = false, double extend = 0.0) const { if (!e->declaration().is("IfcProduct")) { throw IfcParse::IfcException("Instance should be an IfcProduct"); } - std::vector ps = $self->select((IfcUtil::IfcBaseEntity*)e, completely_within); + std::vector ps = $self->select((IfcUtil::IfcBaseEntity*)e, completely_within, extend); return IfcGeom_tree_vector_to_list(ps); } @@ -90,13 +90,13 @@ return IfcGeom_tree_vector_to_list(ps); } - IfcEntityList::ptr select(const std::string& shape_serialization) const { + IfcEntityList::ptr select(const std::string& shape_serialization, bool completely_within = false, double extend = -1.e-5) const { std::stringstream stream(shape_serialization); BRepTools_ShapeSet shapes; shapes.Read(stream); const TopoDS_Shape& shp = shapes.Shape(shapes.NbShapes()); - std::vector ps = $self->select(shp); + std::vector ps = $self->select(shp, completely_within, extend); return IfcGeom_tree_vector_to_list(ps); }