C#读取CAD文件(dwg/dxf)并处理_acadsharp-程序员宅基地

技术标签: c#  CAD二开  # C#  


一、前言

需求:
项目要求识别CAD图纸(图纸内容与现实事物比例是1:1)中的内容,并提取出一些关键信息。

这里的CAD图纸是指CAD文件,包含多种格式,dwg/dxf/dwf/stl/pdf等等。
识别其中内容,主要指文件中的图元信息(也叫实体Entity),指线段、圆弧、矩形等图形元素。
得到图元基础信息(比如长度、坐标、粗细)后,进一步做处理(如得到交点、得到线段间间隔、圆弧与线段切点等)。

分析:
听起来有点难,因为作为软件工程师,对CAD相关事物并不了解,它是未知的;但同时也挺有意思,因为它确实是一个活的需求,并且有一定可行性。

  1. 图像识别
    拿到需求后,我第一反应是用图像识别(视觉)的相关技术去做,对特征图形生成模型,做匹配。
    但是,

    • 由于图的实际尺寸很大,比例是1:1,如果生成大图,用图像处理那套去做,估计消耗计算资源会相当大。
    • 如果做一定比例缩小,生成缩小图,可能会因为缩的太小(缩太小有些图元可能就不好识别),没法用模板匹配了。

    而且如何将各种格式的文件转成图片也是一个问题(总不能要求别人都用CAD打开另存为吧)。
    总之,图像识别的方法有一定可行性,但也存在许多不确定性。

  2. 文件内容识别
    换个角度想,CAD图纸其实是某种格式的文件,用AutoCAD可以打开它们,并将内容呈现出来。
    文件肯定是按一定的文件结构存放内容的。我要是能知晓CAD存放结构,按结构解析其内容就能得到其中的图元信息。
    于是,第二种方式,就是找CAD文件解析库或者得到CAD的文件结构自己动手解析。
    这种方法在CAD文件内容提取阶段的优势很明显:

    • 解析出来的内容是原始数据,不存在精度问题;
    • 解析也不需要消耗大量资源,只是按一定格式/协议读取并解析文件。

对比&总结:
两种方式对比下来,
图像识别/处理的方法在前期不太好实施。
但在后期内容处理阶段,不考虑效率的情况下,图像识别是有优势的,它可以借助图像处理算子,如通过模板匹配直接得到目标。
而解析CAD文件结构得到的信息,需要通过数学运算+逻辑判断来做处理。虽可控度较高,但是逻辑处理多,容易出错。

综合来讲,个人还是倾向于解析文件结构的方式。因为它整体比较可控。


二、调研过程

明确了大方向后,下一步就是看看网上有没有类似案例。
看了一圈下来,发现相关的CAD解析案例挺多的。
解析的格式集中在dxf和dwg这两种,其中dxf尤其多。

现在,有必要对CAD的主流格式以及相关知识进行了解。

2.1 CAD相关

之前只知道CAD是画图的,
其实CAD是计算机辅助设计(CAD-Computer Aided Design)的缩写。

而说到CAD软件,首先提到的必定是其鼻祖——AutoCAD

AutoCAD是国际上著名的二维和三维CAD设计软件,是美国 Autodesk(欧特克) 公司首次于1982年生产的自动计算机辅助设计软件,用于二维绘图、详细绘制、设计文档和基本三维设计。

AutoCAD这个软件并不是免费的,但是网上有大量破解版。

题外话,
经常会听到一些公司,收到了Autodesk的告知/律师函,就是公司有人用了盗版/破解版的AutoCAD被Autodesk发现了,Autodesk给你公司发函要求更换正版。然后公司it会找到设计人员、技术人员,让他们删软件。通常软件删了就没事了,如果一直不删,也不买正版,闹到最后可能会有巨额罚款。当然这也跟你公司规模有关,小公司或个人,Autodesk是懒得给你发函和打官司的。
据说Autodesk靠着告人打官司,每年也能盈利不少钱。(主要这软件太流行了,用的人确实多;国内版权意识相对较弱,于是到处都用破解版)

看得出来,Autodesk是非常注重版权的。

2.2 DWG

dwg是AutoCAD和基于AutoCAD的软件保存设计数据所用的一种专有文件格式,始于1970年代的一套Interact CAD软件。

Autodesk于1982年取得版权开始使用这种文件格式。Autodesk公司拥有、开发并且更新DWG文件格式,通常每隔几年DWG就会随着该公司在AutoCAD中添加新的特性从而进行更新。

换言之,dwg是Autodesk专用的格式

所以很长一段时间里,dwg是Autodesk特有的,不允许别人使用。
后来,一个漂亮国组织ODAOpen Design Alliance,开放设计联盟),破解了dwg格式。于是Autodesk和该组织打起了官司…

