来自:http://blog.sina.com.cn/s/blog_4d780fc10101d2d5.html

先初步了解到大概用到的下面的接口和类:

IEngineEditor

IEngineEditTask

IEngineEditLayers

IEngineEditEvents

IEngineEditProperties

ControlsEditingSketchToolClass

ControlsEditingEditToolClass

ControlsEditingCopyCommandClass

ControlsEditingPasteCommandClass

ControlsEditingClearCommandClass

现在使用 IEngineEditor、IEngineEditTask、IEngineEditLayers这三个接口,再加上Command命令和Tool可以是实现新建要素、复制、剪切、黏贴、删除、移动要素。

下面说明一下我实现新建图形功能的思路:

1、根据workspace和map开启编辑。

2、设置目标图层。

3、设置编辑操作的任务类型。

4、激活SletchTool,ControlsEditingSketchToolClass。

5、这时就可以在AxMapControl中画图形了。图形的点线面类型,SletchTool工具会根据目标图层的类型自动识别。

使用了全局变量IEngineEditor,保证在其他的模块该变量的值

private IEngineEditor m_EngineEditor = new EngineEditorClass();

private void btnNewFeature_Click(object sender, EventArgs e)

{

if(m_engineEditor.EditState==esriEngineEditState.esriEngineStateNotEditing)

{

//Start editing the workspace of the first feature layer found.

//设置编辑的WorkSpace和编辑对象图层

ILayer currentLayer = mMap.get_Layer(0);

if (currentLayer is IFeatureLayer)

{

IFeatureLayer featureLayer = currentLayer as IFeatureLayer;

IDataset dataset = featureLayer.FeatureClass as IDataset;

IWorkspace workspace = dataset.Workspace;

m_engineEditor.StartEditing(workspace, mMap.Map);

((IEngineEditLayers)m_engineEditor).SetTargetLayer(featureLayer, 0);

SetCurrentTask(ref   m_engineEditor,  "新建要素");

}

}

}

///

/// 设置编辑的任务类型

///

///

/// 自己命名的任务名称

public static void SetCurrentTask(ref IEngineEditor pEngineEditor, string taskName)

{

IEngineEditTask edittask;

if (pEngineEditor.EditState == esriEngineEditState.esriEngineStateEditing)

{

switch (taskName)

{

case "新建要素":

edittask = pEngineEditor.GetTaskByUniqueName("ControlToolsEditing_CreateNewFeatureTask");

if (edittask != null)

{

pEngineEditor.CurrentTask = edittask;

}

break;

case "修改图形":

edittask=pEngineEditor.GetTaskByUniqueName("ReshapePolylineEditTask_Reshape Polyline_CSharp");

if (edittask != null)

{

pEngineEditor.CurrentTask = edittask;

}

break;

case "修改要素":

edittask= pEngineEditor.GetTaskByUniqueName("ControlToolsEditing_ModifyFeatureTask");

if (edittask != null)

{

pEngineEditor.CurrentTask = edittask;

}

break;

}

}

}

删除、复制、黏贴的功能,将m_EngineEditor 置于开启编辑的状态后,直接调用下面的命令就好了

ControlsEditingEditToolClass  //用于选择要素对像

ControlsEditingCopyCommandClass

ControlsEditingPasteCommandClass

ControlsEditingClearCommandClass

撤销和重做的功能

///

/// 撒消编辑

///

/// IMap 地图对象

public void MapUndoEdit(IMap m_pMap)

{

IEngineEditProperties ep = new EngineEditorClass();

ILayer m_pCurrentLayer = ep.TargetLayer;

if (m_pCurrentLayer == null) return;

IFeatureLayer pFeatureLayer = (IFeatureLayer)m_pCurrentLayer;

IDataset pDataset = (IDataset)pFeatureLayer.FeatureClass;

if (pDataset == null) return;

IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace;

bool bHasUndos = false;

pWorkspaceEdit.HasUndos(ref bHasUndos);

if (bHasUndos)

pWorkspaceEdit.UndoEditOperation();

IActiveView pActiveView = (IActiveView)m_pMap;

pActiveView.Refresh();

}

///

/// 重做

///

/// IMap 地图对象

public void MapRedoEdit(IMap m_pMap)

{

IEngineEditProperties ep = new EngineEditorClass();

ILayer m_pCurrentLayer = ep.TargetLayer;

if (m_pCurrentLayer == null) return;

IFeatureLayer pFeatureLayer = (IFeatureLayer)m_pCurrentLayer;

IDataset pDataset = (IDataset)pFeatureLayer.FeatureClass;

if (pDataset == null) return;

IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace;

bool bHasUndos = false;

pWorkspaceEdit.HasUndos(ref bHasUndos);

if (bHasUndos)

pWorkspaceEdit.RedoEditOperation();

IActiveView pActiveView = (IActiveView)m_pMap;

pActiveView.Refresh();

}

