C# 操作CAD文件 C#如何读取DWG或DXF文件的基本信息

风静酱_8682

风静酱_8682

2026-02-18

524人浏览

原创

netDxf 是最轻量的 DXF 元信息读取方案,可直接解析图层、实体数、单位、创建时间等,无需 AutoCAD;需注意头变量判空、编码设置(如 GBK)及严格模式异常处理。

c# 操作cad文件 c#如何读取dwg或dxf文件的基本信息

用 netDxf 读取 DXF 文件元信息最轻量

DXF 是文本可读格式,netDxf 开源库能直接解析图层、实体数、单位、创建时间等基本信息,不依赖 AutoCAD 安装。它适合做批量检查、预处理或轻量 CAD 数据提取。

常见错误现象:NullReferenceException 在调用 DxfDocument.Load 后立刻访问 document.Header —— 实际上部分头变量(如 $INSUNITS)可能未定义,需先判断 document.Header.ContainsKey("$INSUNITS")。

  • 使用场景:自动化校验设计院交付的 DXF 是否含标准图层、是否设置毫米单位
  • DxfDocument.Load 默认启用严格模式,遇到非标准扩展实体会抛 DxfException;加 new DxfReaderOptions { IgnoreUnknownRecords = true } 更鲁棒
  • 性能影响:小文件(DxfDocument.LoadAsync 避免 UI 线程阻塞

读 DWG 必须走 Autodesk RealDWG 或 Teigha(无免费纯托管方案)

C# 原生无法解析 DWG,因为它是二进制加密格式,Autodesk 不开放规范。所谓“免费读 DWG”方案基本是包装了 RealDWG 的 COM 组件(需安装 AutoCAD 或单独部署 RealDWG 运行时),或调用 Open Design Alliance 的 Teigha SDK(商业授权)。

容易踩的坑:AcDbDatabase.ReadDwgFile 报 eNotImplemented 错误——不是代码写错,而是当前 RealDWG 版本不支持该 DWG 的保存版本(比如用 2024 RealDWG 读 2025 新增功能保存的 DWG)。

  • 必须匹配 DWG 版本:RealDWG 2023 支持最高到 ACAD2023(即 AC1032),不支持 AC1033
  • 部署时缺 acdb19.dll 或 accoreconsole.exe 会导致 DllNotFoundException,不能只拷 bin 目录,要按官方文档部署整个运行时目录
  • Linux/macOS 下完全不可行;.NET Core/.NET 6+ 项目需用 x64 构建并禁用“首选 32 位”

Document.Database.Header 里哪些字段真正可靠

不是所有头变量都默认存在,尤其从第三方软件导出的 DXF/DWG。硬取 $LUNITS 或 $MEASUREMENT 很容易崩,得按实际有无来适配。

☤CaduceusMail
☤CaduceusMail

☤CaduceusMail让你的OpenClaw通过一个域名/邮箱组合自动化企业级通信堆栈。

下载

实操建议:优先查这四个字段,它们在绝大多数人工绘制文件中稳定存在:

  • $ACADVER:DWG/DXF 版本标识(如 AC1027 对应 AutoCAD 2013)
  • $INSUNITS:插入单位(值为 4=mm,6=m,10=inch),但需 fallback 到 $MEASUREMENT(0=英制,1=公制)
  • $EXTMIN 和 $EXTMAX:模型空间范围,类型是 Point3d,可算图纸大致尺寸
  • $DWGCODEPAGE:编码页,决定中文图层名/文字能否正确解码(ANSI_1252 或 ANSI_932)

中文路径或图层名乱码的根源和临时解法

根本原因是 DXF 默认用系统本地编码(如 Windows-1252),而 .NET StreamReader 默认用 UTF-8。RealDWG 自动处理,但 netDxf 需手动指定编码。

错误现象:document.Layers.FirstOrDefault(l => l.Name == "标注") 返回 null,但打印所有图层名看到的是 “标注”。

  • DXF 加载时传入 Encoding.GetEncoding(936)(GBK)或 Encoding.GetEncoding(932)(Shift-JIS)
  • RealDWG 中文图层名一般没问题,但若 AcDbLayerTableRecord.Name 显示方块,检查 AcDbDatabase.Textstyle 是否缺失仿宋字体定义
  • 不推荐全局改系统区域设置,临时解法是在启动 RealDWG 前调用 SetThreadUILanguage(0x0804)(中文简体)

DWG 的版本兼容性和部署约束比想象中更硬,很多“读取成功”的假象来自测试文件恰好匹配了 SDK 版本。真正上线前,务必用客户实际交付的最小/最大/最旧版本 DWG 各跑一遍。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

cad c#

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

2023.09.22

549

3

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

2024.03.01

1698

6

PHP 命令行脚本与自动化任务开发
PHP 命令行脚本与自动化任务开发

本专题系统讲解 PHP 在命令行环境(CLI)下的开发与应用,内容涵盖 PHP CLI 基础、参数解析、文件与目录操作、日志输出、异常处理,以及与 Linux 定时任务(Cron)的结合使用。通过实战示例,帮助开发者掌握使用 PHP 构建 自动化脚本、批处理工具与后台任务程序 的能力。

2025.12.13

506

14

Figma AI自动化智能数据填充与交互生成实战
Figma AI自动化智能数据填充与交互生成实战

告别机械重复,详细演示如何用 AI 填充业务真实数据,并自动为页面添加交互连线,将静态设计稿快速转变为动态原型。

2026.05.13

345

17

Tailwind CSS 如何制作导航栏和卡片
Tailwind CSS 如何制作导航栏和卡片

用 Tailwind CSS 制作导航栏和卡片,可先搭建语义化结构,再组合 Flex、Grid、间距、圆角与阴影类。这里整理横向导航、移动端菜单、卡片网格及悬停效果的相关文章,帮助你把常见页面组件做得清晰且适配不同屏幕。

2026.11.03

0

17

Tailwind CSS 响应式布局怎么写
Tailwind CSS 响应式布局怎么写

Tailwind CSS 响应式布局通常从移动端样式写起,再用 sm、md、lg 等前缀调整不同屏幕宽度下的网格、间距和导航。本专题整理断点配置、Grid 与 Flex 自适应布局及常见溢出问题,帮助你逐步完成多设备适配。

2026.11.03

0

19

Tailwind CSS 常用类名怎么记
Tailwind CSS 常用类名怎么记

Tailwind CSS 类名很多,先按布局、间距、文字、颜色和状态分组记忆,再通过官方文档检索具体写法。本专题结合类名排序、动态拼接失效、自定义实用类等问题,帮助你建立常用类名的速查方法。

2026.11.03

0

12

码上飞入口地址合集
码上飞入口地址合集

本专题汇总了码上飞(CodeFlying)的官方入口地址合集,涵盖官网主站及网页版在线使用入口,支持注册登录后直接在线体验零代码AI应用生成。同时整理了APP端下载渠道与小程序入口,助你快速访问平台,通过自然语言描述需求即可生成应用、小程序或网站。

2026.11.03

0

10

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

2026.11.02

20

14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习