基础设施模型几何形状到图块格式的转换的制作方法

文档序号:26360792发布日期:2021-08-20 20:37阅读:86来源:国知局
基础设施模型几何形状到图块格式的转换的制作方法

背景。

本公开总地涉及基础设施建模,并且更具体地,涉及利用图块(tile)显示基础设施模型的视图。



背景技术:

贯穿基础设施(例如,建筑、工厂、道路、铁路、桥梁、电力和通信网络等)的设计、构造和操作,使用基础设施建模应用来建模基础设施经常是合期望的。基础设施建模应用传统上已经使用了各种不同的技术和数据格式来维护项目不同阶段的基础设施描述。在过去,根据这样的格式维护的基础设施模型已经脱节,并且已经包括大量的数据冗余和其他低效源。模型可能已经针对特定的用例进行了优化和适配,而没有太多考虑基础设施项目的其他阶段,这导致了不同的产品/规程/阶段数据孤岛。

最近,已经开发了如下系统,其能够打破这样的现有的产品/规程/阶段数据孤岛,并且使得能够生成现实世界基础设施的真正“数字双胞胎”,所述“数字双胞胎”以统一的方式描述基础设施的各方面。这种“数字双胞胎”的生成已经解决了传统基础设施建模技术的许多限制。然而,它也导致了技术挑战。

这些挑战之一涉及如何在客户端设备上高效地显示基础架构模型的视图。由于客户端设备本身可能缺乏用于生成视图的处理和存储能力,因此它们可能代替地依赖云计算设备来“发布”模型。在传统模型“发布”中,云计算设备可以生成所有可能的图块(例如,二维(2d)或三维(3d)图块)的集合,所述图块表示基础设施模型在不同lod上的部分。这样的图块生成可以涉及将基础设施模型的几何形状转换成可以容易地在客户端设备的显示屏上显示的形式。当需要时,可以向客户端设备供应图块,客户端设备简单地读取所供给的图块并渲染其内容。

虽然存在用于将一些类型的基础设施模型的几何形状转换成可以容易地显示在客户端设备的显示屏上的形式的某些现有技术,但是这样的现有技术遭受许多缺点。例如,已经利用了已经使用标准格式(如gl传输格式(gitf))来表示网格和图块树的技术。然而,以其标准形式的gitf不具有产生某些图元(诸如折线(polyline),包括网格边)的能力。已经尝试扩展gitf,以允许它的图块将折线和边的定义包括为简单的线串,所述线串将被反序列化和细分。然而,扩展gitf具有缺点。折线和边的细分是处理密集型操作,其可能给客户端设备经常有限的处理资源带来负担。客户端设备可以利用适度的中央处理单元(cpu)在单线程环境中执行它们的软件。gitf的固有结构不适宜于与折线和边一起使用,并且这样做的修改可能导致存储资源的低效利用。例如,gitf将图元描述为二进制数据的多个并行阵列(例如,网格的顶点由用于定位的阵列、用于颜色的另一阵列、用于法向量的第三阵列来描述,每个阵列具有相同长度)。如果该结构适用于存储折线,则当对折线进行细分时,折线的每个线段中的每个顶点被重复三次,从而导致包含大量重复数据的三个并行阵列。当对网格的边进行细分时,存储资源的这种低效使用可能甚至更糟糕,因为与边相关联的所有顶点数据在具有已经描述网格的顶点数据的情况下是冗余的。

因此,存在对于用于将基础设施模型的几何形状转换成适于传输和在客户端设备上显示的格式的改进技术的需要,所述改进技术更好地利用处理和存储资源。



技术实现要素:

提供了用于将表示为具有给定符号(例如,颜色、线宽、材料等)的高级几何形状图元(例如,b样条、曲线、圆锥、多面(polyface)等)的基础设施模型(例如,imodel®模型)的几何形状转换成低级图元(例如,网格和折线)并将这些低级图元编码成适于在客户端设备上传输并最终显示的图块内容(例如,二进制表示)的技术。这样的技术可以解决现有技术的缺点。前端应用和后端应用之间的架构分离可以允许后端应用远离客户端设备地执行高级图元的转换。后端应用可以在鲁棒的硬件设备上执行,所述硬件设备在多线程环境中在强大的cpu上执行软件。通过在后端应用上执行诸如折线细分之类的cpu密集型操作,客户端设备上的前端应用可能只不过需要提交低级图元以便在其gpu上进行渲染。此外,描述顶点的所有数据可以被组合成单个查找表,该查找表可以作为纹理被提交给客户端设备的gpu,并且在着色器代码内被采样以获得被渲染的顶点的各方面(例如,颜色、定位、法线等),从而最小化数据重复。网格及其所有边可以使用相同的查找表。折线的顶点可以简单地通过在查找表中重复相同的索引而不是重复与顶点相关联的所有数据来扩展成四边形,从而进一步减少了存储资源(例如,存储器)的消耗。

