DWG DXF 解析与可视化

DWG DXF 解析与可视化

概述

  1. DWG 是AutoCAD软件保存设计数据使用的一种文件格式;二进制格式,数据结构并没有开源;,并没有开源; 因此关于dwg文件解析工具大多是收费的;免费的有LibreDWG , ODA , QCAD pro ; 上面部分包含商业版,需要收费;但其免费版本,基本也满足需求;

  2. DXF [Drawing eXchange File], 是AutoCAD 提供对外产品数据交换的格式,数据结构是对外开放的;因此,dxf格式文件得到广泛的应用; 文件数据的存储形式包含 ASCII 和 二进制;优缺点:

解析与可视化流程

  1. DWG格式文件,使用免费的转换器转换成dxf格式,转换器采用ODA_converter
    【注意】在我电脑上 ODA这个官网有点问题,需要把浏览器窗口放大,然后拖拽缩小,才能正常显示内容;并且需要把左边导航页面删除;(这个网站有点一言难尽);
    oda_file_converter的source code 找到入口,但是也要注册;(Drawings_XX\Drawing\Examples\Qt\OdaFileConverter 通过这个关键词找到source code入口)
    找sourcecode 主要目的为了集成到软件时,导入dwg在进程内部通过cmdline 的方式启动ODA_converter转成dxf格式; 不过通过其它途径也找到了cmdline的参数;就不折腾了;

    在这里插入图片描述

  2. 使用dxflib 库解析dxf文件

  3. 几何表达与渲染

实现

  1. dwg convert to dxf
    /*
    # PARAMS:
    # Input folder
    # Output folder
    # Output version: ACAD9, ACAD10, ACAD12, ACAD14, ACAD2000, ACAD2004, ACAD2007, ACAD20010, ACAD2013, ACAD2018
    # Output file type: DWG, DXF, DXB
    # Recurse Input Folder: 0, 1
    # Audit each file: 0, 1
    # (Optional) Input files filter: *.DWG, *.DXF
    */
    const QString TEIGHA_PATH = "\"E:/Program Files/ODA/ODAFileConverter 25.1.0/ODAFileConverter.exe\"";
    const QString INPUT_FOLDER = "F:/E/My_Test_Prj/01-CADModel/02-dwg_dxf";
    const QString OUTPUT_FOLDER = "F:/E/My_Test_Prj/01-CADModel/02-dwg_dxf/dxf";
    const QString OUTVER = "ACAD2018";
    const QString OUTFORMAT = "DXF";
    const QString RECURSIVE = "0";
    const QString AUDIT = "1";
    const QString INPUTFILTER = "*.DWG";
    //const QString INPUTFILTER = "tablet.dwg";
    
    QStringList arguments;
    arguments.append( INPUT_FOLDER);
    arguments.append( OUTPUT_FOLDER);
    arguments.append( OUTVER);
    arguments.append( OUTFORMAT);
    arguments.append( RECURSIVE);
    arguments.append( AUDIT);
    arguments.append( INPUTFILTER);
    QProcess process;
    process.start(TEIGHA_PATH, arguments);
    process.waitForFinished();
    process.terminate();
  1. dxf parsing
    2.1 文件组成:
  • 标题段(Header): 记录AutoCAD系统的所有标题变量的当前值或当前状态。标题变量记录了AutoCAD系统的当前工作环境,如SNAP捕捉当前状态、栅格间距式样、当前图层层名及线型、颜色等

  • 表段(TABLES):表段共包含以下,每个表又包含可变数目的表项。
    Application ID (APPID) 表
    Block Recod (BLOCK_RECORD) 表
    Dimension Style (DIMSTYPE) 表
    Layer (LAYER) 表
    线型表 (LTYPE) 表
    Text style (STYLE) 表
    User Coordinate System (UCS) 表
    View (VIEW)表
    Viewport configuration (VPORT) 表

  • 块段(BLOCKS)块段记录了所用块的块名,当前图层层名、块的种类、块的插入基点及组成该块的所有成员。块的种类分为图形块、带有属性的块和无名块三种。无名块包括用HATCH命令生成的剖面线和用DIM命令所完成的尺寸标准。

  • 实体段(ENTITIES)实体段记录了每个实体的名称、所在图层及其名字、线型、颜色等。

  • OBJECTS 部分 – 包括非图形对象的数据,供 AutoLISP 以及 ObjectARX应用程序所使用。

  • THUMBNAILIMAGE 部分 – 包括 DXF 文件的预览图。

  • 文件结束段(EOF OF FILE)DXF文件的结束标志。

    具体可以查看帮助文档;在网上找到一份中文版;如下图所示 ;
    在这里插入图片描述

2.2 注意事项

由于解析dxf文件的目的主要用于提取里面的几何数据,用于生成加工刀路;这里也只对里面的几何信息感兴趣;

  • 解析几何数据需要注意单位;
  • 部分几何数据包含在Blocks段中,并且Blocks包含了 多个Block,每个Block包含了多个Entity;
    在Entities 里面,可以通过Insert 引用前面已经定义过的Blocks.

2.3 结果
解析可以借助上面提及的开源库,也可以从一些开源项目中抽取一些源码集成进来;本质上我们并不需要dwg/dxf里面所有信息; 一般只需要几何信息;下面是结果的展示;

在这里插入图片描述

参考

感谢分享!
解析DXF图形文件格式
Open Cascade DataExchange DXF

  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值