1# Copyright (c) 2013-2021, Manfred Moitzi 2# License: MIT License 3import ezdxf 4 5 6def create_doc(filename): 7 def add_justify_text(content, p1, p2, align): 8 msp.add_text(content).set_pos(p1, p2, align) 9 msp.add_line(p1, p2) 10 11 def add_grid(pos, width, height): 12 attribs = {'height': 0.2, 'color': 3} 13 x, y = pos 14 dx = width / 2 15 dy = height / 2 16 msp.add_line((x, y), (x, y + height)) 17 msp.add_line((x + dx, y), (x + dx, y + height)) 18 msp.add_line((x + width, y), (x + width, y + height)) 19 20 msp.add_line((x, y - 1), (x + width, y - 1)) 21 msp.add_text('BASELINE ADJUSTMENTS', dxfattribs=attribs).set_pos((x, y - 1.5)) 22 msp.add_text('LEFT', dxfattribs=attribs).set_pos((x, y - 1), align='LEFT') 23 msp.add_text('CENTER', dxfattribs=attribs).set_pos((x + dx, y - 1), align='CENTER') 24 msp.add_text('RIGHT', dxfattribs=attribs).set_pos((x + width, y - 1), align='RIGHT') 25 26 attribs['color'] = 2 27 msp.add_line((x, y), (x + width, y)) 28 msp.add_text('BOTTOM_LEFT', dxfattribs=attribs).set_pos((x, y), align='BOTTOM_LEFT') 29 msp.add_text('BOTTOM_CENTER', dxfattribs=attribs).set_pos((x + dx, y), align='BOTTOM_CENTER') 30 msp.add_text('BOTTOM_RIGHT', dxfattribs=attribs).set_pos((x + width, y), align='BOTTOM_RIGHT') 31 32 y += dy 33 34 msp.add_line((x, y), (x + width, y)) 35 msp.add_text('MIDDLE_LEFT', dxfattribs=attribs).set_pos((x, y), align='MIDDLE_LEFT') 36 msp.add_text('MIDDLE_CENTER', dxfattribs=attribs).set_pos((x + dx, y), align='MIDDLE_CENTER') 37 msp.add_text('MIDDLE_RIGHT', dxfattribs=attribs).set_pos((x + width, y), align='MIDDLE_RIGHT') 38 39 y += dy 40 41 msp.add_line((x, y), (x + width, y)) 42 msp.add_text('TOP_LEFT', dxfattribs=attribs).set_pos((x, y), align='TOP_LEFT') 43 msp.add_text('TOP_CENTER', dxfattribs=attribs).set_pos((x + dx, y), align='TOP_CENTER') 44 msp.add_text('TOP_RIGHT', dxfattribs=attribs).set_pos((x + width, y), align='TOP_RIGHT') 45 46 def show_insert_points(msp): 47 for text in msp.query('TEXT'): 48 msp.add_circle(text.dxf.insert, radius=.1, dxfattribs={ 49 'color': 1, 50 'layer': "INSERT_POINTS", 51 }) 52 msp.add_circle(text.dxf.align_point, radius=.075, dxfattribs={ 53 'color': 2, 54 'layer': "INSERT_POINTS", 55 }) 56 57 def shift_insert_point(msp): 58 for text in msp.query('TEXT'): 59 text.dxf.insert += (1, 1) 60 61 doc = ezdxf.new(dxfversion='R2004') 62 msp = doc.modelspace() 63 add_grid((0, 0), width=10, height=10) 64 # shift_insert_point(msp) 65 66 add_justify_text("ALIGNED-TEXT-ALIGNED-TEXT-ALIGNED-TEXT-ALIGNED-TEXT", (15, 0), (35, 5), 'ALIGNED') 67 add_justify_text("FITTED-TEXT-FITTED-TEXT-FITTED-TEXT-FITTED-TEXT", (15, 10), (35, 5), 'FIT') 68 add_justify_text("MIDDLE", (15, 15), (35, 10), 'MIDDLE') 69 show_insert_points(msp) 70 71 doc.set_modelspace_vport(height=30, center=(15, 0)) 72 doc.saveas(filename) 73 74 75if __name__ == '__main__': 76 create_doc("text_alignments.dxf") 77