应当理解,除了本发明内容中讨论的那些之外,可以实现各种附加特征和替代实施例。本发明内容旨在简单地作为对读者的简要介绍,并不指示或暗示本文提及的示例覆盖本公开的所有方面,或者是本公开的必需或必要方面。

附图说明

以下描述参考了示例实施例的附图,其中:

图1a是示例基础设施建模软件架构的高级框图;

图1b是可以与图1a的基础设施建模软件架构的公文包一起使用的示例数据库模式的一部分;

图2是可以作为客户端设备上的前端应用的部分来执行的基础设施建模前端模块的示例软件类的框图;

图3是可以作为客户端设备或云计算设备上的后端应用的部分来执行的基础设施建模后端模块的示例软件类的框图;

图4是用于前端驱动、增量式hlod子树创建和图块动态生成来显示基础设施模型(例如,imodel®模型)的视图的示例步骤序列的流程图;

图5是可以作为图4的一部分执行以产生累积的几何形状、将该累积的几何形状从高级图元转换为低级图元、并将结果编码为图块内容(例如,二进制表示)的示例步骤序列的流程图;

图6是可以由图5的几何形状集合子处理执行的示例步骤序列的流程图;

图7是可以由图5的序列化子处理执行的示例步骤序列的流程图;和

图8是用于编码图块内容的示例格式。

具体实施方式

图1a是示例基础设施建模软件架构100的高级框图。该架构可以划分为在终端用户本地提供的一个或多个计算设备(统称为“客户端设备”)上执行的客户端软件110和在远离终端用户提供的一个或多个计算设备(统称为“云计算设备”)上执行的基于云的软件112,基于云的软件112可经由网络(例如,互联网)访问。客户端软件110可以包括在由web浏览器124(例如,chrome®web浏览器)提供的虚拟环境(例如,“浏览器沙箱”)内操作的web前端应用120、直接在操作系统下操作的桌面前端应用122以及与之交互的后端应用132。基于云的软件112可以包括基础设施建模中枢服务(例如,imodelhubtm服务)142、其他服务软件152、154和与web前端应用120交互的后端应用130。

基于云的软件112的核心可以是基础设施建模中枢服务(例如,imodelhubtm服务)142,其为充当物理基础设施的“数字双胞胎”的基础设施模型(例如,imodel®模型)提供集中式管理和同步支持。如本文所使用的,术语“基础设施”是指在现实世界中已经构建或计划构建的物理结构或对象。基础设施的示例包括建筑、工厂、道路、铁路、管网等。基础设施模型(例如,imodel®模型)可以是这样的建筑、工厂、道路、铁路、管网等的2d或3d“数字双胞胎”。

基础设施建模中枢服务(例如,imodelhubtm服务)142在储存库144-146中维护基础设施模型(例如,imodel®模型),储存库144-146包括公文包152、接受的变更集集合147、元数据148(例如,其包括关于变更集的存储位置、查找标识符、序列信息等)和锁149。如本文所使用的,术语“储存库”是指分布式数据库。如本文所使用的,术语“公文包”是指数据库的特定实例(例如,sqlite数据库)。公文包可以用作储存库的组成数据库。如本文所使用的,术语“变更集”是指捕获将特定公文包从一个有效状态变换到新的有效状态所需的改变的持久记录。

