1. ModelLayer

Extends: Layer

ModelLayer,模型图层类,可实现对3DTiles和glTF模型的添加、获取、移除、缩放至和显隐等操作

1.1. 初始化 new ModelLayer(options, customGroupId)

Param Type Description
options Object

包含以下参数的Object对象:

options.name String

图层名称;

options.show Boolean

是否显示;

options.customGroupId String

自定义分组的ID。

Example

//通过图层管理类统一创建模型图层
let modelLayer = geomap.layerManager.createLayer(BOSGeo.LayerType.MODEL, "模型"); //模型图层

1.2. 属性

属性名 Type Default Readonly Description
opacity Number

不透明度

show Boolean

是否显示图层

color String

十六进制的颜色字符串

models Array.<(Model|Cesium3DTileset)>

该图层的所有模型

order Number 0

排序序号,继承自`Layer`图层类

customGroupId String

分组id,继承自`Layer`图层类

1.3. 方法

1.3.1. modelLayer.add(modelParam)

加载模型3DTiles/glTF/glb

Param Type Default Description
modelParam Object

包含以下参数的Object对象:

[options.id] String

添加的模型对象的id值, 默认为GUID值,选填。

modelParam.url String

模型地址;

[modelParam.featureType] String BOSGeo.FeatureType.TILES

模型类型,包括BOSGeo.FeatureType.TILES, FeatureType.GLTF,FeatureType.BIM,FeatureType.PHOTO和FeatureType.POINTCLOUD;

[modelParam.name] String

名称,不设置则为undefined;

[modelParam.position] Cartesian3 | Array.<number>

模型位置,三维笛卡尔坐标或者经纬度坐标,初始化模型位置存到model.model_position属性中;

[modelParam.rotation] Array.<number> [0,0,0]

模型旋转角度,[偏航角,俯仰角,翻滚角],单位为角度;

[modelParam.scale] Number 1

模型缩放比例;

[modelParam.enhance] Boolean false

增强模型光,若为true,luminanceAtZenith=0.8,模型显示将变得更明亮;

[modelParam.luminanceAtZenith] Number 0.2

自定义太阳在天顶时模型的亮度,用于该模型的过程环境光,若enhance为true,该参数将不起作用(某些无PBR材质的3DTiles模型可能不起作用);

[modelParam.maximumScreenSpaceError] Number 16

驱动3DTiles模型根据LOD更新的最大屏幕空间误差值;

[modelParam.maximumMemoryUsage] Number 1024

tileset可使用的最大内存空间(单位MB),数据种类单一时建议设置为显存的50%;

[modelParam.gradualOptions] Object

模型渐变色,如 {startColor:"#1E476B",endColor:"#7D9EB8"};

[modelParam.materialType] MaterialType

BOSGeo.MaterialType,包括Normal(正常)、Gradual(渐变)、Science(科学)、GradualMixed(混合渐变);

[modelParam.useCacheDB] Boolean true

是否开启模型缓存;

[modelParam.attribute] Object

自定义模型属性;

[modelParam.version] Number 1

緩存数据版本;

[modelParam.cullWithChildrenBounds] Object

优化选项,请勿请求由于相机的移动而可能回来的未使用的图块;此优化仅适用于固定图块集;

[modelParam.preloadWhenHidden] Boolean false

优化选项,当tileset.show是false时,预加载三维瓦片;当tileset可见时,加载三维瓦片,但不会渲染它们;

[modelParam.preloadFlightDestinations] Boolean true

优化选项,相机飞行时,在相机飞往目的地的过程中预加载三维瓦片;

[modelParam.skipLevelOfDetail] Boolean false

优化选项,用于确定在空间树遍历期间是否跳过某些LOD;

[modelParam.preferLeaves] Boolean false

优化选项,优先加载叶子节点的模型文件;

[modelParam.baseScreenSpaceError] Number 1024

优化选项,当skipLevelOfDetail为true时,则在跳过LOD之前必须达到的屏幕空间误差。;

[modelParam.skipScreenSpaceErrorFactor] Number 16

优化选项,当skipLevelOfDetail为true时,定义要跳过的最小屏幕空间误差的乘数,与skipLevels一起使用以确定要加载的瓦片;

[modelParam.skipLevels] Number 1

优化选项,当skipLevelOfDetail为时true,定义加载瓦片时要跳过的最小层级数;当它为0时,不跳过任何级别。与skipScreenSpaceErrorFactor一起使用以确定要加载的瓦片;

