CAD Mini Viewer —— 一个纯 Go 编写的轻量 DXF 查看器

CAD Mini Viewer ------ 一个纯 Go 编写的轻量 DXF 查看器

cadminiview 是一个用 Go 语言从零手写的轻量 CAD(DXF)查看工具,提供桌面 GUI。它不依赖 CGO / C 编译器,编译后即为一个体积小巧、开箱即用的可执行文件,适合快速看图、二次开发,以及学习 DXF 解析原理。

功能

  • 解析 ASCII DXF 文件(R12 / R2000 及以后)。
  • 支持图元:LINECIRCLEARCLWPOLYLINE(含凸度 bulge)、POLYLINEPOINT3DFACESOLIDTEXTMTEXTINSERT(块引用自动展开,非等比缩放精确化)、IMAGE(光栅底图,2D 下显示)、HATCH(实体填充 / 边界描边)、DIMENSION(按匿名块显示)。
  • 图层颜色(随层 BYLAYER)与线型(虚线等)渲染。
  • 二维 / 三维自动识别;三维以线框方式展示并可旋转视角。
  • 菜单栏:文件 菜单提供「打开文件...」与「退出」,可选择并加载新的 DXF 文件。
  • 鼠标交互:左键拖动平移、右键拖动旋转(3D)、滚轮缩放、F 适配视图、R 重置视角、Esc 退出。
  • 深色背景 + 网格 + ACI 颜色映射。

运行

powershell 复制代码
go build -o cadminiview.exe .
.\cadminiview.exe examples\sample.dxf

也可以直接 go run . examples\sample.dxf

交互说明

操作 效果
左键拖动 平移
右键拖动 旋转视角(3D 模式)
滚轮 缩放
F 适配视图(适合全部图形)
R 重置视角并适配
Esc 退出

技术选型

  • 界面:gioui.org(纯 Go,无需 CGO / C 编译器)。
  • 渲染:2D 图元直接用 Gio 路径描边;3D 用软件投影做线框。

目录结构

复制代码
cadminiview/
├── main.go                 # 入口
├── internal/
│   ├── dxf/                # DXF 数据模型、解析器、图元细分
│   ├── viewer/             # 视图状态与坐标投影
│   └── app/                # Gio 桌面窗口与事件处理
└── examples/sample.dxf     # 示例文件

与同类查看工具对比

市面上常见的 DXF/DWG 查看方案大致有三类:开源 CAD 软件(LibreCAD、QCAD)、厂商官方查看器(Autodesk DWG TrueView)、在线云端查看器(ShareCAD 等)。本项目与之定位不同,主打「轻量 + 离线 + 纯 Go + 易二次开发」。

维度 cadminiview LibreCAD / QCAD DWG TrueView 在线查看器(ShareCAD 等)
开源 ✅ 开源(Go) ✅ 开源(C++/Qt) ❌ 闭源 多数闭源
体积与依赖 极小,纯 Go 单文件,无 CGO 较大,依赖 Qt 运行库 安装包数百 MB 无需安装,需浏览器
支持格式 ASCII DXF(R12 / R2000+) DXF(可查看、编辑) DXF / DWG DXF / DWG(云端解析)
三维显示 ✅ 线框 + 视角旋转 以 2D 为主 ✅ 支持 视产品而定
编辑能力 ❌ 仅查看 ✅ 完整编辑 ❌ 仅查看 ❌ 仅查看
离线与隐私 ✅ 本地离线 ✅ 本地离线 ✅ 本地离线 ❌ 需上传云端
二次开发 代码精简、易读易改 工程庞大、门槛高 闭源不可改 不可改

简单说:如果需要完整的绘图编辑能力,选 LibreCAD / QCAD;如果只想要一个打开快、体积小、还能看源码改着玩的 DXF 查看器,那 cadminiview 更合适。

下载与项目地址

已知限制(mini 版)

  • 仅支持 ASCII 编码的 DXF;二进制 DXF 暂不支持。
  • 块引用的非等比缩放对文本仅做近似处理(不还原斜切)。
  • HATCH 仅支持实体填充与边界描边,暂不支持复杂图案填充(如 ANSI31 斜线)。
  • DIMENSION 仅按匿名块图形显示,不做标注语义编辑。
相关推荐
平头哥AI7 小时前
Day 22 _ 包装错误别丢链_%w、errors.Is 与 errors.As
android·服务器·学习·golang·go
golang学习记12 小时前
Go 1.27新特性: json/v2使用有趣指南
开发语言·golang·json
王码码203513 小时前
Go语言CGO:Go与C交互
后端·golang·go·接口
PC2005-cloud14 小时前
DSH 白嫖指南:接入 Command Code Go、WorkBuddy 与 Trae 的免费额度
开发语言·后端·golang
名字还没想好☜15 小时前
Docker 镜像瘦身进阶:用 distroless/scratch 把 Go 服务打到 10MB,以及没 shell 怎么调试
运维·docker·容器·golang·kubernetes
lvshuocool16 小时前
golang 多版本管理工具 -- g
开发语言·后端·golang
海盗123418 小时前
DSH 接入 OpenCode Go 报 400 MissingSessionID:从 LLM 语义层退到 fetch 传输层的完整排障
开发语言·后端·golang
Molesidy18 小时前
【Embedded Development】Cadence SPB 16.6开发环境的初步使用之初步绘制原理图
cad·硬件
web守墓人21 小时前
【goed/ui】go开发windows原生应用之Helloworld篇
windows·ui·golang
平头哥AI21 小时前
Day 21 _ error 是个普通值_errors.New 与 fmt.Errorf 造出来,沿调用栈抛到 main 接住
后端·学习·golang·go