LOGO 首页 OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 技术文档 其他文档  
 
网站管理员

纯 Go 的 CAD 解析库 go-cad,开源啦,dwg/dxf格式直接解析

admin
2026年10月14日 23:31 本文热度 119

go-cad,一个纯 Go 实现的 DWG/DXF 解析、渲染与写出库。

GitHub:https://github.com/unitedrhino/go-cad​

它能把 CAD 图纸转成 PNG/SVG,识别图框并逐幅拆图,提取中文说明、标题栏和设备标注,也能将文档模型写回 DWG。零 cgo,无需安装 AutoCAD,可直接嵌入 Go 服务。

联犀 CLI 和联犀的文档解析库 docling 也已经接入:在 WorkBuddy 中,可以通过一句指令让 AI 调用 CLI 分析图纸;做知识库,可以用 docling 把 CAD 与 PDF、Word 放进同一条解析流程。

能力
当前支持
DWG 读取
R9/R10/R11、R13~R2018 容器
DWG 写出
R2000~R2018 六代容器
格式转换
DXF 读写、LibreDWG 风格 JSON 导入
图纸预览
PNG、SVG,中文与尺寸标注
自动拆图
图框识别、图号图名提取、逐幅出图
文本提取
文字、坐标、图层、图框归属
集成方式
Go 模块 / 联犀 CLI / docling

中文工程图,直接出图

这张 V 型滤池工艺图来自公开语料。平面、剖面、彩色工艺管线和右侧材料设备表,都是 go-cad 的渲染输出。

V 型滤池工艺图:平面、剖面与材料设备表。

材料设备表局部:名称、规格与数量。

消毒接触池图也能保留平面、两处剖面和材料一览表。图中的管径标注与右侧材料表可以对照。

消毒接触池:平面、剖面与材料一览表。

机械图对细节更敏感。下面这张内侧行走轮轴图,可以看到尺寸线、箭头、公差、直径符号,以及下方的技术要求。

内侧行走轮轴:尺寸标注、粗糙度符号和技术要求。

技术要求可以单独放大查看,中文说明与数值一起保留。

技术要求局部:45#钢、55HRC、公差标准与每套用量。

中文出图需要把解码和渲染都做好。go-cad 处理 GBK/UTF-16 码页、字符转义与 CAD 特殊文本码,%%C、%%d、%%p 分别显示为 φ、°、±;渲染端处理文字的旋转、镜像、对齐与宽度因子。

PNG 可指定输出宽度,SVG 适合放大查看。分幅 PNG 会检查文字的像素字高,必要时提高分辨率重渲;中文渲染需要运行环境提供中文字体,也可通过 FontPath 指定。

一张 DWG,拆成多张图

施工图常把多个楼层、专业或单体平铺在同一个模型空间。go-cad 会识别图框,从标题栏提取图号、图名,再逐幅出图。

下面用四图幅 DXF 演示。全览保留图纸排列,单幅图便于查看内容。

输入:四张图幅在模型空间中的排列。

输出之一:单幅给水系统图,保留图框、图形和标题栏。

四图幅 DXF 合成示例,展示全览与单幅出图。

有真实图框时,批量出图首项为整图全览,后续为各张图幅;无图框时有整图兜底,设计说明、图例表等内容区也有相应切分路径。

// doc 为已解析的图纸文档。
images, err := cad.RenderAllSheets(
    doc, cad.RenderOptions{}, "png")
if err != nil { panic(err) }
texts := cad.SheetTexts(doc)

SheetTexts 把文字与图框放在一起,保留文本、坐标、字高、图层和归属编号,并展开块引用中的文字。这样,“某层弱电平面图”对应的图片和说明就可以一起保存、一起检索。

项目公开记录中,消防与弱电施工图分别识别出 9 张图框,标题栏中的图号、图名可自动提取。

WorkBuddy:一句话分析 CAD

联犀 CLI 从 v0.8.5 起支持 CAD 文档解析,联犀 Skills 可安装到 WorkBuddy / CodeBuddy。

首次安装(Linux / macOS),一行命令即可:

curl -fsSL https://doc.unitedrhino.com/cli/install.sh | bash

已有 CLI 的用户先执行 ur upgrade。随后将 Skills 安装到 WorkBuddy / CodeBuddy:

ur skills install --dir ~/.codebuddy/skills
ur skills status

默认目录下安装完成后,重启 WorkBuddy 会话,让它加载联犀 Skills。自定义配置目录使用对应的 Skills 路径。

把图纸放进 WorkBuddy 可访问的工作目录,指定文件后,就可以让 AI 调用联犀 CLI 读取并分析。例如:

用联犀 CLI 分析工作目录里的“施工图.dwg”。按图幅整理图号、图名和设计说明;提取设备材料、型号与数量,并注明来自哪张图。图纸里没有写明的信息单独列出。

上面是一条可复制的请求示例。

这条路径由 CLI 负责把 DWG/DXF 解析成 AI 能读取的内容,WorkBuddy 中的 AI 负责按要求整理、分析。材料表、施工说明和设备型号可以作为任务输入,无需先手工截图、复制文字。

开发人员也可以直接运行命令,先查看图纸结构,再输出正文:

ur doc parse 施工图.dwg --format outline
ur doc parse 施工图.dwg --format md --out 施工图.md