储存库144-146中的公文包152可以作为空的“基线”公文包开始,该“基线”公文包由基础设施建模中枢服务(例如,imodelhubtm服务)142以编程方式生成和存留。储存库144-146可以通过接受新变更集到接受的变更集集合147中来修改。随着接受的变更集集合147中的变更集数量的增长,取得空的“基线”公文包并应用对于将其变换成特定版本(例如,“最新版本”)的公文包而言所需的所有变更集所要求的时间可能变大。出于该原因,基础设施建模中枢服务(例如,imodelhubtm服务)142可以创建不同版本的附加“快照”公文包152。当需要公文包的特定版本(例如,“最新版本”)时,访问最接近这样的版本(其可以是“快照”公文包)的公文包152,并应用来自集合147的变更集(或反向变更集),直到获得所需版本的公文包。

在储存库144-146的公文包152中维护的基础设施模型(例如,imodel®模型)可以利用概念模式(例如,构建基础架构模式(bis))进行定义并使用底层数据库模式(例如,dgndb)进行存储。

基础设施建模中枢服务(例如,imodelhubtm服务)142可以与云中的许多其他服务交互,所述服务执行信息管理和支持功能。例如,信息管理服务152可以管理资产数据、项目数据、现实数据、物联网(iot)数据、代码和其他特征。此外,桥服务154可以与基础设施建模中枢服务(例如,imodelhubtm服务)142一起工作,以准许与遗留数据源(未示出)的互操作,从而使用知道如何读取和解释遗留格式的源数据的源格式特定桥156来递增地对齐数据。各种各样附加服务(未示出)也可以被提供并与基础设施建模中枢服务(例如,imodelhubtm服务)142交互。

为了准许访问在储存库144-146的公文包152中维护的基础设施模型(例如,imodel®模型),可以提供后端应用130、132。如上面提及的,一些后端应用130可以作为基于云的软件112的一部分位于云中,而其他后端应用可以作为客户端软件110的一部分位于客户端设备上。后端应用130、132可以维护公文包138的本地副本以及将它们变换成储存库144-146的期望版本的公文包所需的变更集。后端应用130、132可以订阅由基础设施建模中枢服务(例如,imodelhubtm服务)142提供的通知功能来接收关于储存库的接受的变更集集合147中的新变更集的通知。后端应用130、132然后可以“拉取”(下载)(一个或多个)新的变更集,并将它们应用到它们的公文包138,以将它们更新到新的版本。当后端应用130、132修改公文包138以传播改变时,可以发生类似的操作。

后端应用130、132可以包括用于服务来自前端应用120、122的请求的功能,所述请求包括对用于计算hlod子树的初始元数据的请求以及对包括用于生长hlod子树的元数据的图块的请求。响应于这样的请求,后端应用130、132可以确定元数据,计算初始元数据并生成所请求的图块。作为该图块生成的一部分,后端应用120、122可以访问本地公文包138,并将其中维护的基础设施模型的几何形状转换成可由前端应用120、122显示的低级图元(例如,网格和折线)。后端应用120、122的该功能和其他功能可以由与基础设施建模本机模块(例如,imodel.js本机模块)136一起工作的基础设施建模后端模块(例如,imodel.js后端模块)134实现。基础设施建模后端模块可以依赖基础设施建模本机模块来访问公文包138。

前端应用120、122主要关注提供用于显示和使能实现与基础设施模型(例如,imodel®模型)的用户交互的用户接口。一些前端应用可以是在由客户端设备上的web浏览器(例如,chrome®web浏览器)124提供的虚拟环境(例如,“浏览器沙箱”)内操作的web前端应用120,而其他前端应用可以是作为独立应用执行的桌面前端应用122,与客户端设备的操作系统直接交互。桌面前端应用122可以包括嵌入式web浏览器代码(例如,chromium®代码)126,以准许它们以类似于web前端应用120的方式(具有少数例外)与后端应用132交互。

前端应用120、122可以提供用于计算初始hlod树、请求和显示hlod树的特定图块(包括渲染图块中的低级图元)、以及使用图块的元数据来确定应该如何细化图块以生长初始hlod子树的功能,以及各种其他功能。这样的功能可以由基础设施建模前端模块(例如,imodel.js前端模块)128实现,基础设施建模前端模块(例如,imodel.js前端模块)128向后端应用130、132的基础设施建模后端模块(例如,imodel.js后端模块)134发送请求。取决于前端应用120、122是web前端应用120还是桌面前端应用122,请求可以被不同地发送,例如经由web协议(例如,超文本传输协议(http))或经由进程间通信(ipc))发送。

