1# Copyright (c) 2021, Manfred Moitzi 2# License: MIT License 3import sys 4import pathlib 5import ezdxf 6from ezdxf import zoom 7from ezdxf.explode_mtext import MTextExplode 8 9if not ezdxf.options.use_matplotlib: 10 print("The Matplotlib package is required.") 11 sys.exit(1) 12 13DIR = pathlib.Path('~/Desktop/Outbox').expanduser() 14 15LOREM_IPSUM = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam " \ 16 "nonumy eirmod tempor {\C1invidunt ut labore} et dolore mag{\C3na al}iquyam " \ 17 "erat, sed {\C5diam voluptua.} At vero eos et accusam et justo duo dolores " \ 18 "et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est " \ 19 "Lorem ipsum dolor sit amet." 20LEFT = LOREM_IPSUM + "\n\n" 21CENTER = r"\pxqc;" + LOREM_IPSUM + "\n\n" 22RIGHT = r"\pxqr;" + LOREM_IPSUM + "\n\n" 23JUSTIFIED = r"\pi1,qj;" + LOREM_IPSUM + "\n\n" 24 25 26def new_doc(content: str, width: float = 30): 27 doc = ezdxf.new(setup=True) 28 msp = doc.modelspace() 29 mtext = msp.add_mtext(content, dxfattribs={ 30 "layer": "MTEXT_EXPLODE", 31 "width": width, 32 "char_height": 1, 33 "color": 7, 34 "style": "OpenSans", 35 "line_spacing_style": ezdxf.const.MTEXT_EXACT 36 }) 37 mtext.set_bg_color(None, text_frame=True) 38 zoom.extents(msp) 39 return doc 40 41 42def explode_mtext(doc, destroy=True): 43 msp = doc.modelspace() 44 xpl = MTextExplode(msp) 45 for mtext in msp.query("MTEXT"): 46 xpl.explode(mtext, destroy=destroy) 47 if mtext.is_alive: 48 mtext.dxf.layer = "SOURCE" 49 xpl.finalize() # create required text styles 50 zoom.extents(msp) 51 return doc 52 53 54def create(filename): 55 doc = new_doc(LEFT + CENTER + RIGHT + JUSTIFIED) 56 doc.saveas(DIR / filename) 57 return doc 58 59 60def load(filename): 61 return ezdxf.readfile(DIR / filename) 62 63 64def explode(doc, filename): 65 doc = explode_mtext(doc, destroy=True) 66 doc.saveas(DIR / filename) 67 68 69if __name__ == '__main__': 70 doc = create("mtext_source.dxf") 71 # doc = load("mtext_source.dxf") 72 explode(doc, "mtext_xplode.dxf") 73