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
    ANDOBJECTID_1 > 1 AND Category = 'Planting'
    OROBJECTID_1 > 1 OR OBJECTID_1 = 0
    模糊匹配LIKEOBJECTID_1 LIKE 43
    • 指定某个构件id:id = 构件id
    • 不包含指定的构件id: not(id = 构件id)
  • 通过修改filterMode下的type属性来修改过滤的类型,类型有以下几种:
    • solid:实线渲染,是默认值
    • wire-frame:线框渲染
    • x-ray:x光照渲染
  • 通过调用activeFilterId来激活并使用过滤器