定制 ArcEngine 要素编辑工具的更多相关文章

  1. 【Telerik控件学习】-建立自己的图形编辑工具(Diagram)

    Telerik提供了RadDiagram控件,用于图形元素的旋转,拖拽和缩放.更重要的是,它还拓展了许多绑定的命令(复制,剪切,粘贴,回退等等). 我们可以用来组织自己的图形编辑工具. Step1.定 ...

  2. MAPZONE GIS SDK接入Openlayers3之五——图形编辑工具

    图形编辑工具提供对要素图形进行增.删.改的功能,具体包括以下几种工具类型: 浏览工具 选择工具 创建要素工具 删除命令 分割工具 合并命令 节点编辑工具 修边工具 撤销命令 重做命令 工具的实现基本上 ...

  3. Editing Tools(编辑工具)

    编辑工具 # Process: 修剪线 arcpy.TrimLine_edit("", "", "DELETE_SHORT") # Proc ...

  4. Sublime Text编辑工具带有 PEP 8 格式检测插件

    Sublime Text编辑工具带有 PEP 8 格式检测插件

  5. Mysql编辑工具中使用(Navicat查询结果显示行号)

    Mysql编辑工具中使用(Navicat查询结果显示行号) as rownum,a.roleId ) t where a.roleId='admin';

  6. eclipse编辑工具小结

    eclipse编辑工具小结 这两天从myeclipse转入eclipse,整体感觉不错,速度更快些,也没在出现各种意外的调试错误.不能断点等情况,并且对整个编辑环境的使用有了更深入的认识,再次对主要几 ...

  7. XML编辑工具

    [标题]XML编辑工具 [开发环境]Qt 5.2.0 [概要设计]使用QT的视图/模型结构.treeview控件以树形结构显示所要操作的XML文件,并实现xml的相关操作 [详细设计] 主要包含 no ...

  8. Luminar 3 for Mac(照片编辑工具)v3.1.0中文特别版

    Luminar for Mac是一款多功能照片编辑软件,使用独特的AI工具加快速度,具备AI Sky Enhancer.Accent AI.太阳光线等创新功能.当然也保留了原有的功能,帮助你轻松的修复 ...

  9. 【强大的视频编辑工具】Adobe Premiere Pro CC 2019 for Mac

    [简介] PR CC是视频编辑爱好者和专业人士必不可少的视频编辑工具.它可以提升您的创作能力和创作自由度,它是易学.高效.精确的视频剪辑软件.PR CC提供了采集.剪辑.调色.美化音频.字幕添加.输出 ...

随机推荐

  1. Object.assign(o1, o2, o3) 对象 复制 合拼

    Object 对象方法学习之(1)—— 使用 Object.assign 复制对象.合并对象 合并对象 var o1 = {a: 1}; var o2 = {b: 2}; var o3 = {c: 3 ...

  2. Zend studio 修改编码格式

    一.临时修改编码格式 edit -> Set Encoding... -> Other(选择) 二.修改软件默认编码格式

  3. 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)

    *题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数) public class 第三十九题按条件计算 ...

  4. Ubuntu18.04 NVIDIA显卡驱动 安装大全

    离线安装NVIDIA显卡驱动 费了一天的劲,走了好多的坑,最主要的原因是gcc版本的问题,一定要用最新版本的gcc!!! 1)官网下载显卡驱动 2)apt 下载gcc包及其依赖包,可用apt-cach ...

  5. 全局/局部变量、宏、const、static、extern

    #pragma mark--全局变量和局部变量 根据变量的作用域,变量可以分为: 一.全局变量 1> 定义:在函数外面定义的变量2> 作用域:从定义变量的那一行开始,一直到文件结尾(能被后 ...

  6. sublime中使用markdown并实时编辑

    1.需求 想在sublime中编辑.md文件 2.步骤 找到菜单栏: 快捷键,shift + command + p,选择 Package Control:Install Package, 没有找到P ...

  7. 【详●析】[GXOI/GZOI2019]逼死强迫症

    [详●析][GXOI/GZOI2019]逼死强迫症 脑子不够用了... [题目大意] 在\(2\times N\)的方格中用\(N-1\)块\(2\times 1\)的方砖和\(2\)块\(1\tim ...

  8. Openjudge-2815-城堡问题

    对于这道题目来说的话,我们的思路是这样的,我们首先把数据读进来,然后把color数组清零. 我们的思路是这样的的,给每一个房间设置一个对应的color数组,然后color数组里面填满不同的数字,每一种 ...

  9. 关闭 macOS Google Chrome 黑暗模式风格

    终端执行命令 defaults write com.google.Chrome NSRequiresAquaSystemAppearance -bool YES 恢复 defaults write c ...

  10. 交互式数据可视化-D3.js(四)形状生成器

    使用JavaScript和D3.js实现数据可视化 形状生成器 线段生成器 var linePath = d3.line() - 使用默认的设置构造一个 line 生成器. linePath.x() ...