APP下载

基于图层自动识别算法的BIM结构模型生成方法研究

2022-08-26汪晴晴杨秀芝蔺玉璞

土木建筑工程信息技术 2022年3期
关键词:平面图引线标高

汪晴晴 杨秀芝 蔺玉璞

(1.山东建筑大学 信息与电气工程学院,济南 250101;2.山东省建筑设计研究院有限公司,济南 250001)

引言

将2D图纸转换成BIM模型时,传统的方法是手工鼠标点击菜单栏上的工具或命令进行建模操作,此方法效率低且容易出错。一些翻模插件[1-3]能够加快建模的速度,通过用户选择二维图纸中的图层和输入标高等信息,自动生成三维BIM模型。

本文提出一种在自动图层识别算法基础上依据平面图分析和列表信息分析创建结构信息模型的方法,该方法需要用户进行的操作更少、效率更高。

1 图层自动识别

DWG文件是AutoCAD创立的一种图纸保存格式文件。DWG文件是一种二进制文件,一般由Header(头文件)、Entities(实体部)、Tables(表段)、Blocks(块实体部)以及Contingrny Header(应急头部)组成[4]。本文在Revit中调用Teigha组件实现了DWG文件的读取[5]。

结构施工图纸按照图层进行组织管理,本文采用图层自动识别算法[6]进行图层的识别。对CAD图纸有以下标准要求:

(1)要求CAD图纸、图层、构件不能是一整个图块。如果CAD图纸是一整个图块或者图层、构件是一整个图块的话,将无法利用算法进行图层自动识别,需要将图纸进行炸开处理,使得图纸中的各类构件均是由基本图元(线、弧、圆等)组成;

(2)对于图纸中包含天正图元的情况,需要将图纸转换到t3版本;

(3)要求同类构件的图元必须放置于同一图层,如柱线图元均放置于柱图层,柱标注图元均放置于柱标注层。识别从搜索每一个图层的特征元素(FE)开始,如墙的FE为线,墙标注的FE为文本。其次,检查FE的属性(Attr)是否符合某些条件,根据属性对识别结果的影响程度将属性分为必要条件(NC)和充分条件(SC)。其中NC必须满足,如梁标注必须含有字符“L”。如果某图层没有识别到字符“L”,则该图层不是梁标注层,但对于梁标注中的字符“-”不是必须存在的,因此为SC。SC满足时,识别为梁标注的可能性更高。接下来搜索与FE有关系约束的相关元素(RE),并检查其属性和与FE的拓扑关系(Rel)。FE-RE结构如图1所示,在判断某图层是否为目标层时,先检查图层的FE和RE的NC是否都满足,然后检查FE和RE的SC,并按照公式(1)进行计算得分,最后通过公式(2)计算总得分,得分最高的层即为目标层。

图1 FE-RE结构

(1)

(2)

其中,Score为每个图层的FE与目标图层的匹配度得分,NC代表匹配必要条件,SC代表匹配充分条件,N(SC==True)为符合匹配条件的SC的数目; N(SC)为识别某图层FE-RE结构的充分条件的个数。Total score为总匹配度得分,FE为特征元素,N(FE)为特征元素的个数。

以《混凝土结构施工图平面整体表示方法制图规则和构造详图(现浇混凝土框架、剪力墙、梁、板)》(16G101-1)[7]中的构件注写方式为依据,根据图纸中构件的几何约束和拓扑关系,应用图层自动识别算法识别各图层。以梁图层的自动识别为例,梁结构局部平面图如图2所示。

梁图层的识别存在以下难点:

难点一:梁是由平行且相互重叠的线组成,但是,在CAD图纸中,存在同样由平行线构成的其他结构构件,如墙和柱;

难点二:复杂平面图中,各种干扰线条比较多,比如尺寸线、引线和标高线。

针对以上难点设计识别梁图层的FE-RE结构,如图3所示。FE为线,FE的RE(1)为线,RE(1)与FE同图层且平行,RE(1)与FE的距离为200mm~800mm,这个距离是通过对大量图纸的观察得到的。又由于常用的结构出图软件,如T20天正结构软件,其能绘制的梁宽的范围为100mm~1000mm可知,存在不属于200mm~800mm范围的梁,因此,此属性为识别梁线的一个SC。

