叨嗒嗵 - cesium
type: channel
link: https://www.dotatong.com/index.php/tag/cesium/
items: Cesium修改源码增加多区域挖除功能

Cesium修改源码增加多区域挖除功能
type: item
date: 2022-03-10T08:27:00+00:00
description: 前言该方法仅支持挖出凸多边形。想要挖凹多边形，需要把凹多边形分拆成多个凸多边形分别进行开挖。修改文件补丁文件来源官方issuhttps://github.com/CesiumGS/cesium/issues/8751补丁文件点此链接下载https://dotatong.cn/tools/cesium_multi_clipping.zip此份代码是在cesium1.74基础上修改而来的，我已经尝试过集成到1.91版本。理论上1.74以上版本都是可以支持的。⚠️请不要直接用补丁文件替换原来的文件，请按本文标明的行数替换官方版本的文件，以下是各个文件需要替换的行号Source/Shaders/GlobeFS.glsl74 79~82 310~313 411Source/Scene/Globe.js387~400Source/Scene/GlobeSurfaceShaderSet.js6 14～15 22 100～102 168 177～180 188～189 205 211 217～221 310～312 422Source/Scene/GlobeSurfaceTileProvider.js40 54～57 174～180 330～348 438～440 667 797～810 1351～1354 1679～1685 1697～1709 1725～1731 1735～1745 1825～1828 2668编译yarn release项目使用项目先安装官方cesiumyarn add cesium@1.91然后将编译出的以下目录拷贝替换到项目中编译目录项目目录Sourcenode_modules/cesium/SourceBuild/CesiumUnminifiednode_modules/cesium/Build/CesiumUnminified挖坑代码let entity = viewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(119.565149, 29.053939, 50) }) let clippingPlaneCollection1 = new Cesium.ClippingPlaneCollection({ planes: [ new Cesium.ClippingPlane(new Cesium.Cartesian3(1.0, 0.0, 0.0), 0.0), new Cesium.ClippingPlane(new Cesium.Cartesian3(-1.0, 0.0, 0.0), -500.0), new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, 1.0, 0.0), -15.0), new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, -1.0, 0.0), -15.0), ], }) let clippingPlaneCollection2 = new Cesium.ClippingPlaneCollection({ planes: [ new Cesium.ClippingPlane(new Cesium.Cartesian3(1.0, 0.0, 0.0), 1000), new Cesium.ClippingPlane(new Cesium.Cartesian3(-1.0, 0.0, 0.0), -2000.0), new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, 1.0, 0.0), -15.0), new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, -1.0, 0.0), -15.0), ], }) viewer.scene.globe.multiClippingPlanes = new Cesium.MultiClippingPlaneCollection({ collections: [clippingPlaneCollection1, clippingPlaneCollection2], modelMatrix: entity.computeModelMatrix(Cesium.JulianDate.now()), edgeWidth: 1, edgeColor: Cesium.Color.RED, })