[modelParam.immediatelyLoadDesiredLevelOfDetail] Boolean false

优化选项,当skipLevelOfDetail为true时,只有满足最大屏幕空间误差的瓦片会被下载;跳过因子将被忽略,仅加载所需的瓦片;

[modelParam.loadSiblings] Boolean false

优化选项,当skipLevelOfDetail为true时,确定可见瓦片的兄弟姐妹在遍历过程中总是被下载。

[modelParam.distancePriorityType] DistancePriorityType DistancePriorityType.NORMAL

瓦片加载优先级类型(其中NORMAL为正常的3DTiles加载策略;PREFER_DISTANCE优先以距离因子为主体并移除了foveatedDigits因子的影响;ONLY_DISTANCE仅以距离作为瓦片加载优先级的唯一判断因子,其它优化加载参数完全无效,慎用)

[modelParam.requestWeightFactor] Number 0

瓦片的请求权重因子,值越大,越先请求(慎用,建议在加载完后立马还原,否则可能会出现提高权重的图层在远处优先加载的情况)

[modelParam.rise] Number false

模型生长动效配置,目前仅适用于featureType为FeatureType.WHITE_MODEL或FeatureType.PHOTO的数据

[modelParam.featureTransformEnabled] Boolean false

模型是否支持要素级的构件平移和旋转(目前仅支持B3DM和I3DM格式的3DTiles数据)

[modelParam.shadows] ShadowMode BOSGeo.ShadowMode.CAST_ONLY

模型的阴影模式,开启(ENABLED)或关闭(DISABLED)投射并接收阴影模式, 只投射阴影模式(CAST_ONLY),只接收阴影模式(RECEIVE_ONLY)

Example

let modelLayer = geomap.layerManager.createLayer(BOSGeo.LayerType.MODEL, "模型"); //模型图层
//添加模型
let myModel = modelLayer.add(
    {
        name: '测试模型2',
        url: 'https://alpha-bigbos-bos3d.boswinner.com/api/d0ee39131a37426aa58a013c82fbbae4/geomodels/G1596620314217/data/tileset.json',
        position: [112.2491853712431, 24.94423899253814, 100],
        rotation: [0, 20, 0],
        scale: 2,
        featureType: BOSGeo.FeatureType.BIM,
        luminanceAtZenith: 0.5,  //模型的亮度
        attribute: {name: '测试模型2'}
    }
);
//  加载完成回调模型
myModel.readyPromise.then((model) => {
    BOSGeo.GeoUtil.selectFeature()
    geomap.disableMoveFeature();
    let axis = new BOSGeo.AxisFrame(geomap, {target: model, hasDepth: true});
    geomap.enableMoveFeature(axis);
})

1.3.2. modelLayer.getModelByName(name)

根据名称获取模型

Param Type Description
name String

模型名称

Example

modelLayer.getModelByName('测试模型2');

1.3.3. modelLayer.zoomToLayer(callback)

缩放至本图层

Param Type Description
callback function

回调函数

Example

modelLayer.zoomToLayer();

1.3.4. modelLayer.getAllModels()

获取该图层的所有模型

Returns: Array.<(Model|Cesium3DTileset)>

1.3.5. modelLayer.setModelVisibleByName(name, visible)

设置模型显隐

Param Type Description
name String

模型名称

visible Boolean

是否显示

Example

modelLayer.setModelVisibleByName('测试模型2', false);

1.3.6. modelLayer.getModelVisible(name)

获取模型的显隐信息

Param Type Description
name String

若不填则返回所有显隐信息

Example

let visible = modelLayer.getModelVisible('测试模型2');

1.3.7. modelLayer.getBoundingPointByName(name, [isMaximumPoint]) ⇒ Promise.<Cartesian3> | undefined

根据模型名称获取其根节点包围盒上极值点(部分白模或者倾斜由于底部不平或者根节点包围盒过大不适用于该方法),该方法只适用于3DTiles数据,不适用于gltf模型数据

Returns: Promise.<Cartesian3> | undefined -

undefined表示不存在该名称的模型图层或者图层还未开始加载

Param Type Default Description
name String

模型图层的名称

[isMaximumPoint] Number false

是否是最大值点, false则为最小值点,最小值点中的z可用于地上模型图层的贴地,最大值点中的z可用于地下模型的设置

Example

