From eb70849a30cdc05aa50edb29fa9072cfc72edfc6 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 4 Apr 2023 17:04:19 +1000 Subject: [PATCH] Fix #2898. Explicitly check for changed active material in material UI panels. --- src/blenderbim/blenderbim/bim/module/attribute/data.py | 6 +++++- src/blenderbim/blenderbim/bim/module/attribute/ui.py | 6 ++++++ src/blenderbim/blenderbim/bim/module/pset/data.py | 5 ++++- src/blenderbim/blenderbim/bim/module/pset/ui.py | 5 +++++ src/blenderbim/blenderbim/bim/module/style/data.py | 6 +++++- src/blenderbim/blenderbim/bim/module/style/ui.py | 5 +++++ 6 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/attribute/data.py b/src/blenderbim/blenderbim/bim/module/attribute/data.py index ed0ccf906d..c3f3dc814d 100644 --- a/src/blenderbim/blenderbim/bim/module/attribute/data.py +++ b/src/blenderbim/blenderbim/bim/module/attribute/data.py @@ -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 = [] diff --git a/src/blenderbim/blenderbim/bim/module/attribute/ui.py b/src/blenderbim/blenderbim/bim/module/attribute/ui.py index 47ff4cac76..510b2c537e 100644 --- a/src/blenderbim/blenderbim/bim/module/attribute/ui.py +++ b/src/blenderbim/blenderbim/bim/module/attribute/ui.py @@ -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"]) diff --git a/src/blenderbim/blenderbim/bim/module/pset/data.py b/src/blenderbim/blenderbim/bim/module/pset/data.py index e25123432c..4e763fe276 100644 --- a/src/blenderbim/blenderbim/bim/module/pset/data.py +++ b/src/blenderbim/blenderbim/bim/module/pset/data.py @@ -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 diff --git a/src/blenderbim/blenderbim/bim/module/pset/ui.py b/src/blenderbim/blenderbim/bim/module/pset/ui.py index 51bfd27bbd..3dd0ed821d 100644 --- a/src/blenderbim/blenderbim/bim/module/pset/ui.py +++ b/src/blenderbim/blenderbim/bim/module/pset/ui.py @@ -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) diff --git a/src/blenderbim/blenderbim/bim/module/style/data.py b/src/blenderbim/blenderbim/bim/module/style/data.py index 2b0dfb9e6b..9826b994fa 100644 --- a/src/blenderbim/blenderbim/bim/module/style/data.py +++ b/src/blenderbim/blenderbim/bim/module/style/data.py @@ -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) diff --git a/src/blenderbim/blenderbim/bim/module/style/ui.py b/src/blenderbim/blenderbim/bim/module/style/ui.py index 1cfa6830bf..cefc9ff1f0 100644 --- a/src/blenderbim/blenderbim/bim/module/style/ui.py +++ b/src/blenderbim/blenderbim/bim/module/style/ui.py @@ -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