还支持 content-list 和 json 输出,适合进一步筛选文本、保留文档结构。

docling:把 CAD 放进知识库

联犀的纯 Go 文档解析库 unitedrhino/docling 从 v1.4.0 起集成 go-cad,支持 .dwg、.dxf、.dxfb 输入。

GitHub:https://github.com/unitedrhino/docling

在 Go 服务中,按文件扩展名调用统一入口:

// data 为已读入的图纸字节。
doc, err := docling.ParseByExt("施工图.dwg", data)
if err != nil { panic(err) }
md := doc.ToMarkdown()

文档按图纸组织:每个识别到的图框对应一页,包含图名标题、渲染图片和框内文本。图框外的文字保留在文档前部;整图全览不会重复占一页。

CAD 图纸可以与 PDF、Word 使用统一的 Markdown、JSON、content-list 输出,进入后续分块、索引和检索流程。 保存图名与来源后,检索到一段说明,可以回到对应图幅核对。

需要独立的机器清单,go-cad 还提供 caddocling:

# 在 go-cad 仓库中运行。
go run ./cmd/caddocling drawing.dwg -o out

它输出 manifest.json 与分幅图片,清单包含图框、文本和图片信息,方便接入自己的文档处理程序。

能读,也能写

cad.Parse 读取 DWG,cad.ParseDXF 读取 DXF,cad.ParseJSON 导入 LibreDWG 风格 JSON。

解析结果可提取文本、渲染图片,也可通过 cad.WriteDwg 写出 DWG。写出按文档版本分派到 R2000~R2018 六代容器,项目使用回读与 dwgread 交叉验证。DXF 和 JSON 导入构建的文档,也有结构化 DWG 写出路径。

对 Go 后端,go-cad 可以作为普通模块直接使用。解析、渲染和写出都在同一进程内完成,减少外部转换程序与 C 动态库的部署工作。项目采用 Apache-2.0 许可证,集成时保留相应许可与通知。

验证与性能

DWG 解码有些错误不容易从图片看出来。坐标或对象字段解错,程序仍可能正常出图。因此,go-cad 使用 LibreDWG 的 dwgread -O JSON 输出作参考,比较对象与实体的字段值。

项目公开测试记录如下:

验证项目
记录
值级对照
37 张语料,严格对照项 100% 对齐
DWG 写出
六代容器回读与 dwgread 交叉验证
DXF 转换
dxf2dwg
 参考验证 59/59
消费链路
147 张语料:解析、渲染、写出、再解析
健壮性
1000+ 变异输入测试,未出现 panic

对照结果限定于所列语料和已纳入比较的字段;外部参考数据测试需要配置相应资源。

一份 4.3MB、108,850 个对象的图纸,项目记录的处理耗时为:

操作
耗时
解析
691ms
PNG 渲染,宽 2048
4.1s
DWG 回写
785ms

这些是项目基准数据,实际耗时随硬件、图纸内容和输出分辨率变化。

Go 最小示例

安装模块:

go get github.com/unitedrhino/go-cad

下面是完整的 main.go,读取图纸、输出 PNG/SVG、统计文本,再写回 DWG:

// 演示 DWG 解析、图片渲染与 DWG 写出。
package main

import (
"bytes"
"fmt"
"os"

    cad "github.com/unitedrhino/go-cad"
)

// check 遇到错误时终止示例,避免继续输出无效文件。
func check(err error) {
if err != nil { panic(err) }
}

// main 从 drawing.dwg 读取图纸,在当前目录输出文件。
func main() {
// data 为原始图纸字节,doc 为解析后的文档。
    data, err := os.ReadFile("drawing.dwg")
    check(err)
    doc, err := cad.Parse(data)
    check(err)

// opts 控制输出宽度,png 和 svg 为图片内容。
    opts := cad.RenderOptions{Width: 2048}
    png, err := cad.RenderPNG(doc, opts)
    check(err)
    check(os.WriteFile("drawing.png", png, 0644))
    svg, err := cad.RenderSVG(doc, opts)
    check(err)
    check(os.WriteFile("drawing.svg", svg, 0644))

// buf 接收回写后的 DWG 字节。
var buf bytes.Buffer
    check(cad.WriteDwg(doc, &buf))
    check(os.WriteFile("roundtrip.dwg", buf.Bytes(), 0644))
    fmt.Println("文本条数:", len(doc.Texts()))
}

把一份支持写出的 DWG 命名为 drawing.dwg,放在同目录运行即可。仓库也提供 example/,可直接演示解析、渲染、回写和再解析。

当前边界

1. ACIS 三维实体的 SAT/SAB 几何重建不在当前范围内。

2. 不支持 pre-R13 写出、R2.x~R8 早期格式。

3. 部分长尾对象字段仍在完善;没有真实样本的分支使用合成数据验证。

4. 文字提取针对 CAD 文本实体,画成线条或嵌入图片的文字需要另行处理。

5. 高分辨率出图需要相应内存;docling 的文本包围框用于近似定位。

做图纸预览,可以直接用 go-cad;需要在 WorkBuddy 中分析图纸,用联犀 CLI;已有知识库解析流程,用 docling 接入。欢迎做工程资料、CAD 开发和知识库的同事拿自己的图纸试用,交流解析与出图问题。


阅读原文:原文链接


该文章在 2026/10/16 12:29:50 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-2  粤公网安备44030602007207号