三维辅助的CAD管线入库与检查系统的实现

2014-06-26 07:41付海龙周奎王光昇曲超廉光伟赵虎川
城市勘测 2014年6期
关键词:管线错误动态

付海龙 ,周奎,王光昇,曲超,廉光伟,赵虎川

(天津市测绘院,天津 300381)

1 引 言

随着国家经济的发展,城市的基础建设工作在迅速进行。目前城市的地上基础设施规划管理较为完善,但是地下管线的相关管理工作比较薄弱。而且近年来国内管线事故的逐渐增多,给人民的生命财产安全带来较大损失。因此,国家对于管线的管理工作愈发重视,逐步开展了全国范围内的管线普查工作。这其中最为核心的环节就是管线的数据采集与入库过程,显然传统的CAD 管线录入与检查已不能完全满足建立高精度、高准确度的管线数据库需求。

与此同时,国内三维管线制作技术日益成熟[1~3],为形象化展示二维管线图提供了极大便利。因此,本文以辅助管线数据生产为目的,研究了二三维一体化的管线录入、浏览与检查系统,即用三维模块来同步显示CAD 中的管线数据。系统实现了视图的同步,数据编辑的同步,通过实时显示三维管线来发现数据的录入错误,并且开发了管线碰撞检测模块,对数据中的逻辑错误进行快速的检查与显示。在检查完成以后,碰撞位置会以列表的形式输出,提示录入人员进行相应的修改。

整个系统的核心技术包括了二维管线绘制与属性录入模块,三维管线的动态建模技术,数据交互技术,CAD 与三维显示模块的通讯交互技术以及管线碰撞检查技术。这些技术的结合,为三维辅助CAD 管线检查系统的实现打下了基础。

2 二维CAD 模块

该系统的核心工作区是二维的CAD 空间,它沿用了天津市测绘院的管线采集软件[4],并进行了三维拓展。因此它能够充分兼容原有的外业采集数据,符合作业人员的操作习惯。该软件使用LISP 语言,依据《天津市地下管线信息技术管理技术规程》[5]制作而成,针对管线类别进行绘制和属性入库。

录入的管线类别分为给水、排水、燃气、电力、电信、热力及工业管道。录入的数据分为图形与属性。图形包含管点与管线,它的绘制方式与经典CAD 相同;管线属性通过对话框输入,并挂接在CAD 图形的扩展属性内[6]。录入完成后,二维的图形和属性检查在CAD 中完成,这种操作模式简单,但无法展示和发现空间错误,因此必须借助三维辅助模式。

3 三维管线动态建模模块

3.1 平台选择

三维管线的建模技术在国内已经比较成熟,但大都属于静态建模技术,即通过管线数据库文件制作为三维管线模型,存储在磁盘上,然后在三维浏览软件中进行浏览。但这种模式不能适应二三维管线动态录入与浏览的要求,因为三维视图必须能够实时展示CAD的管线,并同步配合CAD 的实时编辑,因此基于数据库的三维管线动态建模技术成为关键。

管线的动态建模技术需要一款高效、高扩展性的三维平台,必须同时支持通过代码制作各种复杂的模型,并同时具备渲染能力。因此我们采用了OpenScene-Graph(OSG)[7,8]平台作为三维管线动态建模与浏览的平台。它是一款C+ +库,并将OpenGL 的C 接口封装成为C+ +接口,定义了丰富的类库,涵盖了从相机渲染、消息与侦听器、三维模型数据结构等各种模块。

3.2 建模技术

在三维中,需要建模的元素主要包括井、井室、附属物、管线等。

附属物包括阀门、消火栓、变电箱等设施,它们的建模方式是加载预定义的模型库,复制模型并摆放在对应的位置,阀门可根据管径缩放比例。这些模型可以预先在3ds Max 中制作,并且导出成OSG 支持的IVE 数据格式,以便使用时加载。

而井、井室以及管线需要通过绘制顶点制作而成。它们的基本特征都是中空圆管,因此最为核心的一步就是给定面数,制作一个标准宽高、位于原点的圆管。在OSG 中,我们需首先制作顶点坐标的数组,然后使用顶点连接数组将离散的顶点连成模型,最后需要指定纹理坐标,将纹理贴图赋予圆管的内外壁。纹理贴图的选取可以依据管线的种类或材质。方形的井和管线可以设置圆管面数为4。我们仅需将标准圆管移动、旋转并缩放,即可形成井、井室或管线。模型制作完成后需加入OSG 场景根节点进行渲染[9]。

3.3 动态浏览

三维管线动态建模的一个关键因素是内存的控制。CAD 中的管线数据量往往很大,我们不能选择一次性将CAD 中的全部管线属性读入三维模块,也不能一次性将所有的管线模型制作并显示,否则会给三维模块造成过大的资源负担。

因此需要动态判断当前三维视点所在的标准图幅号,并通过该图幅的外包矩形在数据库中动态请求范围内的所有管点、管线数据,并动态建模。当视点发生移动时,在视点范围之外的模型则会被删除,范围内的管线会动态生成。每一个图幅内的数据请求与动态建模都会在一个独立的线程内执行,并在建模完成后释放,因此不会影响三维主渲染线程的浏览速度。