如上面所讨论的,基础设施模型(例如,imodel®模型)可以根据概念模式(例如,构建基础设施模式(bis))构造,并使用底层数据库模式(例如,dgndb)存储在公文包138、152中。概念模式定义了用于建模基础设施的语义、数据结构和概念。物理信息可以充当“骨干”,并且非物理信息(例如,分析信息、功能信息、信息性信息等)可以相对于(例如,扩充)“骨干”而维护。元素、模型、元素方面和关系可以充当概念模式的构建块。在该上下文中,可以单独标识和锁定的最细粒度的记录是元素,它表示(即,在该术语的通俗意义上,建模)现实世界中的实体。紧密相关的元素的集合可以表示完整的对象。基于被建模对象的性质,一个元素可以是“前导”元素。其他元素典型地在前导元素后面关联。模型是元素集合的容器,其中元素集合共同表示(即,在该术语的通俗意义上,建模)现实世界中的实体。模型拥有它包含的元素,并为元素提供上下文。每个元素被包含在单个模型中。每个模型“建模”某个元素(不包含在该模型中),除了储存库模型,其类似于内容表进行操作。模型可以根据模型分级进行布置,以支持从多个角度进行建模。单个储存库模型可以充当模型分级的根。关系是将两个或更多个元素、元素方面或模型进行相关的连接。关系的示例包括暗示所有权的父子关系和定义组或互连的对等关系。在一个实施例中,可以提供两种类型的关系,其中抽象关系禁止实例化但准许从其继承,并且封闭关系禁止继承。同样,元素方面描述了属于特定元素但可能具有独立生命周期(例如,可能在元素的生命期中来来去去)的属性集合。元素方面典型地是不可单独标识的,并且除了来自拥有它的元素之外,缺少引入的关系。。

底层数据库模式(例如,dgndb)定义个体表以及由公文包138、152使用的表(例如,sqlite表)的列和行。图1b是示例数据库模式190的一部分,示例数据库模式190可以与图1a的基础设施建模软件架构100的公文包138、152一起使用。在数据库模式190中,模型表191的行表示模型。模型表列可以包括模型id和代码列。元素表192可以包括表示元素的行。元素表列可以包括元素id列、代码列、模型id列(例如,参考模型表190的行)、类别id列(例如,参考类别表195的行)和几何形状列(例如,参考元素几何形状表193的行)。元素几何形状表193的行可以表示参考元素的几何形状方面。元素几何形状表193的列可以包括放置列、大小列和几何形状流。几何形状流可以包含作为高级几何形状图元(例如,b样条、曲线、圆锥、多面等)集合的几何形状的定义。元素几何形状表行可以参考子类别表194的一行或多行。子类别表194的行可以表示子类别。子类别表194的列可以包括子类别id列、代码列、类别id列(参考类别表195的行)、以及表示特性(例如,颜色、线宽、材料等)的符号列,高级几何形状图元应当用所述特性进行渲染。类别表194的行可以表示类别。类别表194的列可以包括元素id列和代码列。此外,视图表196的行可以表示图形视图。视图表196的列可以包括查看的模型列(例如,参考模型表192的一行或多行)、查看的类别列(例如,参考类别表194的一行或多行)和子类别覆盖列(例如,通过参考子类别覆盖表197的一行或多行)。

上述基础设施建模软件架构100和模式可以在涉及前端驱动、增量式hlod子树创建和图块动态生成的基础设施模型显示技术中使用。前端应用120、122的基础设施建模前端模块(例如,imodel.js前端模块)128基于未提供有图块内容的初始元数据来递增地创建本地hlod子树(例如,八叉树、四叉树或具有对应于图块的节点的另外类型的树),并且基于来自后端应用130、132的后端应用的基础设施建模后端模块(例如,imodel.js后端模块)134的提供有图块内容的元数据来细化。基础设施建模后端模块134可以不维护hlod树,而是简单地依据请求生成图块,供应它们,并将它们存储在图块高速缓存中以防再次需要它们。

