arcgis engine 监听element的添加、更新和删除事件(使用IMovePointFeedback)
VB代码:
Members
AllPropertiesMethodsInheritedNon-inherited | Description | |
---|---|---|
![]() |
Display | The display the feedback object will use. |
![]() |
MoveTo | Move to the new point. |
![]() |
Refresh | Call this after a refresh to show feedback again. |
![]() |
Start | Begins a move feedback of the given shape. |
![]() |
Stop | Stops the feedback and returns the shape. |
![]() |
Symbol | The symbol the feedback object will use. |
Moving Feedbacks Example
This example shows how to create a tool which allows the user to move various geometry types using the appropriate feedback interfaces. The example requires there to be at least one of the following in the current document's BasicGraphicsLayer: MarkerElement, LineElement, RectangleElement, or PolygonElement. When the mouse button is pressed a search is made for any elements which intersect the mouse location. If any are found, then the first of these is taken. If the element's geometry is a Point, Polyline, Envelope or Polygon, then a Feedback object of that type is created, otherwise nothing is created and the routine will exit. Once the feedback has been created, any subsequent mouse movements cause this feedback to be moved on the screen. Releasing the mouse button will stop the feedback and update the element with the new geometry. The ActiveView is then refreshed.
How to use:
In ArcMap, select Tools | Customize...
Select the Commands tab and scroll down to UIControls in the left pane.
Click NewUIControl...
In the dialog which appears select UIToolControl and then click Create.
Drag the new tool which appears in the right pane onto a toolbar of your choosing.
Right-click over your tool on the toolbar and select View Source.
Copy and paste the code below into the VBA code pane which appears.
Close the VBA Window and return to the ArcMap Window.
Now select your tool from the toolbar and click on a graphic element (Marker, Line, Rectangle, Polygon) and move the mouse until the desired location is reached. Releasing the mouse button to finish.
Private m_pDoc As IMxDocument Private m_pAV As IActiveView Private m_pScrD As IScreenDisplay Private m_pDispFeed As IDisplayFeedback Private m_pHitElem As IElement Private m_pGraCont As IGraphicsContainer Private Function UIToolControl1_Enabled() As Boolean 'Set the ToolControl to enabled (disabled by default) UIToolControl1_Enabled = True End Function Private Sub UIToolControl1_MouseDown(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long) Dim pPnt As IPoint Dim pGeomElem As IGeometry ' Get the current mouse location in Map Units Set pPnt = m_pScrD.DisplayTransformation.ToMapPoint(x, y) ' Use a function to return the first element at this point (if any) Set m_pHitElem = GetHitElement(pPnt) ' If an element was returned then check what type of geometry it has (Point, Polyline, Envelope or Polygon) If Not m_pHitElem Is Nothing Then Set pGeomElem = m_pHitElem.Geometry 'Point geometry If TypeOf pGeomElem Is IPoint Then ' Create a MovePointFeedback object and set its display property (to the ActiveView's ScreenDisplay) Set m_pDispFeed = New MovePointFeedback Set m_pDispFeed.Display = m_pScrD ' QI for the IMovePointFeedback interface Dim pMvPtFeed As IMovePointFeedback Set pMvPtFeed = m_pDispFeed 'Start the feedback using the input (Point) geometry at the current mouse location pMvPtFeed.Start pGeomElem, pPnt ' Polyline geometry ElseIf TypeOf pGeomElem Is esriCore.IPolyline Then ' Create a MoveLineFeedback object and set its display property (to the ActiveView's ScreenDisplay) Set m_pDispFeed = New MoveLineFeedback Set m_pDispFeed.Display = m_pScrD ' QI for the IMoveLineFeedback interface Dim pMvLnFeed As IMoveLineFeedback Set pMvLnFeed = m_pDispFeed 'Start the feedback using the input (Polyline) geometry at the current mouse location pMvLnFeed.Start pGeomElem, pPnt ' Rectangle (Envelope) geometry ElseIf TypeOf pGeomElem Is IEnvelope Then ' Create a MoveEnvelopeFeedback object and set its display property (to the ActiveView's ScreenDisplay) Set m_pDispFeed = New MoveEnvelopeFeedback Set m_pDispFeed.Display = m_pScrD ' QI for the IMoveEnvelopeFeedback interface Dim pMvEnvFeed As IMoveEnvelopeFeedback Set pMvEnvFeed = m_pDispFeed 'Start the feedback using the input (Rectangle) geometry at the current mouse location pMvEnvFeed.Start pGeomElem, pPnt ' Polygon geometry ElseIf TypeOf pGeomElem Is IPolygon Then ' Create a MovePolygonFeedback object and set its display property (to the ActiveView's ScreenDisplay) Set m_pDispFeed = New MovePolygonFeedback Set m_pDispFeed.Display = m_pScrD ' QI for the IMovePolygonFeedback interface Dim pMvPolyFeed As IMovePolygonFeedback Set pMvPolyFeed = m_pDispFeed 'Start the feedback using the input (Polygon) geometry at the current mouse location pMvPolyFeed.Start pGeomElem, pPnt End If End If End Sub Private Sub UIToolControl1_MouseMove(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long) If Not m_pDispFeed Is Nothing Then Dim pPnt As IPoint ' Get the current mouse location in Map Units and move the feedback Set pPnt = m_pScrD.DisplayTransformation.ToMapPoint(x, y) m_pDispFeed.MoveTo pPnt End If End Sub Private Sub UIToolControl1_MouseUp(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long) Dim GeomResult As IGeometry Dim pGeomElem As IGeometry ' Check that the user is using the feedback If Not m_pHitElem Is Nothing Then ' Get the geometry type for our element again Set pGeomElem = m_pHitElem.Geometry ' Check what type of geometry the element has (again) ' Point geometry If TypeOf pGeomElem Is IPoint Then ' QI for the IMovePointFeedback interface and get the finished geometry Dim pMvPtFeed As IMovePointFeedback Set pMvPtFeed = m_pDispFeed Set GeomResult = pMvPtFeed.Stop ElseIf TypeOf pGeomElem Is IPolyline Then ' QI for the IMoveLineFeedback interface and get the finished geometry Dim pMvLnFeed As IMoveLineFeedback Set pMvLnFeed = m_pDispFeed Set GeomResult = pMvLnFeed.Stop ElseIf TypeOf pGeomElem Is IEnvelope Then ' QI for the IMoveEnvelopeFeedback interface and get the finished geometry Dim pMvEnvFeed As IMoveEnvelopeFeedback Set pMvEnvFeed = m_pDispFeed Set GeomResult = pMvEnvFeed.Stop ElseIf TypeOf pGeomElem Is IPolygon Then ' QI for the IMovePolygonFeedback interface and get the finished geometry Dim pMvPolyFeed As IMovePolygonFeedback Set pMvPolyFeed = m_pDispFeed Set GeomResult = pMvPolyFeed.Stop End If ' Set the geometry of the element and call update m_pHitElem.Geometry = GeomResult m_pGraCont.UpdateElement m_pHitElem ' Clear out the objects Set m_pDispFeed = Nothing Set m_pHitElem = Nothing ' Refresh the ActiveView m_pAV.Refresh End If End Sub Private Sub UIToolControl1_Refresh(ByVal hDC As Long) 'Get a reference to the ActiveView and ScreenDisplay Set m_pDoc = Application.Document Set m_pAV = m_pDoc.ActiveView Set m_pScrD = m_pAV.ScreenDisplay End Sub Private Sub UIToolControl1_Select() 'Get a reference to the ActiveView and ScreenDisplay Set m_pDoc = Application.Document Set m_pAV = m_pDoc.ActiveView Set m_pScrD = m_pAV.ScreenDisplay End Sub Private Function GetHitElement(pInPt As IPoint) As IElement ' Takes an IPoint and returns the first element that is hit (if any) in the ActiveView's BasicGraphicsLayer Dim pEnumElem As IEnumElement Dim DblSrchDis As Double ' QI for the IGraphicsContainer interface from the IActiveView, allows access to the BasicGraphicsLayer Set m_pGraCont = m_pAV ' Calculate the Search Distance (in MapUnits) based upon a portion of the ActiveView's width DblSrchDis = m_pAV.Extent.Width / ' Return an enumerator for those elements found within the search distance (in mapunits) Set pEnumElem = m_pGraCont.LocateElements(pInPt, DblSrchDis) ' If the enumerator is not empty then return the FIRST element found If Not pEnumElem Is Nothing Then Set GetHitElement = pEnumElem.Next End If End Function
arcgis engine 监听element的添加、更新和删除事件(使用IMovePointFeedback)的更多相关文章
- arcgis engine 监听element的添加、更新和删除事件(使用IGraphicsContainerEvents)
IGraphicsContainerEvents Interface 如何监听 element事件? 如,当我们在Mapcontrol上添加.删除.更新了一个Element后,如何捕捉到这个事件? ...
- 如何监听Element组件<el-input>标签的回车事件
一.现象 表单提交时需要处理输入框的回车事件,一般的原生input标签可以用@keyup.enter="onSubmit"(tips:onSubmit为定义的方法) 二.解决 1. ...
- ArcGIS Engine效率探究——要素的添加和删除、属性的读取和更新
ArcGIS Engine效率探究——要素的添加和删除.属性的读取和更新 来自:http://blog.csdn.net/freewaywalker/article/details/23703863 ...
- [转] ArcGIS engine中气泡标注的添加、修改
小生 原文 ArcGIS engine中气泡标注的添加.修改! 你微微地笑着,不同我说什么话.而我觉得,为了这个,我已等待得久了. ...
- Android 另类方法监听软键盘的弹出收起事件
http://www.cnblogs.com/csonezp/p/5065624.html 最近做的项目碰到个问题,a界面是fragment+recyclerview,b界面带个edittext,并且 ...
- Canal 实战 | 第一篇:SpringBoot 整合 Canal + RabbitMQ 实现监听 MySQL 数据库同步更新 Redis 缓存
一. Canal 简介 canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同 ...
- vue watch 监听element upload组件上传成功返回的url列表
因为 on-success 上传成功返回的是一个异步的结果....如果父组件需要这个结果的话 必须用watch 监听 然后里面建立一个 save()方法 save方法里面再调用接口 传需要的上传之后的 ...
- angular指令监听ng-repeat渲染完成后执行自定义事件方法
今天工作中遇到需要用到ng-repeat遍历渲染完后执行某个操作,angular本身并没有提供监听ng-repeat渲染完成的指令,所以需要自己创建自定义指令. 在ng-repeat模板实例内部会暴露 ...
- 监听文本框输入oninput和onpropertychange事件
前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框动态显示还可以输入的字数.过去一般都使用onchange/onkeyup/onkeypress/onkeydow ...
随机推荐
- C++智能指针详解
本文出自http://mxdxm.iteye.com/ 一.简介 由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete.程序员忘记 delete,流程太复杂,最 ...
- jackson官方快速入门文档
官方地址: http://jackson.codehaus.org/ http://wiki.fasterxml.com/JacksonInFiveMinutes http://wiki.faster ...
- [django]django+post+ajax+highcharts使用方法
直接代码展示: view.py文件代码 from django.http import JsonResponse #django ajax部分 def ajax_kchart(request): ti ...
- UVALive 4670 Dominating Patterns --AC自动机第一题
题意:多个模板串,一个文本串,求出那些模板串在文本串中出现次数最多. 解法:AC自动机入门模板题. 代码: #include <iostream> #include <cstdio& ...
- POJ2505 A multiplication game[博弈论]
A multiplication game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6028 Accepted: ...
- SQL高级查询:嵌套和分页
1.嵌套子查询 --查询最近一次oop考试没有参加考试的学生 select StudentName from Student where StudentNo not in( select Studen ...
- Flash Builder 4.7 注册机完美激活方法
Flash Builder 4.7 破解注册方法目前较为通用的三种方法: 第一种:三步修改配置文件方法,这种有开发者反应这种方法在升级和创建纯 AS 项目时会存在问题,但我懒的去试这种方法的主要原因是 ...
- AutoCAD2006的安装及CASS7.1的配置破解
-----本文只限于学习交流,商业用途请支持正版! -----转载请注明:http://www.cnblogs.com/mxbs/p/6193190.html 准备: AutoCAD2006.CASS ...
- block的哪些事 --- 学习笔记十
//带有自动变量值的匿名函数 //block 与 C语言函数比只有两点不同,1.没有函数名. 2.带有"^". //类似于方法,如B中的值传给A中,在B中,一. 定义 : 二. 实 ...
- BZOJ 1797: [Ahoi2009]Mincut 最小割
1797: [Ahoi2009]Mincut 最小割 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2076 Solved: 885[Submit] ...