"""DXF → PNG 렌더(ezdxf+matplotlib). 사용: python render_dxf.py [pixels_wide=6000] [x0 y0 x1 y1 (도면 좌표 영역)] — 도면에서 그림을 잘라 쓰기 위한 도구(제1 기준 자료는 DXF).""" import sys import ezdxf, matplotlib matplotlib.use("Agg") import matplotlib.pyplot as plt from ezdxf.addons.drawing import RenderContext, Frontend from ezdxf.addons.drawing.matplotlib import MatplotlibBackend def render(dxf, out, wpx=6000, box=None): doc = ezdxf.readfile(dxf) fig = plt.figure(figsize=(wpx / 100, wpx / 100 * 0.7), dpi=100); ax = fig.add_axes([0, 0, 1, 1]) Frontend(RenderContext(doc), MatplotlibBackend(ax)).draw_layout(doc.modelspace(), finalize=True) ax.set_facecolor("#20262f"); fig.patch.set_facecolor("#20262f") if box: x0, y0, x1, y1 = box ax.set_xlim(x0, x1); ax.set_ylim(y0, y1); ax.set_aspect("equal") fig.set_size_inches(wpx / 100, wpx / 100 * (y1 - y0) / (x1 - x0)) fig.savefig(out, dpi=100) lim = (ax.get_xlim(), ax.get_ylim()); plt.close(fig); return lim if __name__ == "__main__": a = sys.argv box = tuple(float(v) for v in a[4:8]) if len(a) >= 8 else None print(render(a[1], a[2], int(a[3]) if len(a) > 3 else 6000, box))