mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 09:21:46 +00:00
Minor fixes to placement utilities for getting mapped item matrixes
This commit is contained in:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user