超图WebGL三维接口中有一个绘制的接口(new Cesium.DrawHandler(viewer, mode, clampMode),它封装了绘制完之后的式样,画完之后捕捉绘制完成的实体有一定的难度,而且样子也改不了,所以我对其Drawhandler的方法做了变形,只使用其绘制中的预览效果,最终画完的东西按我们自己的来,我们只抓取绘制的点。

原理是使用Drawhandler的 drawEvt,绘制完成事件的回调

handler.drawEvt.addEventListener(function(result){
console.log(result);
});

下面是改装:

     let draw =  new Cesium.DrawHandler(_view.view, mode, _clampMode||Cesium.ClampMode.Space);
draw.activate();
let style;
if(!_style){
style={};
}else{
style=_style;
}
draw.drawEvt.addEventListener(function(result){
let DRAWENTITY;
switch (mode) {
case Cesium.DrawMode.Polygon:case 'Cesium.DrawMode.Polygon':case '2':case 2:
style.polygon.hierarchy=result.object.polygon.hierarchy;
_view.view.entities.remove(result.object);
draw.clear();
DRAWENTITY= _view.view.entities.add({
id:entityProperty.id||null,
description:entityProperty.description||null,
name:entityProperty.name||'',
show:entityProperty.show||true,
polygon:style.polygon
});
break;
case Cesium.DrawMode.Point:case 'Cesium.DrawMode.Point':case '0':case 0:
let pointPosition = result.object.position;
_view.view.entities.remove(result.object);
draw.clear();
DRAWENTITY=_view.view.entities.add({
id:entityProperty.id||null,
description:entityProperty.description||null,
name:entityProperty.name||'',
show:entityProperty.show||true,
position:pointPosition,
point:style.point
});
break;
case Cesium.DrawMode.Line:case 'Cesium.DrawMode.Line':case '1':case 1:
let lineStyle = style;
lineStyle.polyline.positions= result.object.positions;
_view.view.entities.remove(result.object);
draw.clear();
DRAWENTITY=_view.view.entities.add({
id:entityProperty.id||null,
description:entityProperty.description||null,
name:entityProperty.name||'',
show:entityProperty.show||true,
polyline:lineStyle.polyline
});
break;
case Cesium.DrawMode.Marker:case 'Cesium.DrawMode.Marker':case '3':case 3:
if(style.billboard) {
let markerPosition = result.object.position;
_view.view.entities.remove(result.object);
draw.clear();
DRAWENTITY=_view.view.entities.add({
id:entityProperty.id||null,
description:entityProperty.description||null,
name:entityProperty.name||'',
show:entityProperty.show||true,
position:markerPosition,
billboard:style.billboard
});
}else{
DRAWENTITY=result.object
}
break;
}
if(_drawEndcallback){
_drawEndcallback(DRAWENTITY)
}
draw.deactivate();
});

  这样就可以在回调中抓取到绘制的实体,当然,如果不想依赖于超图的接口,因为在绘制过程中预览效果用的是绿色的线,不好看。也可以基于纯Cesium自己写一个,我写的基于原始Cesium的绘制方法在下面这个链接里:

Cesium动态绘制实体(点、标注、面、线、圆、矩形)

改造SuperMap的DrawHandler接口,自定义绘制的图形样式的更多相关文章

  1. EF架构~EF异步改造之路~仓储接口的改造~续

    回到目录 返回异步与并行目录 在写完仓储接口的改造改造后,总觉得有个代码的坏味道,这种味道源于它的DRP,即重复的代码太多了,即异步操作和同步操作其实只是在insert,update和delete上有 ...

  2. Unity 扩展属性自定义绘制

    这么晚了准备睡觉的时候,去学习了一会. 发现一个标题好奇的点进去. 居然是自定义绘制属性.  在前几天这个问题把我难住了,没想到几分钟就能解决的问题. 我花了半天时间使用反射去解决...  如果我们想 ...

  3. C# 绘制PDF图形——基本图形、自定义图形、色彩透明度

    引言 在PDF中我们可以通过C#程序代码来添加非常丰富的元素来呈现我们想要表达的内容,如绘制表格.文字,添加图形.图像等等.在本篇文章中,我将介绍如何在PDF中绘制图形,并设置图形属性的操作. 文章中 ...

  4. Springboot学习06-Spring AOP封装接口自定义校验

    Springboot学习06-Spring AOP封装接口自定义校验 关键字 BindingResult.Spring AOP.自定义注解.自定义异常处理.ConstraintValidator 前言 ...

  5. Flutter 自定义绘制 View

    在 Flutter 中自定义 View 有两种方式: 组合已有控件 自定义绘制 如何自定义绘制 有两个类做这件事情: CustomPaint :会在绘制阶段提供一个 Canvas 画布 CustomP ...

  6. Flutter自定义绘制(1)- 绘制基础

    CustomPainter Flutter 中实现绘制的主要是CustomPainter类. 我们一般继承这个类,来使用它: class MyPainter extends CustomPainter ...

  7. 自定义View—绘制基本图形

    一.Canvas能够绘制哪些图形 二.

  8. 绘制基本图形和线型(StrokeStyle)的设置详解

    绘制基本图形和线型(StrokeStyle)的设置详解 目前,在博客园上,相对写得比较好的两个关于Direct2D的教程系列,分别是万一的Direct2D系列和zdd的Direct2D系列.有兴趣的网 ...

  9. 自定义浏览器滚动条的样式,打造属于你的滚动条风格——兼容IE和webkit(ff不支持)

    前段时间,到网上找素材时,看到了一个很个性的滚动条式,打开Chrome的调试工具看了一下,发现不是用JavaScript来模拟实现的,觉得 有必要折腾一下.于是在各大浏览器中对比了一下,发现只用Chr ...

随机推荐

  1. Windows Terminal入门

    目录 0.引言 1.简易安装 2.初识WT 3.初识Settings 3.1全局配置 3.2每一个终端配置 3.3配色方案 3.4键位绑定 4.连接云服务器 5.连接WSL 6.玩转Emoji 0.引 ...

  2. Spring-事务(1)

    一,注解的方式实现事务 1.Dao层 package com.atguigu.spring.tx; public interface BookShopDao { //根据书号获取书的单价 public ...

  3. H5新增特性

    1.pattern:写正则,但是需要和form表单连着用 2.WebSocket "网络套接字", 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议.在 W ...

  4. 什么是 Trait

    Trait 是从 PHP 5.4 加入的一种细粒度代码复用的语法.以下是官方手册对 Trait 的描述: Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制.Trait 为了减少单继承 ...

  5. freemark 基本使用

    实际上用程序语言编写的程序就是模板. FTL (代表FreeMarker模板语言). 这是为编写模板设计的非常简单的编程语言. 模板(FTL编程)是由如下部分混合而成的: 文本:文本会照着原样来输出. ...

  6. Word文档分节设置页码

    在一篇论文中需要将摘要和目录作为一部分设置罗马数字页码,正文部分设置阿拉伯数字页码. 大致效果如下图所示: 这里面用到了分节符,步骤如下: 1 :点击开始菜单栏下 显示/隐藏编辑标记 2:点击插入菜单 ...

  7. 初探 Node.js 框架:eggjs (环境搭配篇)

    eggjs 是一个优秀的 Node.js 框架 概述:为什么标题上说 eggjs 是一个优秀的 Node.js 框架(可跳过)? 换言之,我们为什么选择 eggjs 进行开发而不是之前初学时使用的 E ...

  8. 用goaccess实现可视化并实时监控access日志

    goaccess access.log -o ../html/report.html --real-time-html time-format='%H:%M:%S' --date-format=‘%d ...

  9. postgresql spi开发笔记

    #include "postgres.h" #include "fmgr.h" #include <string.h> #ifdef PG_MODU ...

  10. This function or variable may be unsafe

    1>------ Build started: Project: wintest, Configuration: Debug Win32 ------ 1>  Source.cpp 1&g ...