diff --git a/src/blenderbim/blenderbim/bim/module/pset/__init__.py b/src/blenderbim/blenderbim/bim/module/pset/__init__.py index ace6e1253f..9ce18f5016 100644 --- a/src/blenderbim/blenderbim/bim/module/pset/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/pset/__init__.py @@ -40,6 +40,7 @@ classes = ( ui.BIM_PT_material_psets, ui.BIM_PT_task_qtos, ui.BIM_PT_resource_qtos, + ui.BIM_PT_resource_psets, ui.BIM_PT_profile_psets, ui.BIM_PT_work_schedule_psets, ) diff --git a/src/blenderbim/blenderbim/bim/module/pset/prop.py b/src/blenderbim/blenderbim/bim/module/pset/prop.py index ee2c1c4f4a..03959f9969 100644 --- a/src/blenderbim/blenderbim/bim/module/pset/prop.py +++ b/src/blenderbim/blenderbim/bim/module/pset/prop.py @@ -80,6 +80,17 @@ def getTaskQtoNames(self, context): return qtonames[ifc_class] +def getResourcePsetNames(self, context): + global psetnames + rprops = context.scene.BIMResourceProperties + rtprops = context.scene.BIMResourceTreeProperties + ifc_class = IfcStore.get_file().by_id(rtprops.resources[rprops.active_resource_index].ifc_definition_id).is_a() + if ifc_class not in psetnames: + psets = blenderbim.bim.schema.ifc.psetqto.get_applicable(ifc_class, pset_only=True) + psetnames[ifc_class] = [(p.Name, p.Name, "") for p in psets] + return psetnames[ifc_class] + + def getResourceQtoNames(self, context): global qtonames rprops = context.scene.BIMResourceProperties @@ -147,6 +158,7 @@ class ResourcePsetProperties(PropertyGroup): active_pset_id: IntProperty(name="Active Pset ID") active_pset_name: StringProperty(name="Pset Name") properties: CollectionProperty(name="Properties", type=Attribute) + pset_name: EnumProperty(items=getResourcePsetNames, name="Pset Name") qto_name: EnumProperty(items=getResourceQtoNames, name="Qto Name") diff --git a/src/blenderbim/blenderbim/bim/module/pset/ui.py b/src/blenderbim/blenderbim/bim/module/pset/ui.py index 75d087812a..f5613cf4c0 100644 --- a/src/blenderbim/blenderbim/bim/module/pset/ui.py +++ b/src/blenderbim/blenderbim/bim/module/pset/ui.py @@ -304,6 +304,40 @@ class BIM_PT_resource_qtos(Panel): draw_psetqto_ui(context, qto_id, qto, props, self.layout, "Resource") +class BIM_PT_resource_psets(Panel): + bl_label = "IFC Resource Property Sets" + bl_idname = "BIM_PT_resource_psets" + bl_options = {"DEFAULT_CLOSED"} + bl_space_type = "PROPERTIES" + bl_region_type = "WINDOW" + bl_context = "scene" + bl_parent_id = "BIM_PT_resources" + + @classmethod + def poll(cls, context): + props = context.scene.BIMResourceProperties + total_resources = len(context.scene.BIMResourceTreeProperties.resources) + if total_resources > 0 and props.active_resource_index < total_resources: + return True + return False + + def draw(self, context): + props = context.scene.ResourcePsetProperties + rprops = context.scene.BIMResourceProperties + rtprops = context.scene.BIMResourceTreeProperties + ifc_definition_id = rtprops.resources[rprops.active_resource_index].ifc_definition_id + if ifc_definition_id not in Data.products: + Data.load(IfcStore.get_file(), ifc_definition_id) + row = self.layout.row(align=True) + row.prop(props, "pset_name", text="") + op = row.operator("bim.add_pset", icon="ADD", text="") + op.obj_type = "Resource" + + psets = [(pset_id, Data.psets[pset_id]) for pset_id in Data.products[ifc_definition_id]["psets"]] + for pset_id, pset in sorted(psets, key=lambda v: v[1]["Name"]): + draw_psetqto_ui(context, pset_id, pset, props, self.layout, "Resource") + + class BIM_PT_profile_psets(Panel): bl_label = "IFC Profile Property Sets" bl_idname = "BIM_PT_profile_psets"