mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-14 11:24:19 +00:00
Fix #5949. Remove material set psets panel in favour of merging into material manager psets panel.
Previously, to edit a single IfcMaterial pset, you'd do so in the material manager. In contrast, to edit a IfcMaterialSet pset, you'd do so only when assigned to an object. Not only is it bad to edit psets in two locations, it also means you can't edit psets until you've first assigned the material set to an object which is bad. Now it's less code, and material / material set psets are in the same spot. There still more consolidation work to do, to allow editing of sets in the material manager and to figure out how to show item psets, but it's a step in the right direction.
This commit is contained in:
@@ -47,7 +47,6 @@ classes = (
|
||||
ui.BIM_PT_object_psets,
|
||||
ui.BIM_PT_object_qtos,
|
||||
ui.BIM_PT_material_psets,
|
||||
ui.BIM_PT_material_set_psets,
|
||||
ui.BIM_PT_material_set_item_psets,
|
||||
ui.BIM_PT_task_qtos,
|
||||
ui.BIM_PT_resource_qtos,
|
||||
@@ -66,7 +65,6 @@ classes = (
|
||||
def register():
|
||||
bpy.types.Object.PsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||
bpy.types.Scene.MaterialPsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||
bpy.types.Object.MaterialSetPsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||
bpy.types.Object.MaterialSetItemPsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||
bpy.types.Scene.TaskPsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||
bpy.types.Scene.ResourcePsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||
@@ -82,7 +80,6 @@ def register():
|
||||
def unregister():
|
||||
del bpy.types.Object.PsetProperties
|
||||
del bpy.types.Scene.MaterialPsetProperties
|
||||
del bpy.types.Object.MaterialSetPsetProperties
|
||||
del bpy.types.Object.MaterialSetItemPsetProperties
|
||||
del bpy.types.Scene.TaskPsetProperties
|
||||
del bpy.types.Scene.ResourcePsetProperties
|
||||
|
||||
@@ -33,7 +33,6 @@ def refresh():
|
||||
ObjectPsetsData.is_loaded = False
|
||||
ObjectQtosData.is_loaded = False
|
||||
MaterialPsetsData.is_loaded = False
|
||||
MaterialSetPsetsData.is_loaded = False
|
||||
MaterialSetItemPsetsData.is_loaded = False
|
||||
TaskQtosData.is_loaded = False
|
||||
ResourceQtosData.is_loaded = False
|
||||
@@ -185,7 +184,7 @@ class MaterialPsetsData(Data):
|
||||
if material.ifc_definition_id:
|
||||
material = tool.Ifc.get().by_id(material.ifc_definition_id)
|
||||
category = getattr(material, "Category", None) or None
|
||||
psets = bonsai.bim.schema.ifc.psetqto.get_applicable("IfcMaterial", category, pset_only=True)
|
||||
psets = bonsai.bim.schema.ifc.psetqto.get_applicable(props.material_type, category, pset_only=True)
|
||||
psetnames = cls.format_pset_enum(psets)
|
||||
assigned_names = ifcopenshell.util.element.get_psets(
|
||||
material, psets_only=True, should_inherit=False
|
||||
@@ -194,22 +193,6 @@ class MaterialPsetsData(Data):
|
||||
return []
|
||||
|
||||
|
||||
class MaterialSetPsetsData(Data):
|
||||
data = {}
|
||||
is_loaded = False
|
||||
|
||||
@classmethod
|
||||
def load(cls):
|
||||
psets = {}
|
||||
element = tool.Ifc.get_entity(bpy.context.active_object)
|
||||
if element:
|
||||
material = ifcopenshell.util.element.get_material(element, should_skip_usage=True)
|
||||
if material and "Set" in material.is_a():
|
||||
psets = cls.psetqtos(material)
|
||||
cls.data = {"psets": psets}
|
||||
cls.is_loaded = True
|
||||
|
||||
|
||||
class MaterialSetItemPsetsData(Data):
|
||||
data = {}
|
||||
is_loaded = False
|
||||
|
||||
@@ -25,7 +25,6 @@ from bonsai.bim.module.pset.data import (
|
||||
ObjectPsetsData,
|
||||
ObjectQtosData,
|
||||
MaterialPsetsData,
|
||||
MaterialSetPsetsData,
|
||||
MaterialSetItemPsetsData,
|
||||
TaskQtosData,
|
||||
ResourceQtosData,
|
||||
@@ -88,7 +87,7 @@ def draw_enumerated_property(
|
||||
|
||||
|
||||
def get_active_pset_obj_name(context: bpy.types.Context, obj_type: tool.Ifc.OBJECT_TYPE) -> str:
|
||||
if obj_type in ("Object", "MaterialSet", "MaterialSetItem"):
|
||||
if obj_type in ("Object", "MaterialSetItem"):
|
||||
return context.active_object.name
|
||||
return ""
|
||||
|
||||
@@ -430,46 +429,6 @@ class BIM_PT_material_psets(Panel):
|
||||
draw_psetqto_ui(context, pset["id"], pset, props, self.layout, "Material")
|
||||
|
||||
|
||||
class BIM_PT_material_set_psets(Panel):
|
||||
bl_label = "Material Set Property Sets"
|
||||
bl_idname = "BIM_PT_material_set_psets"
|
||||
bl_options = {"DEFAULT_CLOSED"}
|
||||
bl_space_type = "PROPERTIES"
|
||||
bl_region_type = "WINDOW"
|
||||
bl_context = "object"
|
||||
bl_parent_id = "BIM_PT_object_material"
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
if not context.active_object:
|
||||
return False
|
||||
if not tool.Ifc.get() or tool.Ifc.get().schema == "IFC2X3":
|
||||
return False # We don't support material psets in IFC2X3 because they suck
|
||||
if not tool.Ifc.get_entity(context.active_object):
|
||||
return False
|
||||
if not ObjectMaterialData.is_loaded:
|
||||
ObjectMaterialData.load()
|
||||
ifc_class = ObjectMaterialData.data["material_class"]
|
||||
return bool(ifc_class and "Set" in ifc_class)
|
||||
|
||||
def draw(self, context):
|
||||
if not MaterialSetPsetsData.is_loaded:
|
||||
MaterialSetPsetsData.load()
|
||||
|
||||
props = context.active_object.MaterialSetPsetProperties
|
||||
row = self.layout.row(align=True)
|
||||
prop_with_search(row, props, "pset_name", text="")
|
||||
op = row.operator("bim.add_pset", icon="ADD", text="")
|
||||
op.obj = context.active_object.name
|
||||
op.obj_type = "MaterialSet"
|
||||
|
||||
if not props.active_pset_id and props.active_pset_name and props.active_pset_type == "PSET":
|
||||
draw_psetqto_ui(context, 0, {}, props, self.layout, "MaterialSet")
|
||||
|
||||
for pset in MaterialSetPsetsData.data["psets"]:
|
||||
draw_psetqto_ui(context, pset["id"], pset, props, self.layout, "MaterialSet")
|
||||
|
||||
|
||||
class BIM_PT_material_set_item_psets(Panel):
|
||||
bl_label = "Material Set Item Property Sets"
|
||||
bl_idname = "BIM_PT_material_set_item_psets"
|
||||
|
||||
@@ -185,10 +185,6 @@ class Blender(bonsai.core.tool.Blender):
|
||||
return context.scene.BIMMaterialProperties.materials[
|
||||
context.scene.BIMMaterialProperties.active_material_index
|
||||
].ifc_definition_id
|
||||
elif obj_type == "MaterialSet":
|
||||
return ifcopenshell.util.element.get_material(
|
||||
tool.Ifc.get_entity(bpy.data.objects.get(obj)), should_skip_usage=True
|
||||
).id()
|
||||
elif obj_type == "MaterialSetItem":
|
||||
return bpy.data.objects.get(obj).BIMObjectMaterialProperties.active_material_set_item_id
|
||||
elif obj_type == "Task":
|
||||
|
||||
@@ -34,7 +34,6 @@ class Ifc(bonsai.core.tool.Ifc):
|
||||
OBJECT_TYPE = Literal[
|
||||
"Object",
|
||||
"Material",
|
||||
"MaterialSet",
|
||||
"MaterialSetItem",
|
||||
"Task",
|
||||
"Cost",
|
||||
|
||||
@@ -45,8 +45,6 @@ class Pset(bonsai.core.tool.Pset):
|
||||
return bpy.data.objects.get(obj).PsetProperties
|
||||
elif obj_type == "Material":
|
||||
return bpy.context.scene.MaterialPsetProperties
|
||||
elif obj_type == "MaterialSet":
|
||||
return bpy.data.objects.get(obj).MaterialSetPsetProperties
|
||||
elif obj_type == "MaterialSetItem":
|
||||
return bpy.data.objects.get(obj).MaterialSetItemPsetProperties
|
||||
elif obj_type == "Task":
|
||||
|
||||
Reference in New Issue
Block a user