viewerVoxelInspectorMixin
是一个CesiumJS API的混合器,它添加了一个体素(Voxel)选取器到Viewer对象中。 体素(Voxel)是三维空间中的体积像素,可以被用于交互式选择和分析三维场景数据。
import { viewerVoxelInspectorMixin } from 'cesium/Source/Widgets/Viewer/viewerVoxelInspectorMixin';
const viewer = new Cesium.Viewer(div, {
selectionIndicator : false
});
viewer.extend(viewerVoxelInspectorMixin);
添加viewerVoxelInspectorMixin
混合器后,您可以使用单击鼠标右键来选择Voxel。 对于被选择Voxel及其经过的任何实体,将分发pick事件。 选中的Voxel将显示为黄色框。
您可以在Viewer上注册pick事件的监听器,例如:
viewer.screenSpaceEventHandler.setInputAction(function onLeftClick(movement) {
const pickedObject = viewer.scene.pick(movement.position);
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
viewer.extend(viewerVoxelInspectorMixin, options)
添加viewerVoxelInspectorMixin
到Viewer对象。
参数:
{Object} options
可选项:
{Object} [voxelSize=new Cesium.Cartesian3(1.0, 1.0, 1.0)]
:Voxel的尺寸。{Object} [voxelColor=Cesium.Color.YELLOW]
:被选中的Voxel的颜色。viewer.enableCursorStyle()
启用鼠标指针样式。 默认情况下,当Voxel选取器被激活时,鼠标指针样式将更改为“crosshair”。
viewer.disableCursorStyle()
禁用鼠标指针样式。 默认情况下,当Voxel选取器被激活时,鼠标指针样式将更改为“crosshair”。
viewer.isCesiumEditableVoxelObject(entity)
检查实体是否是CesiumJS可编辑的Voxel实体。
参数:
{Cesium.Entity} entity
:要检查的实体。返回:{Boolean}
:如果实体是可编辑的Voxel实体,则为true
;否则为false
。
viewer.isCesiumStyledVoxelGeometry(geometry)
检查几何体是否是CesiumJS样式的Voxel几何体。
参数:
{Cesium.Geometry} geometry
:要检查的几何体。返回:{Boolean}
:如果几何体是CesiumJS样式的Voxel几何体,则为true
;否则为false
。
viewer.updateVoxelColor(color)
更新被选中的Voxel的颜色。
参数:
{Cesium.Color} color
:被选中的Voxel的新颜色。您可以在Cesium Sandcastle上查看并运行viewerVoxelInspectorMixin示例。
以下是一个简单的示例,该示例使用viewerVoxelInspectorMixin选择Voxel并更改被选中的Voxel的颜色:
const viewer = new Cesium.Viewer('cesiumContainer', {
selectionIndicator : false
});
viewer.extend(viewerVoxelInspectorMixin);
viewer.entities.add({
name: 'cube',
position: Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),
box: {
dimensions: new Cesium.Cartesian3(400000.0, 300000.0, 500000.0),
material: Cesium.Color.RED,
outline: true,
outlineColor: Cesium.Color.BLACK
}
});
viewer.screenSpaceEventHandler.setInputAction(function onLeftClick(movement) {
const pickedObject = viewer.scene.pick(movement.position);
if (Cesium.defined(pickedObject)) {
const entity = pickedObject.id;
if (Cesium.defined(entity) && viewer.isCesiumEditableVoxelObject(entity)) {
viewer.updateVoxelColor(Cesium.Color.BLUE);
}
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);