dxfに対して様々な操作はできますが、 「寸法線矢印を片側のみ」にするなど、「なんでもできる」という訳ではないようです
参考url
import matplotlib.pyplot as plt import ezdxf from ezdxf import recover from ezdxf.addons.drawing import RenderContext, Frontend from ezdxf.addons.drawing.matplotlib import MatplotlibBackend import time def main(): doc = ezdxf.new('R2004', #setup=True # Trueにするとなぜか寸法値が100倍に... ) doc.encoding = 'utf-8' # 一点鎖線のスタイル # https://ezdxf.readthedocs.io/en/stable/tutorials/linetypes.html doc.linetypes.new(name="MY_DASHDOT", dxfattribs={'pattern': [100, 70, -10, 10, -10] }) msp = doc.modelspace() add_base_frame(msp) #図形 add_base_frame_dim(msp) #寸法 doc.saveas('draw.dxf') # 以下はdebug用の matplotlib.pyplot での画面表示 fig = plt.figure() ax = fig.add_axes([0, 0, 1, 1]) ctx = RenderContext(doc) out = MatplotlibBackend(ax) Frontend(ctx, out).draw_layout(msp, finalize=True) plt.show() def add_base_frame_dim(msp): dim_override = {'dimtxt': 30, # 寸法値のsize "dimasz": 30, # 矢印のsize "dimblk": "OPEN30", # 矢印の形 "dimdsep":ord('.'), # 小数点 "dimtad": 1, # 寸法値の表示位置 } # 縦枠の寸法 dim = msp.add_aligned_dim( p1=(0,0), p2=(0,2615), distance=300, override=dim_override) dim.shift_text(dh=0, dv=10) # 寸法値の表示位置のずらし #dim.set_tolerance(0.1, hfactor=0.8, dec=1) # 寸法公差(公差, 表示size, 有効桁数) dim.render() dim = msp.add_aligned_dim( p1=(0,0), p2=(0,516), distance=200, override=dim_override) dim.shift_text(dh=0, dv=10) # 寸法値の表示位置のずらし dim.render() dim = msp.add_aligned_dim( p1=(0,516), p2=(0,516+730), distance=200, override=dim_override) dim.shift_text(dh=0, dv=10) # 寸法値の表示位置のずらし dim.render() dim = msp.add_aligned_dim( p1=(0,516+730), p2=(0,516+730+633), distance=200, override=dim_override) dim.shift_text(dh=0, dv=10) # 寸法値の表示位置のずらし dim.render() dim = msp.add_aligned_dim( p1=(0,516+730+633), p2=(0,2615), distance=200, override=dim_override) dim.shift_text(dh=0, dv=10) # 寸法値の表示位置のずらし dim.render() dim = msp.add_aligned_dim( p1=(0,0), p2=(0,32), distance=100, override=dim_override) dim.shift_text(dh=20, dv=10) # 寸法値の表示位置のずらし dim.render() dim = msp.add_aligned_dim( p1=(0,2615-0.5), p2=(0,2615), distance=100, override=dim_override) dim.shift_text(dh=-40, dv=10) # 寸法値の表示位置のずらし dim.render() dim = msp.add_aligned_dim( p1=(891,0), p2=(891,135), distance=-200, text='(135)', override=dim_override) dim.shift_text(dh=0, dv=10) # 寸法値の表示位置のずらし dim.render() dim_override["dimtoh"] = 1 # 寸法値の表示を水平化 dim = msp.add_radius_dim( center=(891-2-16, 135), radius=7.5, angle=45, override=dim_override, text="12-○7.5" ) dim.render() def add_base_frame(msp): # 脚 pipe_len = 32 for pos in [[2,0],[891-2-32,0]]: msp.add_polyline2d( points_pipe_v(pipe_len,pos), close=True, dxfattribs={'layer':'frame'}) # 縦枠 pipe_len = 2615-32-0.5 for pos in [[2,32],[891-2-32,32]]: msp.add_polyline2d( points_pipe_v(pipe_len,pos), close=True, dxfattribs={'layer':'frame'}) # 縦枠の穴 r = 7.5/2 hole_x = 2+16 for hole_x in [2+16,891-2-16]: for hole_y in [135,635,1010,1235,1735,2335]: msp.add_circle([hole_x,hole_y],radius=r,dxfattribs={'layer':'frame'}) # 横枠 pipe_len = 891-32*2-2*2 for pos in [[2+32,32], [2+32,516-16], [2+32,516+730-16], [2+32,516+730+633-16], [2+32,516+730+633+736-32-0.5], ]: msp.add_polyline2d( points_pipe_h(pipe_len,pos), close=True, dxfattribs={'layer':'frame'}) msp.add_line( start=(0, 516), end=(891,516), dxfattribs={'linetype':'MY_DASHDOT'}) def points_pipe_v(l,pos): w = 32 points = [(pos[0], pos[1]), (pos[0]+w,pos[1]), (pos[0]+w,pos[1]+l),(pos[0], pos[1]+l),(pos[0], pos[1])] return points def points_pipe_h(l,pos): w = 32 points = [(pos[0], pos[1]), (pos[0]+l,pos[1]), (pos[0]+l,pos[1]+w),(pos[0], pos[1]+w),(pos[0], pos[1])] return points if __name__ == '__main__': main()