1.功能简介

通过IEditEvents接口,开发者可以监听到Editor对象的相关的事件,并且做出反应。包括Editor中开始编辑、结束编辑等操作,下面对矢量数据的编辑事件的监听功能进行介绍。

2.功能实现说明

2.1实现思路及原理说明

第一步

前提处于编辑状态,在编辑的开始和结束的时候进行触发的操作事件

2.2 核心接口与方法

接口/类

方法/属性

说明

IEditEvents

OnStartEditOperation;

开始编辑委托事件

OnStopEditOperation

结束编辑委托事件

IEditor

GetEditState();

获取编辑状态

StartEditOperation(string strDescription);

开始编辑操作

StopEditOperation()

结束编辑操作

2.3示例代码

项目路径

百度云盘地址下/PIE示例程序/04数据操作/07矢量数据编辑事件的监听

数据路径

自定义即可

视频路径

百度云盘地址下/PIE视频教程/04数据操作/07矢量数据编辑事件的监听.avi

示例代码

      //要素编辑器
private IEditor m_Editor = Editor.Instance;
//鼠标按下起点
private IPoint m_StartPoint = null;
//要素
private IFeature m_Feature = null;
//标识符
private int m_Flag = ;
//地图初始化绑定编辑监听事件
private void FormMain_Load(object sender, EventArgs e)
{
//初始化绑定编辑监听事件
IEditEvents editEvents = Editor.Instance;
editEvents.OnStartEditOperation += editEvents_OnStartEditOperation;
editEvents.OnStopEditOperation += editEvents_OnStopEditOperation;
}
//委托事件
public void editEvents_OnStartEditOperation()
{
MessageBox.Show("开始绘制");
}
public void editEvents_OnStopEditOperation()
{
MessageBox.Show("完成绘制");
} /// <summary>
/// 开始编辑
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ToolStripMenuItem_StartEdit_Click(object sender, EventArgs e)
{
if (m_Editor.GetEditState() == EditState.StateNotEditing)
{
MessageBox.Show("开始编辑");
m_Editor.StartEditing();
}
} /// <summary>
/// 结束编辑
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ToolStripMenuItem_StopEdit_Click(object sender, EventArgs e)
{
if (m_Editor.GetEditState() == EditState.StateEditing)
{
if (MessageBox.Show("结束编辑前是否保存编辑数据", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.OK)
{
m_Editor.SaveEditing();//保存编辑
}
m_Editor.StopEditing(true);//停止编辑
}
}
/// <summary>
/// 地图控件鼠标移动事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param> private void mapControlMain_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button != System.Windows.Forms.MouseButtons.Left) return; if (m_Editor.GetEditState() == EditState.StateEditing)
{
m_StartPoint = mapControlMain.FocusMap.ToMapPoint(e.Location);
List<ILayer> layerList = new List<ILayer>();
int iLayerCount = mapControlMain.FocusMap.LayerCount;
if (iLayerCount > )
{
ILayer layer = mapControlMain.GetLayer(iLayerCount - );
layerList.Add(layer);
if (layer.IsValid())
{
if (layer.LayerType != LayerType.LayerTypeFeatureLayer) return; IGeometry geometry = null;
switch (m_Flag)
{
case :
mapControlMain.ActiveView.FocusMap.ClearSelectionFeatures();
m_Editor.StartEditOperation("开始编辑");
geometry = mapControlMain.TrackPolygon() as IGeometry;
geometry.SpatialReference = mapControlMain.SpatialReference; IFeatureClass featureClass = (layer as IFeatureLayer).FeatureClass;
m_Feature = featureClass.CreateNewFeature(); //创建Feature
m_Feature.Geometry = geometry;
featureClass.AddFeature(m_Feature); //添加Feature
// featureClass.Save(); //保存
m_Editor.StopEditOperation();
mapControlMain.PartialRefresh(ViewDrawPhaseType.ViewAll);//不能少
m_Flag = ; //一定要加
break;
default:
break;
}
}
}
}
} /// <summary>
/// 绘制面状要素
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toolStripButton_DrawPolygon_Click(object sender, EventArgs e)
{
m_Flag = ;
}

2.4示例截图

  