所以早期用AutoCAD打开非Autodesk生成的DWG时,会弹出 “非AutodeskDWG。此DWG文件由非Autodesk开发或许可的软件应用程序保存。将此文件与AutoCAD软件一起使用可能导致稳定性问题。”
在这里插入图片描述
不过后来也不知道啥原因,Autodesk也似乎默许了ODA的存在,也不强行弹窗了。

就结果来看,ODA确实一定程度上打破了Autodesk的垄断,现在大大小小的公司,都与该组织合作,开发自己的CAD软件。

国内比较有名的中望CAD、浩辰等,都是与该组织合作的,从ODA官网也可以看到。
在这里插入图片描述

2.3 DXF

DXF是Drawing eXchange Format(图纸交换格式)的缩写,是一种开放标准的CAD文件格式,里面包含了2D或3D CAD图形,以及相关的元数据和属性。

DWG是专有格式,只能被Autodesk公司的软件读取和编辑。而DXF是开放标准格式,可以被任何支持该格式的CAD软件读取和编辑

2.4 小结

了解了上面几点之后,也不难理解,为什么网上的案例都是针对dwg和dxf的,且以dxf居多。

因为很长时间内,CAD是被Autodesk垄断的,而dwg是Autodesk的专有格式,所以dwg在市面上居多。但dwg又是有版权的,不是你想读就能读的,所以dxf这种开放标准的格式更流行(指在网上)。

那本文主要介绍如何读取并解析这两种格式的文件。


三、解析CAD的库

找解析CAD的库时,有两种思路,一种是找开源的,另一种是找PoJie的。

本文主要介绍(免费的)开源 工具库。
网上可以搜到很多解析库,Nuget包管理器中通过dwg、cad等关键字也可以看到许多库。
它们大多是商业库(有自己的协议许可),如Aspose.CAD、CAD.NET、Atalasoft、BricsCAD等。
也有一些开源的,如ACadSharp(MIT)、netDxf(MIT)等。

商业库用法简单,但是你得买它们许可证,或者申请试用版(通常有期限,并且功能限制,总之体验一般)。

许可证价格一般一年要几千刀,规模小会便宜些,但折算RMB也是破万的。总之如果你想在程序中使用它,并不便宜。

上面提到了两个开源库,一个是ACadSharp,另一个是netDxf。
其中ACadSharp这个库还处在alpha版本,虽然已经支持了多个版本的dxf和dwg,但作者仍在完善中(部分功能在重构)。如果你打算用到项目中,现阶段可能还不是很理想。

3.1 netDxf

netDxf相对来说比较成熟,且一直在更新,但它是专用于dxf格式的。
在这里插入图片描述

3.2 Teigha

此外,还有上面提到的ODA组织,它为多平台提供了支持,.NET下的叫 Teigha for .NET

虽然它破解了dwg格式造福大众,但这并不意味着它真的不需要一分钱,正如它自己所说,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

它将自己定性为一个非营利性的技术组织,它们开发软件只为了会员的利益。
你要用它们的软件,那得成为会员,而加入会员就需要交会费。
很合理吧。
这个价格看起来并不便宜,首年6000刀,往后每年3600刀。
你可能会想,AutoCAD也就多少钱一年,你这怎么这么贵?
但两者不一样,AutoCAD是给你软件使用权,ODA是给你核心技术。
前者是买来用,后者是交钱拿技术自己开发/当然也能用。

题外话,
Autodesk不是ODA会员,而几乎所有的Autodesk竞争对手都是ODA会员。
Autodesk对ODA可谓恨之入骨,其CEO Carl Bass甚至还将ODA比喻为“敌人的军火提供商”。
虽说ODA是Autodesk的死对头,但实际上ODA对AutoCAD的成功做出了非常重要的贡献,因为它使非Autodesk客户仍然可以继续使用DWG文件作为其主要的数据交互格式,实现与AutoCAD的数据交互。目前就全球的使用比例来看,二维CAD的普及率依然远高于三维CAD,而且这种局面在未来几年仍将持续。

3.2.1 官网获取

说了这么多,怎么获取呢ODA的Teigha库呢,难道真的要成为ODA会员吗?
也不是,ODA是有提供免费试用版,
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
填个表,60天试用,并且有免费的技术支持。

3.2.2 网上获取

当然若你不想注册,百度一下也可以找到许多Teigha的库。
具体版本和使用可以参考这篇博客,

这篇博客


四、图形计算

通过上面几步,应该可以从CAD文件中读出图元了。
下一步对图元做数学运算,算出交点、距离等信息。
Teigha本身包含图形计算的功能,
此外,这里再推荐一个库——NetTopologySuite,它是专门用来处理二维线性几何的。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/BadAyase/article/details/133265717

智能推荐

