iTwin系列-介绍
iTwin相关技术,代表Bentley公司多年技术积累。这里分享相关实现思路和关键技术实现路径。目标是介绍地球另一边的团队是如何开发CAD,换一种思路。以技术介绍为主,少量花边新闻。分享资料来自各种来源,尽量使用公开资料。未公开资料为主观臆测,如有雷同纯属巧合。
技术传承 – MicroStation历史
iTwin的开发团队,与MicroStation团队高度重合。因此可以说iTwin是MicroStation的技术传承,尽管他们完全不同的形态,但是从代码来看,神似形不似。这里介绍下相关的历史。
从文件格式,关键项目的历史看:
为什么开发iTwin? 我在另外一个文章里给出了最重要的原因:CAD淘金热。Bentley作为老牌公司,在经过多年的研发之后,计划浴火重生。同时,这也是第一代创业者的最后努力了。Keith Bentley,宣布退休。
名词解释
名词 | 解释 |
---|---|
DGN | 两个版本DGN V7, DGN V8。 V8只有windows可用。底层存储为OLE structured storage。DGN文件与MicroStation Workspace集成,构成基于文件的项目数据存储。 |
iModel | 最初为DGN with EC(i-Model),还是DGN文件。后来指以SQLite为存储引擎的新一代格式,为端云统一数据存储系统。版本:1.0 (DGN,只读),1.5(SQLIte,可读可写,mobiledgn 5.5),1.6(SQLIte,可读可写,mobiledgn6.0),2.0(SQLIte,协同编辑,BIM)。Microstation支持显示,数据导出到iModel。 |
EC(Engineering Content), ECFramework, | 工程数据框架。2002年左右开始开发。MicroStation XM版本开始,成为DGN文件格式的一部分。由EC Schema(XML文件定义),EC Framework, ECPlugin等部分组成。包括数据格式定义,数据对象实现,DGN支持插件等具体实现。 |
iModel.js, iTiwin.js | iTwin.js最初为iModel.js,iTwin是PaaS服务的名字。统一命名之后,iModel.js改为iTwin.js,但是在代码中,很多还没有修改。作为开源的技术框架,支持用户开发iTwin服务。 |
iTwin Platform | PaaS平台,可独立部署。与iModelHub区别较大,很多服务没有集成。 |
iModelHub | Bentley公司部署的iModel服务,部署在Azure,与Bentley公司其他的云服务集成。 |
iTwin Services | 支持PaaS服务所需要的账户服务,开发服务等其他服务。由Bentley管理和部署。 |
iTwin技术栈
拥抱开源:
iTwin代表Bentley公司新一代的图形平台,提供数字孪生解决方案,Bentley已经有相关桌面产品基于iTwin技术栈重新开发。iTwin相关技术栈,是为了解决大型CAD开发维护困难,而客户对云服务的需求越来越多,数字孪生迫切需要新的图形平台。作为Bentley2.0战略的核心技术架构,是Bentley公司老一代工程师的技术结晶:
- iTwin.js:核心模块(iModelCore)闭源,与合作伙伴共享代码共同开发(西门子)。显示,数据交换等模块开源,Javascript技术栈。支持桌面,移动设备,云端等多端平台
- iModelHub:Bentley公司提供的SaaS服务,提供iModel数据集成,协同设计,项目管理等云服务
- iTwin Platform:PaaS服务平台,为客户提供数字孪生解决方案。核心是iModelCore封装后的iModelBank服务。提供数据集成服务。协同设计等服务由客户开发。
技术拼图
iModel如何使用
- iModel是数据库系统,基于SQLite开发。
- iModel在云端,桌面,移动设备有不同的存储方式。
- iModel提供基于变更的数据库,类似git;iModelHub提供集成数据环境,项目管理,协同设计,类似github。
- 云端微服务架构,微服务使用iModel.js作为接口,使用iModel数据库。
iModel.js与iModelHub
- iModel.js(iTwin.js)是开源的iModel读写库
- iModelCore:C++代码库。封装SQLite, ECSQL, BIS等技术,提供iModel核心功能
- iModelNative:Node.js的扩展模块。封装iModelCore,提供Javascript接口。
- iModel.js提供数据读写,WebGL显示等功能
- iModel.js可以嵌入云端,移动端,桌面端。
- iModelHub是Bentley公司的SAAS服务
- 很多云服务并没有在iTwin Platform中提供
iModelHub与iTwin Platform的区别
iTwin相关核心技术栈式共享的。很多云服务也在逐步融合。iModelHub正在逐步迁移至K8S。
iTwin应用
下面几张图展示了相关的应用架构:
iModel版本管理
总结
iTwin的开发,代表了新的CAD开发思路。当然太阳底下没有新鲜事,这些架构设计也不是创新,只是在CAD这个古老的行业,有了新的实现思路,而且已经落地并实现。
关键技术
iModelCore:核心模块
iModelDb是描述不同存储形式的SQLite数据库。BIS既是工程数据定义格式,也是描述数据、SQLite表、字段如何映射的描述文件。
名称 | 存储形式 | 功能 |
---|---|---|
Snapshot快照 | SQLite文件 | •只读 • |
Briefcases | SQLite文件 + Changesets二进制文件 | •与iModelHub同步,支持变更 |
对象存储 | SQLite数据库,使用对象存储保存数据 | •iModelHub云端存储形式 |
Changesets | 基线SQLite文件 + Changesets二进制文件 | •iTwin(iModelBank)存储形式 |
iModel数据库逻辑层次:
与git的三路合并不同,类似rebase的方式。与Fossil类似。底层基于SQLite Session API实现。这是Bentley公司委托SQLite开发团队开发并开源。
BIS: Base Infrastructure Schemas。定义来自Bentley公司现有的软件的数据定义和相关处理逻辑。支持版本,支持扩展。iModel使用的Schema保存在数据库中,自包含。ECSchema是表达BIS的定义格式。可以从以下网站查看现有的BIS定义:https://imodelschemaeditor.bentley.com/
iTwin .js
软件架构图:
Presentation
- Presentation包括前后端,其帮助iModel中检索数据,并负责统一选择。
- 从iModel中检索的数据是由用户使用规则以声明方式定义的,这就是为什么该库通常称为“表示规则引擎”。
- 基于ECSQL, ECSchema实现。方便用户无代码实现元素的检索和显示
这一系列文章会介绍iTwin相关的开发技术,并不会非常详细。整体设计背后有很多考虑,这里只能简单介绍相关技术。本文内容为ppt的浓缩版
本文标题:iTwin系列-介绍
文章作者:feelapi
发布时间:2023-04-01
最后更新:2023-04-01
原始链接:https://feelapi.com/iTwin%E7%B3%BB%E5%88%97-%E4%BB%8B%E7%BB%8D.html
版权声明:本文由feelapi创作和发表,遵循CC 4.0 BY-SA版权协议, 转载请附上原文出处链接及本声明。