作为基础设施建模后端模块(例如,imodel.js后端模块)进行的图块生成的一部分,可以采用用于将公文包138中的表示为具有给定符号(例如,颜色、线宽、材料等)的高级几何形状图元(例如,b样条、曲线、圆锥、多面等)的基础设施模型(例如,imodel®模型)的几何形状转换成低级图元(例如,网格和折线)并将这些低级图元编码成适于在客户端设备上传输并最终显示的图块内容(例如,二进制表示)的改进技术。这样的技术可以解决现有技术的缺点,包括对它们理解复杂几何形状表示的限制,以及过度资源(例如,处理资源、存储资源、网络资源等)的消耗。如本文所使用的,术语“折线”是指由两个或更多个点的一个或多个集合组成的图元,其中每个集合首尾连接形成线串。同样,“网格”是指由近似可能弯曲的表面的三角形集合连同表面的边的表示组成的图元。网格的边可以是:“硬边”,即连接表面的两个顶点的线段集合;“轮廓边”,即被定义为连接表面的两个顶点的线段集合的网格弯曲部分的边(每个边伴随有控制边的可见性的表面法向量);或者是“边链”,即连接表面两个或更多个顶点的折线的集合。

图2是可以作为客户端设备上的前端应用120、122的一部分来执行的基础设施建模前端模块(例如,imodel.js前端模块)128的示例软件类的框图。基础设施模型连接对象210可以包括应用程序接口(api),用于与由基础设施建模后端模块134管理的公文包138进行连接,并从其请求信息。基础设施模型连接对象210可以具有一个或多个模型状态对象220,模型状态对象220维护基础设施模型的前端表示,并且包含用于获得图形以便在客户端设备的显示屏上渲染其内容的api。每个模型状态对象220可以具有零个或一个前端图块树对象230,其作为本地hlod子树的容器来操作。

前端图块树对象230可以提供用于获得要在客户端设备的显示屏上渲染的基础设施模型的一部分的图形对象的api。这可以涉及确定哪些图块在期望的lod处相交,根据需要在hlod子树上生成节点,以及从基础设施建模后端模块134请求那些图块的内容——如果在本地尚未可用的话。为此目的,前端图块树对象230可以维护位置信息、hlod子树的空间(例如,体积)和图块屏幕大小(例如,如像素数量)。

图块对象240可以表示本地hlod子树中的节点。图块对象240可以具有零个或一个图块内容对象250,图块内容对象250具有图形对象260,为了在显示屏上绘制图块内容,图形对象260可以被提交给客户端设备上的渲染系统。它可能没有图块内容对象250,直到从基础设施建模后端模块134请求图块内容,这一般在第一次需要渲染图块时发生。图块对象240可以维护图块体积。此外,图块对象240可以维护指示图块内容可用性的内容状态。例如,“未加载”的内容状态可以指示还没有对图块的内容做出请求,“入队”的内容状态可以指示已经做出请求但是仍然在等待响应,“加载”的内容状态可以指示响应已经被接收到并且正在处理,并且“就绪”的内容状态可以指示已经接收到图块的内容并且将其存储在要渲染的图块内容对象250中。此外,图块对象240可以维护确定何时以及如何细化图块的细化策略的指示。

图3是基础设施建模后端模块(例如,imodel.js后端模块)134的示例软件类的框图,其可以作为客户端设备或云计算设备上的后端应用130、132的一部分来执行。基础设施建模数据库对象310可以提供对(例如,保持打开)包含一个或多个模型320的公文包138的访问。如上面讨论的,模型拥有一个或多个元素,包含上下文并为它们提供上下文。每个模型320可以具有零个或一个后端图块树对象330,其提供用于获得元数据和图块内容的api。为此目的,后端图块树对象330可以维护对于基础设施模型后端模块134而言已知的hlod树部分的位置信息和空间(例如,体积)。

