• ArcEngine编辑功能(一)


      我已经出离的愤怒了,对于这个问题一年半以前曾经研究过,上过学期又回过头来弄过,但是到现在我仍然没有像样的把这个问题解决掉!所以下定决心抽一点时间把这个问题解决一下。不求做出来的东西功能多么全面,但求弄够实现基本功能!

      参考了一些代码,但是还是没有完全得到要领!目前开发ArcGIS编辑模块有两种方式:一种是用IEngineEditor接口。

      先来实践混合用的,http://www.gisall.com/html/52/25952-2752.html  文中提出:

    EditTool用ControlsEditingEditToolClass
    SketchTool用ControlsEditingSketchToolClass
    复制:ControlsEditingCopyCommandClass
    粘贴:ControlsEditingPasteCommandClass
    剪切:ControlsEditingClearCommandClass

      分析ArcGIS编辑工具条的功能,发现Edit Tool单击时当前的任务为Create New Feature,双击时为Modify Feature。仔细观察:

    起始:开始编辑高亮,其他按钮全灰。默认任务状态“Create New Feature新建要素”。
    开始编辑:停止编辑,保存编辑高亮,Edit和Sketch按钮高亮。Edit按钮选中,当前图层和当前任务选择框高亮,当前图层为第一个图层。
    创建要素状态:选择Sketch创建要素;选择Edit按钮,单击选择要素,双击进入“Modify Feature”。
    修改要素状态:Edit按钮默认选中。点击要素,Sketch按钮高亮,可以移动节点。选择Sketch可以接着最后节点绘制。

      在帮助文档中知道EngineEditor是singleton object,这个很重要啊!

      在How to listen to edit events帮助可以看到下面一句话:

    In .NET, event interfaces are automatically suffixed with _Event by the type library importer.

      IEngineEditEvents_Event事件接口,通过Iengineditor接口跳转访问。这里思考一下“事件”,“事件”起作用关建还是他订阅的方法不是吗?那么我如果将事件订阅自己定义的方法不是可以实现很多东西吗?“事件”可不是单单用户点击鼠标键盘这样的才叫事件啊,类也可以定义“事件”,可以定义“事件”订阅的方法。EngineEditor的事件应该包装了AxMapControl的MouseDown、MouseMove、DoubleClick等事件(个人理解)。EngineEditor实际应该是和界面分离的,如何实现编辑功能与编辑工具条的状态的联动是很关键的,所以一个思路就是将IEngineEditor的事件订阅自己定义的方法来实现界面状态的联动。(计划重新学习委托和事件):


      IEngineEditEvents内部接口,实现了事件订阅的方法(个人理解!)

      通过EngineEditor完全可以实现编辑的所有功能。IEngineEditor可能对IWorkspaceEdit接口进行了调用(个人理解,以后如果有新的想法在说。)开发工作正在进行,参考引文撤销和重做功能按钮就是通过IWorkspaceEdit来实现的,这样只能在绘制新要素完成和编辑完成之后进行重做和撤销,而ArcGIS中可以实现在编辑中的撤销操作。所以有用ToolBar的OperateStack来实现撤销和重做的,目前撤销和重做采用IWorkspaceEdit实现,所以是混合了IEngineEditor和IWorkspaceEdit。而且按照自己的思路开发是可行的。(2012-02-26——11:30:12)

      另外一种是用IWorkspaceEdit接口http://www.cnblogs.com/aplsc/archive/2008/08/31/1280594.html,决定尝试一下。

    文章未经说明均属原创,学习笔记可能有大段的引用,一般会注明参考文献。 欢迎大家留言交流,转载请注明出处。
  • 相关阅读:
    JS基础语法---函数练习part3---4个练习
    JS基础语法---函数练习part2---10个综合练习(运用:循环/数组/函数)
    JS基础语法---函数练习part1---5个练习
    JS基础语法---函数---介绍、定义、函数参数、返回值
    JS基础语法---冒泡顺序
    JS基础语法---数组案例---9个练习
    JS基础语法---for循环遍历数组
    Python小技巧:使用一行命令把你的电脑变成服务器
    目前最全的Python的就业方向
    这十个Python常用库,学习Python的你必须要知道!
  • 原文地址:https://www.cnblogs.com/yhlx125/p/2366685.html
Copyright © 2020-2023  润新知