APP下载

基于DXF文件的水利工程地形模型构建方法研究

2020-10-12刘尚蔚周钰航魏群

人民黄河 2020年4期

刘尚蔚 周钰航 魏群

摘 要:数字地形模型(DTM)是水利水电工程三维数字模型的重要组成部分,应用范围非常广泛。一般的建模软件流程繁琐,严重影响建模效率且存在地形表面失真,不能准确地表现真实地形信息。本文通过分析DXF文件的数据结构,在Python环境下利用Python语言编写程序读取和直接编写DXF文件,利用Delaunay算法生成三角网描述地形曲面拓扑关系,并将拓扑信息直接写入DXF文件中,编写的DXF文件可在不同软件中通过拉伸生成实体,既实现了三维数字地形模型的快速建模,又可满足不同软件之间的数据交换。此方法在某水利工程三维数字地形模型中成功应用,对基于DXF文件的直接建模方法研究具有借鉴意义。

关键词:Python;DXF;不规则三角网;三维地形实体模型

中图分类号:TV39   文献标志码:A

doi:10.3969/j.issn.1000-1379.2020.04.034

Abstract:Digital Terrain Model (DTM) is an important part of the 3D digital model of water conservancy and hydropower engineering and its application range is very wide. The general modeling software process is cumbersome, seriously affecting the modeling efficiency and the terrain surface distortion cant strictly represent the real terrain information. By analyzing the data structure of DXF files, this paper used Python language to write programs and directly write DXF files in Python 3.7 environment. The Delaunay algorithm was used to generate triangulation to describe the terrain surface topological relationship and the topology information was directly written into the DXF file. The DXF file could be generated by stretching in different software, which could not only realize the rapid modeling of the 3D digital terrain model but also the data exchange between different software. This method had been successfully applied in the 3D digital terrain model of a water conservancy project and it could be used as a reference for the direct modeling method based on DXF file.

Key words: Python; DXF; TIN; 3D terrain solid model

随着计算机技术的飞速发展,BIM技术已经被广泛应用于土木工程、水利水电工程等多个领域,BIM技术的实质是结构工程的数字图形与相关信息融合集成及动态关联[1-2]。水工BIM技术应用中,地形模型作为描述工程施工总布置的基础,不仅为所有水工建筑物及施工提供活动场所,方便设计方进行合理规划设计,而且通过建立不同时期的曲面,如原始地形曲面、设计开挖土方量的体积曲面,可以快速精确地计算出开挖或者回填的土方量。可见快速高效地建立高质量的地形模型在水工BIM技术应用中具有重要意义。

目前AutoCAD是全球用户最多的图形设计软件之一,也是影响最大的图形设计软件[3]。为满足不同软件之间进行图形数据信息交换的需求,提高数据交换精度,Autodesk公司开发了一种数据存储格式即DXF,在DXF文件中数据信息按照严格的格式进行排列,用户可以通过对DXF的读取和修改完成数据的筛选和处理,完成一些重复且繁琐的建模工作。基于DXF的数字图形建模方法与所选软件平台无关,任何从三维软件中得到的数据信息按照DXF文件的格式进行排列即可生成新的DXF文件,完成数据交换[2]。

DXF文件具有结构严密、易于读取等特点,成为国际上较为通用的图形交换文件之一[4]。目前国内外学者也通过编写接口程序使用不同的算法对DXF文件进行操作从而应用在不同的领域中,卢晓春等[4]基于DXF文件开发有限元后处理系统,满足了个性化的后处理显示功能;姚冕等[5]提出基于DXF格式的优化数控代码自动生成方法,实现了读取DXF文件过程自动生成数控加工代码,解决了传统读取算法中读取结果无序,不适合实际加工的难题;Atia[6]通过算法实现对DXF文件中重复对象的消除和分类,解决了数据交换中因对象信息重复而导致模型无法重构的问题。笔者结合Python面向对象的优势与DXF丰富的扩展性和数据可控性,研究基于DXF文件的三维地形实体模型的创建方法。

1 DXF文件数据获取及创建

1.1 DXF文件的结构

