From 133b420a54936b597a8b58962b9e10fbabcf53e0 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Sun, 21 Apr 2024 13:35:18 +0200 Subject: [PATCH] Preliminary changes to blenderbim for v0.8 #4565 --- src/blenderbim/blenderbim/bim/ifc.py | 2 +- src/blenderbim/blenderbim/bim/import_ifc.py | 40 +++++++------------ .../bim/module/boundary/operator.py | 4 +- .../blenderbim/bim/module/project/operator.py | 8 ++-- src/blenderbim/blenderbim/tool/drawing.py | 2 +- 5 files changed, 23 insertions(+), 33 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/ifc.py b/src/blenderbim/blenderbim/bim/ifc.py index 93014e6cac..fcf9be603c 100644 --- a/src/blenderbim/blenderbim/bim/ifc.py +++ b/src/blenderbim/blenderbim/bim/ifc.py @@ -148,7 +148,7 @@ class IfcStore: bpy.context.scene.BIMProjectProperties.export_schema ) elif IfcStore.schema is None: - IfcStore.schema = ifcopenshell.ifcopenshell_wrapper.schema_by_name(IfcStore.file.schema) + IfcStore.schema = ifcopenshell.ifcopenshell_wrapper.schema_by_name(IfcStore.file.schema_identifier) return IfcStore.schema @staticmethod diff --git a/src/blenderbim/blenderbim/bim/import_ifc.py b/src/blenderbim/blenderbim/bim/import_ifc.py index 02173e2681..a547af752e 100644 --- a/src/blenderbim/blenderbim/bim/import_ifc.py +++ b/src/blenderbim/blenderbim/bim/import_ifc.py @@ -391,20 +391,20 @@ class IfcImporter: for context in self.contexts: settings = ifcopenshell.geom.settings() - settings.set_deflection_tolerance(self.ifc_import_settings.deflection_tolerance) - settings.set_angular_tolerance(self.ifc_import_settings.angular_tolerance) - settings.set(settings.STRICT_TOLERANCE, True) - settings.set(settings.INCLUDE_CURVES, True) - settings.set_context_ids([context.id()]) + settings.set('mesher-linear-deflection', self.ifc_import_settings.deflection_tolerance) + settings.set('mesher-angular-deflection', self.ifc_import_settings.angular_tolerance) + # settings.set(settings.STRICT_TOLERANCE, True) + settings.set('dimensionality', ifcopenshell.ifcopenshell_wrapper.CURVES_SURFACES_AND_SOLIDS) + settings.set('context-ids', [context.id()]) self.context_settings.append(settings) settings = ifcopenshell.geom.settings() - settings.set_deflection_tolerance(self.ifc_import_settings.deflection_tolerance) - settings.set_angular_tolerance(self.ifc_import_settings.angular_tolerance) - settings.set(settings.STRICT_TOLERANCE, True) - settings.set(settings.INCLUDE_CURVES, True) - settings.set(settings.DISABLE_OPENING_SUBTRACTIONS, True) - settings.set_context_ids([context.id()]) + settings.set('mesher-linear-deflection', self.ifc_import_settings.deflection_tolerance) + settings.set('mesher-angular-deflection', self.ifc_import_settings.angular_tolerance) + # settings.set(settings.STRICT_TOLERANCE, True) + settings.set('dimensionality', ifcopenshell.ifcopenshell_wrapper.CURVES_SURFACES_AND_SOLIDS) + settings.set('disable-opening-subtractions', True) + settings.set('context-ids', [context.id()]) self.gross_context_settings.append(settings) def process_element_filter(self): @@ -693,10 +693,7 @@ class IfcImporter: shape = self.create_generic_shape(element) if not shape: continue - m = shape.transformation.matrix.data - mat = np.array( - ([m[0], m[3], m[6], m[9]], [m[1], m[4], m[7], m[10]], [m[2], m[5], m[8], m[11]], [0, 0, 0, 1]) - ) + mat = np.array(shape.transformation.matrix).reshape((4,4)) point = np.array( ( shape.geometry.verts[0] / self.unit_scale, @@ -1153,11 +1150,7 @@ class IfcImporter: self.link_element(element, obj) if shape: - m = shape.transformation.matrix.data - # We use numpy here because Blender mathutils.Matrix is not accurate enough - mat = np.array( - ([m[0], m[3], m[6], m[9]], [m[1], m[4], m[7], m[10]], [m[2], m[5], m[8], m[11]], [0, 0, 0, 1]) - ) + mat = np.array(shape.transformation.matrix).reshape((4,4)) self.set_matrix_world(obj, self.apply_blender_offset_to_matrix_world(obj, mat)) self.material_creator.create(element, obj, mesh) elif mesh: @@ -1893,10 +1886,7 @@ class IfcImporter: and geometry.verts and self.is_point_far_away((geometry.verts[0], geometry.verts[1], geometry.verts[2])) ): - m = shape.transformation.matrix.data - mat = np.array( - ([m[0], m[3], m[6], m[9]], [m[1], m[4], m[7], m[10]], [m[2], m[5], m[8], m[11]], [0, 0, 0, 1]) - ) + mat = np.array(shape.transformation.matrix).reshape((4,4)) offset_point = np.linalg.inv(mat) @ np.array( ( float(props.blender_eastings), @@ -1950,7 +1940,7 @@ class IfcImporter: edges = [[e[i], e[i + 1]] for i in range(0, len(e), 2)] mesh.from_pydata(vertices, edges, []) - mesh["ios_materials"] = [int(m.name.split("-")[2]) for m in geometry.materials] + mesh["ios_materials"] = [m.instance_id() for m in geometry.materials] mesh["ios_material_ids"] = geometry.material_ids return mesh except: diff --git a/src/blenderbim/blenderbim/bim/module/boundary/operator.py b/src/blenderbim/blenderbim/bim/module/boundary/operator.py index 6a20852f06..e22face0f3 100644 --- a/src/blenderbim/blenderbim/bim/module/boundary/operator.py +++ b/src/blenderbim/blenderbim/bim/module/boundary/operator.py @@ -832,7 +832,7 @@ class AddBoundary(bpy.types.Operator, tool.Ifc.Operator): settings = ifcopenshell.geom.settings() settings.set(settings.STRICT_TOLERANCE, True) shape = ifcopenshell.geom.create_shape(settings, opening) - m = shape.transformation.matrix.data + m = shape.transformation.matrix mat = Matrix( ( [m[0], m[3], m[6], m[9]], @@ -1035,7 +1035,7 @@ class AddBoundary(bpy.types.Operator, tool.Ifc.Operator): settings.set(settings.STRICT_TOLERANCE, True) # geometry = ifcopenshell.geom.create_shape(settings, body) shape = ifcopenshell.geom.create_shape(settings, element) - m = shape.transformation.matrix.data + m = shape.transformation.matrix mat = Matrix(([m[0], m[3], m[6], m[9]], [m[1], m[4], m[7], m[10]], [m[2], m[5], m[8], m[11]], [0, 0, 0, 1])) verts = [space_matrix_i @ mat @ Vector(v) for v in ifcopenshell.util.shape.get_vertices(shape.geometry)] faces = ifcopenshell.util.shape.get_faces(shape.geometry) diff --git a/src/blenderbim/blenderbim/bim/module/project/operator.py b/src/blenderbim/blenderbim/bim/module/project/operator.py index 7449f8bcad..9515dcdc90 100644 --- a/src/blenderbim/blenderbim/bim/module/project/operator.py +++ b/src/blenderbim/blenderbim/bim/module/project/operator.py @@ -736,7 +736,7 @@ class LoadProjectElements(bpy.types.Operator): def execute(self, context): self.props = context.scene.BIMProjectProperties self.file = IfcStore.get_file() - blenderbim.bim.schema.reload(self.file.schema) + blenderbim.bim.schema.reload(self.file.schema_identifier) start = time.time() logger = logging.getLogger("ImportIFC") path_log = os.path.join(context.scene.BIMProperties.data_dir, "process.log") @@ -1427,7 +1427,7 @@ class LoadLinkedProject(bpy.types.Operator): return {"FINISHED"} def is_local(self, shape): - m = shape.transformation.matrix.data + m = shape.transformation.matrix if max([abs(co) for co in (m[9], m[10], m[11])]) > 1000: return False elif max([abs(co) for co in shape.geometry.verts[0:3]]) > 1000: @@ -1436,13 +1436,13 @@ class LoadLinkedProject(bpy.types.Operator): def process_occurrence(self, shape): element = self.file.by_id(shape.id) - matrix = shape.transformation.matrix.data + matrix = shape.transformation.matrix faces = shape.geometry.faces verts = shape.geometry.verts materials = shape.geometry.materials material_ids = shape.geometry.material_ids - m = shape.transformation.matrix.data + m = shape.transformation.matrix mat = np.array(([m[0], m[3], m[6], m[9]], [m[1], m[4], m[7], m[10]], [m[2], m[5], m[8], m[11]], [0, 0, 0, 1])) mesh = self.meshes.get(shape.geometry.id, None) diff --git a/src/blenderbim/blenderbim/tool/drawing.py b/src/blenderbim/blenderbim/tool/drawing.py index a5d67e5aed..d86cb2d9a1 100644 --- a/src/blenderbim/blenderbim/tool/drawing.py +++ b/src/blenderbim/blenderbim/tool/drawing.py @@ -692,7 +692,7 @@ class Drawing(blenderbim.core.tool.Drawing): cls.import_camera_props(drawing, obj) tool.Ifc.link(drawing, obj) - m = shape.transformation.matrix.data + m = shape.transformation.matrix mat = mathutils.Matrix( ([m[0], m[3], m[6], m[9]], [m[1], m[4], m[7], m[10]], [m[2], m[5], m[8], m[11]], [0, 0, 0, 1]) )