当图块的内容被请求时,后端图块树对象330可以使用一个或多个图块加载器对象来异步地获得通过以算法方式生成的内容id来索引的图块内容。后端图块树对象330可以维护活动图块加载器对象330的集合,并且对相同图块内容的多个请求可以由相同图块树对象330来满足。每个图块加载器对象330可以根据内容id来管理占用图块空间(例如,体积)的图块的内容的存储。在操作中,图块加载器对象340可以通过查询图块高速缓存数据库对象350来确定图块内容是否已经存在于后端模块134的图块高速缓存中。如果已经存在,则图块加载器对象340可以返回图块内容连同与其相关的元数据。如果尚未存在,则图块加载器对象340可以调用几何形状加载器对象360以从中获得几何形状累积。几何形状加载器对象360可以操作来查询基础设施建模数据库对象310,以基于弦长公差来获得图块的空间(例如,体积)内的几何形状。这样的所获得的几何形状可以是以具有给定符号(例如,颜色、线宽、材料等)的高级几何形状图元(例如,b样条、曲线、圆锥、多面等)的形式。图块加载器对象340可以处理高级图元以产生存储为几何形状累积的低级图元(例如,网格和折线),该几何形状累积被提供给图块加载器对象340。图块加载器对象340可以调用图块写入器对象370来将累积的几何形状(就低级图元而言)转换成表示(例如,二进制表示),所述表示与元数据一起形成图块内容。在转换之后,图块加载器对象340可以返回图块内容和与其相关的元数据,并且还调用图块高速缓存数据库对象350来将内容添加到图块高速缓存。

图4是用于前端驱动、增量式hlod子树创建和图块(例如,2d或3d图块)动态生成来显示基础设施模型(例如,imodel®模型)的视图的示例步骤序列400的流程图。步骤400可以由基础设施建模前端模块(例如,imodel.js前端模块)128和基础设施建模后端模块(例如,imodel.js后端模块)134的上面讨论的对象来实现,然而这里已经对个体对象进行了抽象以促进对总体处理流的理解。在步骤405,客户端设备上的基础设施建模前端模块128请求基础设施模型的元数据,该基础设施模型的视图将被显示在显示屏上。在步骤410,基础设施建模后端模块计算并返回初始元数据,包括视图中基础设施模型所占用的空间(例如,体积),以及包含的几何形状量的度量。基础设施建模前端模块128然后开始生成本地hlod子树。

在步骤415,基础设施建模前端模块128将所选图块设置为根图块并且将所选空间(例如,体积)设置为基础设施模型所占用的整个空间(例如,体积)。在步骤420,基础设施建模前端模块128确定是否以及如何在没有图块内容的情况下对所选图块进行再分。在子步骤421,如果所选图块不包括几何形状,则所选图块被视为终止节点,并且不进行任何进一步步骤。在子步骤422,如果所选图块包括大于预定阈值的几何形状度量(例如,处理的元素的数量指示“大量”的几何形状),则不请求图块内容,并且使用多个子图块细化策略来细化所选图块,其中图块被再分为多个(例如,8个、4个等)子图块,每个子图块占用图块的空间的一部分(例如,体积的子体积),并且本地hlod子树被更新以添加附加的子图块。然后,执行循环回到步骤420,将每个新创建的子图块替换为所选图块。否则,在步骤423,执行继续进行到将请求图块内容的地方。

在步骤425,基础设施建模前端模块128请求在上面步骤中生成的所选图块的图块内容。为了请求所选图块,基础设施建模前端模块128以算法方式计算内容id,该内容id指示图块在本地hlod子树和期望lod中的定位。内容id充当基础设施建模前端模块128和基础设施建模后端模块134用以协调它们的动作的机制,并且是hlod树的上下文内的唯一标识符。给定hlod树的全部空间(例如,体积),指定图块的空间(例如,体积)可以使用包含在内容id中的信息来计算。

在步骤430,基础设施建模后端模块134基于所供给的内容id计算所选图块的空间(例如,体积)。在步骤435,基础设施建模后端模块134处理空间(例如,体积)内的几何形状,保留在lod上可见地贡献的几何形状,同时丢弃在lod上太小而无法可见地贡献的几何形状,以产生累积的几何形状,并将该累积的几何形状从高级图元转换为低级图元。与这样的操作同时,累积元数据。元数据可以包括几何形状度量(例如,处理的元素数量和跳过的元素数量)、弯曲几何形状的指示符(例如,它的存在或其不存在),以及由于大小而排除了某种几何形状的指示符(即,存在可用的某种附加的几何形状,其太小而无法可见地贡献)。

在步骤440,累积的几何形状被转换并与元数据一起被编码成图块内容。图块内容被添加到基础设施建模后端模块134处的图块高速缓存。