DXF文件是一种开放的矢量数据格式,由标题段(HEADER)、类段(CLASSBS)、表段(TABLES)、块段(BLOCK)、实体段(ENTITIES)、對象段(OBJECTS)和文件结束段(EOF of FILE)构成,具体含义见表1。每段又由许多“组”逐行排列构成,每组占两行,第一行为组的代码,表示本组的数据类型,含义由AutoCAD开发公司定义,第二行为组值,是数据变量的值,二者结合起来相当于数据的含义和值[7]。如组码“0”和组值“SECTION”代表新段的开始。

在实际应用中,图形的可视化数据信息主要存储在实体段(ENTITIES),如点、线、面、文字等。对上述图元、图层、线型、坐标等信息的提取,只需遍历ENTITIRS段,设置关键词即可读取每个图元的几何数据信息。

1.2 数据获取与处理

获取DXF文件数据的核心是准确获取存放于ENTIITES段中的点、线、面等图形属性的几何信息,通过对获取的数据进行处理完成模型检查分析或者导出其他格式文本对数据进行利用。在DXF文件中,每个图形对象的坐标数据信息与其单独的句柄(handle)相匹配,通过严格的组码及其值的排列来表述。由于传统意义上的面向过程的算法获取和处理DXF中的几何信息比较繁琐且获取的点的信息易与几何对象不匹配,因此笔者利用面向对象的Python语言来获取和处理DXF文件中的数据信息。

面向对象的基本算法原理是:将ENTITIES段中所有的图形对象信息储存在modelspace函数中,通过判断对象类型来查询具体属性信息。每一个对象的数据库中包含了几何关系、坐标、图层等图形信息,通过相应的查询函数即可获取数据信息。将获得的数据以列表或者元组的形式储存,每一个基础列表或元组中依次存放X、Y、Z坐标信息,方便使用Scipy和Numpy模块对点的数据进行科学计算处理。程序中结合ezdxf库编写算法实现面向对象的数据获取。以“LINE”为例,面向对象和面向过程的数据获取流程见图1和图2。

1.3 创建DXF文件

DXF文件目前可以被大多数计算机辅助设计软件所识别,利用数据直接编写DXF文件实现不同软件之间的图形数据交换,会带来事半功倍的效果。但是由于DXF组码及其值排列严格,且不同组码及其值代表的含义也都不同,因此利用其他编程语言实现这一过程比较复杂。

基于Python调用ezdxf模块创建新的DXF文件,简化逐行填写组码及其值的过程,重点放在确定DXF文件中不同的对象,如“LINE”“3Dface”“Mesh”等。图层信息、线型信息、颜色信息等作为属性添加到已确定的对象中。创建新的DXF文件的一般流程如下:①首先调用“ezdxf.new(‘版本名称)”函数定义新建的DXF文件的版本类型;②调用“modelspace()”函数创建储存图形数据的模型空间;③调用“layer.new(‘图层名称,dxfattributs={‘具体线型和属性等名称})”函数定义相应的图层信息;④调用“add_对象名称()”函数添加对象信息;⑤调用dwg.saves(‘名称.dxf)函数命名并保存创建的DXF文件。

2 工程实例

某国家重点水利工程地形条件复杂,挖填土方量大,精确完整的数字地形可为其提供精确的挖填土方量的计算和三维虚拟展示。

2.1 地形图形数据处理

建立三维地形图首先对AutoCAD图纸中的原始数据进行检查分析,为避免地形BIM模型与实际偏差过大,对等高线进行仔细检查并进行修改,调整处理后的等高线如图3所示。将处理过的图纸转存为DXF格式,在DXF文件中,等高线的对象类型一般是多段线(POLYLINE),可以在Python中调用ezdxf的query函数寻找对象“POLYLINE”,并把其顶点坐标信息作为不规则三角网(TIN)的原始数据。

将处理过的AutoCAD图纸转存为DXF格式,通过上述程序读取DXF文件快速获取坐标数据信息,并创建相应的列表进行储存或直接存储为CSV文件。部分包含了离散点信息的CSV文件如图4所示。

2.2 地形曲面模型的生成

读取DXF文件提取的原始等高线中的几何离散点,通过Delaunay三角网格描述其拓扑关系。Delaunay三角剖分法具有最接近、唯一性、最规则及最优性等优点[8],在计算机图形学中得到广泛应用,实现Delaunay的算法有很多,在本工程中,基于Python强大的科学计算能力,采用思路简单易于编程实现的逐点插入Lawson算法,如图5所示,其基本数学原理为:

