Fix #2898. Explicitly check for changed active material in material UI panels.

This commit is contained in:
Dion Moult
2023-04-04 17:04:19 +10:00
parent 77ce3c9067
commit eb70849a30
6 changed files with 30 additions and 3 deletions
@@ -59,9 +59,13 @@ class MaterialAttributesData:
@classmethod
def load(cls):
cls.data = {"attributes": cls.attributes()}
cls.data = {"ifc_definition_id": cls.ifc_definition_id(), "attributes": cls.attributes()}
cls.is_loaded = True
@classmethod
def ifc_definition_id(cls):
return bpy.context.active_object.active_material.BIMObjectProperties.ifc_definition_id
@classmethod
def attributes(cls):
results = []
@@ -94,4 +94,10 @@ class BIM_PT_material_attributes(Panel):
def draw(self, context):
if not MaterialAttributesData.is_loaded:
MaterialAttributesData.load()
elif (
context.active_object.active_material.BIMObjectProperties.ifc_definition_id
!= MaterialAttributesData.data["ifc_definition_id"]
):
MaterialAttributesData.load()
draw_ui(context, self.layout, "Material", MaterialAttributesData.data["attributes"])
@@ -96,7 +96,10 @@ class MaterialPsetsData(Data):
@classmethod
def load(cls):
cls.data = {"psets": cls.psetqtos(tool.Ifc.get_entity(bpy.context.active_object.active_material))}
cls.data = {
"ifc_definition_id": bpy.context.active_object.active_material.BIMObjectProperties.ifc_definition_id,
"psets": cls.psetqtos(tool.Ifc.get_entity(bpy.context.active_object.active_material)),
}
cls.is_loaded = True
@@ -268,6 +268,11 @@ class BIM_PT_material_psets(Panel):
def draw(self, context):
if not MaterialPsetsData.is_loaded:
MaterialPsetsData.load()
elif (
context.active_object.active_material.BIMObjectProperties.ifc_definition_id
!= MaterialPsetsData.data["ifc_definition_id"]
):
MaterialPsetsData.load()
props = context.active_object.active_material.PsetProperties
row = self.layout.row(align=True)
@@ -56,9 +56,13 @@ class StyleAttributesData:
@classmethod
def load(cls):
cls.data = {"attributes": cls.get_attributes()}
cls.data = {"ifc_style_id": cls.ifc_style_id(), "attributes": cls.get_attributes()}
cls.is_loaded = True
@classmethod
def ifc_style_id(cls):
return bpy.context.active_object.active_material.BIMMaterialProperties.ifc_style_id
@classmethod
def get_attributes(cls):
style = tool.Ifc.get().by_id(bpy.context.active_object.active_material.BIMMaterialProperties.ifc_style_id)
@@ -115,6 +115,11 @@ class BIM_PT_style_attributes(Panel):
def draw(self, context):
if not StyleAttributesData.is_loaded:
StyleAttributesData.load()
elif (
context.active_object.active_material.BIMMaterialProperties.ifc_style_id
!= StyleAttributesData.data["ifc_style_id"]
):
StyleAttributesData.load()
obj = context.active_object.active_material
mprops = obj.BIMMaterialProperties