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 ...
随机推荐
- 图概PHP生命周期
一图胜千言~ 这是之前根据网上大牛们的分析和跟着阅读了一点源码而做出来的总结.因为那时候困于对整个过程没有一个全面的认识,所以想自己做个图吧,那样看起来要更加直接了当,说不定还能会有一个更好的认识和更 ...
- [Java入门笔记] 面向对象编程基础(一):类和对象
什么是面向对象编程? 我们先来看看几个概念: 面向过程程序设计 面向过程,是根据事情发展的步骤,按进行的顺序过程划分,面向过程其实是最为实际的一种思考方式,可以说面向过程是一种基础的方法,它考虑的是实 ...
- Java环境变量的配置
1.JAVA_HOMEjdk的路径,我的是安装在C:\Program Files (x86)\Java\jdk1.6.0_182.CLASSPATH .;%JAVA_HOME%\lib\dt.jar; ...
- C++ 重载、重写、重定义
出自:http://blog.163.com/clevertanglei900@126/blog/ 1 成员函数重载特征: a 相同的范围(在同一个类中) b 函数名字相同 c 参数不同 d virt ...
- Ajax的笔记
Ajax指异步JavaScript及XML(Asynchronous JavaScipt And XML),是一种异步交互式网页开发技术,用于创建快速动态网页.与服务器进行少量数据交换中,Ajax可以 ...
- openwrt 安装 ser2net 配置
//--- openwrt中的ipk应用 opkg install /tmp/ser2net_2.7-2_brcm63xx.ipk 看到安装成功的信息后启动ser2net Ser2net –c /et ...
- Sublime Text 3
Sublime Text 3 插件安装 安装 Package Control 按 Ctrl+` 或者,菜单 View > Show Console 打开命令窗口 import urllib.re ...
- 理解 OpenStack 高可用(HA)(2):Neutron L3 Agent HA 之 虚拟路由冗余协议(VRRP)
本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...
- Java读带有BOM的UTF-8文件乱码原因及解决方法
原因: 关于utf-8编码的txt文件,windows以记事本方式保存时会在第一行最开始处自动加入bom格式的相关信息,大概三个字节! 所以java在读取此类文件时第一行时会多出三个不相关的字节,这样 ...
- Hibernate中的一对一关联
Hibernate提供了两种一对一映射关联关系的方式: 1)按照外键映射 2)按照主键映射 下面以员工账号表和员工档案表(员工账号和档案表之间是一对一的关系)为例,介绍这两种映射关系,并使用这两种 映 ...


