diff --git a/src/bonsai/bonsai/bim/module/material/operator.py b/src/bonsai/bonsai/bim/module/material/operator.py index d744ea5780..b2ab1cfa06 100644 --- a/src/bonsai/bonsai/bim/module/material/operator.py +++ b/src/bonsai/bonsai/bim/module/material/operator.py @@ -120,9 +120,6 @@ class RenameMaterial(bpy.types.Operator, tool.Ifc.Operator): def _execute(self, context): core.rename_material(tool.Ifc, tool.Material, material=tool.Ifc.get().by_id(self.material), name=self.name) - if screen := context.screen: - for area in screen.areas: - area.tag_redraw() class DisableEditingMaterial(bpy.types.Operator): diff --git a/src/bonsai/bonsai/core/material.py b/src/bonsai/bonsai/core/material.py index 00dbd8e178..96c624de64 100644 --- a/src/bonsai/bonsai/core/material.py +++ b/src/bonsai/bonsai/core/material.py @@ -113,6 +113,7 @@ def rename_material( ifc.run("material.edit_material", material=material, attributes={"Name": name}) if material_tool.is_editing_materials(): material_tool.import_material_definitions(material_tool.get_active_material_type()) + material_tool.refresh() def assign_material( diff --git a/src/bonsai/bonsai/core/tool.py b/src/bonsai/bonsai/core/tool.py index 51120ad088..8a77d36661 100644 --- a/src/bonsai/bonsai/core/tool.py +++ b/src/bonsai/bonsai/core/tool.py @@ -667,6 +667,7 @@ class Material: def is_editing_materials(cls): pass def is_material_used_in_sets(cls, material): pass def load_material_attributes(cls, material): pass + def refresh(cls): pass def replace_material_with_material_profile(cls, element): pass def update_elements_using_material(cls, material): pass diff --git a/src/bonsai/bonsai/tool/material.py b/src/bonsai/bonsai/tool/material.py index 4c55123a9c..300df8d4ce 100644 --- a/src/bonsai/bonsai/tool/material.py +++ b/src/bonsai/bonsai/tool/material.py @@ -146,6 +146,12 @@ class Material(bonsai.core.tool.Material): MaterialsData.data["material_styles_data"] = MaterialsData.material_styles_data() + @classmethod + def refresh(cls) -> None: + from bonsai.bim.module.material.data import refresh as refresh_material_data + + refresh_material_data() + @classmethod def is_editing_materials(cls) -> bool: props = tool.Material.get_material_props() diff --git a/src/bonsai/test/core/test_material.py b/src/bonsai/test/core/test_material.py index ba83e9884d..28fe0ba326 100644 --- a/src/bonsai/test/core/test_material.py +++ b/src/bonsai/test/core/test_material.py @@ -97,6 +97,7 @@ class TestRenameMaterial: def test_renaming_a_material(self, ifc, material): ifc.run("material.edit_material", material="material", attributes={"Name": "name"}).should_be_called() material.is_editing_materials().should_be_called().will_return(False) + material.refresh().should_be_called() subject.rename_material(ifc, material, material="material", name="name") def test_renaming_a_material_and_reloading_imported_materials(self, ifc, material): @@ -104,6 +105,7 @@ class TestRenameMaterial: material.is_editing_materials().should_be_called().will_return(True) material.get_active_material_type().should_be_called().will_return("material_type") material.import_material_definitions("material_type").should_be_called() + material.refresh().should_be_called() subject.rename_material(ifc, material, material="material", name="name") diff --git a/src/bonsai/test/tool/test_material.py b/src/bonsai/test/tool/test_material.py index 870417a254..9cee7a5962 100644 --- a/src/bonsai/test/tool/test_material.py +++ b/src/bonsai/test/tool/test_material.py @@ -139,6 +139,17 @@ class TestImportMaterialDefinitions(NewFile): assert props.materials[0].total_elements == 0 +class TestRefresh(NewFile): + def test_run(self): + from bonsai.bim.module.material.data import MaterialsData, ObjectMaterialData + + MaterialsData.is_loaded = True + ObjectMaterialData.is_loaded = True + subject.refresh() + assert MaterialsData.is_loaded is False + assert ObjectMaterialData.is_loaded is False + + class TestIsEditingMaterials(NewFile): def test_run(self): props = tool.Material.get_material_props()