import math import ezdxf from ezdxf.math import UCS doc = ezdxf.new('R2010') msp = doc.modelspace() # using an UCS simplifies 3D operations, but UCS definition can happen later # calculating corner points in local (UCS) coordinates without Vector class angle = math.radians(360 / 5) corners_ucs = [(math.cos(angle * n), math.sin(angle * n), 0) for n in range(5)] # let's do some transformations by UCS transformation_ucs = UCS().rotate_local_z(math.radians(15)) # 1. rotation around z-axis transformation_ucs.shift((0, .333, .333)) # 2. translation (inplace) corners_ucs = list(transformation_ucs.points_to_wcs(corners_ucs)) location_ucs = UCS(origin=(0, 2, 2)).rotate_local_x(math.radians(-45)) msp.add_polyline3d( points=corners_ucs, dxfattribs={ 'closed': True, 'color': 1, } ).transform_to_wcs(location_ucs) # Add lines from the center of the POLYLINE to the corners center_ucs = transformation_ucs.to_wcs((0, 0, 0)) for corner in corners_ucs: msp.add_line(
def test_shift_ucs(): ucs = UCS() ucs.shift((1, 2, 3)) assert ucs.origin == (1, 2, 3) ucs.shift((1, 2, 3)) assert ucs.origin == (2, 4, 6)