背景
B/ S 利用零碎,依据用户上传数据:业务数据和 CAD 坐标数据,通过一系列运筹算法运算后,输入一批坐标数据,作为给用户的布局后果。此时须要不便直观的给用户展现坐标数据。可选形式有两个:
- web 页面画图间接展现,可能迅速展现给用户后果,但用户只能依据图形大略地位预计,不可能看到很精密的地位,故该形式只可作为预览应用
- 把坐标数据输入到 CAD 软件可能辨认的文件中,用户下载文件后,间接用 AutoCAD 软件间接关上该文件,藉由 CAD 软件性能的丰富性,能够看到很精密的坐标地位,亦可利用 AutoCAD 二次人为调整加工。
故:须要调研编程读写 CAD 文件的可行性
AutoCAD 文件格式
文件格式 | 共同点 | 不同点 |
---|---|---|
DWG | Autocad 软件可间接读写并互相转换 | CAD 的图形文件,DWG 仅是 CAD 专用文件格式, |
DXF | ^ | 用于 CAD 与其它软件之间进行 CAD 数据交换的 CAD 数据文件格式,文本文件,文件可能比 dwg 大很多 |
故选用 dxf 格局作为调研格局
指标运行环境
- Linux
编程语言考量
因我的项目中服务器端应用到了两种编程语言,故别离调研该两种编程语言
- Java
- Python
验证范畴
本次验证是为了确认是否可能通过程序代码对 CAD 的 dxf
文件进行编辑,编辑当前保留的 dxf
文件是否被 Autocad 软件正确关上,数据是否会缺失,不同 dxf 年份格局的 dxf 文件是否可正确保留和关上。
各编程语言的可选开源包
Python
| 包名 | 版本 | 优缺点 |
|–|–|–|
|ezdxf|0.13| 间接读写 dxf 格式文件 |
|pyautocad|–|必须运行在装置有 AutoCAD 软件的机器上|
Java
| 包名 | 版本 | 优缺点 |
|–|–|–|
|kabeja|||
|YCAD|||
|JDXF|||
|jdwglib|||
|Teigha||必须运行在装置有 AutoCAD 软件的机器上|
|dxf|||
验证环境
- 硬件
设施为惠普笔记本电脑,win10 零碎,64 位。 -
软件
- Python 3.7
- Java8
- Autocad2015
- Autocad2016
- 以及一张 dwg 格局的工程 cad 图纸
验证过程
- 用 CAD 软件将 DWG 格局的工程图转成各年份的 dxf 格局(dxf2000, dxf2004, dxf2007, dxf2010, dxf2013, R12)
- 编写代码读入 dxf 格式文件并新建图层,在新建的图层上用代码画几个圆形和正方形,保留为对应年份的 dxf 格式文件
- 通过 AutoCAD 软件从新关上代码编辑过并保留的各年份 dxf 文件,核查是否画图胜利,文件大小是否有扭转。
- 通过 AutoCAD 自带的文件数据提取性能遍历 CAD 图中的所有元素,输入 execl,核查元素数量是否有出入
验证后果
Python
-
ezdxf
可能失常读写 dxf 文件通过 CAD 软件关上 dxf 文件输入 execl 后发现原文件有 887410 个元素,代码画图保留后的文件有 887415 个元素,多出的五个元素为代码新增的一个圆形以及四条线段组成的矩形。元素数目是对应的
Java
Java 各包文档偏少,少数是读取 dxf 文件,目前没有找到适合的用例或 api 去编写测试代码去编辑 dxf 文件,故目前给出验证可行性论断,有待持续深入研究
注意事项
- DWG 文件转换为
R12
dxf 格局时,会呈现转换后的文件过大(600M),并且转换后的文件打不开。(Auto2015 和 Auto2016 均会呈现这种状况), 故不能选用该版本的 dxf - ezdxf 库保留的 dxf 文件转换成 DWG 格局时,关上会跳出谬误弹框,须要修复能力关上展现,修复后内容展现失常并且元素没有缩小。
参考
- http://docs.autodesk.com/ACD/…
-
https://sourceforge.net/p/dxf…
本文由博客一文多发平台 OpenWrite 公布!