diff --git a/src/bonsai/bonsai/bim/import_ifc.py b/src/bonsai/bonsai/bim/import_ifc.py
index 5fde08e638..35c4b12dfa 100644
--- a/src/bonsai/bonsai/bim/import_ifc.py
+++ b/src/bonsai/bonsai/bim/import_ifc.py
@@ -40,29 +40,33 @@ from typing import Dict, Union, Optional, Any
class MaterialCreator:
+ mesh: bpy.types.Mesh
+ obj: bpy.types.Object
+
def __init__(self, ifc_import_settings: IfcImportSettings, ifc_importer: IfcImporter):
- self.mesh: bpy.types.Mesh = None
- self.obj: bpy.types.Object = None
self.styles: Dict[int, bpy.types.Material] = {}
self.parsed_meshes: set[str] = set()
self.ifc_import_settings = ifc_import_settings
self.ifc_importer = ifc_importer
- def create(self, element: ifcopenshell.entity_instance, obj: bpy.types.Object, mesh: OBJECT_DATA_TYPE) -> None:
- self.mesh = mesh
- # as ifcopenshell triangulates the mesh, we need to merge it to quads again
- self.obj = obj
- if (hasattr(element, "Representation") and not element.Representation) or (
- hasattr(element, "RepresentationMaps") and not element.RepresentationMaps
+ def create(
+ self, element: ifcopenshell.entity_instance, obj: bpy.types.Object, mesh: Union[OBJECT_DATA_TYPE, None]
+ ) -> None:
+ if ((rep := getattr(element, "Representation", ...) is not ...) and not rep) or (
+ (rep := getattr(element, "RepresentationMaps", ...) is not ...) and not rep
):
return
- if not self.mesh or self.mesh.name in self.parsed_meshes:
+
+ if not mesh or mesh.name in self.parsed_meshes:
return
# We don't support curve styles yet.
if isinstance(mesh, bpy.types.Curve):
return
+ self.mesh = mesh
+ self.obj = obj
+
# mesh["ios_materials"] can contain:
# - ifc style id if style assigned to the representation items directly
# or through material with a style;
diff --git a/src/ifcopenshell-python/ifcopenshell/api/material/copy_material.py b/src/ifcopenshell-python/ifcopenshell/api/material/copy_material.py
index b98490ef07..d250ac742b 100644
--- a/src/ifcopenshell-python/ifcopenshell/api/material/copy_material.py
+++ b/src/ifcopenshell-python/ifcopenshell/api/material/copy_material.py
@@ -33,9 +33,7 @@ def copy_material(file: ifcopenshell.file, material: ifcopenshell.entity_instanc
style is reused.
:param material: The IfcMaterialDefinition to copy
- :type material: ifcopenshell.entity_instance
:return: The new copy of the material
- :rtype: ifcopenshell.entity_instance
Example:
@@ -68,9 +66,13 @@ def copy_material(file: ifcopenshell.file, material: ifcopenshell.entity_instanc
return _copy_material_with_inverses(file, material)
elif material.is_a("IfcMaterialList"):
return _copy_material_with_inverses(file, material)
+ else:
+ raise Exception(f"Unexpected material type: '{material.is_a()}' ({material}).")
-def _copy_material_with_inverses(file, material):
+def _copy_material_with_inverses(
+ file: ifcopenshell.file, material: ifcopenshell.entity_instance
+) -> ifcopenshell.entity_instance:
new = ifcopenshell.util.element.copy(file, material)
for inverse in file.get_inverse(material):
if inverse.is_a("IfcMaterialProperties"):
diff --git a/src/ifcopenshell-python/ifcopenshell/api/style/assign_representation_styles.py b/src/ifcopenshell-python/ifcopenshell/api/style/assign_representation_styles.py
index b9b43ee8d0..e1c92995be 100644
--- a/src/ifcopenshell-python/ifcopenshell/api/style/assign_representation_styles.py
+++ b/src/ifcopenshell-python/ifcopenshell/api/style/assign_representation_styles.py
@@ -16,6 +16,7 @@
# You should have received a copy of the GNU Lesser General Public License
# along with IfcOpenShell. If not, see .
import ifcopenshell
+from typing import Any
def assign_representation_styles(
@@ -112,6 +113,10 @@ def assign_representation_styles(
class Usecase:
+ file: ifcopenshell.file
+ settings: dict[str, Any]
+ results: list[ifcopenshell.entity_instance]
+
def execute(self):
if not self.settings["styles"]:
return []
diff --git a/src/ifcopenshell-python/ifcopenshell/util/selector.py b/src/ifcopenshell-python/ifcopenshell/util/selector.py
index 824b7f1864..8497e99a07 100644
--- a/src/ifcopenshell-python/ifcopenshell/util/selector.py
+++ b/src/ifcopenshell-python/ifcopenshell/util/selector.py
@@ -21,7 +21,6 @@ import lark
import numpy as np
import ifcopenshell.api.pset
import ifcopenshell.api.geometry
-import ifcopenshell.ifcopenshell_wrapper as W
import ifcopenshell.util
import ifcopenshell.util.attribute
import ifcopenshell.util.fm
diff --git a/src/ifcopenshell-python/test/api/pset/test_unshare_pset.py b/src/ifcopenshell-python/test/api/pset/test_unshare_pset.py
index b13bd5196e..846d2d5a54 100644
--- a/src/ifcopenshell-python/test/api/pset/test_unshare_pset.py
+++ b/src/ifcopenshell-python/test/api/pset/test_unshare_pset.py
@@ -16,7 +16,6 @@
# You should have received a copy of the GNU Lesser General Public License
# along with IfcOpenShell. If not, see .
-import operator
import test.bootstrap
import ifcopenshell.api.pset
import ifcopenshell.api.root