图2 梁结构平面图局部

图3 梁图层的FE-RE结构

另外,针对难点二,图纸中存在的干扰线条比较多,因此将梁图层的识别侧重于梁线的端部。主梁一般与柱或墙相连,因此需要在识别出柱图层或墙图层的前提下,进行梁图层识别的设计。FE的RE(2)是柱或墙封闭轮廓的某一条边线,FE与RE(2)相交,由于次梁一般与主梁相连,因此存在梁线不与柱或墙边线相交的情况,因此此拓扑条件为SC。考虑到梁的集中标注一般会通过一条引线从梁线中引出,因此在识别出梁的集中标注图层的前提下,进行梁图层的设计。将引线作为FE的RE(3)RE(3)与FE垂直,又因为集中标注必须含有字符“L”,因此,将字符“L”作为RE(4)。由于梁的编号一般为三个字符组成,可设置字符“L”与引线的距离为小于等于三个字符的宽度。

除此之外,梁轴线也可以作为FE的一个RE,为RE(5)。在一般情况下,RE(5)与FE的距离为RE(1)与FE距离的一半。由于图纸中存在偏轴线的梁,故此条件为SC。

综上,NC的数量为N(NC)=9,SC的数量为N(SC)=3。

需要识别的目标层有轴网层、标高表层、构件列表层、柱图层、柱标注层、墙图层、墙标注图层、梁图层、梁标注图层、板标注图层及图纸名称说明层。由于柱的轮廓多位于轴线的周围,柱的图层识别相对容易,且对后续其他图层的识别可以起到辅助作用,因此先识别柱层,再识别墙层和梁层,对于提高识别精度具有重要意义。

图层识别顺序为:标高表层、图纸名称说明层、构件列表层、轴网层、柱标注层、柱图层、墙标注图层、墙图层、梁标注图层、梁图层及板注图层。

2 图纸自动识别

2.1 平面图分析

2.1.1 构件截面轮廓的识别

通过图层自动识别算法可以获取到有用的图层信息。接下来,在识别得到的图层基础上对构件截面轮廓进行识别。在过去的研究中,有学者对墙体识别开展研究[8,9]。李昌华[8]采用自适应分块的墙体轮廓提取算法,依据墙线连通规则找出墙图层中所有封闭轮廓,实现墙体识别。本文选择李昌华[8]提出的墙体检测方法结合自动图层识别结果对墙构件截面轮廓进行识别。柱也是由一组封闭的轮廓线组成,因此对柱构件的识别方法与墙类似。关于梁构件和板构件的识别,采用Bin Yang等人[10]提出的方法,首先修改不连续的梁线,将一定距离内的平行梁线分组即可识别梁; 对于变截面或偏心梁,采用连续梁中心线生成算法识别出梁; 对于板的识别,是在已识别柱、墙、梁的前提下通过分割而生成每一块楼板。

2.1.2 构件截面轮廓与其标注的匹配

构件截面轮廓与标注存在有引线连接和无引线连接两种情况。对于有引线连接的情况,以引线为关键点,引线可以由一条直线组成,也可以由多条直线连接组成,最重要的是如何正确找到引线。引线所在的图层为构件标注层,对引线的搜索只需要在构件标注层进行搜索即可,可以避免图纸中其他线的干扰,如尺寸线,如图4(c)所示。而对于无引线连接的构件截面轮廓和其标注之间的匹配较为复杂,本文采用“多阈值+双向匹配算法”。

图4 结构平面布置图局部

(1)有引线时的匹配算法

对于标注引线起始线的一端在构件截面轮廓内或与构件截面轮廓的其中一条边相交的情况,如图4(a)所示,采用以下方法实现:

1)通过直线在构件截面轮廓内或直线与构件截面轮廓的某一边相交,确定起始线的一个端点;

