DXF Engineering Drawing Generator (图片转DXF工程图)
Overview
从工程图片自动生成 DXF 文件。支持矩形、圆形、多边形、槽孔、圆弧等常见机械零件图形。
Workflow
完整流程分为 5 个阶段:
Phase 1: 图片分析 & 参数提取
- 读取用户发送的工程图片
- 识别图形类型(矩形板、带孔零件、法兰、异形件等)
- 提取关键参数:尺寸、位置、孔径、角度等
- 生成结构化 JSON 参数
Phase 2: 预览确认(带尺寸标注)
- 用提取的参数生成带标注的 DXF
- 生成 PNG 预览图(
--preview) - 必须展示预览给用户确认
- 列出所有识别到的参数供用户核对
Phase 3: 参数修正
根据用户反馈修正参数:
- 调整尺寸数值
- 增减孔/槽等特征
- 修改位置/角度
- 修正单位(mm/inch)
Phase 4: 生成正式 DXF(带标注)
- 参数确认后,执行
scripts/generate_dxf.py生成完整 DXF - 使用
--preview生成最终预览
Phase 5: 生成纯净版 DXF
- 执行
scripts/clean_dxf.py去除所有标注、中心线、文字 - 只保留轮廓几何体(OUTLINE、INNER、HOLE 图层)
- 生成纯净版预览
- 必须展示纯净版给用户最终确认
Scripts
generate_dxf.py - DXF 生成主脚本
# 从参数 JSON 生成 DXF
python scripts/generate_dxf.py --params params.json --output output.dxf
# 同时生成预览图
python scripts/generate_dxf.py --params params.json --output output.dxf --preview
# 直接生成纯净版(无标注)
python scripts/generate_dxf.py --params params.json --output output.dxf --clean
参数 JSON 格式:
{
"title": "零件名称",
"drawing_number": "DWG-001",
"material": "Steel 304",
"scale": "1:1",
"shapes": [
{"type": "rectangle", "x": 0, "y": 0, "width": 100, "height": 50, "layer": "OUTLINE"},
{"type": "circle", "cx": 25, "cy": 25, "radius": 5, "layer": "HOLE"},
{"type": "slot", "cx": 75, "cy": 25, "length": 20, "width": 8, "angle": 0, "layer": "HOLE"},
{"type": "arc", "cx": 50, "cy": 0, "radius": 50, "start_angle": 0, "end_angle": 180, "layer": "OUTLINE"}
],
"dimensions": [
{"type": "linear", "p1": [0, 0], "p2": [100, 0], "offset": 10, "text": "100"},
{"type": "diameter", "center": [25, 25], "radius": 5, "text": "10"}
],
"settings": {
"unit": "mm",
"line_width": 1.0
}
}
支持的图形类型:
| 类型 | 必填参数 | 可选参数 |
|------|---------|---------|
| rectangle | x, y, width, height | angle, layer |
| circle | cx, cy, radius | layer |
| polygon | points (数组 [[x,y],...]) | layer, closed |
| slot | cx, cy, length, width | angle, layer |
| arc | cx, cy, radius, start_angle, end_angle | layer |
| line | x1, y1, x2, y2 | layer |
支持的标注类型:
| 类型 | 必填参数 | 说明 |
|------|---------|------|
| linear | p1, p2 | 线性尺寸 |
| diameter | center, radius | 直径标注(自动加%%C前缀) |
| radius | center, radius | 半径标注(自动加R前缀) |
clean_dxf.py - 纯净版生成
# 去除标注,只保留轮廓
python scripts/clean_dxf.py input.dxf output_clean.dxf
保留的图层: 0, OUTLINE, INNER, HOLE 删除的图层: DIMENSION, CENTER, TEXT, HIDDEN
extract_params.py - 参数辅助工具
# 查看可用模板
python scripts/extract_params.py --list-templates
# 从模板生成参数文件
python scripts/extract_params.py --template plate_with_holes --output params.json
# 验证已有参数文件
python scripts/extract_params.py --validate params.json
可用模板:
rectangular_plate- 矩形板plate_with_holes- 带孔板flanged_part- 法兰件
DXF Layer 规范
| 图层 | 颜色 | 线型 | 线宽 | 用途 | |------|------|------|------|------| | 0 | 白(7) | 实线 | 1.0 | 默认轮廓 | | OUTLINE | 白(7) | 实线 | 1.0 | 外轮廓 | | INNER | 白(7) | 实线 | 0.5 | 内轮廓 | | HOLE | 白(7) | 实线 | 0.5 | 孔 | | CENTER | 红(1) | 中心线 | 0.18 | 中心线(纯净版删除) | | DIMENSION | 绿(3) | 实线 | 0.18 | 标注(纯净版删除) | | TEXT | 白(7) | 实线 | 0.25 | 文字(纯净版删除) |
Dependencies
运行脚本前需确保安装以下 Python 依赖:
pip install ezdxf matplotlib
- ezdxf - DXF 文件读写(必需)
- matplotlib - 预览图生成(可选,仅 --preview 时需要)
Notes
- 输出 DXF 格式为 AutoCAD R2010 兼容
- 所有尺寸默认单位为 mm
- 纯净版只保留黑色实线轮廓,无多余图层
- 生成预览时使用 PNG 格式,150 DPI
微信扫一扫