📌预览
📌代码
<template> <div id="root-container" ref="rootContainer" class="root-container"> <div class="left-top-plugin"> <el-button type="primary" @click="start" :disabled="isBtn1Disabled()">开始 </el-button> <el-button type="warning" plain @click="drawPolygonEdit" :disabled="isBtn2Disabled()">编辑模式</el-button> <el-button type="danger" plain @click="drawPolygonDelete" :disabled="isBtn3Disabled()">删除模式</el-button> <el-button type="danger" plain @click="drawPolygonRemove" :disabled="isBtn4Disabled()">清除全部</el-button> </div> </div></template>import { onMounted, onUnmounted, ref } from "vue";import { Cartesian3, Color, PolylineDashMaterialProperty, PolylineGlowMaterialProperty, PolylineGraphics, Viewer } from 'cesium';import { CP2dDrawer, DRAW_STATUS, DRAWER_MODE, type CP2dOptions, } from "cesium-pocket/drawer";import { ElButton, ElMessageBox } from 'element-plus'
const rootContainer: any = ref(null);const viewer = ref<Viewer | null>(null)const status = ref(null)let polygonDrawer: any = null
onMounted(() => { viewer.value = //你获取的viewer init()});
onUnmounted(() => { if (viewer.value && !viewer.value.isDestroyed()) { viewer.value.destroy(); viewer.value = null; }});
const isBtn1Disabled = () => { return polygonDrawer != null && status.value != DRAW_STATUS.STOPED}
const isBtn2Disabled = () => { return status.value != DRAW_STATUS.DRAWABLE && status.value != DRAW_STATUS.DELETABLE}
const isBtn3Disabled = () => { return status.value != DRAW_STATUS.DRAWABLE && status.value != DRAW_STATUS.EDITABLE}
const isBtn4Disabled = () => { return status.value != DRAW_STATUS.DRAWABLE && status.value != DRAW_STATUS.EDITABLE && status.value != DRAW_STATUS.DELETABLE}
let delCallbackFun = (): Promise<any> => { return new Promise((resolve) => { ElMessageBox.confirm( '确定删除该节点吗?', '', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning', } ).then(() => { resolve(true) }).catch(() => { resolve(false) }) })}
const init = () => { let polylineObj: PolylineGraphics.ConstructorOptions = { positions: [new Cartesian3(), new Cartesian3()], width: 6, material: new PolylineGlowMaterialProperty({ color: Color.BLUE, glowPower: 0.4, taperPower: 1 }), clampToGround: true }
let dashlineObj: PolylineGraphics.ConstructorOptions = { positions: [new Cartesian3(), new Cartesian3()], width: 2, material: new PolylineDashMaterialProperty({ color: Color.BLUE, gapColor: Color.WHITE, }), clampToGround: true }
let polygonObj = { hierarchy: [new Cartesian3(), new Cartesian3(), new Cartesian3()], material: Color.BLUE.withAlpha(0.3), outline: false, }
let options: CP2dOptions = { polyline: polylineObj, deshline: dashlineObj, polygon: polygonObj, drawerMode: DRAWER_MODE.POLYGON, delCallbackFun: delCallbackFun } polygonDrawer = new CP2dDrawer(viewer.value as Viewer, options)}
const start = () => { polygonDrawer.start() status.value = polygonDrawer.getStatus()}
const drawPolygonEdit = () => { polygonDrawer.setEditStatus() status.value = polygonDrawer.getStatus()}
const drawPolygonDelete = () => { polygonDrawer.setDelStatus() status.value = polygonDrawer.getStatus()}
const drawPolygonRemove = () => { polygonDrawer.clearAll() status.value = polygonDrawer.getStatus() init()}.root-container { position: relative; width: 100wh; height: 100vh; overflow: hidden; }
.left-top-plugin { position: absolute; top: 20px; left: 10px; z-index: 10; }📌操作步骤及流程
- 点击“开始绘制”进入绘制模式,可绘制几何面
- 点击“编辑模式”进入编辑模式。鼠标变手型抓取时按住鼠标左键可拖拽节点,松开则放弃编辑。
- 点击“删除模式”,鼠标变手型时单击左键会弹出删除与否的提示,确认后删除。
- 点击“删除全部”可删除几何面。
- 可自定义节点、实线、虚线和面的实体要素
- 可自定义删除前的确认对话框
📌构造函数参数列表(new CP2dDrawer(...))
| 序号 | 名称 | 类型 | 必须? | 默认值 | 含义 | 备注 |
|---|---|---|---|---|---|---|
| 1 | viewer | Cesium.Viewer | 是 | - | viewer对象 | - |
| 2 | options{ ... } | CP2dOptions | 否 | - | 其他参数 | 参数集对象 |
| 2-1 | options.drawerMode | DRAWER_MODE_TYPE | 否 | DRAWER_MODE.LINE | 绘制模式(线or面) | DRAWER_MODE.LINE,DRAWER_MODE.POLYGON |
| 2-2 | options.point | Cesium.PointGraphics.ConstructorOptions | 否 | {黄色空心圆} | Entity的PointGraphics参数项 | - |
| 2-3 | options.polygon | Cesium.PolygonGraphics.ConstructorOptions | 否 | {红色面} | Entity的PolygonGraphics参数项 | - |
| 2-4 | options.polyline | Cesium.PolylineGraphics.ConstructorOptions | 否 | {红色实线} | Entity的PolylineGraphics参数项 | - |
| 2-5 | options.deshline | Cesium.PolylineGraphics.ConstructorOptions | 否 | {红色虚线} | Entity的PolylineGraphics参数项 | - |
| 2-6 | options.afterAddPointFun | (cartesian: Cartesian3) => void | 否 | {浏览器自带confirm} | 删除时的回调函数 | - |
| 2-7 | options.movingCallbackFun | (cartesian: Cartesian3) => void | 否 | - | 绘制移动时的回调函数 | options参数 |
| 2-8 | options.editCallbackFun | (cartesian: Cartesian3, index: number) => void | 否 | - | 绘制编辑拖拽时的回调函数 | options参数 |
| 2-9 | options.delCallbackFun | () => void | 否 | - | 删除节点后的回调函数 | - |
| 2-10 | options.delConfirmFun | () => Promise<boolean> | 否 | {浏览器自带confirm} | 删除时待确认的回调函数 | - |
| 2-11 | options.overCallbackFun | () => void | 否 | - | 绘制结束时的回调函数 | - |
📌API方法列表
| 序号 | 方法名 | 入参 | 返回值 | 含义 | 备注 |
|---|---|---|---|---|---|
| 1 | start | - | void | 开启绘制多边形 | - |
| 2 | getEntity | - | Cesium.Entity | 获得多边形的Entity | - |
| 3 | getDataSource | - | Cesium.DataSource | 获得点所有节点的DataSource | - |
| 4 | getPositions | - | Cartain3[] | 获得点所有节点的坐标 | - |
| 5 | clearAll | - | - | 清除所有对象 | - |