From 7a5ec24d8dae1cf47abc862f4e5065efeafc979b Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 20 Feb 2020 17:31:38 +1100 Subject: [PATCH] Add ability to search with regex for pset values --- src/ifcblenderexport/blenderbim/__init__.py | 1 + src/ifcblenderexport/blenderbim/operator.py | 35 ++++++++++++++++++++- src/ifcblenderexport/blenderbim/prop.py | 2 ++ src/ifcblenderexport/blenderbim/ui.py | 6 ++++ 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/ifcblenderexport/blenderbim/__init__.py b/src/ifcblenderexport/blenderbim/__init__.py index 34c40ed119..5a018c3a27 100644 --- a/src/ifcblenderexport/blenderbim/__init__.py +++ b/src/ifcblenderexport/blenderbim/__init__.py @@ -76,6 +76,7 @@ if bpy is not None: operator.QuickProjectSetup, operator.SelectGlobalId, operator.SelectAttribute, + operator.SelectPset, operator.CreateAggregate, operator.EditAggregate, operator.SaveAggregate, diff --git a/src/ifcblenderexport/blenderbim/operator.py b/src/ifcblenderexport/blenderbim/operator.py index ef64207ca9..11ef247baf 100644 --- a/src/ifcblenderexport/blenderbim/operator.py +++ b/src/ifcblenderexport/blenderbim/operator.py @@ -110,12 +110,12 @@ class SelectAttribute(bpy.types.Operator): def execute(self, context): import re + search_value = bpy.context.scene.BIMProperties.search_attribute_value for object in bpy.context.visible_objects: index = object.BIMObjectProperties.attributes.find(bpy.context.scene.BIMProperties.search_attribute_name) if index == -1: continue value = object.BIMObjectProperties.attributes[index].string_value - search_value = bpy.context.scene.BIMProperties.search_attribute_value if bpy.context.scene.BIMProperties.search_regex \ and bpy.context.scene.BIMProperties.search_ignorecase \ and re.search(search_value, value, flags=re.IGNORECASE): @@ -130,6 +130,39 @@ class SelectAttribute(bpy.types.Operator): object.select_set(True) return {'FINISHED'} + +class SelectPset(bpy.types.Operator): + bl_idname = 'bim.select_pset' + bl_label = 'Select Pset' + + def execute(self, context): + import re + search_pset_name = bpy.context.scene.BIMProperties.search_pset_path.split('.')[0] + search_prop_name = bpy.context.scene.BIMProperties.search_pset_path.split('.')[1] + search_value = bpy.context.scene.BIMProperties.search_pset_value + for object in bpy.context.visible_objects: + pset_index = object.BIMObjectProperties.override_psets.find(search_pset_name) + if pset_index == -1: + continue + prop_index = object.BIMObjectProperties.override_psets[pset_index].properties.find(search_prop_name) + if prop_index == -1: + continue + value = object.BIMObjectProperties.override_psets[pset_index].properties[prop_index].string_value + if bpy.context.scene.BIMProperties.search_regex \ + and bpy.context.scene.BIMProperties.search_ignorecase \ + and re.search(search_value, value, flags=re.IGNORECASE): + object.select_set(True) + elif bpy.context.scene.BIMProperties.search_regex \ + and re.search(search_value, value): + object.select_set(True) + elif bpy.context.scene.BIMProperties.search_ignorecase \ + and value.lower() == search_value.lower(): + object.select_set(True) + elif value == search_value: + object.select_set(True) + return {'FINISHED'} + + class AssignClass(bpy.types.Operator): bl_idname = 'bim.assign_class' bl_label = 'Assign IFC Class' diff --git a/src/ifcblenderexport/blenderbim/prop.py b/src/ifcblenderexport/blenderbim/prop.py index 19f988813f..c05a981604 100644 --- a/src/ifcblenderexport/blenderbim/prop.py +++ b/src/ifcblenderexport/blenderbim/prop.py @@ -393,6 +393,8 @@ class BIMProperties(PropertyGroup): global_id: StringProperty(name="GlobalId") search_attribute_name: StringProperty(name="Search Attribute Name") search_attribute_value: StringProperty(name="Search Attribute Value") + search_pset_path: StringProperty(name="Search Pset Path") + search_pset_value: StringProperty(name="Search Pset Value") features_dir: StringProperty(default='', name="Features Directory", update=refreshFeaturesFiles) features_file: EnumProperty(items=getFeaturesFiles, name="Features File", update=refreshScenarios) scenario: EnumProperty(items=getScenarios, name="Scenario") diff --git a/src/ifcblenderexport/blenderbim/ui.py b/src/ifcblenderexport/blenderbim/ui.py index 7852dd13e3..be6eed92fe 100644 --- a/src/ifcblenderexport/blenderbim/ui.py +++ b/src/ifcblenderexport/blenderbim/ui.py @@ -495,6 +495,12 @@ class BIM_PT_search(Panel): row.prop(props, 'search_attribute_value', text='') row.operator('bim.select_attribute', text='', icon='VIEWZOOM') + layout.label(text="Pset:") + row = layout.row(align=True) + row.prop(props, 'search_pset_path', text='') + row.prop(props, 'search_pset_value', text='') + row.operator('bim.select_pset', text='', icon='VIEWZOOM') + class BIM_PT_qa(Panel): bl_label = "BIMTester Quality Auditing"