BIM模型
BIM模型图层对应的接口类: BuildingLayer
。
注:虽然BIM模型文件类型有很多,比如RVT、DGN、IFC等文件格式,但是BIM模型图层对应的接口类只有
BuildingLayer
,都是使用 BuildingLayer
添加图层。1. 模型使用
初始化调用BuildingLayer
类,代码方式如下:
const layer = new ubm.BuildingLayer({
// id: 图层唯一标识
id: 'gczz',
// title:图层的名称
title: '高层住宅',
// url:图层资源的访问url
url: 'https://stream.rinkslab.com:8060/stream/i3s/OYFNsphMZp8x/PUgYcMkJE9Np/Mdxkgk9Fkt5l/hZakpRjiJemj/SceneServer',
})
// 添加模型到场景中
scene.layer.add(layer)
2. 过滤器
2.1 定义
可在图层上使用BuildingFilter类,来对图层的特征进行过滤(显示或隐藏)。
它是一组条件,可用于在场景视图中显示或隐藏某个特征,特征包括构件、楼层等等。
2.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
来激活并使用过滤器