diff --git a/src/blenderbim/blenderbim/bim/module/project/__init__.py b/src/blenderbim/blenderbim/bim/module/project/__init__.py index df38a8c86d..2bd50dd132 100644 --- a/src/blenderbim/blenderbim/bim/module/project/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/project/__init__.py @@ -41,6 +41,7 @@ classes = ( operator.SaveLibraryFile, operator.SelectLibraryFile, operator.ToggleFilterCategories, + operator.ToggleLinkSelectability, operator.ToggleLinkVisibility, operator.UnassignLibraryDeclaration, operator.UnlinkIfc, diff --git a/src/blenderbim/blenderbim/bim/module/project/operator.py b/src/blenderbim/blenderbim/bim/module/project/operator.py index a929cb638e..b510494fd7 100644 --- a/src/blenderbim/blenderbim/bim/module/project/operator.py +++ b/src/blenderbim/blenderbim/bim/module/project/operator.py @@ -880,6 +880,27 @@ class LoadLink(bpy.types.Operator): return {"FINISHED"} +class ToggleLinkSelectability(bpy.types.Operator): + bl_idname = "bim.toggle_link_selectability" + bl_label = "Toggle Link Selectability" + bl_options = {"REGISTER", "UNDO"} + bl_description = "Toggle selectability" + link: bpy.props.StringProperty() + + def execute(self, context): + props = context.scene.BIMProjectProperties + link = props.links.get(self.link) + for collection in self.get_linked_collections(): + collection.hide_select = not collection.hide_select + link.is_selectable = not collection.hide_select + return {"FINISHED"} + + 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 ToggleLinkVisibility(bpy.types.Operator): bl_idname = "bim.toggle_link_visibility" bl_label = "Toggle Link Visibility" diff --git a/src/blenderbim/blenderbim/bim/module/project/prop.py b/src/blenderbim/blenderbim/bim/module/project/prop.py index e65f5c4e48..bbc3c64f00 100644 --- a/src/blenderbim/blenderbim/bim/module/project/prop.py +++ b/src/blenderbim/blenderbim/bim/module/project/prop.py @@ -93,6 +93,7 @@ class FilterCategory(PropertyGroup): class Link(PropertyGroup): name: StringProperty(name="Name") is_loaded: BoolProperty(name="Is Loaded", default=False) + is_selectable: BoolProperty(name="Is Selectable", default=True) is_wireframe: BoolProperty(name="Is Wireframe", default=False) is_hidden: BoolProperty(name="Is Hidden", default=False) diff --git a/src/blenderbim/blenderbim/bim/module/project/ui.py b/src/blenderbim/blenderbim/bim/module/project/ui.py index 788769b159..7558fc3762 100644 --- a/src/blenderbim/blenderbim/bim/module/project/ui.py +++ b/src/blenderbim/blenderbim/bim/module/project/ui.py @@ -350,6 +350,13 @@ class BIM_UL_links(UIList): row = layout.row(align=True) if item.is_loaded: row.label(text=item.name) + op = row.operator( + "bim.toggle_link_selectability", + text="", + icon="RESTRICT_SELECT_OFF" if item.is_selectable else "RESTRICT_SELECT_ON", + emboss=False, + ) + op.link = item.name op = row.operator( "bim.toggle_link_visibility", text="",