在步骤445,图块内容被传输到基础设施建模前端模块128。在步骤450,基础设施建模前端模块128确定是否以及如何在给定期望lod的情况下细化所选图块。在子步骤451,如果图块特定元数据中的几何形状度量指示不包括几何形状,则可以丢弃该图块。在子步骤452,如果图块特定元数据中的几何形状度量指示包括所有几何形状,则得出结论:所选图块已经处于最大分辨率,该图块被标记为本地hlod子树中的终止节点,并且不执行细化。在子步骤453,如果图块特定元数据中的几何形状度量指示某种几何形状被从图块内容中排除,或者弯曲几何形状的指示符指示弯曲几何形状的存在,则基础设施建模前端模块128得出结论:所选图块可以以更高的分辨率显示,并且可以应用图块细化策略。图块细化策略可以是多子图块细化策略,其中图块被再分为多个(例如,8个、4个等)子图块,每个子图块占用图块的空间的一部分(例如,体积的子体积),并且本地hlod子树被更新以添加多个子图块,类似于上面的步骤422中那样。可替代地,图块细化策略可以是单图块细化策略,其中生成与图块占用相同空间(例如,体积)但是具有比图块更高的分辨率(例如,更高的像素数量)的单个子图块,并且本地hlod子树被更新以添加单个子图块。然后,执行可以循环回到步骤425,根据需要用不同的图块替换所选图块,以获得用于在客户端设备的显示屏上示出的基础设施模型的视图的期望lod的细化图块。

图5是示例步骤序列500的流程图,所述示例步骤序列500可以作为图4的步骤435-440的一部分执行以产生累积的几何形状,将该累积的几何形状从高级图元转换为低级图元,并将结果编码为图块内容(例如,二进制表示)。lod可以通过图块屏幕大小来指示。在步骤510,基于图块屏幕大小计算笔画(stroking)/分面(faceting)的弦长公差。在步骤520,针对与图块的空间(例如,体积)相交的元素来查询存储基础设施模型(例如,imodel®模型)的公文包的表。在步骤530,对于每个元素,如果它占用相对于图块的空间(例如,体积)的足够小的空间(例如,体积)使得元素将并不可见地贡献(如弦长公差所指示的),则跳过该元素。如果它占用相对于图块的空间(例如,体积)的空间(例如,体积)使得元素将可见地贡献(如弦长公差所指示的),则在步骤540执行几何形状集合子处理。然后,在步骤550,执行序列化子处理以序列化(低级图元的)几何形状集合和描述图块内几何形状的元数据,并将其编码成适合于传输的图块内容(例如,二进制表示)。

图6是可以由图5的步骤540的几何形状集合子处理执行的示例步骤序列600的流程图。一般而言,对于给定的元素、图块体积以及弦长公差,几何形状集合子处理迭代元素几何形状,将其转换为低级图元集合,并将其添加到几何形状累积。对于元素的几何形状流中的每个高级几何形状图元,如果它占用相对于图块的空间(例如,体积)的足够小的空间(例如,体积)使得高级几何形状图元将并不可见地贡献,则在步骤610跳过该元素。如果它占用相对于图块的空间(例如,体积)的空间(例如,体积)使得高级几何形状图元将可见地贡献,则找到现有条目,或者如果不存在现有条目,则在步骤620将新的条目添加到几何形状累积的特征表。特征表是将低级图元(例如,网格或折线)中的顶点与元素id、子类别id和几何形状类的组合相关联的表。元素id标识拥有图元的元素。子类别id和几何形状类用于对几何形状子集进行分类。作为步骤620的一部分,找到对应于与所讨论的高级几何形状图元相关的元素id、子类别id和几何形状类的条目,或者添加新的条目。

在步骤630,确定高级几何形状图元的符号。在步骤640,基于符号的类型,生成多面或线串。例如,如果它是多面,则根据弦长公差抽取高级几何形状图元。如果是曲线,则对于开放曲线,通过加大到指定的公差来生成线串。如果是闭合曲线,则通过分面到指定的公差来生成多面。如果闭合曲线是平面的,并且其符号指定应当绘制其轮廓线,则还也会像开放曲线一样生成线串。该序列可以重复。在步骤650,更新特征表的条目,以包括基于多面或线的低级图元的顶点的描述。例如,对于产生的每个多面,生成边,并将其裁剪到图块空间(例如,体积)的边界,这可以产生多个裁剪的多面。确定与符号兼容的网格。每个裁剪的多面的每个顶点被添加到网格,并与特征表条目连同描述表面三角形和边的索引相关联。同样,对于所产生的每一个线串,它被裁剪到图块空间(例如,体积)的边界,这可以产生多个裁剪的线串。确定与符号兼容的折线。每个裁剪线串的每个顶点被添加到折线,并与特征表条目连同描述每个线串的点的索引相关联。