图1 动态浏览示意图

4 数据交互技术

在该系统中,二三维模块是相对独立的进程,数据的交互是连接两个模块的关键。在三维的动态浏览过程中,需不断地向CAD 请求管线属性数据,这些请求是大量的、并发的。直接读取CAD 的DWG 文件会破坏CAD 的稳定性,所以必须使用数据库作为中间数据层。

数据层可以选择各种轻量级数据库,例如Access或者Sqlite,另外也可使用shp 数据进行存储。CAD 中绘制的图形和属性应同步的更新至数据库中,并通知三维模块读取数据库。

为了兼容各种数据库,三维中读取数据库的子模块应独立于三维程序本身,并使用设计模式中的接口与插件的模式。在程序最终发布时,系统支持一种数据库即可。

图2 二三维数据交互

5 二三维场景交互技术

5.1 进程通讯技术

整个系统设计中最重要的一个环节就是二三维场景的交互过程,它直接面向用户。然而二三维作为两个独立的程序,并不能直接通讯,因此我们使用了.NET库中的命名管道完成了进程间的通讯。我们将CAD 作为服务器并创建服务器端的命名管道,该管道需设置成监听状态。将三维模块作为客户端并创建客户端命名管道,该管道需连接服务器端的命名管道。连接成功后,客户端可以向服务端发送消息或请求,服务端也可以向客户端发送广播。

在该系统中,我们将所有的操作封装成为带有相应参数的消息,因此仅需要一个发送与接收消息的接口,并通过封包或解译消息,即可完成相互的操控。

图3 进程通讯

5.2 视图同步

该系统支持二三维模块的同步操作,即拖动CAD时三维场景也跟随移动,反之亦然。CAD 中没有深度,在CAD 请求三维同步时,需要假设场景的深度,可使用屏幕对角线的长度。当三维模块接收到同步请求后,会更改场景位置,并且动态生成新范围内的管线。在同步的过程中,通讯消息的发送和接收均是异步调用的,二三维模块不会因相互拖拽而卡顿。另外,当点击某根管线或管线模型时,可通过消息把管线的名称发送给另一个模块,通过搜索和缩放实现图元的选择同步。

5.3 数据编辑同步

该系统的重要功能是数据编辑的同步。即在CAD 中修改管线数据后,修改的信息可以实时的添加到数据库中,并通知三维进行实时的更新。这种更新包含了模型的更新和视图的同步,它确保了三维管线模型的实时性。因此作业员绘制完后可立即浏览三维管线,通过将模型与外业实测管线对比,可迅速发现错误。埋深录入错误在CAD 中无法检测,但在三维中管线的埋深突变可以被迅速发现。同理管径的错误也可因管线的粗细突变而觉察。因此这种实时性是该系统的主要特色。

6 管线检查

管线数据质量的内容一般包括:数据完整性、逻辑一致性、位置精度、属性精度等。

6.1 二维图形和属性检查

本系统对二维图形和属性的检查主要是依据《天津市地下管线信息技术管理技术规程》,通过LISP 语言在AutoCAD 中进行选择、遍历、读取扩展属性,然后进行逻辑判断,并将检查结果输出到定位列表框中,使用户能够快速定位、修改错误。常见的错误包括物探点号不唯一、点号为空、重叠管点管线、特征点与关联管线条数不一致、管点两边属性矛盾、连续管线高程突变等错误。这些错误通常由于录入操作失误所致,检查算法简单,可在CAD 下有效提示,因不是本文重点,故不详细介绍其实现过程。

当数据量比较大的时候,在AutoCAD 中频繁地进行选择、遍历操作速度非常慢。这时,我们首先将管线数据输出到Spatialite 空间数据库中,然后对空间数据库进行查询分析[10],最后将检查的结果在AutoCAD 中显示输出。这种方法极大地提高了大数据量的检查效率。

6.2 三维空间关系检查

对于三维空间关系的检查本文主要考虑了管线碰撞的检测。埋深错误、管径错误也属于空间关系错误,但因没有真实参考标准,无法精确提示,只能通过浏览三维模型,依靠外业经验发现潜在的可能错误。

在现实中管线碰撞一般并不存在,但在管线数据库中却很常见。造成管线数据碰撞的原因较多,例如实测的精度较低,或采集的点间距过低,造成数据上的逻辑错误。管线的碰撞率是评价管线数据质量的重要指标,因此管线的碰撞检测和三维展示也是该系统的核心功能。该功能的实现可基于如下算法。

(1)基于平面几何与高程的检测

假设将管线抽象为宽度为0 的线,那么发生碰撞的管线一定在正投影面上发生交叉,这是此种算法的前提。在平面上检测出发现交叉的管线后,可在交叉点处计算在上管线的管底高和在下管线的管顶高,通过它们的比较可判断管线是否发生碰撞。

图4 平面与高程检测

H 为管中高程,R 为管径。如果d 为正,则没有发生碰撞,否则管线发生碰撞。这种算法有一个明显的缺陷,即相互平行的管线即使在管径处发生碰撞,也无法有效检测。

