BIM模型
BIM模型
BIM模型是以建筑工程项目的各项信息、要素、空间等要素组成的三维模型。其模型地址请求的layerType值为Building。
BIM模型的文件类型有很多,比如RVT、DGN、IFC等文件格式,但是BIM模型图层对应的接口类只有 BuildingLayer。
1. 功能说明
BIM模型的主要功能是:在场景中加载渲染BIM模型。
2. 构造
new BuildingLayer(properties)
代码示例如下:
const layer = new ubm.BuildingLayer({
id: 'gczz',
title: '高层住宅',
url: 'https://stream.rinkslab.com:8060/stream/i3s/OYFNsphMZp8x/PUgYcMkJE9Np/Mdxkgk9Fkt5l/hZakpRjiJemj/SceneServer',
})
传递给构造函数BuildingLayer的所有属性列表properties可查看后续属性说明。
3. 属性
| 属性 | 类型 | 可选 | 说明 |
|---|---|---|---|
| id | string | 必填 | 图层唯一标识 |
| title | string | --- | 图层的名称,显示用的 |
| url | string | 必填 | 图层资源的访问url |
| visible | boolean | --- | 是否可见 |
| outFields | string | --- | 返回的字段 |
| elevationInfo | ElevationInfo | --- | 指定特征如何放置在垂直轴(Z)上 |
| format | string | --- | 格式可选值:'RVT' 、 'IFC' 、 'RFA' 、 'DGN' |
3.1 返回的字段
可指定构件返回的属性字段,如 of_category、id、name、guid等。
3.2 指定特征如何放置在垂直轴(Z)上
属性elevationInfo用于指定特征(如:建筑物、地形等)如何在垂直轴(Z轴)上放置和显示。
其中属性elevationInfo的类型ElevationInfo的数据结构如下所示:
interface ElevationInfo {
// 放置模式: 在地形上'on-the-ground'、相对地形'relative-to-ground'、相对场景'relative-to-scene'和绝对高度'absolute-height'(默认值)
mode: string,
// 偏移值,当mode = "on-the-ground"时,此属性不生效
offset: number
// 偏移值单位
unit?: 'feet' | 'meters' | 'kilometers' | 'miles' | 'us-feet' | 'yards'
}
4. 过滤器
4.1 定义
可在图层上使用BuildingFilter类,来对图层的特征进行过滤(显示或隐藏)。
它是一组条件,可用于在场景视图中显示或隐藏某个特征,特征包括构件、楼层等等。
4.2 使用
使用BuildingFilter来定义一个过滤器,在过滤器块filterBlocks中定义过滤条件filterExpression和过滤返回的类型filterMode,最后在scene上使用activeFilterId来指定并激活过滤器,达到显示或隐藏特征的功能。
下面以一个构件特征来描述,代码示例如下:
// 定义构件id
let OBJECTID_1
// 定义图层
const layer = new ubm.BuildingLayer({
id: 'demo',
title: '建筑',
url: 'https://stream.rinkslab.com:8060/stream/i3s/OYFNsphMZp8x/PUgYcMkJE9Np/M5EJcAYBFBBE/qu1VoZ8jEP4u/SceneServer',
onPick: (result) => {
console.log('构件信息:', result.attributes)
OBJECTID_1 = result.attributes.id
}
})
scene.layer.add(layer)
定义一个过滤图层,使用onPick方法获取构件信息,得到选中的构件id, 此处构件id定义为OBJECTID_1
// 定义过滤器
let filter = new ubm.BuildingFilter({
// 过滤器块
filterBlocks: [{
// 过滤表达式
filterExpression: `NOT(id = ${Number(OBJECTID_1)})`,
// 过滤模式
filterMode: { type: 'solid' }
}]
})
// 在图层的过滤器数组中设置过滤器
layer._instance.filters = [filter]
// 指定应该使用那个过滤器
layer._instance.activeFilterId = filter.id
filterBlocks: 过滤器块;定义了那些构件应该在图层可见,并指定绘制过滤后的构件如何渲染;一个过滤器应该至少包含一个过滤器块。- 通过修改
filterExpression属性来修改过滤的条件,表达式写法可参照SQL的写法,关于表达式的写法,遵循以下规则:类型 运算符 示例 大于 > OBJECTID_1 > 1 小于 < OBJECTID_1 < 1 等于 = OBJECTID_1 = 1 不等于 <> OBJECTID_1 <> 1 且 AND OBJECTID_1 > 1 AND Category = 'Planting' 或 OR OBJECTID_1 > 1 OR OBJECTID_1 = 0 模糊匹配 LIKE OBJECTID_1 LIKE 43 - 指定某个构件id:id = 构件id
- 不包含指定的构件id: not(id = 构件id)
- 通过修改
filterMode下的type属性来修改过滤的类型,类型有以下几种:- solid:实线渲染,是默认值
- wire-frame:线框渲染
- x-ray:x光照渲染
- 通过调用
activeFilterId来激活并使用过滤器

BIMFlux AI
