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 |
回调函数 |