(1)假设集合V是二维实数域上的离散点集,绘制三角形△ABC把所有集合V包围起来;

(2)向三角形中插入集合V中的离散点Pi(i=0,1,2,3,…),使该点与包含它的三角形的3个顶点相连形成3个新的三角形;

(3)逐个对生成的三角形进行空外接圆检测,同时用Lawson设计的局部最优化过程LOP进行优化,即通过交换对角线的方法来保证所形成的三角网为Delaunay三角网。

在Python的Scipy库中提供了面向对象的spatial.Delaunay()接口函数来进行Delaunay三角構网,实现自动绘制不规则三角网。遍历生成的三角网获取拓扑信息,将Z轴数据依次加入三角网中形成三维曲面。利用Delunay算法生成不规则三角网格的过程中容易在凹形等高线处生成平三角形,即Z轴坐标相等的三角形,造成与实际地形不符。改进算法为遍历Delaunay三角形,找到凹形等高线处的平三角形和与之相邻的非平三角形,在非平三角形中插入补充特征点完成平三角形优化[9]。将最终生成的拓扑信息整理后直接写入新的DXF文件,在DXF文件中通过对象“3Dface”来描述不规则三角网面,实现地形曲面自动绘制,与此同时调用matplotlib模块实现可视化展示。生成的DXF文件可在AutoCAD中或者Ansys workbench的SpaceClaim前处理软件中打开。Matplotlib可视化展示结果如图6所示,生成的地形曲面如图7所示。

2.3 生成三维实体

在AutoCAD软件中,打开创建的包含地形曲面的DXF文件,通过拉伸、合并创建三维地形实体。具体步骤如下:

(1)建立拉伸路径。由于地形曲面的投影平面与大地深度方向垂直,因此假设地形曲面的投影平面为XY平面,大地深度方向为Z轴方向。沿着地形曲面的正投影方向绘制拉伸路径,通过拉伸命令,将曲面转换为实体,路径深度根据工程模拟深度确定。

(2)合并实体。由于地形曲面由独立的不规则三角网表面构成,因此拉伸生成的实体为独立的三维柱状实体,通过合并命令,完成多个独立柱状实体的布尔运算,生成一个完整的三维实体地形。合并后的三维地形实体模型如图8所示。

3 结 语

利用Python语言直接对DXF文件进行操作,基于面向对象的理念,简化获取数据和编写DXF的过程,利用等高线数据对数字地形模型自动建模,在BIM技术的应用中,极大地提高了建模效率和建模质量。基于Python的DXF操作方法具有优秀的扩展性,除了基于DXF文件直接创建三维地形曲面完成实体建模外,还可将计算机视觉处理学和计算机图形学结合,通过边缘检测从图片中获取边界数据信息,经过处理分类,采用本文程序写入并创建DXF文件,实现二维平面图向三维模型的转换。

参考文献:

[1] 赵继伟,魏群,张国新.水利工程信息模型的构建及其应用[J].水利水电技术,2016,47(4):29-33.

[2] 魏群,尹伟波,刘尚蔚.BIM技术中的数字图形信息融合集成系统研究进展[C]//2014年中国建筑金属结构协会钢结构分会年会和建筑钢结构专家委员会学术年会论文集.北京:中国建筑工业出版社,2014:118-127.

[3] 张爱梅,巩奇,赵艳霞,等.AutoCAD 2007计算机绘图实用教程[M].北京:高等教育出版社,2007:2-4.

[4] 卢晓春,童富果,田斌.基于AutoCAD平台的有限元后处理系统开发[J].人民长江,2014,45(5):34-37.

[5] 姚冕,唐厚君.基于DXF格式的优化数控代码自动生成方法[J].测控技术,2014,33(11):81-84.

[6] ATIA M R A. Classification and Elimination of Overlapped Entities in DXF Files[J]. Ain Shams Engineering Journal, 2014(5):851-860.

[7] 劉胜华,徐卫兵.AutoCAD DXF文件格式与二次开发[J].科技资讯,2017,15(10):15-17.

[8] 王大志.一种快速实现地形图三维实体建模方法[J].图学学报,2017,38(1):23-27.

[9] 刘庆元,易柳城,刘莉.一种以等高线为特征线的不规则三角网的生成方法[J].矿山测量,2012(3):13-15.

【责任编辑 张 帅】