Merge pull request #3405 from brunoperdigao/pset_select_same_value

Bug fix in #3392
This commit is contained in:
Dion Moult
2023-07-08 20:05:22 +10:00
committed by GitHub
@@ -320,41 +320,52 @@ 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"):
obj = tool.Ifc.get_object(element)
try:
obj = tool.Ifc.get_object(element)
psets = ifcopenshell.util.element.get_psets(element)
except:
continue
if self.pset_name.endswith("Common"):
if self.all_pset_common & self.pset_name.endswith("Common"):
for key in psets.keys():
if key.endswith("Common"):
pset = psets[key]
try:
pset = psets[key]
if str(pset[self.prop_name]) == self.value:
obj.select_set(True)
except:
continue
else:
pset = psets[self.pset_name]
try:
pset[self.prop_name]
except:
continue
if str(pset[self.prop_name]) == self.value:
obj.select_set(True)
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"