diff --git a/src/ifcopenshell-python/ifcopenshell/util/placement.py b/src/ifcopenshell-python/ifcopenshell/util/placement.py index 218f58e2f7..b96287e7df 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/placement.py +++ b/src/ifcopenshell-python/ifcopenshell/util/placement.py @@ -118,9 +118,9 @@ def get_cartesiantransformationoperator3d(inst): :rtype: np.array[np.array[float]] """ origin = np.array(inst.LocalOrigin.Coordinates) - axis1 = np.array((1., 0., 0.)) - axis2 = np.array((0., 1., 0.)) - axis3 = np.array((0., 0., 1.)) + axis1 = np.array((1.0, 0.0, 0.0)) + axis2 = np.array((0.0, 1.0, 0.0)) + axis3 = np.array((0.0, 0.0, 1.0)) if inst.Axis1: axis1[0:3] = inst.Axis1.DirectionRatios @@ -129,18 +129,18 @@ def get_cartesiantransformationoperator3d(inst): if inst.Axis3: axis3[0:3] = inst.Axis3.DirectionRatios - m4 = ifcopenshell.util.placement.a2p(origin, axis3, axis1) + m4 = a2p(origin, axis3, axis1) # Negate axis2 (introduce mirroring) when supplied axis2 # is opposite of constructed axis2, but remains orthogonal - if m4.T[1][0:3].dot(axis2) < 0.: - m4.T[1] *= -1. + if m4.T[1][0:3].dot(axis2) < 0.0: + m4.T[1] *= -1.0 - scale1 = scale2 = scale3 = 1. + scale1 = scale2 = scale3 = 1.0 if inst.Scale: scale1 = inst.Scale - if inst.is_a('IfcCartesianTransformationOperator3DnonUniform'): + if inst.is_a("IfcCartesianTransformationOperator3DnonUniform"): scale2 = inst.Scale2 if inst.Scale2 is not None else scale1 scale3 = inst.Scale3 if inst.Scale3 is not None else scale1 @@ -163,8 +163,10 @@ def get_mappeditem_transformation(item): :return: A 4x4 numpy transformation matrix :rtype: np.array[np.array[float]] """ - m4 = ifcopenshell.util.placement.get_axis2placement(item.MappingSource.MappingOrigin) - return get_cartesiantransformationoperator(item.MappingTarget) @ m4 + m4 = get_axis2placement(item.MappingSource.MappingOrigin) + # TODO 2d + if item.MappingTarget.is_a("IfcCartesianTransformationOperator3D"): + return get_cartesiantransformationoperator3d(item.MappingTarget) @ m4 def get_storey_elevation(storey):