Technorati 标签: 转载

相对与9.2版本,Engine9.3主要在地图编辑(Editing)、网络分析(NetworkAnalyst)和追踪分析(Tracking Analyst)方面做了一些改进。此外,9.3还比之前的版本提供了3-4倍的演示实例,在DevlopKit下的例子大概有150多个,看来ESRI还是在Engine上下了些功夫。详细可参见开发帮助的What's new for ArcGIS Engine developers at 9.3?
       9.3之前的版本要写一个理想的自定义编辑工具是比较有难度的。包括一个有效率的节点捕捉工具。一般都是用IworkSpaceEdit接口来实现。最近手头上正好有个9.1版本的编辑工具要修改,代码大概在1万行左右。考虑到9.3在编辑方面的提高,所以先熟悉了一下9.3的新编辑类EngineEditor。再结合以前采用ToolBarControl共享命令池ICommandPool和操作栈IoperationStack的方式。制作了一个简单可行的编辑工具条,包括自定义的节点编辑工具在内,代码在1千行左右。

具体要点为:
1. 每一个自定义编辑工具封装为一个icommand 或者itoolbar类,功能类似的两个工具如添加节点和删除节点可封装在一个继承IcomandSubType的类中。
2. 初始化编辑类EngineEditor。

//engineEditor是singleton类,只能有一个实例

m_engineEditor = new EngineEditorClass();

m_engineEditor.EnableUndoRedo(true);

m_engineEditor.StartEditing(pWS, m_mapControl.Map);

3. 构建一个ToolbarControl,设置其操作栈和命令池。最后将操作栈连接到EngineEditor。

m_toolbarControl = new ToolbarControlClass();

m_toolbarControl.SetBuddyControl(m_mapControl.Object);

//必须初始化命令池和操作栈, 否则出错。

//这个过程类似于在窗体中拖一个AxToolBarControl;

m_pool = new CommandPoolClass();

m_toolbarControl.CommandPool = m_pool;

if (m_operationStack == null)

{

m_operationStack = new ControlsOperationStack();

}

m_operationStack.Reset();

m_toolbarControl.OperationStack = m_operationStack;

IExtension engineEditorExt = m_engineEditor as IExtension;

object obj = (object)m_toolbarControl.Object;

engineEditorExt.Startup(ref obj);

4. 将自定义的编辑工具或者Out-Of-Box工具添加到Toolbarcontrol中,在自定义按钮事件中获取ToolBarControl中的命令。        ICommand cmd = m_toolbarControl.GetItem(3).Command;
            m_mapControl.CurrentTool = (ITool)cmd;

5. 为了实时更新工具栏中按钮的Enabled属性与ToolBarControl中的同步,必须声明一个MapControl.AfterDraw委托,在地图刷新的时候更新一次。这么做主要起到保持编辑逻辑防止误操作,以及实时更新”撤消Undo”和”重做Redo”按钮的可用性。

private IMapControlEvents2_OnAfterDrawEventHandler m_onAfterDraw;

m_onAfterDraw = new IMapControlEvents2_OnAfterDrawEventHandler(OnMapAfterDraw);

((IMapControlEvents2_Event)m_mapControl).OnAfterDraw += new IMapControlEvents2_OnAfterDrawEventHandler(m_onAfterDraw);

当然,在结束编辑时要注销掉这个事件:

((IMapControlEvents2_Event)m_mapControl).OnAfterDraw -= new IMapControlEvents2_OnAfterDrawEventHandler(m_onAfterDraw);

5. m_onAfterDraw中要做的事便是:
       m_barManager.Items["XX"].Enabled = m_toolbarControl.GetItem(i).Command.Enabled;

来自: http://hi.baidu.com/murphy1314/blog/item/f59e85116f0e5b18b9127ba8.html