leetcode 172. 阶乘后的零-程序员宅基地

文章浏览阅读63次。题目给定一个整数 n,返回 n! 结果尾数中零的数量。解题思路每个0都是由2 * 5得来的,相当于要求n!分解成质因子后2 * 5的数目,由于n中2的数目肯定是要大于5的数目,所以我们只需要求出n!中5的数目。C++代码class Solution {public: int trailingZeroes(int n) { ...

Day15-【Java SE进阶】IO流(一):File、IO流概述、File文件对象的创建、字节输入输出流FileInputStream FileoutputStream、释放资源。_outputstream释放-程序员宅基地

文章浏览阅读992次,点赞27次,收藏15次。UTF-8是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节。文件字节输入流:每次读取多个字节到字节数组中去,返回读取的字节数量,读取完毕会返回-1。注意1:字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码。定义一个与文件一样大的字节数组,一次性读取完文件的全部字节。UTF-8字符集:汉字占3个字节,英文、数字占1个字节。GBK字符集:汉字占2个字节,英文、数字占1个字节。GBK规定:汉字的第一个字节的第一位必须是1。_outputstream释放

jeecgboot重新登录_jeecg 登录自动退出-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏3次。解决jeecgboot每次登录进去都会弹出请重新登录问题,在utils文件下找到request.js文件注释这段代码即可_jeecg 登录自动退出

数据中心供配电系统负荷计算实例分析-程序员宅基地

文章浏览阅读3.4k次。我国目前普遍采用需要系数法和二项式系数法确定用电设备的负荷,其中需要系数法是国际上普遍采用的确定计算负荷的方法,最为简便;而二项式系数法在确定设备台数较少且各台设备容量差..._数据中心用电负荷统计变压器

HTML5期末大作业:网页制作代码 网站设计——人电影网站(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 dreamweaver作业静态HTML网页设计模板_网页设计成品百度网盘-程序员宅基地

文章浏览阅读7k次,点赞4次,收藏46次。HTML5期末大作业:网页制作代码 网站设计——人电影网站(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 dreamweaver作业静态HTML网页设计模板常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 明星、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 军事、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他 等网页设计题目, A+水平作业_网页设计成品百度网盘

【Jailhouse 文章】Look Mum, no VM Exits_jailhouse sr-iov-程序员宅基地

文章浏览阅读392次。jailhouse 文章翻译,Look Mum, no VM Exits!_jailhouse sr-iov

随便推点

chatgpt赋能python:Python怎么删除文件中的某一行_python 删除文件特定几行-程序员宅基地

文章浏览阅读751次。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。AI职场汇报智能办公文案写作效率提升教程 专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。_python 删除文件特定几行

Java过滤特殊字符的正则表达式_java正则表达式过滤特殊字符-程序员宅基地

文章浏览阅读2.1k次。【代码】Java过滤特殊字符的正则表达式。_java正则表达式过滤特殊字符

CSS中设置背景的7个属性及简写background注意点_background设置背景图片-程序员宅基地

文章浏览阅读5.7k次,点赞4次,收藏17次。css中背景的设置至关重要,也是一个难点,因为属性众多,对应的属性值也比较多,这里详细的列举了背景相关的7个属性及对应的属性值,并附上演示代码,后期要用的话,可以随时查看,那我们坐稳开车了······1: background-color 设置背景颜色2:background-image来设置背景图片- 语法:background-image:url(相对路径);-可以同时为一个元素指定背景颜色和背景图片,这样背景颜色将会作为背景图片的底色,一般情况下设置背景..._background设置背景图片

Win10 安装系统跳过创建用户,直接启用 Administrator_windows10msoobe进程-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏8次。Win10 安装系统跳过创建用户,直接启用 Administrator_windows10msoobe进程

PyCharm2021安装教程-程序员宅基地

文章浏览阅读10w+次,点赞653次,收藏3k次。Windows安装pycharm教程新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入下载安装PyCharm1、进入官网PyCharm的下载地址:http://www.jetbrains.com/pycharm/downl_pycharm2021

《跨境电商——速卖通搜索排名规则解析与SEO技术》一一1.1 初识速卖通的搜索引擎...-程序员宅基地

文章浏览阅读835次。本节书摘来自异步社区出版社《跨境电商——速卖通搜索排名规则解析与SEO技术》一书中的第1章,第1.1节,作者: 冯晓宁,更多章节内容可以访问云栖社区“异步社区”公众号查看。1.1 初识速卖通的搜索引擎1.1.1 初识速卖通搜索作为速卖通卖家都应该知道,速卖通经常被视为“国际版的淘宝”。那么请想一下,普通消费者在淘宝网上购买商品的时候,他的行为应该..._跨境电商 速卖通搜索排名规则解析与seo技术 pdf

推荐文章

热门文章

相关标签