From 0bae861b6a305ff8830ff2dc9f368231ce243c6b Mon Sep 17 00:00:00 2001 From: Chun <36185113+chunchk@users.noreply.github.com> Date: Fri, 29 Oct 2021 16:29:43 +0800 Subject: [PATCH] IfcType Filter suggestions for better User Experience (#1840) * 1.Added Selecting/Deselecting All function 2.Suggested an idea for UI improvment 3.Fixed an UX bug * Improve the user experience of IfcType Filter --- .../blenderbim/bim/module/search/__init__.py | 1 + .../blenderbim/bim/module/search/operator.py | 19 ++++++++++++++++++- .../blenderbim/bim/module/search/prop.py | 2 +- .../blenderbim/bim/module/search/ui.py | 4 ++-- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/search/__init__.py b/src/blenderbim/blenderbim/bim/module/search/__init__.py index ec56174d69..bf0a71d7a6 100644 --- a/src/blenderbim/blenderbim/bim/module/search/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/search/__init__.py @@ -24,6 +24,7 @@ classes = ( operator.ColourByAttribute, operator.ColourByClass, operator.ColourByPset, + operator.IfcTypeFilterSelectingAction, #Add selecting/deselecting all operator operator.ResetObjectColours, operator.SelectAttribute, operator.SelectGlobalId, diff --git a/src/blenderbim/blenderbim/bim/module/search/operator.py b/src/blenderbim/blenderbim/bim/module/search/operator.py index 8be0800cc1..bc2af3c8d1 100644 --- a/src/blenderbim/blenderbim/bim/module/search/operator.py +++ b/src/blenderbim/blenderbim/bim/module/search/operator.py @@ -322,6 +322,19 @@ class ResetObjectColours(bpy.types.Operator): obj.color = (1, 1, 1, 1) return {"FINISHED"} +class IfcTypeFilterSelectingAction(bpy.types.Operator): + "Click to select/deselect all ifctype" + bl_idname = "bim.ifctype_filter_selecting_action" + bl_label = "IfcType Filter Selecting Action" + selecting_action: bpy.props.EnumProperty(items=( ("SELECT",'Select',"") , ("DESELECT","Deselect","") )) + def execute(self, context): + if self.selecting_action == "SELECT": + self.selecting_actionbool = True + else: + self.selecting_actionbool = False + for ifcelement in bpy.context.scene.BIMSearchProperties.filter_classes: + ifcelement.is_selected = self.selecting_actionbool + return {'FINISHED'} class ActivateIfcTypeFilter(bpy.types.Operator): "It helps you to filter your selection by IFC class" @@ -339,7 +352,7 @@ class ActivateIfcTypeFilter(bpy.types.Operator): ifc_types.setdefault(element.is_a(), 0) ifc_types[element.is_a()] += 1 - for name, total in ifc_types.items(): + for name, total in dict(sorted(ifc_types.items())).items(): new = context.scene.BIMSearchProperties.filter_classes.add() new.name = name new.total = total @@ -358,4 +371,8 @@ class ActivateIfcTypeFilter(bpy.types.Operator): "filter_classes", context.scene.BIMSearchProperties, "filter_classes_index", + rows = 20 if len(bpy.context.scene.BIMSearchProperties.filter_classes) > 20 else len(bpy.context.scene.BIMSearchProperties.filter_classes), ) + row = self.layout.row() + row.operator(IfcTypeFilterSelectingAction.bl_idname, text = "Select All").selecting_action = "SELECT" + row.operator(IfcTypeFilterSelectingAction.bl_idname, text = "Deselect All").selecting_action = "DESELECT" \ No newline at end of file diff --git a/src/blenderbim/blenderbim/bim/module/search/prop.py b/src/blenderbim/blenderbim/bim/module/search/prop.py index 5efb411845..a92ea19333 100644 --- a/src/blenderbim/blenderbim/bim/module/search/prop.py +++ b/src/blenderbim/blenderbim/bim/module/search/prop.py @@ -50,7 +50,7 @@ def update_is_selected(self, context): class BIMFilterClasses(PropertyGroup): name: StringProperty(name="Name") is_selected: BoolProperty(name="Is Selected", default=True, update=update_is_selected) - total: IntProperty(name="Total") + total: IntProperty(name="Total") unselected_objects: CollectionProperty(type=ObjProperty, name="Unfiltered Objects") diff --git a/src/blenderbim/blenderbim/bim/module/search/ui.py b/src/blenderbim/blenderbim/bim/module/search/ui.py index dab581d945..e8539e025f 100644 --- a/src/blenderbim/blenderbim/bim/module/search/ui.py +++ b/src/blenderbim/blenderbim/bim/module/search/ui.py @@ -78,8 +78,8 @@ class BIM_UL_ifctype_filter(bpy.types.UIList): split = layout split.use_property_split = True split.use_property_decorate = False - split.prop(item, "is_selected", text="", icon="ADD" if item.is_selected else "REMOVE") + split.prop(item, "is_selected", text="", icon="CHECKBOX_HLT" if item.is_selected else "CHECKBOX_DEHLT") split.prop(item, "name", text="", emboss=False, slider=True) split = split.column() split.scale_x = 0.5 - split.prop(item, "total", text="", emboss=False) + split.label(text=str(item.total)) \ No newline at end of file