图7是可以由图5的步骤550的序列化子处理执行的示例步骤序列700的流程图。一般而言,给定低级图元的几何形状累积和描述图块内的几何形状的元数据,序列化子处理将其编码成适合于传输的图块内容(例如,二进制表示)。图8是用于编码图块内容的示例格式800。在步骤710,缓冲区(例如,二进制缓冲区)被创建来保存报头810、场景820和数据存储830的数据。报头810包括格式id814、格式版本816、将紧密包围图块内的几何形状的体积818(其可能比图块体积更紧地拟合)、弦长公差820、处理的元素(即,至少包含足够大以进行贡献的某种几何形状的所包括元素)的数量822、跳过的元素(即,不包含足够大以进行贡献的几何形状的所排除元素)的数量824、提供弯曲几何形状的指示符和由于大小而排除某种几何形状的指示符的标志826、以及报头长度828。场景820可以是描述材料、纹理、几何形状图元等并且(例如,使用偏移)指向数据存储830的部分(例如,二进制数据)的json串。数据存储830可以作为场景820参考的连续二进制数据块来提供。

在步骤720,特征表840被附加到报头810的缓冲区。如上面讨论的,特征表840是将低级图元(例如,网格或折线)中的顶点与元素id、子类别id和几何形状类的组合相关联的表。特征表840可以表示为表中特征的长度和最大数量,以及包括元素id、子类别id表索引和每个特征的几何形状类的打包特征数据,以及存储实际子类别id的子类别id表。

在步骤730,每个低级图元(例如,网格或折线)被序列化和存储。例如,低级图元的符号的表示被添加到保存场景820的缓冲区。通过基于与每个顶点相关联的数据类型确定每个顶点所需的字节数量,将每个顶点的数据(包括任何颜色数据)按序列附加到保存数据存储830(例如,二进制数据)的缓冲区并创建到顶点数据的指针,来将低级图元的顶点编码到顶点表中。折线和网格边可以被细分,使得每个线段变成四边形。还可以在线段之间插入附加的三角形,以使能实现平滑的圆角,并创建指向每个三角形的索引。取决于低级图元的类型,可以存储附加数据。例如,对于折线,前一个和下一个顶点的索引、描述顶点如何连接到相邻顶点的参数以及顶点沿着线串的累积距离可以被存储到保存数据存储830的缓冲区。对于网格的硬边,可以存储线段的另一个端点的索引和四边形的角与顶点相关联的指示。对于网格的轮廓边,可以存储编码的法线。

在步骤740,保存场景820的缓冲区被序列化并附加到保存报头810和特征表840的缓冲区。最后,保存数据存储830的缓冲区被附加到现在保存报头810、特征表840和场景820的缓冲区,以产生适于在客户端设备上传输并最终显示的完整的图块内容(例如,二进制表示)。

总之,上面描述了用于将表示为具有给定符号(例如,颜色、线宽、材料等)的高级几何形状图元(例如,b样条、曲线、圆锥、多面等)的基础设施模型(例如,imodel®模型)的几何形状转换成低级图元(例如,网格和折线)并将这些低级图元编码成适于在客户端设备上传输并最终显示的图块内容(例如,二进制表示)的技术。应当理解,可以对所述技术进行各种各样的适配和修改。此外,一般而言,功能可以用软件、硬件或其各种组合来实现。软件实现方式可以包括存储在非暂时性电子设备可读介质(例如,非暂时性计算机可读介质)、诸如易失性存储器、持久性存储设备或其他有形介质中的电子设备可执行指令(例如,计算机可执行指令)。硬件实现方式可以包括逻辑电路、专用集成电路和/或其他类型的硬件组件。此外,组合的软件/硬件实现方式可以包括存储在非暂时性电子设备可读介质中的电子设备可执行指令以及一个或多个硬件组件这两者。最重要的是,应当理解,上面的描述仅意味着作为示例来考虑。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1