2)以起始线的一端在构件截面轮廓内的端点为起始点,或以起始线与构件截面轮廓某一条边相交的端点为起始点,采用顺时针旋转的深度优先搜索算法,去访问该线段的终点坐标,然后以该线段的终点坐标作为下一条线段的起始点,去访问下一条线段的终点坐标,以此类推,直到访问不到为止,图4(a)左侧的柱标注为引线由两条直线组成,图4(a)右侧的柱标注为引线由一条直线组成;

3)通过步骤2)找到组成引线的所有直线,根据最后一条直线与标注的距离小于标注字符高度的一半,实现构件截面轮廓与其标注的匹配。

对于标注引线起始线的一端不与构件截面轮廓的任何一边相交的情况,如图4(b)所示。采用以下方法实现:

1)以截面图元的中心点或中心线为中心,定义阈值为W的文本搜索区域Rm;

2)搜索与Rm相交的引线L:L∩Rm≠∅,以起始线的一端在包围框B内的端点为起始点,采用顺时针旋转的深度优先搜索算法,去访问该线段的终点坐标,然后以该线段的终点坐标作为下一条线段的起始点去访问下一条线段的终点坐标,以此类推,如果访问不到,说明引线只有一条直线组成;

3)通过步骤2)找到组成引线的所有直线,根据最后一条直线与标注的距离小于标注字符高度的一半实现构件截面轮廓与其标注的匹配。

(2)无引线时的匹配算法

对于构件截面轮廓与其标注之间没有引线的情况,处理起来比较复杂。本文采用“双阈值+双向匹配算法”进行构件截面轮廓与其标注的匹配。算法的整个实现流程如图5所示。之所以定义双阈值是因为阈值的大小很难确定:若阈值范围过小,可能找不到与构件截面轮廓匹配的标注;若阈值范围过大,搜索到的构件截面轮廓附近的标注可能不止一个。鉴于此,本文选择定义两个阈值,一个阈值W1为图纸中构件标注的中心点与构件截面轮廓中心点或中心线的最大距离; 另一个阈值W2为图纸中构件标注的中心点与构件截面轮廓中心点或中心线的最小距离,这两个距离是通过观察图纸得到的。其中,标注的中心点为P,P是通过标注的包围框B计算得到的。在这里,只要满足阈值范围扫过标注包围框,则被扫过的标注即可作为候选标注存储,不需要整个标注的包围框B都在阈值范围内,下文会通过一个实例对此进行解释。

图5 双阈值+双向匹配算法

另外,从构件截面轮廓出发的搜索结果与从标注中心出发搜索的结果不同,如图6所示。以标注YJZ9的中心点为中心,阈值为W2的范围内搜索得到的截面图形有①和③; 反过来,以截面轮廓③的中心点为中心,阈值为W2的范围内搜索得到的标注只有YJZ9。因此,本文设计双向匹配算法,在以标注中心点为中心、W2为阈值搜索得到两个截面轮廓的情况下,可以考虑以截面轮廓中心点为中心、W2为阈值去搜索标注。同样,对于以截面中心点为中心、W2为阈值搜索得到两个标注的情况下,也可以以标注中心点为中心、W2为阈值去搜索截面轮廓,不管从哪个方向进行搜索,只要能使搜索的结果为唯一的即可实现匹配。“双阈值+双向匹配算法”的具体应用可以通过图6得以体现。

图6 剪力墙、柱平面布置图局部

图中有三个柱截面轮廓,给它们编号为①②③,以截面轮廓①的中心点为中心,在阈值W1范围内进行搜索,由于只要满足阈值范围扫过标注包围框,即可将阈值范围扫过的标注作为该截面轮廓的候选标注,因此截面轮廓①在阈值W1范围内找到了三个标注,分别为YAZ3、YYZ9、YJZ9,由于阈值W1范围内存在另一柱的截面轮廓②,以截面轮廓②的中心点为中心,在阈值为W2的范围内搜索到一个标注YAZ3,则截面轮廓②与标注YAZ3完成匹配。由于阈值W1范围内不存在截面轮廓③,因此以标注YYZ9的中心点P为中心,阈值为W2的范围内搜索截面轮廓,找到一个截面轮廓①,则标注YYZ9与截面轮廓①完成匹配。以标注YJZ9的中心点P为中心,在阈值W2范围内搜索截面轮廓,找到截面轮廓①和截面轮廓③,搜索结果不为1,再以截面轮廓③为中心点,阈值为W2范围内搜索标注,找到一个标注YJZ9,则截面轮廓③与标注YJZ9完成匹配。

