From 0ddbcd98eabf75d4f242d74935a2ab2ec987d8e1 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 22 Apr 2024 14:48:21 +0500 Subject: [PATCH] use column-major reshape for matrices #4565 --- src/blenderbim/blenderbim/bim/import_ifc.py | 7 ++++--- src/ifcopenshell-python/ifcopenshell/util/placement.py | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/import_ifc.py b/src/blenderbim/blenderbim/bim/import_ifc.py index a547af752e..e53b9be696 100644 --- a/src/blenderbim/blenderbim/bim/import_ifc.py +++ b/src/blenderbim/blenderbim/bim/import_ifc.py @@ -693,7 +693,7 @@ class IfcImporter: shape = self.create_generic_shape(element) if not shape: continue - mat = np.array(shape.transformation.matrix).reshape((4,4)) + mat = np.array(shape.transformation.matrix).reshape((4, 4), order="F") point = np.array( ( shape.geometry.verts[0] / self.unit_scale, @@ -1150,7 +1150,8 @@ class IfcImporter: self.link_element(element, obj) if shape: - mat = np.array(shape.transformation.matrix).reshape((4,4)) + # We use numpy here because Blender mathutils.Matrix is not accurate enough + mat = np.array(shape.transformation.matrix).reshape((4, 4), order="F") self.set_matrix_world(obj, self.apply_blender_offset_to_matrix_world(obj, mat)) self.material_creator.create(element, obj, mesh) elif mesh: @@ -1886,7 +1887,7 @@ class IfcImporter: and geometry.verts and self.is_point_far_away((geometry.verts[0], geometry.verts[1], geometry.verts[2])) ): - mat = np.array(shape.transformation.matrix).reshape((4,4)) + mat = np.array(shape.transformation.matrix).reshape((4, 4), order="F") offset_point = np.linalg.inv(mat) @ np.array( ( float(props.blender_eastings), diff --git a/src/ifcopenshell-python/ifcopenshell/util/placement.py b/src/ifcopenshell-python/ifcopenshell/util/placement.py index fc3f572f39..9d778966d2 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/placement.py +++ b/src/ifcopenshell-python/ifcopenshell/util/placement.py @@ -73,7 +73,7 @@ def get_axis2placement(placement: ifcopenshell.entity_instance) -> MatrixType: st = ifcopenshell.geom.settings() st.set('convert-back-units', True) shp = ifcopenshell.geom.create_shape(st, placement) - return np.array(shp.matrix).reshape((4,4)) + return np.array(shp.matrix).reshape((4, 4), order="F") elif ifc_class == "IfcAxis2Placement2D": z = np.array((0, 0, 1))