You can now manage psets on resources

This commit is contained in:
Dion Moult
2021-08-25 17:24:18 +10:00
parent 8fa1a99864
commit ae42d91c5c
3 changed files with 47 additions and 0 deletions
@@ -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,
)
@@ -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")
@@ -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"