From 73124dd597135390e69c02e38fbf4bab639da7fb Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 2 Aug 2022 19:34:01 +1000 Subject: [PATCH] Fix failing tests --- .../blenderbim/bim/module/project/operator.py | 33 +++++++++++-------- .../blenderbim/bim/module/project/prop.py | 1 - .../test/bim/feature/project.feature | 12 +++++++ src/blenderbim/test/bim/feature/pset.feature | 2 +- 4 files changed, 33 insertions(+), 15 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/project/operator.py b/src/blenderbim/blenderbim/bim/module/project/operator.py index 58fcb3db30..454c876365 100644 --- a/src/blenderbim/blenderbim/bim/module/project/operator.py +++ b/src/blenderbim/blenderbim/bim/module/project/operator.py @@ -672,8 +672,9 @@ class LinkIfc(bpy.types.Operator): use_relative_path: bpy.props.BoolProperty(name="Use Relative Path", default=False) def execute(self, context): - for file in self.files: - filepath = os.path.join(self.directory, file.name) + files = [self.filepath] if self.filepath else [f.name for f in self.files] + for filename in files: + filepath = os.path.join(self.directory, filename) new = context.scene.BIMProjectProperties.links.add() if self.use_relative_path: filepath = os.path.relpath(filepath, bpy.path.abspath("//")) @@ -744,7 +745,6 @@ class LoadLink(bpy.types.Operator): continue bpy.data.scenes[0].collection.children.link(child) link = context.scene.BIMProjectProperties.links.get(filepath) - link.collection = child link.is_loaded = True return {"FINISHED"} @@ -767,23 +767,25 @@ class ToggleLinkVisibility(bpy.types.Operator): return {"FINISHED"} def toggle_wireframe(self, link): - objs = filter(lambda obj: "IfcOpeningElement" not in obj.name, link.collection.all_objects) - for i, obj in enumerate(objs): - if i == 0: - if obj.display_type == "WIRE": - display_type = "TEXTURED" - else: - display_type = "WIRE" - obj.display_type = display_type - link.is_wireframe = display_type == "WIRE" + for collection in self.get_linked_collections(): + objs = filter(lambda obj: "IfcOpeningElement" not in obj.name, collection.all_objects) + for i, obj in enumerate(objs): + if i == 0: + if obj.display_type == "WIRE": + display_type = "TEXTURED" + else: + display_type = "WIRE" + obj.display_type = display_type + link.is_wireframe = display_type == "WIRE" def toggle_visibility(self, link): + linked_collections = self.get_linked_collections() queue = [bpy.context.view_layer.layer_collection] layer_collection = None while queue: layer = queue.pop() - if layer.collection == link.collection: + if layer.collection in linked_collections: layer_collection = layer break queue.extend(list(layer.children)) @@ -792,6 +794,11 @@ class ToggleLinkVisibility(bpy.types.Operator): layer_collection.exclude = not layer_collection.exclude link.is_hidden = layer_collection.exclude + def get_linked_collections(self): + return [ + c for c in bpy.data.collections if "IfcProject" in c.name and c.library and c.library.filepath == self.link + ] + class ExportIFC(bpy.types.Operator): bl_idname = "export_ifc.bim" diff --git a/src/blenderbim/blenderbim/bim/module/project/prop.py b/src/blenderbim/blenderbim/bim/module/project/prop.py index 3fe5e5077f..9ef5dda676 100644 --- a/src/blenderbim/blenderbim/bim/module/project/prop.py +++ b/src/blenderbim/blenderbim/bim/module/project/prop.py @@ -92,7 +92,6 @@ class FilterCategory(PropertyGroup): class Link(PropertyGroup): name: StringProperty(name="Name") - collection: PointerProperty(name="Collection", type=bpy.types.Collection) is_loaded: BoolProperty(name="Is Loaded", default=False) is_wireframe: BoolProperty(name="Is Wireframe", default=False) is_hidden: BoolProperty(name="Is Hidden", default=False) diff --git a/src/blenderbim/test/bim/feature/project.feature b/src/blenderbim/test/bim/feature/project.feature index 1fbddce925..c5c05672af 100644 --- a/src/blenderbim/test/bim/feature/project.feature +++ b/src/blenderbim/test/bim/feature/project.feature @@ -308,6 +308,18 @@ Scenario: Link IFC And the object "IfcBuildingStorey/Ground Floor" exists And the object "IfcBuildingStorey/Level 1" exists +Scenario: Toggle link visibility - wireframe mode + Given an empty IFC project + And I press "bim.link_ifc(filepath='{cwd}/test/files/basic.blend')" + When I press "bim.toggle_link_visibility(link='{cwd}/test/files/basic.blend', mode='WIREFRAME')" + Then nothing happens + +Scenario: Toggle link visibility - visible mode + Given an empty IFC project + And I press "bim.link_ifc(filepath='{cwd}/test/files/basic.blend')" + When I press "bim.toggle_link_visibility(link='{cwd}/test/files/basic.blend', mode='VISIBLE')" + Then nothing happens + Scenario: Unload link Given an empty Blender session And I press "bim.link_ifc(filepath='{cwd}/test/files/basic.blend')" diff --git a/src/blenderbim/test/bim/feature/pset.feature b/src/blenderbim/test/bim/feature/pset.feature index 6849b87a1a..48bdc9ac88 100644 --- a/src/blenderbim/test/bim/feature/pset.feature +++ b/src/blenderbim/test/bim/feature/pset.feature @@ -85,7 +85,7 @@ Scenario: Copy property to selected - copy property And I press "bim.assign_class" And the object "IfcWall/Cube" is selected And additionally the object "IfcWall/Cube.001" is selected - And I set "active_object.PsetProperties.pset_name" to "Pset_BuildingElementCommon" + And I set "active_object.PsetProperties.pset_name" to "Pset_WallCommon" And I press "bim.add_pset(obj='IfcWall/Cube.001', obj_type='Object')" And the variable "pset" is "{ifc}.by_type('IfcPropertySet')[-1].id()" And I press "bim.enable_pset_editing(obj='IfcWall/Cube.001', obj_type='Object', pset_id={pset})"