水利工程地形模型构建方法

 水利工程地形模型构建方法

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

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

 随着计算机技术的飞速发展,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 文件的三维地形实体模型的创建方法。

 1DXF 文件数据获取及创建

 1.1DXF 文件的结构

 DXF 文件是一种开放的矢量数据格式,由标题段(HEADER)、类段(CLASSBS)、表段(TABLES)、块段(BLOCK)、实体段(ENTITIES)、对象段(OBJECTS)和文件结束段(EOFofFILE)构成,具体含义见表 1。每段又由许多“组”逐行排列构成,每组占两行,第一行为组的代码,表示本组

 的数据类型,含义由 AutoCAD 开发公司定义,第二行为组值,是数据变量的值,二者结合起来相当于数据的含义和值[7]。如组码“0”和组值“SECTION”代表新段的开始。在实际应用中,图形的可视化数据信息主要存储在实体段(ENTITIES),如点、线、面、文字等。对上述图元、图层、线型、坐标等信息的提取,只需遍历 EN-TITIRS 段,设置关键词即可读取每个图元的几何数据信息。

 1.2 数据获取与处理

 获取 DXF 文件数据的核心是准确获取存放于 ENTIITES 段中的点、线、面等图形属性的几何信息,通过对获取的数据进行处理完成模型检查分析或者导出其他格式文本对数据进行利用。在 DXF 文件中,每个图形对象的坐标数据信息与其单独的句柄(handle)相匹配,通过严格的组码及其值的排列来表述。由于传统意义上的面向过程的算法获取和处理 DXF 中的几何信息比较繁琐且获取的点的信息易与几何对象不匹配,因此笔者利用面向对象的 Python 语言来获取和处理 DXF文件中的数据信息。面向对象的基本算法原理是:将 ENTITIES 段中所有的图形对象信息储存在 modelspace 函数中,通过判断对象类型来查询具体属性信息。每一个对象的数据库中包含了几何关系、坐标、图层等图形信息,通过相应的查询函数即可获取数据信息。将获得的数据以列表或者元组的形式储存,每一个基础列表或元组中依次存放X、Y、Z 坐标信息,方便使用 Scipy 和 Numpy 模块对点的数据进行科学计算处理。程序中结合 ezdxf 库编写算法实现面向对象的数据获取。

 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 文件。

 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 中或者 Ansysworkbench 的 SpaceClaim 前处理软件中打开。

 2.3 生成三维实体

 在 AutoCAD 软件中,打开创建的包含地形曲面的 DXF 文件,通过拉伸、合并创建三维地形实体。具体步骤如下:(1)建立拉伸路径。由于地形曲面的投影平面与大地深度方向垂直,因此假设地形曲面的投影平面为 XY 平面,大地深度方向为 Z 轴方向。沿着地形曲面的正投影方向绘制拉伸路径,通过拉伸命令,将曲面转换为实体,路径深度根据工程模拟深度确定。(2)合并实体。由于地形曲面由独立的不规则三角网表面构成,因此拉伸生成的实体为独立的三维柱状实体,通过合并命令,完成多个独立柱状实体的布尔运算,生成一个完整的三维实体地形。合并后的三维地形实体模型如图 8 所示。

 3 结语

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

 处理分类,采用本文程序写入并创建 DXF 文件,实现二维平面图向三维模型的转换。

 作者:刘尚蔚 周钰航 单位:魏群华北水利水电大学 华北水利水电大学

推荐访问:水利工程 地形 构建