2.2 列表分析

结构构件平法施工图的表示方法,除了采用截面注写方式,有时也会采用另一种注写方式,即表格注写方式[7]。将构件的属性信息存储在列表中,通过构件列表来提取构件的属性,由于构件列表对于构件信息的表达相对于截面注写方式更加清晰,因此对构件列表的识别可以在很大程度上提高构件识别的准确率。另外,平面图仅给出构件的二维信息,而构件的高度信息则在楼层标高表中给出,标高表的识别可为各楼层各种构件提供高度信息,分析楼层表自动获取楼层高度信息,减少二维图纸转换成BIM模型过程中高度信息的人工输入。因此,对于表格信息的提取与识别也极为重要,以下对列表分析的方法进行介绍。

图7左侧为列表分析流程。首先,分析表格的表头排列方向是横向的还是纵向的; 然后,分析表头的内容,如果表头排列方向是横向的,通过分析表头的内容来辨别表格的类型,如通过表头是否含有“层号”、“标高”、“层高”这三个字符串判断表格是否为结构楼层标高表; 如果表格类型为结构楼层标高表,提取表头上方数据进行存储,如表1(a)所示; 如果表头含有“墙厚”字符串,则可以判断该表格为墙构件表,根据墙构件表的表头排列方式为横向排列,对表头的下方数据进行提取并存储,如表1(b)所示; 如果表头排列是纵向的,分析表头内容,然后分析表头右侧数据; 对于即存在纵向排列的表头,又存在横向排列的表头,如表1(b)所示,纵向排列的有“Q1”和“Q2”两个表头,横向排列的有“编号”、“标高”、“水平分布筋”、“垂直分布筋”、“拉筋(矩形)”等表头,对于这种情况,先根据横向排列的表头读取下侧数据,然后根据纵向排列的表头读取右侧数据; 如表1(b)所示,同一编号为Q1的墙,标高不同,对应的墙厚属性也不同,因此需要对不同标高、相同编号的墙构件信息进行读取。

图7 平面图分析和列表分析流程图

表1 部分列表

(b)墙表

3 平面图结合列表

3.1 平面图结合构件列表

《混凝土结构施工图平面整体表示方法制图规则和构造详图(现浇混凝土框架、剪力墙、梁、板)》(16G101-1)[7]规定墙、柱平法施工图可以采用两种注写方式表达,一种是截面注写方式,一种是平面注写方式。对于采用截面注写方式表达的构件,其平面施工图中详细标注了构件的几何信息和钢筋信息,仅通过分析平面图即可得到构件的信息; 而对于采用列表注写方式表达的构件,其平面施工图中只表达了构件的几何信息和名称信息,而具体的构件配筋信息是通过独立表格的形式给出。因此,对于采用列表注写方式表达的构件,提出平面图分析和构件列表分析相结合的方式。

通过上文介绍的图层自动识别算法可以得到图纸名称所在的图层,分析图纸名称可以得到图纸中各构件所在的楼层信息或者楼层标高信息。因此,将平面图分析得到的构件的符号信息和楼层标高信息与通过构件列表分析得到的符号信息和楼层标高信息进行匹配。通过匹配,平面图中未标注钢筋信息属性的构件的钢筋信息可从构件列表中获取。

此方法的目的是充分利用二维图纸中的信息,不仅可以得到构件的几何信息,而且可以得到构件的钢筋属性信息。对于平法施工图表示的构件的识别,不局限于构件是采用截面注写方式表达,还是采用列表注写方式表达,均能实现识别,且能识别出构件的完整信息,避免二维图纸在转换为三维BIM模型的过程中出现信息丢失的问题。

3.2 平面图结合楼层标高表

利用自动图层识别算法,获取到了轴网图层,根据轴线之间的相交情况可以确定图纸的局部坐标系,构件的二维位置通过轴网和尺寸线给出,对于生成BIM模型还缺少标高信息,接下来讨论如何获得三维坐标系。

