跳到主要内容

倾斜压平分析

DMap3D.analysis.flattenAnalysis 用于在 3D Tiles 模型上对指定区域进行压平处理。

引入

import DMap3D from 'dmap3d'
import * as Cesium from 'cesium'

基本用法

const viewer = new Cesium.Viewer('cesiumContainer')

// 加载 3D Tiles 模型
const tileset = await Cesium.Cesium3DTileset.fromUrl('/path/to/tileset.json')
viewer.scene.primitives.add(tileset)

// 创建压平工具
const flatten = new DMap3D.analysis.flattenAnalysis(viewer)

// 激活压平(左键绘制多边形,右键完成)
flatten.activate(tileset)

构造函数

new DMap3D.analysis.flattenAnalysis(viewer)

参数:

  • viewer - Cesium.Viewer 实例

方法

activate(tileset, height?)

激活绘制并应用压平。用户左键点击添加多边形顶点,右键完成绘制并自动应用压平效果。

// 压平到多边形中心高度
flatten.activate(tileset)

// 压平到指定高度(相对于多边形中心,单位:米)
flatten.activate(tileset, -5.0) // 压平到中心下方 5 米
flatten.activate(tileset, 10.0) // 压平到中心上方 10 米

参数:

  • tileset - Cesium.Cesium3DTileset 实例
  • height? - 压平高度(可选),默认 0(多边形中心高度)

setHeight(height)

动态更新压平高度。

flatten.setHeight(-10.0) // 调整压平高度

clear()

清除压平效果,恢复模型原始状态。

flatten.clear()

destroy()

销毁工具并释放资源。

flatten.destroy()

完整示例

const viewer = new Cesium.Viewer('cesiumContainer')

// 加载 3D Tiles
const tileset = await Cesium.Cesium3DTileset.fromUrl('/3DTiles/DaYanTa/tileset.json')
viewer.scene.primitives.add(tileset)
await viewer.zoomTo(tileset)

// 创建压平工具
const flatten = new DMap3D.analysis.flattenAnalysis(viewer)

// 激活压平
flatten.activate(tileset, 0)

// 动态调整高度
flatten.setHeight(-5.0)

// 清除压平
flatten.clear()

// 重新压平到不同高度
flatten.activate(tileset, 10.0)

// 销毁
flatten.destroy()

技术原理

  • 使用 CustomShader 在顶点着色器中修改模型顶点高度
  • 通过纹理遮罩精确控制压平区域
  • 基于 ENU 局部坐标系确保压平方向垂直于地面

相关链接