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

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

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

功能

  • 解析 ASCII DXF 文件(R12 / R2000 及以后)。
  • 支持图元:LINE、CIRCLE、ARC、LWPOLYLINE(含凸度 bulge)、POLYLINE、POINT、3DFACE、SOLID、TEXT、MTEXT、INSERT(块引用自动展开,非等比缩放精确化)、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 仅按匿名块图形显示,不做标注语义编辑。
相关推荐
飞鸟真人7 小时前
IM网关系列(九)单账号流量统计:滑动窗口桶方案设计与Go实现
后端·golang
紧跟先前的步伐10 小时前
Go AI Agent 实战 11|请求结构、响应结构与 JSON 解析
人工智能·ai·golang·json
利威尔xu12 小时前
Go IM 源码实战(2):WebSocket 握手 11 步,少 1 个参数连不上
后端·websocket·微服务·面试·golang
利威尔xu14 小时前
万字详解 | Go 进阶(二)GC 三色标记:STW 从 10ms 压到 40μs,1 次 Full GC 让线上 P99 抖了 3 秒
开发语言·后端·性能优化·golang·高并发
紧跟先前的步伐14 小时前
Go AI Agent 实战 12|HTTP 状态码、API 错误处理与日志
开发语言·人工智能·http·ai·golang
pan_junbiao15 小时前
Go语言中的空白标识符
开发语言·后端·golang
念何架构之路1 天前
go-grpc设计思想
开发语言·后端·golang
microrain1 天前
SagooIoT 的缓存换后端只改一行配置,文件后端连 Redis 都不需要
物联网·缓存·golang·sagooiot
喵了几个咪1 天前
GoWind ShortPlay 深度拆解:三服务 BFF + Core,一条请求的完整工程链路
golang·gowind