二维CAD图纸转换成BIM模型的过程中,为了减少高度信息的输入,提高自动化程度,将楼层结构标高表与平面图相结合。根据已识别的标高表可以得到楼层的标高数据。在每个平面图上,都有相同的轴网。通过轴网和楼层高度可以获得构件在三维坐标系中的位置。因此,可以构建3D坐标系以集成平面图和楼层标高,如图8(a)所示; 图8(c)中显示了从楼层标高中获取的楼层高度进行的平面图布置。

柱、墙的以本楼层的标高为底标高,以高一层的标高为顶标高; 如无特殊标注,梁、板以本楼层标高为顶标高。根据标注的语义分析得出梁宽、板厚,通过计算得到对应的底标高。

在轴网左下角设置三维坐标系基点为(0,0, 0)其中标记为1的网格线和标记为A的网格线相交并且标高为零,如图8(b)所示。三维坐标系中的坐标轴方向与网格线向右侧和向上的方向一致。平面图中某点的三维坐标可以通过公式(3)计算:

图8 三维坐标系

(3)

其中,Xcd、Ycd为CAD系统坐标,Pscale是用于在真实世界和工程图之间转换尺寸的比例,Elevation(floor)为楼层的高度,原点是标为1的轴线和标为A的轴线相交的点。

4 结构信息存储与建模

4.1 结构信息存储

基于Teighafor.dwg读取DWG文件,并对读取的数据进行识别之后,可以得到用于生成BIM模型的全部结构信息,然后分类存储起来,用于写入到Revit平台中去。Autodesk Revit软件没有完整的信息存储数据库模块,存储数据能力较弱,导致工作效率低。因此,对基于Revit的结构模型自动生成功能来说,必须要进行数据库的开发,本文选择在Revit中嵌入SQLite数据库提高Revit数据存储能力。

首先创建SQLite数据库,通过.NET C#语言,只需引入命名空间using System.Data.SQLite,就能够很容易地在程序中创建SQLite数据库文件,然后进行数据表结构的设计,考虑到不同构件的几何信息中的数据值比较统一,而钢筋信息差别较大,因此,按照结构几何信息和结构钢筋信息进行分类设计。

关于几何信息表的设计如表2所示。梁、墙、板、柱构件可以通过Point1、Point2、Point3、Point4、dimension、length、Level等表示几何属性。添加如构件ID(主键)、端点、截面尺寸、长度、高度及标高等几何数据信息字段。

表2 几何表字段属性

不同构件类型的配筋信息相差较大,需要根据不同构件类型的配筋来分别设计钢筋信息表,如表3所示。

表3 不同构件类型的钢筋表字段属性

4.2 结构信息建模

基于Revit软件平台,采用C#语言和Visual Studio2017开发工具,基于Revit提供的函数库进行二次开发,结合上文获取的结构数据信息,编写结构建模程序,实现Revit中自动生成结构BIM模型。通过以下四个步骤实现:

(1)结构族文件的导入

本文采用RevitAPI中的Autodesk.Revit.DB.Document类中提供的LoadFamily(string)方法导入结构族,只需要提供族文件的路径名即可。 由于板和墙属于系统族,项目中存在这两种类型的族文件,因此不需要导入墙和板族文件。

(2)构件类型的创建

将构件族文件导入到Revit项目中后,接下来需要根据从图纸中读到的构件信息来创建构件类型; 通常是根据宽和高两个参数值来创建梁和柱构件的类型,根据不同厚度来创建墙和板构件的类型; 对于梁和柱构件,首先调用API获取其族样式,然后获取他们的参数,通过改变宽度和高度的值来创建构件类型; 对于墙和板构件,首先通过调用API获取构件类型,比如板类型和墙类型,然后获取组合结构,最后再修改组合结构层厚度。

(3)构件实体的创建

构件类型创建完后,接下来进行构件实体的创建; 对于外部导入族,如柱和梁,使用NewFamilyInstance创建族实例; 对于系统族,如墙和板,可以使用特定的API方法创建实例; 生成不同构件类型实体模型的API如表4所示。

