乐趣区

关于java:编程读写CAD文件验证笔记

背景

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 图纸

验证过程

  1. 用 CAD 软件将 DWG 格局的工程图转成各年份的 dxf 格局(dxf2000, dxf2004, dxf2007, dxf2010, dxf2013, R12)
  2. 编写代码读入 dxf 格式文件并新建图层,在新建的图层上用代码画几个圆形和正方形,保留为对应年份的 dxf 格式文件
  3. 通过 AutoCAD 软件从新关上代码编辑过并保留的各年份 dxf 文件,核查是否画图胜利,文件大小是否有扭转。
  4. 通过 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 公布!

退出移动版