超图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动态绘制实体(点、标注、面、线、圆、矩形)

最新文章

  1. wex5 实战 用户点评与提交设计技巧
  2. 【final】站立会议---11.27
  3. Shell数组例子
  4. pascal矩阵
  5. wpf 获取DataGrid某一个单元格,设置此单元格ToolTip内容和背景颜色
  6. BZOJ 4027 [HEOI 2015] 兔子与樱花 解题报告
  7. 树莓派(raspberry)启用root账户 分类: 服务器搭建 Raspberry Pi 2015-04-12 18:45 95人阅读 评论(0) 收藏
  8. 69个spring面试题及答案
  9. [转]Delphi 中 image 控件加载bmp、JPG、GIF、PNG等图片的办法
  10. 达到XML简单的动态配置
  11. 驱动: oops
  12. PHP 文件操作类(创建文件并写入) 生成日志
  13. php session 读写锁
  14. Android中调用文件管理器并返回选中文件的路径
  15. Android studio导入eclipse项目(亲测)
  16. Centos7快速部署CloudStack服务器
  17. MySQL查询表的所有列名,用逗号拼接
  18. URL地址重写例子(Helicon)
  19. spring-mvc注解配置小记
  20. Mysql数据库安装与配置

热门文章

  1. (转) exp1-3://一次有趣的XSS漏洞挖掘分析(3)最终篇
  2. Shell命令整理
  3. 团队项目-Beta冲刺2
  4. Redis 中的数据持久化策略(AOF)
  5. Spring Cloud服务注册中心交付至kubernetes
  6. npm、node版本升级与淘宝镜像
  7. 快速理解DevOps概念和意义-兼谈SRE
  8. OpenCV3入门(三)基本绘图函数
  9. nginx+lua在我司的实践
  10. 小白学 Python 数据分析(3):Pandas (二)数据结构 Series