mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-13 02:47:48 +00:00
Purge select similar prop operator in favour of dedicated select similar panel
This commit is contained in:
@@ -30,7 +30,6 @@ classes = (
|
||||
operator.CalculateQuantity,
|
||||
operator.RemovePset,
|
||||
operator.TogglePsetExpansion,
|
||||
operator.SelectSimilarPsetValue,
|
||||
operator.BIM_OT_add_property_to_edit,
|
||||
operator.BIM_OT_remove_property_to_edit,
|
||||
operator.BIM_OT_clear_list,
|
||||
|
||||
@@ -320,52 +320,6 @@ class EditPset(bpy.types.Operator, Operator):
|
||||
tool.Blender.update_viewport()
|
||||
|
||||
|
||||
class SelectSimilarPsetValue(bpy.types.Operator):
|
||||
"""
|
||||
Selects objects with the same property value.
|
||||
"""
|
||||
bl_idname = "bim.select_similar_pset_value"
|
||||
bl_label = "Select Similar Pset Value"
|
||||
bl_options = {"REGISTER", "UNDO"}
|
||||
bl_description = "Selects objects with the same property value.\n\n" + "ALT+CLICK to select from all pset common"
|
||||
pset_name: bpy.props.StringProperty()
|
||||
prop_name: bpy.props.StringProperty()
|
||||
value: bpy.props.StringProperty()
|
||||
all_pset_common: bpy.props.BoolProperty(name = "All Pset Common", default=False, options={"SKIP_SAVE"})
|
||||
|
||||
def invoke(self, context, event):
|
||||
# make sure to use SKIP_SAVE on property, otherwise it might get stuck
|
||||
if event.type == "LEFTMOUSE" and event.alt:
|
||||
self.all_pset_common = True
|
||||
return self.execute(context)
|
||||
|
||||
def execute(self, context):
|
||||
for element in tool.Ifc.get().by_type("IfcElement"):
|
||||
try:
|
||||
obj = tool.Ifc.get_object(element)
|
||||
psets = ifcopenshell.util.element.get_psets(element)
|
||||
except:
|
||||
continue
|
||||
|
||||
if self.all_pset_common & self.pset_name.endswith("Common"):
|
||||
for key in psets.keys():
|
||||
if key.endswith("Common"):
|
||||
try:
|
||||
pset = psets[key]
|
||||
if str(pset[self.prop_name]) == self.value:
|
||||
obj.select_set(True)
|
||||
except:
|
||||
continue
|
||||
else:
|
||||
try:
|
||||
pset = psets[self.pset_name]
|
||||
if str(pset[self.prop_name]) == self.value:
|
||||
obj.select_set(True)
|
||||
except:
|
||||
continue
|
||||
return {"FINISHED"}
|
||||
|
||||
|
||||
class RemovePset(bpy.types.Operator, Operator):
|
||||
bl_idname = "bim.remove_pset"
|
||||
bl_label = "Remove Pset"
|
||||
|
||||
@@ -135,10 +135,6 @@ def draw_psetqto_ui(context, pset_id, pset, props, layout, obj_type):
|
||||
row.scale_y = 0.8
|
||||
row.label(text=prop["Name"])
|
||||
row.label(text=str(prop["NominalValue"]))
|
||||
op = row.operator("bim.select_similar_pset_value", text="", icon="RESTRICT_SELECT_OFF")
|
||||
op.pset_name = pset["Name"]
|
||||
op.prop_name = prop["Name"]
|
||||
op.value = str(prop["NominalValue"])
|
||||
if not has_props_displayed:
|
||||
row = box.row()
|
||||
row.scale_y = 0.8
|
||||
|
||||
@@ -101,5 +101,8 @@ class SelectSimilarData:
|
||||
keys = [a.name() for a in element.wrapped_data.declaration().as_entity().all_attributes()]
|
||||
psets = ifcopenshell.util.element.get_psets(element, psets_only=True)
|
||||
for pset, properties in psets.items():
|
||||
keys.extend([f"{pset}.{name}" for name in properties.keys() if name != "id"])
|
||||
if pset.endswith("Common"):
|
||||
keys.extend([f'r".*Common"."{name}"' for name in properties.keys() if name != "id"])
|
||||
else:
|
||||
keys.extend([f"{pset}.{name}" for name in properties.keys() if name != "id"])
|
||||
return [(k, k, "") for k in keys]
|
||||
|
||||
Reference in New Issue
Block a user