PIE SDK矢量数据编辑事件的监听的更多相关文章

  1. PIE SDK矢量数据编辑的撤销和回退

    1.功能简介 在数据的编辑过程中难免会出现失误,撤销和回退可以更好的编辑,下面对矢量数据编辑的撤销和回退功能进行介绍. 2.功能实现说明 2.1. 实现思路及原理说明 第一步 调用UndoComman ...

  2. PIE SDK元素事件的监听

    1功能简介 元素在操作的过程中,如添加,删除,选中等操作都需要有事件的监听,PIE SDK支持对元素操作事件的监听,下面对元素事件的监听进行介绍. 2功能实现说明 2.1.1 实现思路及原理说明 第一 ...

  3. Spring Boot 事件和监听

    Application Events and Listeners 1.自定义事件和监听 1.1.定义事件 package com.cjs.boot.event; import lombok.Data; ...

  4. uniapp仿h5+fire自定义事件触发监听

    仿h5+fire自定义事件触发监听 uni-app调用 event.js 源码记录(点击查看) 1.js下载地址 [event.js](https://ext.dcloud.net.cn/plugin ...

  5. 最优-scroll事件的监听实现

    1. 背景和目标 前端在监听scroll这类高频率触发事件时,常常需要一个监听函数来实现监听和回调处理.传统写法上利用setInterval或setTimeout来实现. 为了减小 CPU 开支,往往 ...

  6. 事件的监听是由awt完成的

    学swing 之前先学awt ,因为awt 是Java实现图形界面的基础. 它能够完成编写界面的基本功能,最重要的是,事件的监听是由awt完成的. 而swing是在awt基础上提供的新的界面工具包,它 ...

  7. 深入理解Spring的容器内事件发布监听机制

    目录 1. 什么是事件监听机制 2. JDK中对事件监听机制的支持 2.1 基于JDK实现对任务执行结果的监听 3.Spring容器对事件监听机制的支持 3.1 基于Spring实现对任务执行结果的监 ...

  8. MVC框架入门准备(三)事件类 - 事件的监听和触发

    在mvc框架中可以看到事件类,实现事件的监听和触发. 举例: <?php /** * 事件类 */ class Event { // 事件绑定记录 private static $events; ...

  9. Spring Boot(六)自定义事件及监听

    事件及监听并不是SpringBoot的新功能,Spring框架早已提供了完善的事件监听机制,在Spring框架中实现事件监听的流程如下: 自定义事件,继承org.springframework.con ...

随机推荐

  1. The user specified as a definer (”@sa’%') does not exist 解决方法

    mysql数据库报错The user specified as a definer (”@sa’%') does not exist.尝试过两种方式,第一种重启之后好用,但是一会就又不好用了.第二种算 ...

  2. Requests接口测试(五)

    使用python+requests编写接口测试用例 好了,有了前几章的的基础,写下来我把前面的基础整合一下,来一个实际的接口测试练习吧. 接口测试流程 1.拿到接口的URL地址 2.查看接口是用什么方 ...

  3. 如何快速搭建基于python+appium的自动化测试环境

    首先申明本文是基本于Python与Android来快速搭建Appium自动化测试环境: 主要分为以下几个步骤: 前提条件: 1)安装与配置python环境,打开 Python官网,找到“Downloa ...

  4. .net Stream篇(六)

    BufferedStream 目录: 简单介绍一下BufferedStream 如何理解缓冲区? BufferedStream的优势 从BufferedStream 中学习装饰模式 如何理解装饰模式 ...

  5. 小议C#接口的隐式与显示实现

    小弟不才,各位大牛嘴下留情... 一.对于继承类里头有相同方法时候,用接口方式去调用,会优先查走显式接口方法 例如 public interface IA { void Test(); } publi ...

  6. 动态往 datagridview 追加行、列操作

    DataGridViewTextBoxColumn acCode = new DataGridViewTextBoxColumn(); acCode.Name = "acCode" ...

  7. 321. Create Maximum Number (c++ ——> lexicographical_compare)

    Given two arrays of length m and n with digits 0-9 representing two numbers. Create the maximum numb ...

  8. PHP获取对象的纯数字属性

    php的对象属性 我们知道获取php的对象属性用箭头: echo $obj->name; 如果属性名是一个变量,那么可以用: $var = 'name'; echo $obj->$var; ...

  9. [Swift]八大排序算法(八):基数排序

    排序分为内部排序和外部排序. 内部排序:是指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列. 外部排序:指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存 ...

  10. React学习笔记一

    我是通过script src的方式引入的react的相关文件,本次学习顺序按照<React快速上手开发>一书的顺序学习的, 本篇博客笔记地址:http://note.youdao.com/ ...