mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-30 00:23:14 +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]]
|
:rtype: np.array[np.array[float]]
|
||||||
"""
|
"""
|
||||||
origin = np.array(inst.LocalOrigin.Coordinates)
|
origin = np.array(inst.LocalOrigin.Coordinates)
|
||||||
axis1 = np.array((1., 0., 0.))
|
axis1 = np.array((1.0, 0.0, 0.0))
|
||||||
axis2 = np.array((0., 1., 0.))
|
axis2 = np.array((0.0, 1.0, 0.0))
|
||||||
axis3 = np.array((0., 0., 1.))
|
axis3 = np.array((0.0, 0.0, 1.0))
|
||||||
|
|
||||||
if inst.Axis1:
|
if inst.Axis1:
|
||||||
axis1[0:3] = inst.Axis1.DirectionRatios
|
axis1[0:3] = inst.Axis1.DirectionRatios
|
||||||
@@ -129,18 +129,18 @@ def get_cartesiantransformationoperator3d(inst):
|
|||||||
if inst.Axis3:
|
if inst.Axis3:
|
||||||
axis3[0:3] = inst.Axis3.DirectionRatios
|
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
|
# Negate axis2 (introduce mirroring) when supplied axis2
|
||||||
# is opposite of constructed axis2, but remains orthogonal
|
# is opposite of constructed axis2, but remains orthogonal
|
||||||
if m4.T[1][0:3].dot(axis2) < 0.:
|
if m4.T[1][0:3].dot(axis2) < 0.0:
|
||||||
m4.T[1] *= -1.
|
m4.T[1] *= -1.0
|
||||||
|
|
||||||
scale1 = scale2 = scale3 = 1.
|
scale1 = scale2 = scale3 = 1.0
|
||||||
|
|
||||||
if inst.Scale:
|
if inst.Scale:
|
||||||
scale1 = 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
|
scale2 = inst.Scale2 if inst.Scale2 is not None else scale1
|
||||||
scale3 = inst.Scale3 if inst.Scale3 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
|
:return: A 4x4 numpy transformation matrix
|
||||||
:rtype: np.array[np.array[float]]
|
:rtype: np.array[np.array[float]]
|
||||||
"""
|
"""
|
||||||
m4 = ifcopenshell.util.placement.get_axis2placement(item.MappingSource.MappingOrigin)
|
m4 = get_axis2placement(item.MappingSource.MappingOrigin)
|
||||||
return get_cartesiantransformationoperator(item.MappingTarget) @ m4
|
# TODO 2d
|
||||||
|
if item.MappingTarget.is_a("IfcCartesianTransformationOperator3D"):
|
||||||
|
return get_cartesiantransformationoperator3d(item.MappingTarget) @ m4
|
||||||
|
|
||||||
|
|
||||||
def get_storey_elevation(storey):
|
def get_storey_elevation(storey):
|
||||||
|
|||||||
Reference in New Issue
Block a user