ArcEngine9.3编辑工具条的实现相关推荐

  1. GIS二次开发:实验四 编辑工具条的实现

    实验四 编辑工具条的实现 一.实验目的 1.熟悉arcgis中的编辑工具 2.掌握通过arcgis engine 的toolbarcontrol添加编辑工具条 3.掌握自定义工具条的添加 二.实验仪器 ...

  2. 百度地图之鼠标绘制工具条库(开源库)

    百度地图开发常用网站 1.百度地图开放平台 http://lbsyun.baidu.com/ 2.百度地图 Javascript API JavaScript API v3.0 http://lbsy ...

  3. 工具条研究手记(5)- 自定义工具条的实现

    /*****************************************************************/ /*          工具条研究手记(5)- 自定义工具条的实 ...

  4. [Eclipse]GEF入门系列(六、添加菜单和工具条)

    我发现一旦稍稍体会到GEF的妙处,就会很自然的被它吸引住.不仅是因为用它做出的图形界面好看,更重要的是,UI中最复杂和细微的问题,在GEF的设计中无不被周到的考虑并以适当的模式解决,当你了解了这些,完 ...

  5. 学python语言用什么软件-对于自学python的初学者来说,应该使用什么编辑工具?...

    /> 对于零基础的朋友来说,学习Python有一个小门槛或者说小考验,那就是选择写代码的工具. 简单,上网查,用什么工具来写Python代码,答案五花八门,各种编辑器.各种IDE,难道一个个试过 ...

  6. 初学者python用什么开发软件-对于自学python的初学者来说,应该使用什么编辑工具?...

    /> 对于零基础的朋友来说,学习Python有一个小门槛或者说小考验,那就是选择写代码的工具. 简单,上网查,用什么工具来写Python代码,答案五花八门,各种编辑器.各种IDE,难道一个个试过 ...

  7. 分享5个可视化的正则表达式编辑工具

    分享5个可视化的正则表达式编辑工具 发表于2014-11-27 16:19|11596次阅读| 来源CSDN|52 条评论| 作者张红月 正则表达式可视化工具RegexperDebuggexPyreg ...

  8. VC6中工具条的新特色

      加入时间:01-1-8 下午 09:10:32 在Visual C++ 版本6中工具条的新特色 作者: Dave Schmitt 微软在www.microsoft.com/visualc已经推出V ...

  9. 怎么将arcgis新建工具条如何保存_ArcGIS中寻找最短路径的方法

    1 流程图  将两个道路数据统一坐标系,然后合并建立数据集,将未联通的道路路线进行结合,对接便后的道路数据集构建网络,使用追踪分析查找两点间最短路径,流程图如图1-1所示. 图1-1 流程图 2 操作 ...

最新文章

  1. Drug Target Review | 超越表型:基于AI更好地了解疾病
  2. python基础知心得总结_【python】基础学习心得总结(一)
  3. 美国互联网广告07年总开支255亿美元, 增长27%
  4. 从零基础入门Tensorflow2.0 ----六、32cifar10数据训练
  5. 数据库 软件实施 工程师
  6. 关于串口助手(sscom)打开影响32程序跑飞问题。
  7. matlab求线性规划最大值,matlab线性规划算例
  8. 2014校园招聘_华为2014校园招聘
  9. 诺诺开放平台(电子发票、智能编码、发票查验接口调用)
  10. 兔子会死怎么办? 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,假如兔子会死
  11. 直方图中bin的说明
  12. LookupError: Resource omw-1.4 not found. nltk3.7查找近反义词解决方法
  13. 经典的搞笑反转段子,真是笑死人不偿命
  14. 22.11.30打卡 记忆化搜索2水题
  15. 汉庭酒店专属歌曲发布,由左小祖咒和罗永浩创作
  16. 题目1205 百万富翁问题
  17. 不需要登录微信,发送消息python
  18. 这样做数据可视化驾驶舱,高端大气,一目了然,领导不点赞都难
  19. switch c语言格式,switch语句格式是什么?
  20. python读啥-Python之文件读写

热门文章

  1. matlab简单绘图
  2. Scala当中parallelize并行化的用法
  3. 腾讯最新股权结构曝光:Naspers持股31.1% 马化腾持股8.61%
  4. JPS(jump point search)寻路算法
  5. 手机手写输入法如果支持词组输入将会大幅度提高录入效率
  6. 【BZOJ1192】鬼谷子的钱袋——二分思想
  7. i5 10300h和i5 1135g7 参数对比 哪个好
  8. 趣学算法系列-贪心算法
  9. 错过金三银四,找工作4个月,面试15家,终于拿到3个offer,定级P7+
  10. 【保姆级教程】修改VSCode软件的插件下载位置