背景
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 公布!