ios - fix error removing other IfcPresentationStyles

besides IfcSurfaceStyle
This commit is contained in:
Andrej730
2024-09-30 20:58:16 +05:00
parent 7133b01b76
commit b7c390585b
2 changed files with 18 additions and 6 deletions
@@ -42,18 +42,19 @@ def remove_style(file: ifcopenshell.file, style: ifcopenshell.entity_instance) -
usecase = Usecase() usecase = Usecase()
usecase.file = file usecase.file = file
usecase.settings = {"style": style} usecase.settings = {"style": style}
return usecase.execute() return usecase.execute(style)
class Usecase: class Usecase:
file: ifcopenshell.file file: ifcopenshell.file
settings: dict[str, Any] settings: dict[str, Any]
def execute(self) -> None: def execute(self, style: ifcopenshell.entity_instance) -> None:
self.purge_styled_items(self.settings["style"]) self.purge_styled_items(style)
for style in self.settings["style"].Styles or []: if style.is_a("IfcSurfaceStyle"):
ifcopenshell.api.style.remove_surface_style(self.file, style=style) for style_ in style.Styles:
self.file.remove(self.settings["style"]) ifcopenshell.api.style.remove_surface_style(self.file, style=style_)
self.file.remove(style)
def purge_styled_items(self, style: ifcopenshell.entity_instance) -> None: def purge_styled_items(self, style: ifcopenshell.entity_instance) -> None:
for inverse in self.file.get_inverse(style): for inverse in self.file.get_inverse(style):
@@ -35,6 +35,17 @@ class TestRemoveStyle(test.bootstrap.IFC4):
ifcopenshell.api.style.remove_style(self.file, style=style) ifcopenshell.api.style.remove_style(self.file, style=style)
assert len(list(self.file)) == 0 assert len(list(self.file)) == 0
def test_remove_non_surface_styles(self):
STYLE_TYPES = [
"IfcCurveStyle",
"IfcFillAreaStyle",
"IfcTextStyle",
]
for style_type in STYLE_TYPES:
style = self.file.create_entity(style_type)
ifcopenshell.api.style.remove_style(self.file, style=style)
assert len(self.file.by_type("IfcPresentationStyle")) == 0
class TestRemoveStyleIFC2X3(test.bootstrap.IFC2X3, TestRemoveStyle): class TestRemoveStyleIFC2X3(test.bootstrap.IFC2X3, TestRemoveStyle):
pass pass