>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
C

如何在不使用AutoCAD的情况下读取AutoCAD图纸

想象这样一个场景:您需要从一份旧的工程图纸中提取数据,或者自动生成图表,但预算不允许购买AutoCAD许可证,而专有SDK的价格堪比飞机翅膀。DWG格式是工程界真正的"黑箱"。它是封闭的、二进制的,而且每隔几年就会发生变化。手动解析它是一种可疑的乐趣,可能会持续数月。

这就是LibreDWG登场的时候。这是一个免费的C库,属于GNU项目,给自己设定了一个雄心勃勃的目标:让开发者拥有读取和写入DWG文件的完整功能工具,而不受供应商锁定。

这个项目是关于什么的

LibreDWG是从LibDWG分叉出来的。具有讽刺意味的是,分裂的原因是语言:原始项目在其代码和文档中使用了世界语。社区认为英语更有利于吸引贡献者,于是LibreDWG诞生了。

如今,它可以说是处理DWG格式最严肃的开源解决方案。该库可以解码几乎所有版本的文件。写入功能则稍微复杂一些(尤其是R2004之后的版本),但项目正在积极开发中。如果您只需要读取数据、提取文本或将图纸转换为SVG——这正是您要找的。

这个库能做什么

开发者不仅发布了库代码,还配备了一系列有用的实用工具。这些是实际使用API的绝佳示例。

转换为矢量格式和JSON

使用dwgread,您可以将二进制图纸转换为人类可读的格式。支持JSON、DXF,甚至GeoJSON。这为Web可视化打开了大门:让文件通过转换器处理,获得JSON,然后在Canvas或SVG上渲染。

在图纸中搜索

dwggrep实用工具让您可以使用正则表达式在DWG文件中搜索文本字符串。如果您有上千份图纸的存档,需要找到一个特定的节点或规格,这个工具将为您节省大量时间。

图层操作

通过dwglayers,您可以快速提取所有图层的列表。这对于自动合规检查系统或只是理解复杂项目的结构非常有用。

从头生成图纸

dwgadd工具是以编程方式创建DWG文件的最简单方法。它接受简单的命令来创建实体及其属性。无需深入二进制格式的细节——只需描述您想在图纸上看到的内容。

技术基础

该库使用C99编写,这使其具有最大的可移植性。它在Linux和Windows(通过MSYS2或Visual Studio 2019+)上都能很好地运行。

一个有趣的点与编码有关。旧版本的DWG使用了大约30种不同的代码页。LibreDWG处理了将这个大杂烩转换为UTF-8的所有繁琐工作。在内部,它使用UTF-8(更准确地说,是WTF8,因为Windows UCS-2在代理对方面有自己的怪癖),这消除了图层名称或文本中"乱码"的问题。

对于不想用纯C编写的人,可以通过SWIG使用Python和Perl绑定。这允许您快速编写处理图纸的脚本,使用高级语言的全部功能。

这是为谁准备的

我看到几个场景中LibreDWG将是不可或缺的:

  1. 文档工作流自动化。当您需要自动从图纸标题栏中提取数据并输入数据库时。
  2. 面向工程师的Web服务。创建在线查看器或转换器,而无需使用重型服务器端软件。
  3. 报告生成。如果您需要将设备布局图附加到以PDF或PostScript生成的报告中。
  4. GIS集成。由于支持GeoJSON,图纸中的数据可以直接导入地理信息系统。

值得一试吗

您需要明白,使用DWG总是如履薄冰。该格式是专有的,逆向工程并不总是能跟上AutoCAD的更新。例如,写入R2010-R2018版本的文件可能仍然会导致校验和(CRC)错误。

然而,对于读取和转换任务,LibreDWG是一个强大且最重要的——免费工具。如果您遇到了以编程方式处理图纸的需求,请先探索examples文件夹中的示例。那里有一个头文件——这是您未来应用程序的绝佳骨架。

项目是活跃的,提交不断涌入,Texinfo和Doxygen格式的文档将帮助您了解API的深处。如果您准备好容忍写入新格式时的一些限制,LibreDWG将成为您工具箱的重要补充。

相关项目