From b7f23ee7010923a0e02ff0aaa5113015a1edb946 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 18 Jul 2016 14:47:32 +0200 Subject: [PATCH] Implement option to get generic inverses from Python --- src/ifcopenshell-python/ifcopenshell/file.py | 8 ++++++-- src/ifcwrap/IfcParseWrapper.i | 4 ++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/file.py b/src/ifcopenshell-python/ifcopenshell/file.py index 421e8bf34b..b498fdc404 100644 --- a/src/ifcopenshell-python/ifcopenshell/file.py +++ b/src/ifcopenshell-python/ifcopenshell/file.py @@ -49,8 +49,12 @@ class file(object): return entity_instance(self.wrapped_data.add(inst.wrapped_data)) def by_type(self, type): return [entity_instance(e) for e in self.wrapped_data.by_type(type)] - def traverse(self, inst): - return [entity_instance(e) for e in self.wrapped_data.traverse(inst.wrapped_data)] + def traverse(self, inst, max_levels=None): + if max_levels is None: + max_levels = -1 + return [entity_instance(e) for e in self.wrapped_data.traverse(inst.wrapped_data, max_levels)] + def get_inverse(self, inst): + return [entity_instance(e) for e in self.wrapped_data.get_inverse(inst.wrapped_data)] def remove(self, inst): return self.wrapped_data.remove(inst.wrapped_data) def __iter__(self): diff --git a/src/ifcwrap/IfcParseWrapper.i b/src/ifcwrap/IfcParseWrapper.i index 6d0f0d60d9..c75e3574be 100644 --- a/src/ifcwrap/IfcParseWrapper.i +++ b/src/ifcwrap/IfcParseWrapper.i @@ -82,6 +82,10 @@ namespace IfcUtil { IfcEntityList::ptr traverse(IfcParse::IfcLateBoundEntity* e, int max_level=-1) { return $self->traverse(e, max_level); } + IfcEntityList::ptr get_inverse(IfcParse::IfcLateBoundEntity* e) { + return $self->getInverse(e->id(), IfcSchema::Type::UNDEFINED, -1); + } + void write(const std::string& fn) { std::ofstream f(fn.c_str()); f << (*$self);