From 4b00b268c07a525780d5f1f671d343e8024a2be7 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 1 Aug 2024 17:51:28 +0500 Subject: [PATCH] fix core geometry trests after c4ae957 and 698c648 --- src/blenderbim/blenderbim/core/geometry.py | 3 +-- src/blenderbim/blenderbim/core/tool.py | 3 +++ src/blenderbim/blenderbim/tool/geometry.py | 6 +++++ src/blenderbim/test/core/test_geometry.py | 26 ++++++++++++++++++++++ 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/blenderbim/core/geometry.py b/src/blenderbim/blenderbim/core/geometry.py index 9c46822dee..9861d5b1a2 100644 --- a/src/blenderbim/blenderbim/core/geometry.py +++ b/src/blenderbim/blenderbim/core/geometry.py @@ -126,8 +126,7 @@ def switch_representation( if not current_obj_data and geometry.is_text_literal(representation): return - use_immediate_repr = apply_openings and bool(getattr(entity, "HasOpenings", None)) - use_immediate_repr = use_immediate_repr or geometry.has_material_style_override(entity) + use_immediate_repr = geometry.should_use_immediate_representation(entity, apply_openings) if use_immediate_repr: # if it has openings make sure to switch to element's mapped representation representation = geometry.unresolve_type_representation(representation, entity) diff --git a/src/blenderbim/blenderbim/core/tool.py b/src/blenderbim/blenderbim/core/tool.py index 8f3df31bb0..f5d3b55ea7 100644 --- a/src/blenderbim/blenderbim/core/tool.py +++ b/src/blenderbim/blenderbim/core/tool.py @@ -423,6 +423,9 @@ class Geometry: def unresolve_type_representation(cls, representation, element): pass def delete_opening_object_placement(cls, opening): pass def switch_from_representation(cls, obj, representation): pass + def get_blender_offset_type(cls, obj): pass + def has_material_style_override(cls, obj): pass + def should_use_immediate_representation(cls, entity, apply_openings): pass @interface diff --git a/src/blenderbim/blenderbim/tool/geometry.py b/src/blenderbim/blenderbim/tool/geometry.py index 31603a50f4..2d2c9b34e4 100644 --- a/src/blenderbim/blenderbim/tool/geometry.py +++ b/src/blenderbim/blenderbim/tool/geometry.py @@ -1228,3 +1228,9 @@ class Geometry(blenderbim.core.tool.Geometry): return material_style = tool.Material.get_style(materials[0]) return material_style + + @classmethod + def should_use_immediate_representation(cls, element: ifcopenshell.entity_instance, apply_openings: bool) -> bool: + use_immediate_repr = apply_openings and bool(getattr(element, "HasOpenings", None)) + use_immediate_repr = use_immediate_repr or cls.has_material_style_override(element) + return use_immediate_repr diff --git a/src/blenderbim/test/core/test_geometry.py b/src/blenderbim/test/core/test_geometry.py index 197d2f823a..c5c0b3b443 100644 --- a/src/blenderbim/test/core/test_geometry.py +++ b/src/blenderbim/test/core/test_geometry.py @@ -26,6 +26,7 @@ class TestEditObjectPlacement: ifc.get_entity("obj").should_be_called().will_return("element") geometry.clear_cache("element").should_be_called() geometry.clear_scale("obj").should_be_called() + geometry.get_blender_offset_type("obj").should_be_called() surveyor.get_absolute_matrix("obj").should_be_called().will_return("matrix") ifc.run("geometry.edit_object_placement", product="element", matrix="matrix").should_be_called() geometry.record_object_position("obj").should_be_called() @@ -193,6 +194,7 @@ class TestSwitchRepresentation: def test_switching_to_a_freshly_loaded_representation(self, ifc, geometry): geometry.is_edited("obj").should_be_called().will_return(False) geometry.get_object_data("obj").should_be_called().will_return("current_obj_data") + geometry.should_use_immediate_representation("element", True).should_be_called().will_return(False) geometry.resolve_mapped_representation("mapped_rep").should_be_called().will_return("representation") geometry.get_representation_data("representation").should_be_called().will_return(None) geometry.import_representation("obj", "representation", apply_openings=True).should_be_called().will_return( @@ -220,6 +222,7 @@ class TestSwitchRepresentation: def test_switching_to_a_reloaded_representation_and_deleting_the_existing_data(self, ifc, geometry): geometry.is_edited("obj").should_be_called().will_return(False) geometry.get_object_data("obj").should_be_called().will_return("current_obj_data") + geometry.should_use_immediate_representation("element", True).should_be_called().will_return(False) geometry.resolve_mapped_representation("mapped_rep").should_be_called().will_return("representation") geometry.get_representation_data("representation").should_be_called().will_return("existing_data") geometry.import_representation("obj", "representation", apply_openings=True).should_be_called().will_return( @@ -248,13 +251,35 @@ class TestSwitchRepresentation: def test_switching_to_an_existing_representation(self, ifc, geometry): geometry.is_edited("obj").should_be_called().will_return(False) + ifc.get_entity("obj").should_be_called().will_return("element") geometry.get_object_data("obj").should_be_called().will_return("current_obj_data") + geometry.should_use_immediate_representation("element", True).should_be_called().will_return(False) geometry.resolve_mapped_representation("mapped_rep").should_be_called().will_return("representation") geometry.get_representation_data("representation").should_be_called().will_return("data") geometry.change_object_data("obj", "data", is_global=True).should_be_called() geometry.record_object_materials("obj").should_be_called() geometry.clear_modifiers("obj").should_be_called() + geometry.clear_cache("element").should_be_called() + subject.switch_representation( + ifc, + geometry, + obj="obj", + representation="mapped_rep", + should_reload=False, + is_global=True, + should_sync_changes_first=True, + ) + + def test_switching_to_an_existing_representation_reuse_representation(self, ifc, geometry): + geometry.is_edited("obj").should_be_called().will_return(False) ifc.get_entity("obj").should_be_called().will_return("element") + geometry.get_object_data("obj").should_be_called().will_return("current_obj_data") + geometry.should_use_immediate_representation("element", True).should_be_called().will_return(True) + geometry.unresolve_type_representation("mapped_rep", "element").should_be_called().will_return("representation") + geometry.get_representation_data("representation").should_be_called().will_return("data") + geometry.change_object_data("obj", "data", is_global=False).should_be_called() + geometry.record_object_materials("obj").should_be_called() + geometry.clear_modifiers("obj").should_be_called() geometry.clear_cache("element").should_be_called() subject.switch_representation( ifc, @@ -273,6 +298,7 @@ class TestSwitchRepresentation: geometry.run_geometry_update_representation(obj="obj").should_be_called() geometry.does_representation_id_exist("representation_id").should_be_called().will_return(True) geometry.get_object_data("obj").should_be_called().will_return("current_obj_data") + geometry.should_use_immediate_representation("element", True).should_be_called().will_return(False) geometry.resolve_mapped_representation("mapped_rep").should_be_called().will_return("representation") geometry.get_representation_data("representation").should_be_called().will_return("data") geometry.change_object_data("obj", "data", is_global=False).should_be_called()