超图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. Nmap使用教程(进阶篇)

    什么是防火墙? 防火墙是用来控制网络访问的软件或硬件.分为以下两类:1.基于主机的防火墙:2.基于网络的防火墙. 基于主机的防火墙 这是在单台主机上运行的软件,用来控制入站流量(从网络向主机)和出站流 ...

  2. 实用代码|javaMail发送邮件(文末重磅资源!)

    每天进步一点点,距离大腿又近一步!阅读本文大概需要5分钟 JavaMail发送邮件,简单实用,了解一下呗~ 1.开启邮箱MAP/SMTP服务,获取第三方授权码 以QQ邮箱为例 2.主要代码 maven ...

  3. 微服务的多数据源配置: step 1

    spring boot + mybatis: 实现的功能点: 多数据源 jdbc: spring.datasource.test1.url = jdbc:mysql://localhost:3306/ ...

  4. basic-pentesting-1 靶机提权

    原文地址:https://www.payload.com.cn/   basic-pentesting-1 下载地址: https://www.vulnhub.com/entry/basic-pent ...

  5. Catch That Cow (简单BFS+剪枝)

    Problem Description Farmer John has been informed of the location of a fugitive cow and wants to cat ...

  6. selenium,CSS定位法应用

    如图,下载按钮 查看其元素,是无法直接定位的,通过xpath也无法定位,转为firepath获取的CSS也是无效的#downloadItems>a 但是为经过firepath,直接在html下复 ...

  7. PKU 1185-炮兵阵地(状压DP)

    炮兵阵地 题目链接 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 34827 Accepted: 13353 Descripti ...

  8. 20194653 面向对象基础3——static、this、包总结

    题目1:编写一个类Computer,类中含有一个求n的阶乘的方法.将该类打包,并在另一包中的Java文件App.java中引入包,在主类中定义Computer类的对象,调用求n的阶乘的方法(n值由参数 ...

  9. centos7中搭建ftp服务

    博客搬家: centos7中搭建ftp服务 最近想和同学共享一些文件资源,于是在实验室服务器上搭建个ftp服务,本博客记录一下配置的流程.过程基本是参照别人的方法来做的,博客也是在别人博客基础上修改的 ...

  10. Codeforces gym101755F Tree Restoration(拓扑排序)

    题意: 一棵树,给出每个点的后代们,问你这棵树是否存在,存在就给出这棵树 n<=1000 思路: 对祖先->后代建立有向图,跑拓扑排序.跑的时候不断更新父亲并判断答案的存在性,同时注意一种 ...