推荐一些免费的DWG、DXF文件开源解析库
作为一名BIM行业的代码农民工,在软件开发中要经常对dwg文件进行读写操作,目前网上对于dwg文件的处理库都太少了,主要是都是收费居多,虽然有些能找到PJ版的,但也并不是很想用,反观处理dxf的开源库有不少。
于是想着,看看有什么办法能在后台把dwg转dxf,然后对dxf进行读取了。这样也可以达到变相读取dwg文件的效果。
这里先汇总一些目前找到一些对dwg、dxf文件读写的免费开源库,这些库所使用的语言有C、C++、C#、python
不要问为什么没有其它语言,因为其它语言不会,找了也没用
免费的开源库¶
libredwg¶
github: https://github.com/LibreDWG/libredwg
官网: https://savannah.gnu.org/projects/libredwg/
文档: https://libreplanet.org/wiki/LibreDWG
是纯C写的开源库,可以直接读取最新版本的dxf、dwg文件,写文件的话,dwg文件目前支持r1.1-r2000,dxf支持 r11-R2021,因为是纯C写的,解析速度很快。
libdxfrw¶
github: https://github.com/codelibs/libdxfrw
免费的C++开源库,出来较早,是比较成熟的dwg格式的解析库,bug少,但目前基本都不怎么更新了。可以读写dxf、dwg文件,对于dwg文件的读写只支持R14-2015版本的。
ACadSharp¶
github: https://github.com/DomCR/ACadSharp
免费的c#开源库,读写dxf、dwg的库,对dwg、dxf版本支持较高,目前兼容版本如下:
DxfReader | DxfWriter | DwgReader | DwgWriter | |
---|---|---|---|---|
AC1009 | ❌ | ❌ | ❌ | ❌ |
AC1012 | ✔️ | ✔️ | ❌ | ❌ |
AC1014 | ✔️ | ✔️ | ✔️ | ✔️ |
AC1015 | ✔️ | ✔️ | ✔️ | ✔️ |
AC1018 | ✔️ | ✔️ | ✔️ | ✔️ |
AC1021 | ✔️ | ✔️ | ✔️ | ❌ |
AC1024 | ✔️ | ✔️ | ✔️ | ✔️ |
AC1027 | ✔️ | ✔️ | ✔️ | ❌ |
AC1032 | ✔️ | ✔️ | ✔️ | ✔️ |
这个看着是很不错,不过这个库是新出的,比不上libdxfrw、Teigha之类的库,目前处于2.2版本的beta测试阶段。
ezdxf¶
github: https://github.com/mozman/ezdxf
开源免费的python库,用于dxf文件的解析,支持dxf版本有:R12, R2000, R2004, R2007, R2010, R2013 and R2018,用这个读写dxf文件挺不错。
收费的库¶
库名 | 官网 | 备注 |
---|---|---|
Teigha | https://www.opendesign.com/ | ODA组织开发的,网上能找到的可用版本:4.0.2, |
CAD.NET | https://cn.cadsofttools.com/ | 这个网上也能找得到"学习版本" |
DWG转DXF¶
libredwg的源码中,就有一个转换的样例,是一个命令行程序,用于DWG转为DXF的,从github仓库中下载win64版本的文件
另外就是可以使用ODA开发的文件转换工具:
ODAFileConvert: https://www.opendesign.com/cn/guestfiles/oda_file_converter
这个也支持命令行转换
这个对于命令行的参数,官方没有过多的介绍,这里顺便记录一下
安装目录下有ODAFileConverter.exe
文件,可以添加这个路径到环境变量,然后在终端输入
就会弹出这个参数的输入格式
即命令格式如下:
示例:
- input: 是待转换的dwg文件所在的目录路径,我这里是相对路径,可以写绝对路径
- out:转换后要保存到那个目录下
- ACAD2018:这个是转换后的版本,看上面的帮助截图中,版本有ACAD9-ACAD2018
- DXF:要转成什么格式,支持DWG、DXF
- 0:不递归搜索input文件夹
- 0:不检查每个文件
*.DWG
:输入的文件格式,即搜索Input文件夹下,所有DWG后缀的文件
ODA这个文件转换,转换之后的DXF,用AutoCAD打开会一直提示让你输入回车,无法预览,这应该是AutocAD不支持ODA转换后的DXF格式的原因。这个目前好像没什么解决的办法,之前我一度怀疑是我AutoCAD出问题了,后来才发现DXF也有不同的格式。。。AutoCAD软件自己导出的DXF就能正常打开,有些DXF不能打开的,就是AutoCAD不支持那种格式的DXF
目前后台DWG转DXF,可以试试LibreDWG的命令行程序