BIM模型外部轮廓分层并行快速提取方法及系统
文献发布时间:2023-06-19 10:24:22
技术领域
本发明属于建筑软件BIM模型处理领域,具体是涉及一种BIM模型外部轮廓分层并行快速提取方法及系统。
背景技术
随着BIM技术的发展,人们对BIM模型的精度要求越来越高,使用场景也变得越来越复杂,从而导致的一个必然结果是数据量变得越来越大。传统的模型外轮廓提取算法在提高性能方面有以下几种形式:
1、简化模型,比如将相邻的面合并,进而减少三角面片的数量, 来达到提高性能的目的。这种方式,一旦需要极度减少模型顶点和三角形网格时,大多无法保持原有模型的重要细节特征;
2、先显示某些类型的构件,如柱子、墙,参见Autodesk Viewer,然后再显示其他构件,用户在使用过程中会明显察觉某些构件会消失几秒钟,等计算机有空余计算能力的时候才会再次显示,不减少模型细节,但会损失部分用户体验;
3、通过常规的商业渲染引擎,如VTK,在旋转的时候会主动降低分辨率,使得显示模糊,只能在静态显示高分辨率,并且这一过程,作为引擎的使用者,无法自定义设定。同样的原因,其它商业渲染引擎也都封装了算法的底层逻辑,使用者无法对这一部分内容自定义。
发明内容
为了解决上述技术问题,本发明公开了一种基于BIM模型外部轮廓分层并行快速提取方法,它包括以Revit软件中的BIM模型为数据源,将BIM模型几何数据完整导出,启动GPU调度程序和Revit多实例调度程序,首先,基于GPU并行生成构件的几何关系算法得到标高到房间的映射信息、标高到构件的映射信息、房间构件映射列表和构件相邻映射列表;第二,以进程间通信的形式,基于Revit本地多实例算法基于标高生成楼层外轮廓构件映射列表;最后,获取了上面两部分信息后,独立于Revit,依靠GPU并行计算能力,通过轮廓生成算法从楼层外轮廓构件出发,查找与其相邻的几何构件保存到外轮廓构件列表,通过扩展迭代提取外轮廓构件朝外的面,得到BIM模型外轮廓。
进一步地,GPU并行处理生成构件的几何关系算法包括以下步骤:
S1.根据构件属性将构件分别记录在房间列表(R列表)和其他构件列表(E列表);
S2.分别读取R列表和E列表,创建房间标高列表(RE列表)和构件标高列表(EE列表),按照标高由低到高排列,将R列表和E列表按总数分成N段,GPU调度程序首先并行处理分段内的房间和构件,根据其标高信息,如果列表中已存在,在现有项中加入房间或构件信息,如不存在新建一项,并插入房间或构件信息,然后将标高信息合并到RE列表或EE列表中,处理完毕得到标高到房间和标高到构件的映射信息;
S3.所述房间构件映射列表包括房间内部构件列表、房间轮廓构件列表以及房间外构件列表,首次将E列表分成N段,GPU并行处理分段内部构件,读取每个构件,再从S1标高到房间映射信息中,找到与该构件标高重叠的房间,通过几何运算若该构件属于某房间保存到房间内部构件列表,若相邻保存到房间轮廓构件列表,其它保存在房间外构件列表;
S4.相邻构件映射列表基于每个构件读取非房间构件且不存在几何空间上包含关系的构件的标高信息,在S1标高到构件映射信息中找到有重叠标高的对应构件进行检测,若几何相交保存到构件相邻列表;
进一步地,S2中并行处理分段内房间和构件在将标高信息合并到 RE列表完成前处理下一段。
进一步地,Revit本地多实例算法为首先读取BIM模型楼层标高生成高度列表,由GPU调度程序分配到不同实例,生成楼层外轮廓构件映射表,并将信息反馈给GPU调度程序得到楼层外轮廓构件列表,通过轮廓生成算法得到BIM模型外轮廓。
进一步地,轮廓生成算法为将所有外轮廓构件放入一个列表(A 列表)中,将A列表按照总数分为N段,每次并行处理一段,第一步当前待处理外轮廓构件有相邻构件且未处理,保存到待处理轮廓构件列表并标记为已处理,第二步除去被标记为已处理构件重复第一步,没有未处理构件时得到外轮廓构件列表,提取外轮廓构件朝外的面得到BIM模型外轮廓。
本发明所要解决的另一技术问题是提供一种BIM模型外部轮廓分层并行提取系统,所述系统包括访问层、控制层和计算层,所述访问层包括Revit插件入口,所述控制层包括Revit通信程序、GPU调度程序、Revit多实例调度程序和数据整合程序,所述计算层包括GPU 计算单位并行运算程序、Revit数据导出程序。
进一步地,Revit通信程序负责与GPU调度程序和Revit多实例调度程序负责调度GPU计算单位并行运算程序,传输数据,返回结果,并对结果合并。
进一步地,GPU调度程序负责调度GPU计算单位并行运算程序,所述Revit多实例调度程序负责调度Revit数据导出程序。
进一步地,数据整合程序负责整合GPU调度程序和Revit多实例调度程序得到的数据。
进一步地,Revit数据导出程序包括导出所有构件信息作为GPU 调度程序的原始数据,以及导出楼层外轮廓构件供Revit多实例调度程序调用。本发明充分利用GPU的并行计算能力,同时代的GPU相对于CPU,计算能力是后者的数倍;并且模型轮廓提取并不会改变BIM模型数据,并行计算中的相互等待更少;同时启动多个Revit实例对BIM模型的数据操作,充分利用了CPU多核的性能。模型轮廓提取相对于导出BIM数据,串行提取,或者仅仅依赖Revit制作插件的形式,性能提高了3到10倍,而准确性没有变化。
附图说明
图1为本发明基于Revit软件并行处理整体架构图;
图2为房间列表分段示意图;
图3为GPU调度程序流程图;
图4为GPU调度程序的并行方式示意图;
图5为构件房间GPU运算单位逻辑图
图6为构件相邻映射信息并行算法流程图;
图7为由标高映射表得到构件列表的展示图;
图8为Revit本地多实例算法流程图;
图9为外轮廓构件的并行算法流程图;
图10为本发明BIM模型外部轮廓分层并行提取系统架构图。
具体实施方式
图1为基于Revit软件并行处理整体架构图,本发明以Revit 软件中的BIM模型为数据源,将BIM模型几何数据完整导出,经过 GPU并行处理,获取构件之间的几何关联信息,包括标高到房间的映射信息,标高到构件的映射信息,构件相邻信息,房间与构件关系信息等;同时,本方案会在本机启动多个Revit实例,以进程间通信的形式,根据建筑的平面楼层,并行地获取各个楼层的外轮廓构件信息,包括构件朝外的面的信息,同时得到各个房间和它轮廓的构件对应关系,保存在列表中。在获取了这两个部分的信息之后,独立于Revit,依靠GPU强大的并行计算能力,从各个外部构件的朝外的面出发,项目延伸,直至构成完整的外部轮廓。
实施例1基于GPU的并行生成构件关系算法(步骤一)
基于GPU的并行生成构件关系算法,快速得到标高到房间的映射信息,标高到构件的映射信息,构件相邻信息,房间与构件关系信息等,具体步骤如下:
S101、根据构件的属性,将其分成房间列表RoomList,本文简称R列表,和其它构件列表ElementList,本文简称E列表。
这一步骤使用的并行算法为:首先将所有构件放入一个列表,列表根据本地GPU处理单元数量按照固定大小,假设大小为N=64,分成若干段,然后每次将一段传到GPU并行处理,对每一个构件判断是否是房间构件,一次可以处理N个构件,即处理效率是串行的N倍,最后根据处理结构,分别记录在房间列表RoomList和其它构件列表 ElementList。
S102、得到标高到房间、标高到构件的映射信息。
标高到房间的算法:首先读取房间的列表RoomList,创建标高范围列表RoomElevLists,本文简称RE列表,按照标高由低到高排列;如图2所示将房间按照总数分成N段,每次并行处理一段:GPU 调度程序分为两个部分,第一部分为并行处理分段内部的房间,根据房间的标高信息,如果列表中已经存在,则在现有项中加入房间信息,如果没有则新建一项,并插入房间的信息;第二部分建立在第一部分的基础上,它将第一部分得到列表,合并到RoomElevLists之中。在前以分段结束之后,第一个部分的程序不必等待第二部分的程序结束,可以继续执行下一分段,大大提高了效率。图3中数据块1到数据块 N代表被分成N段的房间列表,每一个数据块是房间列表的一个子表;并行单元A表示GPU调度程序的第一部分,它会并行处理分段内部的房间,它的产出是数据块结果列表;并行单元B表示合并并行单元A 的处理结果到RoomElevLists之中,它的产出是总结果列表。图4中合并箭头的左边的并行单元A的内部结构,数据块中的房间会被GPU 的核心Core并行处理,生成分段房间标高映射表;合并箭头则表示并行单元B本身,它的工作是通过并行方式,将分段房间标高映射表合并到总体分段房间标高映射表中。当所有分段处理完毕,即可得到完整的标高到房间的映射信息。
标高到构件的算法:1.读取构件的列表ElementList,创建标高范围列表ElementElevList,以下简称EE列表,按照标高由低到高排列;2.将构件按照总数分成N段,每次并行处理一段;3.GPU调度程序分为两个部分,第一部分为并行处理分段内部的构件,根据构件的标高信息,如果列表中已经存在,则在现有项中加入构件信息,如果没有则新建一项,并插入构件的信息;第二部分建立在第一部分的基础上,它将第一部分得到列表,合并到ElementElevList之中。在前以分段结束之后,第一个部分的程序不必等待第二部分的程序结束,可以继续执行下一分段,大大提高了效率。
S103、得到房间到房间内部(在空间上包含于房间的)构件、房间到房间轮廓、房间外的构件和相邻构件的映射信息。通过并行运行多个GPU运算单位,并行计算快速得到房间到构件映射信息、房间到房间轮廓、房间外的构件的映射信息以及相邻构件的映射信息。
房间到构件、房间到房间轮廓及房间外的构件的算法:首先将其它构件列表ElementList按照总数分成N段,每次并行处理一段;GPU 调度程序分为两部分,第一个部分为并行处理分段内部的构件,根据“构件房间GPU运算单位逻辑”,将构件保存到相应的列表;第二部分建立在第一部分的基础之上,它将第一部分得到列表,合并成大的列表;合并的结果既是房间到构件映射信息、房间到房间轮廓的映射信息以及房间外的构件。其中,“构件房间GPU运算单位逻辑”如图 5所示,对于每个构件,读取它的最高标高和最低标高,再从有序的标高到房间映射表中,找到标高和该构件重叠的房间,通过几何运算,判断该构件是否和房间几何相交,如果构件属于某个房间,即包含或者和某个房间几何相交,则加入房间到构件映射信息表中,如果相邻则把保存到一个记录房间轮廓构件中,其它则保存在房间外构件的列表中。
相邻构件映射信息的算法:如图6所示,从每个构件出发,对那些不属于房间且不存在包含关系的构件读取其最高标高位置和最低标高位置,已知其标高信息,前面已经建立了标高到构件映射表,这里通过构件的标高,找到对应的标高到构件映射表中与当前构件有重叠的那些标高,只对这些标高对应的构件进行检测,如果检测到几何相交则保存在该构件所在的列表项即图中构件相邻列表中。经过上述算法共同作用之后,得到图7中的绝大多数内容。记录房间轮廓构件和房间外构件目前在同一个列表中。
实施例2Revit本地多实例算法(步骤二)
如图8所示需要在本机启动多个Revit实例,Revit对CPU内存占用很大,建议少于CPU数量的1/2。
Revit本地多实例算法:读取BIM模型的楼层标高生成高度列表,由Revit多实例调度程序分配到不同的实例;生成楼层外轮廓构件映射表,并将信息反馈给Revit多实例调度程序;对于已经完成工作的实例,调度程序负责将未分配的楼层传给它,该实例将处理新的楼层;待所有楼层都处理完毕,可以得到楼层轮廓构件列表。
BIM模型轮廓生成算法:从上面步骤已经得到Revit各个楼层的外轮廓列表,新建一个列表并将所有外轮廓构件放入一个列表,记为 AllBoudaryElement,本文简称A列表;将AllBoudaryElement按照总数分成N段,每次并行处理一段;GPU调度程序分为两个部分:第一个部分为并行处理分段内部的构件,如图9所示,将相邻构件保存到待处理轮廓构件的列表,同时当前构件标记为已处理;第二部分建立在第一部分的基础之上,它将第一部分得到的列表中除去被标记为已处理的构件,然后重复第一部分;当没有新的构件需要处理,即可得到最终的外轮廓构件列表。对于每一个外轮廓构件,提取它朝外的面,即可得到BIM模型外轮廓。
该算法的具体实施包括以下几部分,Revit插件和独立的基于 GPU的并行处理程序。本方案推荐的计算机配置,CPU为intel i9,或者计算能力不低于i9的服务器CPU,内存不低于32G。
图10为BIM模型外部轮廓分层并行提取系统架构图,系统包括访问层、控制层和计算层,其中访问层包括Revit插件入口,所述插件入口,即插件在Revit面板上添加的按钮,通过它可以启动提取BIM模型外部轮廓程序;控制层包括Revit通信程序,所述Revit 通信程序负责与GPU调度程序和Revit多实例调度程序进行通信,传输数据,并返回结果;GPU调度程序,所述GPU调度程序负责调度 GPU计算单位并行运算程序,传输数据,返回结果,并对结果进行合并;Revit多实例调度程序,负责调度Revit数据导出程序,传输数据,返回结果,并对结果进行合并和数据整合程序,所述数据整合程序负责整合GPU调度程序和Revit多实例调度程序得到的数据;计算层包括GPU计算单位并行运算程序负责具体的GPU端构件关系建立的计算;Revit导出程序包括两个部分,Revit数据导出程序(所有构件)导出所有构件的信息,作为GPU调度程序的原始数据,Revit 数据导出程序(楼层外轮廓);供Revit多实例调度程序调用。在于分为两个阶段,第一阶段,所述算法以Revit软件平台为承载,进行数据提取;数据提取完成后,脱离Revit平台限制,进入第二阶段,采用GPU并行计算,通过轮廓生成算法从楼层外轮廓构件出发,扩展迭代提取朝外的面得到BIM模型外轮廓。本方法速度快,效果好,避免Revit软件平台对多线程的限制,并行算法部分方便移植到其他平台,满足BIM模型快速外廓可视化的需求。
上述系统的运行步骤为:
S101、用户打开Revit程序,并且打开需要提取轮廓的Revit 模型,启动Revit插件;
S102、Revit通信程序启动,运行Revit数据导出程序,导出所有构件;
S103、GPU调度程序和Revit多实例调度程序启动,前者运行 GPU计算单元并行运算程序,后者运行Revit数据导出程序导出楼层外轮廓构件;
S104、数据整合程序将计算结果整合,返回给Revit通信程序;
S105、Revit通信程序告诉用户导出完毕,并给出结果文件。
基于上述系统,本发明BIM模型外部轮廓分层并行快速提取方法,从Revit中提取BIM模型数据,通过GPU并行建立几何拓扑关系,包含房间与构件的关系,以及构件与构件的关系。本申请中的构件,其定义为BIM模型中的实体,如墙、柱、楼板等。同时根据模型的楼层信息,在同一台机器启动多个Revit实例,并行获取各个楼层外轮廓构件。从得到的各楼层外轮廓构件出发,查找与它们相邻的几何构件,将使得它们相连的构件也一并加入外轮廓,通过扩展迭代,进而行为一个完整的模型外轮廓。最后隐去外轮廓构件不可见的面,从而得到 BIM模型外轮廓。
最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
- BIM模型外部轮廓分层并行快速提取方法及系统
- 一种BIM模型外部轮廓快速提取方法