const tilesetName = '测试模型2';
tileset.readyPromise.then(() => {
  const readyPromise = modelLayer.getBoundingPointByName(tilesetName);
  readyPromise && readyPromise.then((point) => {
     const relativeHeight = 0 - point.z; // 相对地面高程
     const groundAltitude = 0; // 模型中心点所在位置的地面高程
     BOSGeo.GeoUtil.setTilesetHeight(tileset, relativeHeight + groundAltitude);
  });
});

1.3.8. modelLayer.getExtremePointByName(name, [isMaximumPoint]) ⇒ Cartesian3 | undefined

获取模型在根节点模型空间下的极值点坐标(由于该方法统计的是整个tileset下的极值点,所以最好在大部分瓦片加载完后调用,否则获取的值会偏大),该方法只适用于3DTiles数据,不适用于gltf模型数据

Returns: Cartesian3 | undefined -

undefined表示不存在该名称的模型图层或者图层还未初始加载完

Param Type Default Description
name String

模型图层的名称

[isMaximumPoint] Number false

是否是最大值点, false则为最小值点,最小值点中的z可用于地上模型图层的贴地,最大值点中的z可用于地下模型的设置

Example

const tilesetName = '测试模型2';
const minPoint = modelLayer.getExtremePointByName(tilesetName, false);
if (minPoint) {
  const relativeHeight = 0 - minPoint.z;
  const groundAltitude = 0; // 模型中心点所在位置的地面高程
  BOSGeo.GeoUtil.setTilesetHeight(tileset, relativeHeight + groundAltitude);
} else {
  console.log("不存在该名称的模型图层或者图层还未初始加载完!");
}

1.3.9. modelLayer.setLuminanceAtZenith([val])

设置太阳在天顶时模型的亮度,用于该模型的程序环境光

Param Type Default Description
[val] Number 0.2

模型亮度值,默认0.2

Example

let modelLayer = geomap.layerManager.createLayer(BOSGeo.LayerType.MODEL, "模型"); //模型图层
//添加模型
let myModel = modelLayer.add({
    name: '测试模型2',
    url: 'https://alpha-bigbos-bos3d.boswinner.com/api/d0ee39131a37426aa58a013c82fbbae4/geomodels/G1596620314217/data/tileset.json',
    position: [112.2491853712431, 24.94423899253814, 100],
    rotation: [0, 20, 0],
    scale: 2,
    featureType: BOSGeo.FeatureType.BIM,
    luminanceAtZenith: 0.5,  //模型的亮度
    attribute: {name: '测试模型2'}
});
myModel.luminanceAtZenith = 0.6; //设置模型光照亮度,默认为0.2
modelLayer.setLuminanceAtZenith(100);//设置该模型图层下所有模型光照亮度,默认为0.2

1.3.10. modelLayer.removeByName(name)

根据对象名称移除模型

Param Type Description
name String

模型名称

Example

modelLayer.removeByName('测试模型2');

1.3.11. modelLayer.remove(model)

删除模型

Param Type Description
model Mode

模型

Example

modelLayer.remove(myModel)

1.3.12. modelLayer.removeAll()

移除该图层所有模型

1.3.13. modelLayer.zoomTo(model, callback)

定位到某个模型

Param Type Description
model Cesium3DTileset | Model

模型对象

callback function

定位结束后的回调函数

Example

modelLayer.zoomTo(myModel)

1.3.14. modelLayer.destroy()

销毁本图层

1.3.15. modelLayer.on(eventType, callBack)

绑定事件

Param Type Description
eventType String | LayerEventType

图层事件类型

callBack function

回调函数

Example

layer.on(BOSGeo.LayerEventType.ADD, (result) => {
    console.log(result);
});

1.3.16. modelLayer.fire(eventType, value)

触发事件

Param Type Description
eventType String | LayerEventType

监听事件

value *

触发事件时可传入任意值

1.3.17. modelLayer.hasOn(eventType, callBack)

判断该函数是否已绑定该事件

Param Type Description
eventType String | LayerEventType

监听事件

callBack function

回调函数

Example

var hasBind = layer.hasOn(BOSGeo.LayerEventType.ADD, callback);

1.3.18. modelLayer.once(eventType, callBack)

绑定后该函数只执行一次

Param Type Description
eventType String | LayerEventType

监听事件

callBack function

回调函数

1.3.19. modelLayer.off(eventType, callBack)

取消事件绑定

Param Type Description
eventType String

监听事件

callBack function

回调函数

版权所有@盈嘉互联(北京)科技有限公司 京ICP备15051988号-9 Copyright © 2022 all right reserved,powered by Gitbook该文件修订时间: 2022-07-19 11:34:25

results matching ""

    No results matching ""