表4 构件创建方法

(4)添加钢筋信息

结构BIM模型除了由三维几何模型构成,还包括构件的钢筋属性信息, 通过以下两步骤可以将构件钢筋信息添加到对应的构件模型当中:第一步是首先给构件添加参数名,对于外部族元素如柱和梁,利用族文档中的管理器FamilyManager为构件添加参数名; 对于系统族元素如墙和板,通过添加共享参数方法为构件添加参数名; 第二步是对第一步添加的各构件参数进行赋值。经过以上处理,在Revit中创建的模型就包含钢筋信息。

5 实例验证

为了验证本文提出的在图层自动识别算法基础上整合平面图和列表进行结构BIM模型自动建模方法的准确性及有效性,采用面向对象技术的C#语言,使用Visual Studio2017进行代码编写,在Autodesk Revit 2016中进行测试。由于我国缺乏CAD图纸相关制图标准,各设计院和不同设计师的CAD图纸制图方法差异较大,因此,为了使转换更加准确,在转换之前需对图纸进行预处理。检查图纸、图层是否是一整个图块,如果是的话需要炸开; 表达同类构件的图元是否在同一图层,如果不是,修改图层,使图纸分层变得清晰、准确。

案例研究之一是一层剪力墙结构,其标准平面图的局部如图9所示,从图中我们可以看到柱(包含异形柱)和墙的名称标注信息,但是没有详细的钢筋标注信息,因此需要结合构件列表的分析才能得到墙和柱(包含异形柱)的配筋信息,然后再结合楼层标高表信息即可生成三维BIM模型。

(a)剪力墙局部图纸

另一个案例是复杂的拆迁保障住房工程剪力墙结构,包含柱(包含异形柱)、墙、梁、板构件,其剪力墙平面图局部如图10所示,结合从梁平面图我们可以获取梁的几何信息和配筋信息,然后再结合板平面图和楼层标高表,生成如图11所示的BIM模型。生成的各构件模型明细表如表5所示。目前,利用本文提到的方法进行转换的工程还有钢筋混凝土框架结构。

图10 剪力墙局部平面图

图11 剪力墙BIM模型

表5 生成构件模型明细表

6 结论

本文通过分析平面图和列表,充分利用二维图纸信息实现结构BIM模型的自动生成,阐述了图层自动识别算法、平面图分析算法、列表分析算法以及平面图与列表的结合。为了避免人工手动选择构件图层,本文在自动图层分类算法的基础上,根据构件的特征和构件与其标注的匹配算法对平面图进行分析; 为了解决人工手动添加高度信息的问题,本文对结构楼层标高表进行分析; 结合平面图分析和列表分析所得数据,利用RevitAPI自动生成BIM模型。通过实例验证,本方法能够快速、准确地实现从CAD图纸到BIM模型的自动转换。

目前仅实现柱(包含异形柱)、常规墙、常规梁和板构件的转换,而异形墙、异形梁构件尚未进行验证。对于其他构件,如门窗、桩、承台等构件,其实现思路和柱、梁、墙等构件类似。通过图层自动识别算法自动识别出门窗、桩、承台所在的图层,然后对门窗、桩、承台所在图层的图元数据进行读取和分析,最后通过门窗、桩、承台的构件生成实体模型API来生成门和窗模型。此类构件的转换将在后续工作中进行完善。

另外,本文基于二维CAD图纸生成的结构BIM模型除了包含三维几何信息,还包含结构构件的钢筋信息,而钢筋的转换本文并未进行研究。由于生成的结构BIM模型中存储了结构构件的钢筋信息,因此,关于钢筋模型的生成可以通过提取构件的钢筋信息来生成构件的钢筋模型,关于钢筋模型的生成将在后续工作中进行完善。

猜你喜欢

平面图引线标高
带引线的固体酒精
《别墅平面图》
《别墅平面图》
《四居室平面图》
《景观平面图》
GNSS技术在高层建筑施工测量中的应用
连续刚构桥梁施工控制
鞭炮迷宫
论打桩引起的基坑开挖问题及桩基标高影响分析
高层建筑的标高控制技术