定制 ArcEngine 要素编辑工具
来自: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 要素编辑工具的更多相关文章
- 【Telerik控件学习】-建立自己的图形编辑工具(Diagram)
Telerik提供了RadDiagram控件,用于图形元素的旋转,拖拽和缩放.更重要的是,它还拓展了许多绑定的命令(复制,剪切,粘贴,回退等等). 我们可以用来组织自己的图形编辑工具. Step1.定 ...
- MAPZONE GIS SDK接入Openlayers3之五——图形编辑工具
图形编辑工具提供对要素图形进行增.删.改的功能,具体包括以下几种工具类型: 浏览工具 选择工具 创建要素工具 删除命令 分割工具 合并命令 节点编辑工具 修边工具 撤销命令 重做命令 工具的实现基本上 ...
- Editing Tools(编辑工具)
编辑工具 # Process: 修剪线 arcpy.TrimLine_edit("", "", "DELETE_SHORT") # Proc ...
- Sublime Text编辑工具带有 PEP 8 格式检测插件
Sublime Text编辑工具带有 PEP 8 格式检测插件
- Mysql编辑工具中使用(Navicat查询结果显示行号)
Mysql编辑工具中使用(Navicat查询结果显示行号) as rownum,a.roleId ) t where a.roleId='admin';
- eclipse编辑工具小结
eclipse编辑工具小结 这两天从myeclipse转入eclipse,整体感觉不错,速度更快些,也没在出现各种意外的调试错误.不能断点等情况,并且对整个编辑环境的使用有了更深入的认识,再次对主要几 ...
- XML编辑工具
[标题]XML编辑工具 [开发环境]Qt 5.2.0 [概要设计]使用QT的视图/模型结构.treeview控件以树形结构显示所要操作的XML文件,并实现xml的相关操作 [详细设计] 主要包含 no ...
- Luminar 3 for Mac(照片编辑工具)v3.1.0中文特别版
Luminar for Mac是一款多功能照片编辑软件,使用独特的AI工具加快速度,具备AI Sky Enhancer.Accent AI.太阳光线等创新功能.当然也保留了原有的功能,帮助你轻松的修复 ...
- 【强大的视频编辑工具】Adobe Premiere Pro CC 2019 for Mac
[简介] PR CC是视频编辑爱好者和专业人士必不可少的视频编辑工具.它可以提升您的创作能力和创作自由度,它是易学.高效.精确的视频剪辑软件.PR CC提供了采集.剪辑.调色.美化音频.字幕添加.输出 ...
随机推荐
- OFDM、FTTx、SCTP、Ad Hoc、WSN术语简介
上课提到一些术语,下来查了一下,总结在这里. OFDM: OFDM(Orthogonal Frequency Division Multiplexing)即正交频分复用技术,实际上OFDM是MCM(M ...
- (转载)RedHat Enterprise Linux 5 安装GCC
注:在RedHat Enterprise Linux 5使用gcc编译第一个程序时,发现其gcc并未安装.在网上搜索看到这篇帖子.遂转到此处进行学习.感谢博客园中的“风尘孤客”的分享.@风尘孤客 Ab ...
- const函数的使用
const知道吗?解释其作用. 1.const 修饰类的成员变量,表示成员常量,不能被修改. 2.const修饰函数承诺在本函数内部不会修改类内的数据成员,不会调用其它非 const 成员函数. 3. ...
- 通过 getResources 找不到jar包中的资源和目录的解决方法
http://my.oschina.net/sub/blog/184074 今天碰到一个怪问题: 原本跑的好好的代码,打成 jar 包就不能运行了. 问题出在,代码中有一段自动扫描 classpath ...
- python关于入参中,传入的是指针还是引用
偶然看到别人的代码,发现有的会传入参数之后,做一次copy,试验一下,关于入参中,传入的是指针还是引用先说自己的结论:1.如果传入的是简单的类型,那么传入应该是引用的数值,2.假如传入的是df这种类型 ...
- 连接mysql 2003 Can't connect to Mysql on 'xxx'(10061)
备份 cp /etc/mysql/my.cnf /etc/mysql/my.cnf.bak 修改 vim /etc/mysql/my.cnf 在[mysqld]下修改为bind-address=0.0 ...
- 如何用纯 CSS 创作一个金属光泽 3D 按钮特效
效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/full/MGeRRO 可交互视频教程 此 ...
- ubuntu14.04 configure: error: xml2-config not found. Please check your libxml2 installation错误解决
今天在ubuntu14.04上安装php7时 执行:./configure命令时 一直报configure: error: xml2-config not found. Please check yo ...
- 【BZOJ 3555】 [Ctsc2014]企鹅QQ(哈希)
Description PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即时通讯.相册.集市等丰富强大 ...
- The Coco-Cola Store
UVA11877 The Coco-Cola Store Once upon a time, there is a special coco-cola store. If you return thr ...