ArcEngine编辑功能(一)
我已经出离的愤怒了,对于这个问题一年半以前曾经研究过,上过学期又回过头来弄过,但是到现在我仍然没有像样的把这个问题解决掉!所以下定决心抽一点时间把这个问题解决一下。不求做出来的东西功能多么全面,但求弄够实现基本功能!
参考了一些代码,但是还是没有完全得到要领!目前开发ArcGIS编辑模块有两种方式:一种是用IEngineEditor接口。
先来实践混合用的,http://www.gisall.com/html/52/25952-2752.html 文中提出:
EditTool用ControlsEditingEditToolClass |
分析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,决定尝试一下。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程