Class: ObjectSymbol3DLayer

ObjectSymbol3DLayer

new ObjectSymbol3DLayer(options)

base/symbol/symbol3DLayer/ObjectSymbol3DLayer.js, line 8

三维模型符号图层,用于在三维场景中以三维几何体或 glTF 模型的形式渲染点要素,仅支持三维场景视图,不支持二维地图视图。
支持两种资源来源:
  ① 通过 resource.primitive 使用系统内置几何体,可选值:'sphere'(球体)| 'cylinder'(圆柱体)|
    'cone'(圆锥体)| 'inverted-cone'(倒圆锥体)| 'diamond'(菱形体);
  ② 通过 resource.href 加载外部 glTF/glb 模型文件(URL 地址)。
通常与 PointSymbol3D 配合使用,作为其 symbolLayers 数组中的元素。
示例如下:
[1、使用 glTF 模型资源创建三维模型符号图层]
[2、使用系统内置几何体创建三维模型符号图层]

Name Type Description
options Object

构造参数

Name Type Default Description
resource IconResource new IconResource() 可选

三维体资源。
当设置 resource.href 时,加载外部 glTF/glb 模型(URL 地址);
当设置 resource.primitive 时,使用系统内置几何体,支持的值为:
'sphere'(球体)| 'cylinder'(圆柱体)| 'cone'(圆锥体)|
'inverted-cone'(倒圆锥体)| 'diamond'(菱形体)

material ColorMaterial new ColorMaterial() 可选

符号材质,目前支持 ColorMaterial(纯色材质):
  • 当使用 glTF 模型时,该颜色作为覆盖色叠加于模型上,可通过 alpha 值控制模型整体透明度;
  • 当使用系统内置几何体时,该颜色作为几何体的填充色

height Number 10 可选

几何体的高度(沿 z 轴方向的尺寸),单位由 lengthUnit 决定。仅当 resource 为系统内置几何体时有效,glTF 模型不使用此参数

width Number 10 可选

几何体的宽度(沿 x 轴方向的尺寸),单位由 lengthUnit 决定。仅当 resource 为系统内置几何体时有效,glTF 模型不使用此参数

depth Number 10 可选

几何体的深度(沿 y 轴方向的尺寸),单位由 lengthUnit 决定。仅当 resource 为系统内置几何体时有效,glTF 模型不使用此参数

castShadows Boolean true 可选

是否投射阴影,为 true 时该图层参与场景阴影计算

anchor AnchorType AnchorType.center 可选

锚点对齐方式,即几何体/模型相对于要素坐标点的对齐位置。
可选值:'center' | 'top' | 'bottom' | 'origin' | 'relative'

anchorPosition Point new Point({coordinates: [0, 0]}) 可选

锚点的附加偏移量(相对于锚点位置的偏移),格式为 [dx, dy],单位与 lengthUnit 一致。
仅当 anchor'relative' 时生效

lengthUnit RadiusUnit RadiusUnit.meters 可选

几何体尺寸参数(heightwidthdepth)的长度单位。仅当 resource 为系统内置几何体时生效,glTF 模型(href)不使用此参数。

numberOfPoints Number 128 可选

定义底面圆曲线上点的数量,仅当resource类型为cylinder、cone、inverted-cone时生效

scale Number 1 可选

整体缩放系数,值为 1 时按原始大小显示,仅当加载外部 glTF/glb 模型时有效

Examples

使用 glTF 模型资源创建三维模型符号图层

// ES5 引入方式
const { Color, Feature } = zondy
const { ObjectSymbol3DLayer, IconResource, ColorMaterial, PointSymbol3D } = zondy.symbol
const { Point } = zondy.geometry
const { GraphicsLayer } = zondy.layer
// ES6 引入方式
import { ObjectSymbol3DLayer, IconResource, ColorMaterial, Color, PointSymbol3D, Point, Feature, GraphicsLayer } from "@mapgis/webclient-common"

// 创建三维模型符号图层(加载外部 glTF 模型)
const objectSymbol3DLayer = new ObjectSymbol3DLayer({
  // 指定 glTF 模型的网络地址
  resource: new IconResource({
    href: 'https://example.com/model.gltf'
  }),
  // 模型覆盖色(红色),alpha 可控制透明度
  material: new ColorMaterial({
    color: new Color(255, 0, 0, 1)
  }),
  // 模型整体缩放比例
  scale: 10
})

// 创建三维点符号,将模型图层加入 symbolLayers
const symbol = new PointSymbol3D({
  symbolLayers: [objectSymbol3DLayer]
})

// 构造点几何对象(经度、纬度、高程)
const point = new Point({
  coordinates: [114, 30, 600]
})

// 构建要素对象
const feature = new Feature({
  geometry: point,
  symbol: symbol
})

// 创建图形图层并添加至地图
const layer = new GraphicsLayer({
  graphics: []
})
map.add(layer)

// 将要素添加至图层
layer.add(feature)

使用系统内置几何体创建三维模型符号图层

