Material total now shows the total of the select material class, not all material classes

This is more meaningful. Often the presence of sets will inflate the number artificially.
This commit is contained in:
Dion Moult
2024-05-25 14:11:41 +10:00
parent 7a44f9e8a7
commit 2f071bd809
3 changed files with 13 additions and 23 deletions
@@ -36,31 +36,17 @@ class MaterialsData:
@classmethod @classmethod
def load(cls): def load(cls):
cls.data = {
"total_materials": cls.total_materials(),
"material_types": cls.material_types(),
"profiles": cls.profiles(),
"styles": cls.styles(),
"contexts": cls.contexts(),
"active_styles": cls.active_styles(),
}
cls.is_loaded = True cls.is_loaded = True
cls.data["material_types"] = cls.material_types()
cls.data["total_materials"] = cls.total_materials()
cls.data["profiles"] = cls.profiles()
cls.data["styles"] = cls.styles()
cls.data["contexts"] = cls.contexts()
cls.data["active_styles"] = cls.active_styles()
@classmethod @classmethod
def total_materials(cls): def total_materials(cls):
if tool.Ifc.get_schema() == "IFC2X3": return len(tool.Ifc.get().by_type(bpy.context.scene.BIMMaterialProperties.material_type))
return (
len(tool.Ifc.get().by_type("IfcMaterial"))
+ len(tool.Ifc.get().by_type("IfcMaterialLayerSet"))
+ len(tool.Ifc.get().by_type("IfcMaterialList"))
)
return (
len(tool.Ifc.get().by_type("IfcMaterial"))
+ len(tool.Ifc.get().by_type("IfcMaterialConstituentSet"))
+ len(tool.Ifc.get().by_type("IfcMaterialLayerSet"))
+ len(tool.Ifc.get().by_type("IfcMaterialProfileSet"))
+ len(tool.Ifc.get().by_type("IfcMaterialList"))
)
@classmethod @classmethod
def material_types(cls): def material_types(cls):
@@ -97,6 +97,10 @@ def get_material_types(self, context):
return MaterialsData.data["material_types"] return MaterialsData.data["material_types"]
def update_material_type(self, context):
MaterialsData.data["total_materials"] = MaterialsData.total_materials()
def get_profiles(self, context): def get_profiles(self, context):
if not MaterialsData.is_loaded: if not MaterialsData.is_loaded:
MaterialsData.load() MaterialsData.load()
@@ -126,7 +130,7 @@ class Material(PropertyGroup):
class BIMMaterialProperties(PropertyGroup): class BIMMaterialProperties(PropertyGroup):
is_editing: BoolProperty(name="Is Editing", default=False) is_editing: BoolProperty(name="Is Editing", default=False)
material_type: EnumProperty(items=get_material_types, name="Material Type") material_type: EnumProperty(items=get_material_types, update=update_material_type, name="Material Type")
materials: CollectionProperty(name="Materials", type=Material) materials: CollectionProperty(name="Materials", type=Material)
active_material_index: IntProperty(name="Active Material Index") active_material_index: IntProperty(name="Active Material Index")
profiles: EnumProperty(items=get_profiles, name="Profiles") profiles: EnumProperty(items=get_profiles, name="Profiles")
@@ -45,7 +45,7 @@ class BIM_PT_materials(Panel):
self.props = context.scene.BIMMaterialProperties self.props = context.scene.BIMMaterialProperties
row = self.layout.row(align=True) row = self.layout.row(align=True)
row.label(text="{} Materials".format(MaterialsData.data["total_materials"]), icon="NODE_MATERIAL") row.label(text=f"{MaterialsData.data['total_materials']} Materials", icon="NODE_MATERIAL")
if self.props.is_editing: if self.props.is_editing:
row.operator("bim.disable_editing_materials", text="", icon="CANCEL") row.operator("bim.disable_editing_materials", text="", icon="CANCEL")
else: else: