背景

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格式时,打开会跳出错误弹框,需要修复才能打开展示,修复后内容展示正常并且元素没有减少。

参考

编程读写CAD文件验证的更多相关文章

  1. Python socket编程 (2)--实现文件验证登入

    可以实现从客户端输入账号和密码然后发送到服务器进行验证,实现用户登入校正操作. 服务器: import socket import json server = socket.socket() serv ...

  2. HDFS文件系统基本文件命令、编程读写HDFS

    基本文件命令: 格式为:hadoop fs -cmd <args> cmd的命名通常与unix对应的命令名相同.例如,文件列表命令: hadoop fs -ls 1.添加目录和文件 HDF ...

  3. Python I/O编程 --读写文件、StringIO/ BytesIO

    I/O编程 Input/Output  输入/输出 Stream(流)是一个很重要的概念,可以把流想象成一个水管,数据就是水管里的水 Input Stream就是数据从外面(磁盘.网络)流进内存,Ou ...

  4. c# 利用动态库DllImport("kernel32")读写ini文件(提供Dmo下载)

    c# 利用动态库DllImport("kernel32")读写ini文件 自从读了设计模式,真的会改变一个程序员的习惯.我觉得嘛,经验也可以从一个人的习惯看得出来,看他的代码编写习 ...

  5. (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  6. C# 读写INI 文件

    INI 格式: [Section1] KeyWord1 = Value1 KeyWord2 = Value2 ... [Section2] KeyWord3 = Value3 KeyWord4 = V ...

  7. WIN32读写INI文件方法

      在程序中经常要用到设置或者其他少量数据的存盘,以便程序在下一次执行的时候可以使用,比如说保存本次程序执行时窗口的位置.大小.一些用户设置的 数据等等,在 Dos 下编程的时候,我们一般自己产生一个 ...

  8. C#中读写INI文件

    C#中读写INI文件 c#的类没有直接提供对ini文件的操作支持,可以自己包装win api的WritePrivateProfileString和GetPrivateProfileString函数实现 ...

  9. VC 使用msxml6.dll动态链接库中的函数读写XML文件

    VC 使用msxml6.dll动态链接库中的函数读写XML文件 目录 1 引言 2 .dll使用方法 3 常用函数总结 4 实例应用 5 运行效果预览 6 补充说明 7 不足之处 8 更新   引言: ...

随机推荐

  1. java try_catch 分析

    1.若一段代码前有异常抛出,并且这个异常没有被捕获,这段代码将产生编译时错误「无法访问的语句」.如 public class try_catch_Demo { public static void m ...

  2. CC2B本地环境搭建步骤及部署问题解决

    由于最近的项目是之前没接触过的netbeans+glassfish,记录一下最近在工作中搭建本地环境的步骤及遇到的一些问题解决方法: 1.配置java jdk 此过程中遇到一个问题就是在配置系统环境变 ...

  3. C#曲线分析平台的制作(六,Sqldependency+Signalr+windows 服务)

    在经过五天的学习和资料收集后,终于初步实现了利用sqldependency进行数据库变化监控,signalr进行前后台交互,数据实时更新.下面将源代码贴出进行初步分析: 1.系统整体框架构成: 2.具 ...

  4. MySQL Shell import_table数据导入

    目录 1. import_table介绍 2. Load Data 与 import table功能示例 2.1 用Load Data方式导入数据 2.2 用import_table方式导入数据 3. ...

  5. vue 子目录配置,负载均衡 nginx

    1. 我使用的是,腾讯云做负载均衡. 负载均衡配置: https://www.xxxx.com/vue   域名指向的服务器地址:10.10.10.10:80/vue 2. nginx 配置: ser ...

  6. 【Android面试揭秘】面试官说“回去等通知”,我到底会不会等来通知?

    前言 大部分情况下,面试结束后,面试官都会跟你说:我们会在1-2个工作日内通知你面试结果. 许多人认为:所谓「等通知」其实是面试官委婉地给你「发拒信」.但是,这不是「等通知」的全部真相. 这篇文章,我 ...

  7. 程序员被老板要求两个月做个APP,要不比京东差,网友:做一个快捷方式,直接链到京东

    隔行如隔山,这句话说得一点都没错.做一个程序员,很多人都会羡慕,也有很多人会望而却步. 作为一个外行人,你别看程序员每天坐在电脑前敲敲键盘打打代码,以为很简单,其实啊也只有程序员自己明白,任何一个看似 ...

  8. 中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂(上)

    前言 当下,正面临着近几年来的最严重的互联网寒冬,听得最多的一句话便是:相见于江湖~.缩减HC.裁员不绝于耳,大家都是人心惶惶,年前如此,年后想必肯定又是一场更为惨烈的江湖厮杀.但博主始终相信,寒冬之 ...

  9. 【前端 · 面试 】HTTP 总结(十二)—— URL 和 URI

    最近我在做前端面试题总结系列,感兴趣的朋友可以添加关注,欢迎指正.交流. 争取每个知识点能够多总结一些,至少要做到在面试时,针对每个知识点都可以侃起来,不至于哑火. 引言 不知道有多少人是和我一样分不 ...

  10. Sqli-Labs less13-16

    less-13 首先,输入用户名和密码,发现只有成功和失败两种显示,没有数据回显: 然后我们抓包拿到数据: 我们通过上述观察,已经知道这是典型的盲注,可以采用布尔盲注或者时间盲注. 构造注入语句:un ...