// ES5 引入方式
const { Color, Feature } = zondy
const { ObjectSymbol3DLayer, IconResource, ColorMaterial, PointSymbol3D } = zondy.symbol
const { Point } = zondy.geometry
const { GraphicsLayer } = zondy.layer
// ES6 引入方式
import { ObjectSymbol3DLayer, IconResource, ColorMaterial, Color, PointSymbol3D, Point, Feature, GraphicsLayer } from "@mapgis/webclient-common"

// 创建三维模型符号图层(使用内置球体,红色填充)
const objectSymbol3DLayer = new ObjectSymbol3DLayer({
  // 使用系统内置球体图元
  resource: new IconResource({
    primitive: 'sphere'
  }),
  // 几何体填充颜色(红色)
  material: new ColorMaterial({
    color: new Color(255, 0, 0, 1)
  }),
  // 球体沿 z 轴方向的高度(米)
  height: 1000,
  // 球体沿 x 轴方向的宽度(米)
  width: 1000,
  // 球体沿 y 轴方向的深度(米)
  depth: 1000
})

// 创建三维点符号
const symbol = new PointSymbol3D({
  symbolLayers: [objectSymbol3DLayer]
})

// 构造点几何对象(经度、纬度、高程)
const point = new Point({
  coordinates: [114, 30, 600]
})

// 构建要素对象
const feature = new Feature({
  geometry: point,
  symbol: symbol
})

// 创建图形图层并添加至地图
const layer = new GraphicsLayer({
  graphics: []
})
map.add(layer)

// 将要素添加至图层
layer.add(feature)

Extends

Members

anchorAnchorType

锚点对齐方式,即几何体/模型相对于要素坐标点的对齐位置。
可选值:'center' | 'top' | 'bottom' | 'origin' | 'relative'

Default Value:
AnchorType.center

anchorPositionPoint

锚点的附加偏移量(相对于锚点位置的偏移),格式为 [dx, dy],单位与 lengthUnit 一致。
仅当 anchor'relative' 时生效

Default Value:
new Point({ coordinates: [0, 0] })

castShadowsBoolean

是否投射阴影,为 true 时该图层参与场景阴影计算

Default Value:
true

depthNumber

几何体的深度(沿 y 轴方向的尺寸),单位由 lengthUnit 决定。仅当 resource 为系统内置几何体时有效,glTF 模型不使用此参数

Default Value:
10

heightNumber

几何体的高度(沿 z 轴方向的尺寸),单位由 lengthUnit 决定。仅当 resource 为系统内置几何体时有效,glTF 模型不使用此参数

Default Value:
10

idString

符号图层唯一标识

lengthUnitRadiusUnit

几何体尺寸参数(heightwidthdepth)的长度单位,仅当 resource 为系统内置几何体时生效

Default Value:
RadiusUnit.meters

materialColorMaterial

符号材质,目前支持 ColorMaterial(纯色材质)。
当使用 glTF 模型时,作为覆盖色叠加于模型上(可通过 alpha 控制透明度);
当使用系统内置几何体时,作为几何体的填充色

numberOfPointsNumber

定义圆曲线上点的数量,仅当resource类型为cylinder、cone、inverted-cone时生效

Default Value:
128

resourceIconResource

三维体资源。设置 href 加载外部 glTF/glb 模型,设置 primitive 使用系统内置几何体。
支持的内置几何体:'sphere' | 'cylinder' | 'cone' | 'inverted-cone' | 'diamond'

scaleNumber

整体缩放系数,值为 1 时按原始大小显示,仅当加载外部 glTF/glb 模型时有效

Default Value:
1

transformMatrixArray.<Number>

图层的变换矩阵,格式为16个元素的一维数组,表示一个4x4的齐次坐标变换矩阵

三维符号图层类型,固定为 Symbol3DLayerType.object

widthNumber

几何体的宽度(沿 x 轴方向的尺寸),单位由 lengthUnit 决定。仅当 resource 为系统内置几何体时有效,glTF 模型不使用此参数

Default Value:
10

Methods

clone(){ObjectSymbol3DLayer}

base/symbol/symbol3DLayer/ObjectSymbol3DLayer.js, line 269

克隆当前图层,返回一个具有相同属性的新实例(深拷贝)。 新实例与原实例互不影响。

Returns:
Type Description
ObjectSymbol3DLayer 克隆后的新 ObjectSymbol3DLayer 实例

toJSON(){Object}

base/symbol/symbol3DLayer/ObjectSymbol3DLayer.js, line 247

将当前实例序列化为普通 JSON 对象,可用于持久化存储或网络传输。 返回的对象可通过 ObjectSymbol3DLayer.fromJSON 反序列化还原。

Returns:
Type Description
Object 包含图层所有属性的 JSON 对象

ObjectSymbol3DLayer.fromJSON(json){ObjectSymbol3DLayer}

base/symbol/symbol3DLayer/ObjectSymbol3DLayer.js, line 238

通过 JSON 数据构造并返回一个新的 ObjectSymbol3DLayer 实例(静态工厂方法)。 接收的 JSON 结构应与 ObjectSymbol3DLayer#toJSON 的返回值一致。

Name Type Description
json Object

符号图层属性的 JSON 对象

Returns:
Type Description
ObjectSymbol3DLayer 新的 ObjectSymbol3DLayer 实例