BIM模型

BIM模型是以建筑工程项目的各项信息、要素、空间等要素组成的三维模型。其模型地址请求的layerType值为Building。

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. 属性

属性类型可选说明
idstring必填图层唯一标识
titlestring---图层的名称,显示用的
urlstring必填图层资源的访问url
visibleboolean---是否可见
outFieldsstring---返回的字段
elevationInfoElevationInfo---指定特征如何放置在垂直轴(Z)上
formatstring---格式可选值:'RVT' 、 'IFC' 、 'RFA' 、 'DGN'

3.1 返回的字段

可指定构件返回的属性字段,如 of_categoryidnameguid等。

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
    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来激活并使用过滤器

BIMFlux AI