mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-19 22:50:21 +00:00
You can now add / remove psets in bulk. See #1060.
This commit is contained in:
@@ -852,16 +852,30 @@ class AddPset(bpy.types.Operator):
|
|||||||
bl_label = "Add Pset"
|
bl_label = "Add Pset"
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
pset_name = bpy.context.active_object.BIMObjectProperties.pset_name
|
self.applicable_psets_cache = {}
|
||||||
if pset_name not in ifcopenshell.util.pset.psets:
|
name = bpy.context.active_object.BIMObjectProperties.pset_name
|
||||||
|
if name not in ifcopenshell.util.pset.psets:
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
pset = bpy.context.active_object.BIMObjectProperties.psets.add()
|
for obj in bpy.context.selected_objects:
|
||||||
pset.name = pset_name
|
if "/" not in obj.name or obj.BIMObjectProperties.psets.find(name) != -1:
|
||||||
for prop_name in ifcopenshell.util.pset.psets[pset_name]["HasPropertyTemplates"].keys():
|
continue
|
||||||
prop = pset.properties.add()
|
applicable_psets = self.get_applicable_psets(obj.name.split("/")[0])
|
||||||
prop.name = prop_name
|
if name not in applicable_psets:
|
||||||
|
continue
|
||||||
|
pset = obj.BIMObjectProperties.psets.add()
|
||||||
|
pset.name = name
|
||||||
|
for prop_name in ifcopenshell.util.pset.psets[name]["HasPropertyTemplates"].keys():
|
||||||
|
prop = pset.properties.add()
|
||||||
|
prop.name = prop_name
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
def get_applicable_psets(self, ifc_class):
|
||||||
|
if ifc_class not in self.applicable_psets_cache:
|
||||||
|
self.applicable_psets_cache[ifc_class] = ifcopenshell.util.pset.get_applicable_psetqtos(
|
||||||
|
bpy.context.scene.BIMProperties.export_schema, ifc_class, is_pset=True
|
||||||
|
)
|
||||||
|
return self.applicable_psets_cache[ifc_class]
|
||||||
|
|
||||||
|
|
||||||
class RemovePset(bpy.types.Operator):
|
class RemovePset(bpy.types.Operator):
|
||||||
bl_idname = "bim.remove_pset"
|
bl_idname = "bim.remove_pset"
|
||||||
@@ -869,7 +883,13 @@ class RemovePset(bpy.types.Operator):
|
|||||||
pset_index: bpy.props.IntProperty()
|
pset_index: bpy.props.IntProperty()
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
bpy.context.active_object.BIMObjectProperties.psets.remove(self.pset_index)
|
name = bpy.context.active_object.BIMObjectProperties.psets[self.pset_index].name
|
||||||
|
for obj in bpy.context.selected_objects:
|
||||||
|
if "/" not in obj.name:
|
||||||
|
continue
|
||||||
|
index = obj.BIMObjectProperties.psets.find(name)
|
||||||
|
if index != -1:
|
||||||
|
obj.BIMObjectProperties.psets.remove(index)
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|
||||||
@@ -2748,12 +2768,12 @@ class CopyPropertyToSelection(bpy.types.Operator):
|
|||||||
prop.string_value = self.prop_value
|
prop.string_value = self.prop_value
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
def get_applicable_psets(self, element_class):
|
def get_applicable_psets(self, ifc_class):
|
||||||
if element_class not in self.applicable_psets_cache:
|
if ifc_class not in self.applicable_psets_cache:
|
||||||
self.applicable_psets_cache[element_class] = ifcopenshell.util.pset.get_applicable_psetqtos(
|
self.applicable_psets_cache[ifc_class] = ifcopenshell.util.pset.get_applicable_psetqtos(
|
||||||
bpy.context.scene.BIMProperties.export_schema, element_class, is_pset=True
|
bpy.context.scene.BIMProperties.export_schema, ifc_class, is_pset=True
|
||||||
)
|
)
|
||||||
return self.applicable_psets_cache[element_class]
|
return self.applicable_psets_cache[ifc_class]
|
||||||
|
|
||||||
|
|
||||||
class BIM_OT_ChangeClassificationLevel(bpy.types.Operator):
|
class BIM_OT_ChangeClassificationLevel(bpy.types.Operator):
|
||||||
|
|||||||
Reference in New Issue
Block a user