Class: TerrainClip

Glodon.CIMCube.Utils~ TerrainClip

地形开挖分析。 一个实例只使用一种 TerrainClipMode。大范围开挖用 PERFORMANCE,个别侧面再用精确或均衡模式时,请再创建一个实例。 多个实例共用 Globe 上的裁剪资源;TerrainClip#dispose 只会拆除本实例添加的区域,不破坏其他实例。

new TerrainClip(map [, options])

开挖分析构造函数
Parameters:
Name Type Argument Description
map Glodon.CIMCube CIMCube 实例
options Object <optional>
开挖分析配置参数
Properties
Name Type Argument Default Description
mode Glodon.CIMCube.Global.Defines.TerrainClipMode <optional>
balanced 裁剪模式。performance:模板测试(全屏 Mask);precise:精确(三角剖分 + 铅垂裁剪平面);balanced:平衡(采用GPU矢量裁剪,性能和精度均衡)
regions Array.<Object> <optional>
裁剪区域列表。每项为 `{id, region}`;region 为经纬度点数组 `{lon, lat, height}` 或 GeoJSON Polygon
depth Number <optional>
20.0 开挖深度,单位米,范围 0–10000
bottomTextureUrl String <optional>
底面纹理路径,缺省为纯白
facadeTextureUrl String <optional>
立面纹理路径,缺省为纯白
showTexture Boolean <optional>
true 是否显示坑底、侧墙补面
Example
// 大范围:模板测试开挖
const mainClip = new Glodon.CIMCube.Utils.TerrainClip(map, {
    mode: Glodon.CIMCube.Global.Defines.TerrainClipMode.PERFORMANCE,
    regions: [{ id: "main", region: polygon }],
    depth: 20,
    showTexture: true
});
mainClip.doAnalysis();

// 个别侧面:精确模式铅垂裁剪(顶点宜少)
const sideClip = new Glodon.CIMCube.Utils.TerrainClip(map, {
    mode: Glodon.CIMCube.Global.Defines.TerrainClipMode.PRECISE,
    regions: [{
        id: "side",
        region: [
            { lon: 110.03, lat: 25.76 },
            { lon: 110.04, lat: 25.76 },
            { lon: 110.04, lat: 25.77 },
            { lon: 110.03, lat: 25.77 }
        ]
    }],
    depth: 20,
    showTexture: false
});
sideClip.doAnalysis();

// 大范围:均衡模式距离场裁剪,对近距离效果没有要求场合
const balancedClip = new Glodon.CIMCube.Utils.TerrainClip(map, {
    mode: Glodon.CIMCube.Global.Defines.TerrainClipMode.BALANCED,
    regions: [{
        id: "balanced",
        region: [
            { lon: 110.03, lat: 25.76 },
            { lon: 110.04, lat: 25.76 },
            { lon: 110.04, lat: 25.77 },
            { lon: 110.03, lat: 25.77 }
        ]
    }],
    depth: 20,
    showTexture: true
});
balancedClip.doAnalysis();

// Region 的 height 字段:有效高程直接使用,错误高程会引发显示异常;
// 数据可靠性无法保障时,建议省略 height,引擎将自动获取高程,轻微损耗性能。

Members


bottomTextureUrl :String

坑底补面纹理路径。修改后需调用 TerrainClip#doAnalysis
Type:
  • String

depth :Number

开挖深度,单位米,范围 0–10000。修改后需调用 TerrainClip#doAnalysis 才会重建补面。
Type:
  • Number

facadeTextureUrl :String

侧墙补面纹理路径。修改后需调用 TerrainClip#doAnalysis
Type:
  • String

mode :Glodon.CIMCube.Global.Defines.TerrainClipMode

本实例的裁剪模式。修改后会按新模式重建本实例已有区域,不影响其他 TerrainClip 实例。
Type:

<readonly> regions :Array.<Object>

当前已添加区域的原始 options 列表。
Type:
  • Array.<Object>

showTexture :Boolean

是否显示坑底、侧墙补面。关闭时隐藏已有补面但不销毁,可再打开。
Type:
  • Boolean

Methods


addRegion(options)

添加裁剪范围。id 不可与已有区域重复。
Parameters:
Name Type Description
options Object 区域对象
Properties
Name Type Description
id String 区域 ID
region Array.<Object> | Object 经纬度点数组(建议逆时针,点为 `{lon, lat, height}`)或 GeoJSON Polygon
Returns:
贴地完成后的 Promise;参数无效时无返回值
Type
Promise | undefined

clear()

移除本实例的全部裁剪区域和补面,不销毁实例。Globe 上其他 TerrainClip 的区域会保留。

dispose()

释放本实例:取消地形监听、清除本实例区域与补面。 仅当 Globe 上对应裁剪集合已空时才销毁该集合,避免拆掉其他实例。

doAnalysis()

应用当前 depth、纹理路径等配置并重建补面几何。 构造时若已传入 regions,仍需在纹理/深度变更后调用本方法。

getResult()

检测与开挖区域相交的 3D Tiles 图层。
Returns:
被裁剪到的图层列表,项为 `{layerName, layerId}`
Type
Array.<Object>

removeRegion(id)

按 id 移除一块裁剪区域及其补面。
Parameters:
Name Type Description
id String 区域 ID