试验数据使用了某区域内58 km的管线,在普通PC 上检测用了31″,检测速度较快。

(2)基于三维实体的布尔运算

另一种真实的碰撞检测算法,是创建三维实体进行布尔运算。这种运算的结果是准确的,然而由于是模拟算法,速度较慢。OSG 库不支持布尔运算,因此可使用REALDWG 开发库在内存中制作管线粗模,并进行粗模的布尔运算,检测完毕后可将碰撞的位置发送给三维模块进行标注显示。RealDWG 集成了ACIS 三维几何造型引擎,ACIS 是用C + +写的模型类库,采用BREP 边界表示法,支持实体的布尔运算、曲面裁减、曲面过渡等多种编辑功能。在RealDWG 中的三维建模操作都是通过ACIS 来完成的。在RealDWG 中进行碰撞检测的步骤包括:

第一,根据管线的平面位置、管顶(或管底)高程、管径、埋设方式等信息计算管线中轴线的空间位置;

第二,利用ACIS,根据管径、埋设方式在中轴线位置建立Solid3d 类型的模型。建立圆柱体模型的方法是根据起止点和半径通过CreateFrustum 方法建立。建立长方体管线的方法是根据起止点、长和宽通过CreateBox 方法建立。

第三、检测碰撞。通过ACIS 建立了Solid3d 类型的三维管经模型之后,用Solid3d 对象的CheckInterference 方法可以确定两个对象之间是否交叠,即是否存在碰撞。

第四、计算碰撞位置当检测到管线存在碰撞时,我们需要获取碰撞的空间位置。通过Solid3d 对象的BooleanOperation 方法对两个对象进行布尔操作,计算两个三维对象交集,方法如下:

图5 布尔运算

试验数据使用了同区域内58 km的管线,在普通PC 上检测用了100″,因此速度数倍慢于平面几何法,但仍足以满足实际应用。

7 系统展示

该系统的基本界面包括二维CAD 环境和三维环境,适合在双屏幕上进行操作。管线的绘制和录入在CAD 中完成,三维模块负责管线的浏览和碰撞检测展示。在数据制作过程中,两个模块可以实现视图和模型编辑的同步(如图6所示),便于用户快速的发现错误。

图6 系统界面与视图同步

如图7,在碰撞检测完成后,三维模块中会生成碰撞位置的列表,同时配以动画箭头指示碰撞的位置。经过检验,基于布尔运算的碰撞检测算法精度可靠,为数据的逻辑错误检查提供便捷。

图7 碰撞检测结果

8 结 论

城市管线日益成为城市建设的重要组成部分,但经典的CAD 管线录入检查模式已不能满足高质量管线数据的要求。在此背景下,本文实现了二三维一体化的管线录入、浏览及检查系统。首先在CAD 中进行管线录入,属性数据会同步更新到管线数据库;三维模块接收到更新请求后,会读取数据库并动态生成管线模型。该系统实现了二三维视图的同步以及数据编辑的同步,方便用户实时浏览,并通过观察模型发现埋深、材质、管径等录入错误。另外,该系统实现了基于布尔运算的管线碰撞检测,将碰撞位置的列表输出,并用箭头提示碰撞位置,提醒用户更改数据中的逻辑错误。该系统解决了经典CAD 管线图不直观、难以发现错误的瓶颈,并已经运用于实际的管线数据生产工作,提高了管线数据的生产效率和质量。

[1]朱慰明,冯竹平,曹桂海等.浅谈城市地下管线三维可视化系统的应用[DB/OL].城市建设理论研究(电子版),2012(15).

[2]马民涛,任杰,陈克龙等.城市地下管网管理信息系统中管线三维显示的实现[J].测绘工程,2005,14(4):8 ~10.

[3]陈光.地下管线三维CAD 与信息管理软件开发[D].西安:西安理工大学,2008.

[4]王光昇,周丽珠,刘允等.基于AutoCAD 自定义实体的初步研究[J].城市勘测,2012(2):134 ~137.

[5]DB/T29 -152 -2010.天津市地下管线信息管理技术规程[S].

[6]赵春燕,施建昭,于海乾.基于ObjectARX 的CAD 二次开发技术实现管线数据的入库和编辑[J].现代测绘,2010,33(5):58 ~60.

[7]王锐,钱学雷.OpenSceneGraph 三维渲染引擎设计与实践[M].北京:清华大学出版社,2009.

[8]肖鹏,刘更代,徐明亮.OpenSceneGraph 三维渲染引擎编程指南[M].北京:清华大学出版社,2010.

[9]曲超,义崇政,廉光伟.基于OSG 的三维管线实时建模技术研究[C].魅力天津·学会杯.天津:天津科学技术出版社,2013:343.

[10]柳华侨,王光昇.轻量数据库Spatialite 在AutoCAD 中的应用[J].城市勘测,2013(5):46 ~49.

猜你喜欢
管线错误动态
国内动态
国内动态
在错误中成长
国内动态
动态
高级别管线钢X80的生产实践
浅谈通信管线工程建设
浅谈通信管线工程建设
不犯同样错误
匀质地下管线大变形的控制微分方程及其近似解