如何让Python的ezdxf插件text2path为单线字体生成单线条路径?
问题
为满足CNC加工需求,我使用一款单线连通字体,尝试通过ezdxf的text2path插件将文本转换为路径,以便在无对应字体的生产CNC设备上使用。但实际生成的DXF文件呈现双线效果,text2path将单线字体当作有宽度的字体处理,生成了环绕单线的闭合路径,无法满足单线条加工要求。
我的代码如下:
import ezdxf from ezdxf.fonts.fonts import find_font_face from ezdxf.path import render_lwpolylines from ezdxf.addons.text2path import make_path_from_str doc = ezdxf.new("AC1032") doc.styles.add("IAmOnlineWithU", font="IAmOnlineWithU-o96q.ttf") msp = doc.modelspace() p = make_path_from_str("some text", find_font_face("IAmOnlineWithU-o96q.ttf")) render_lwpolylines(msp, [p]) with open("out.dxf", "w") as f: doc.write(f)
解决方案
ezdxf的make_path_from_str默认会生成字体的轮廓闭合路径,针对单线字体,需要调用text2path模块的make_single_line_paths方法来提取核心的单线连通路径。
修改后的代码如下:
import ezdxf from ezdxf.fonts.fonts import find_font_face from ezdxf.path import render_lwpolylines from ezdxf.addons.text2path import make_single_line_paths doc = ezdxf.new("AC1032") msp = doc.modelspace() # 生成单线路径,可自定义文本高度 paths = make_single_line_paths( "some text", font_face=find_font_face("IAmOnlineWithU-o96q.ttf"), height=5.0 ) # 将单线路径渲染为LWPolyline对象 render_lwpolylines(msp, paths) # 用内置方法保存DXF文件,避免格式错误 doc.saveas("out.dxf")
关键说明:
make_single_line_paths是专门适配单线字体的方法,直接提取字体的中心线条结构,不会生成轮廓闭合路径。- 无需提前向文档添加字体样式,该方法直接读取指定字体文件解析单线逻辑。
- 使用
doc.saveas()替代手动文件写入,能规避编码或DXF格式兼容问题。
内容的提问来源于stack exchange,提问作者mmachenry
相关产品推荐
相关产品推荐

