allow to call select/color by attribute by providing arguments

instead of always checking scene.BIMSearchProperties. This allows to add different setups of selections to quick favorites
This commit is contained in:
Andrej730
2023-07-10 17:16:49 +05:00
parent e451844e13
commit 37f3ecc8c5
2 changed files with 54 additions and 39 deletions
@@ -143,20 +143,18 @@ class SelectAttribute(Operator):
bl_label = "Select Attribute"
bl_options = {"REGISTER", "UNDO"}
@classmethod
def poll(cls, context):
props = context.scene.BIMSearchProperties
attribute_name = props.search_attribute_name.strip()
if attribute_name:
return True
cls.poll_message_set("Set Attribute Name for search.")
return False
attribute_name: bpy.props.StringProperty(default="")
attribute_value: bpy.props.StringProperty(default="")
def execute(self, context):
attribute_name = self.attribute_name or context.scene.BIMSearchProperties.search_attribute_name
attribute_value = self.attribute_value
if not attribute_name:
self.report({"ERROR"}, "Set Attribute Name for search.")
return {"CANCELLED"}
self.file = IfcStore.get_file()
props = context.scene.BIMSearchProperties
attribute_value = props.search_attribute_value
attribute_name = props.search_attribute_name
n_objects = 0
for obj in context.visible_objects:
if not obj.BIMObjectProperties.ifc_definition_id:
@@ -181,25 +179,24 @@ class SelectPset(Operator):
bl_label = "Select Pset"
bl_options = {"REGISTER", "UNDO"}
@classmethod
def poll(cls, context):
props = context.scene.BIMSearchProperties
pset_name = props.search_pset_name.strip()
prop_name = props.search_prop_name.strip()
if not pset_name:
cls.poll_message_set("Set PSet name for search.")
return False
if not prop_name:
cls.poll_message_set("Set Property name for search.")
return False
return True
pset_name: bpy.props.StringProperty(default="")
prop_name: bpy.props.StringProperty(default="")
pset_value: bpy.props.StringProperty(default="")
def execute(self, context):
search_pset_name = self.pset_name or context.scene.BIMSearchProperties.search_pset_name
search_prop_name = self.prop_name or context.scene.BIMSearchProperties.search_prop_name
pattern = self.pset_value
if not search_pset_name:
self.report({"ERROR"}, "Set PSet name for search.")
return {"CANCELLED"}
if not search_prop_name:
self.report({"ERROR"}, "Set Property name for search.")
return {"CANCELLED"}
self.file = IfcStore.get_file()
props = context.scene.BIMSearchProperties
search_pset_name = props.search_pset_name
search_prop_name = props.search_prop_name
pattern = props.search_pset_value
n_objects = 0
for obj in context.visible_objects:
if not obj.BIMObjectProperties.ifc_definition_id:
@@ -231,9 +228,7 @@ class ColourByAttribute(Operator):
bl_label = "Colour by Attribute"
bl_options = {"REGISTER", "UNDO"}
@classmethod
def poll(cls, context):
return SelectAttribute.poll(context)
attribute_name: bpy.props.StringProperty(default="")
def execute(self, context):
IfcStore.begin_transaction(self)
@@ -244,10 +239,15 @@ class ColourByAttribute(Operator):
return result
def _execute(self, context):
attribute_name = self.attribute_name or context.scene.BIMSearchProperties.search_attribute_name
if not attribute_name:
self.report({"ERROR"}, "Set Attribute Name for search.")
return {"CANCELLED"}
self.file = IfcStore.get_file()
colours = cycle(colour_list)
values = {}
attribute_name = context.scene.BIMSearchProperties.search_attribute_name
for obj in context.visible_objects:
if not obj.BIMObjectProperties.ifc_definition_id:
continue
@@ -286,9 +286,8 @@ class ColourByPset(Operator):
bl_label = "Colour by Pset"
bl_options = {"REGISTER", "UNDO"}
@classmethod
def poll(cls, context):
return SelectPset.poll(context)
pset_name: bpy.props.StringProperty(default="")
prop_name: bpy.props.StringProperty(default="")
def execute(self, context):
IfcStore.begin_transaction(self)
@@ -299,11 +298,19 @@ class ColourByPset(Operator):
return result
def _execute(self, context):
search_pset_name = self.pset_name or context.scene.BIMSearchProperties.search_pset_name
search_prop_name = self.prop_name or context.scene.BIMSearchProperties.search_prop_name
if not search_pset_name:
self.report({"ERROR"}, "Set PSet name for search.")
return {"CANCELLED"}
if not search_prop_name:
self.report({"ERROR"}, "Set Property name for search.")
return {"CANCELLED"}
self.file = IfcStore.get_file()
colours = cycle(colour_list)
values = {}
search_pset_name = context.scene.BIMSearchProperties.search_pset_name
search_prop_name = context.scene.BIMSearchProperties.search_prop_name
for obj in context.visible_objects:
if not obj.BIMObjectProperties.ifc_definition_id:
continue
@@ -53,15 +53,23 @@ class BIM_PT_search(Panel):
row = self.layout.row(align=True)
row.prop(props, "search_attribute_name", text="", icon="PROPERTIES")
row.prop(props, "search_attribute_value", text="")
row.operator("bim.select_attribute", text="", icon="VIEWZOOM")
row.operator("bim.colour_by_attribute", text="", icon="BRUSH_DATA")
op = row.operator("bim.select_attribute", text="", icon="VIEWZOOM")
op.attribute_name = props.search_attribute_name
op.attribute_value = props.search_attribute_value
op = row.operator("bim.colour_by_attribute", text="", icon="BRUSH_DATA")
op.attribute_name = props.search_attribute_name
row = self.layout.row(align=True)
row.prop(props, "search_pset_name", text="", icon="COPY_ID")
row.prop(props, "search_prop_name", text="")
row.prop(props, "search_pset_value", text="")
row.operator("bim.select_pset", text="", icon="VIEWZOOM")
row.operator("bim.colour_by_pset", text="", icon="BRUSH_DATA")
op = row.operator("bim.select_pset", text="", icon="VIEWZOOM")
op.pset_name = props.search_pset_name
op.prop_name = props.search_prop_name
op.pset_value = props.search_pset_value
op = row.operator("bim.colour_by_pset", text="", icon="BRUSH_DATA")
op.pset_name = props.search_pset_name
op.prop_name = props.search_prop_name
row = self.layout.row(align=True)
row.operator("bim.activate_ifc_class_filter", icon="FILTER")