模型基础

在场景构建中,可以组织不同类型的场景对象。

1. 管理

通过场景实例的属性 scene.layer, 可以添加或删除不同的模型。

1.1 添加

scene.layer.add(layer)

1.2 移除

scene.layer.remove(layer)

2. 类型

根据不同的场景对象,在 SDK 有如下几种常用的类型:

  • BIM模型 BuildingLayer
  • 实景模型 RealityLayer
  • 点云模型 PointCloudLayer
  • 人工模型 SceneLayer
  • GLTF小模型 CoverLayer
  • 外部模型 ExternalLayer

3. 使用

对于的具体使用方式请看下面的代码示例:

const scene = new ubm.Scene('app', {...})

// 在此以建筑为例
const layer = new ubm.BuildingLayer({
  id: 'demo',
  title: '高层住宅',
  url: 'http://119.96.108.174:6109/高层住宅/SceneServer',
})

scene.layer.add(layer)
注:因为各个建筑模型都是有自己的位置的,所以在使用地球场景 viewingMode: 'global' 时,需要用 scene.goTo() 将相机跟踪到建筑模型的视角。

其示例代码如下( goTo() 的具体使用方式请参看场景控制):

scene
  .when(() => {
    layer.when(() => {
      scene.goTo({fullExtent:layer.fullExtent,tilt: 60 },{
        speedFactor: 2,
      })
    })
  })
  .catch((e) => {
    throw e
  })

其中 scene.when()layer.when() 函数的作用分别为"场景加载完后"和"加载完后",即场景和加载完后进行相机飞行。

注:对于以上使用方法,只是较常用的方法,还有其他使用方法。即直接在 scene 的第二个配置对象中直接配置默认视角 camera ,如要具体了解请参看场景控制。

4. 事件

对于 BuildingLayer 建筑和 PointCloudLayer 点云我们 SDK 提供了两个事件,分别为:

4.1 点击事件

点击事件 onPick 就是点击中某个构件时,产生的回调函数,其使用方式如下:

// 在此以建筑为例
const layer = new ubm.BuildingLayer({
  ...
  onPick: (result) => {
    ...
  }
})
scene.layer.add(layer)

4.2 指向事件

指向事件 onPointer 就是指向中某个构件时,产生的回调函数,其使用方式如下:

// 在此以建筑为例
const layer = new ubm.BuildingLayer({
  ...
  onPointer: (result) => {
    ...
  }
})
scene.layer.add(layer)

4.3 返回值

上述两种事件都会返回一个回调返回值 result ,此回调返回值的数据结构如下(在此以点击事件的回调返回值为例):

interface PickInfo {
  // 构件基本属性信息
  attributes: PickAttributes
  // 构件位置信息
  position: PickPosition
}

interface PickAttributes {
  // 构件标高 
  of_level: string
  // 构件分类
  of_category: string
  // 构件族类  
  of_family: string
  // 构件id
  id: number,
  // 合模前单模型的名称。可用于在合模后,区分模型建筑
  DocName: string
}

interface PickPosition {
  // 屏幕x
  screenX: number
  // 屏幕y
  screenY: number
  // 投影坐标x
  x: number
  // 投影坐标y
  y: number
  // 投影坐标z
  z: number
  // 纬度
  latitude: number
  // 经度
  longitude: number
  // 参考坐标系
  spatialReference: number
}

指向事件与点击事件的返回值略有不同,但所代表的构件信息完全相同。如下:

指向事件回调构件属性点击事件回调构件属性模型构件属性
of_levelof_levelof_level
of_categoryof_categoryof_category
of_familyof_familyof_family
ididid
docNameDocNameDocName

事件可以和弹窗 popup 一起使用,通过事件返回值给弹窗 popup 提供参数,从而实现构件提示窗的效果。

注:popup 相关设置请参看基础控件下的弹窗一栏。

事件可以方便用户查看模型的构件信息,进而更好的对模型构架进行某些特殊处理,例如对模型进行染色,其中的构件筛选就可以通过事件知晓构件信息,进而赋值筛选。