def scene1(filename): doc = ezdxf.new('R2010', setup=True) msp = doc.modelspace() ucs = UCS() angle = math.pi / 12 # 15 degree for ix in range(X_COUNT): for iy in range(Y_COUNT): ucs.moveto((ix * DX, iy * DY, 0)) ucs.render_axis(msp, length=1) add_circle(msp, ucs) # add_ocs_circle(msp, ucs) # add_ocs_arc(msp, ucs) # add_text(msp, ucs) add_mtext(msp, ucs) add_ellipse(msp, ucs) # add_solid(msp, ucs) add_trace(msp, ucs) # add_3dface(msp, ucs) # add_lwpolyline(msp, ucs) ucs = ucs.rotate_local_z(angle) ucs = UCS().rotate_local_x(ix * angle) doc.set_modelspace_vport(Y_COUNT * (DY + 2), center=(X_COUNT * DX / 2, Y_COUNT * DY / 2)) doc.saveas(filename)
# License: MIT License from pathlib import Path OUT_DIR = Path('~/Desktop/Outbox').expanduser() import math import ezdxf from ezdxf.math import UCS doc = ezdxf.new('R2010') msp = doc.modelspace() # thickness for text works only with shx fonts not with true type fonts doc.styles.new('TXT', dxfattribs={'font': 'romans.shx'}) ucs = UCS(origin=(0, 2, 2)).rotate_local_x(math.radians(-45)) text = msp.add_text( text="TEXT", dxfattribs={ # text rotation angle in degrees in UCS 'rotation': -45, 'thickness': .333, 'color': 1, 'style': 'TXT', }) # set text position in UCS text.set_pos((0, 0, 0), align='MIDDLE_CENTER') text.transform_to_wcs(ucs) ucs.render_axis(msp) doc.saveas(OUT_DIR / 'ucs_text.dxf')
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( center_ucs, corner, dxfattribs={'color': 1} ).transform_to_wcs(location_ucs) location_ucs.render_axis(msp) doc.saveas(OUT_DIR / 'ucs_polyline3d.dxf')