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 ...
随机推荐
- 大数据系列(2)——Hadoop集群坏境CentOS安装
前言 前面我们主要分析了搭建Hadoop集群所需要准备的内容和一些提前规划好的项,本篇我们主要来分析如何安装CentOS操作系统,以及一些基础的设置,闲言少叙,我们进入本篇的正题. 技术准备 VMwa ...
- 烂泥:dnsmasq搭建简易DNS服务器
本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb. 今天我们来介绍一个比较简单的DNS服务器dnsmasq.这款软件,已经被我成功使用到公 ...
- logback配置详解4-实例配置
莫个银行项目中实际引用的logback实例,提供大家参考!!!! [html] view plaincopy <?xml version="1.0" encoding=&qu ...
- 从微软下载安装Windows10
如果你需要安装或重新安装 Windows 10,可以通过此页面上的工具,使用 U 盘或 DVD 创建你自己的安装介质. 开始之前 确保你具有以下内容: Internet 连接(可能产生 Interne ...
- [WPF系列]基础学习(一) WPF是什么?
引言 学习之前,我们首先大概了解下WPF诞生的背景以及它所能解决的问题或者新颖之处.WPF作为微软新一代的用户界面技术, WPF简介 WPF的全称是WindowsPresentationFound ...
- MySQL命令行登录的例子
环境:MySQL Sever 5.1 + MySQL命令行工具 问题:MySQL命令行登录 解决: 命令 行登录语法: mysql –u用户名 [–h主机名或者IP地址] –p密码 说明:用户名是你登 ...
- Excellent Articles
Lisp The roots of lisp Recursive Functions of Symbolic Expressions and Their Computation by Machine, ...
- codevs 1115 开心的金明--01背包
1115 开心的金明 2006年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 金明今天很开心,家里购 ...
- etl实现字段值相加
数据库USERS表: etl步骤: (2) (3) 其中java代码为: import test.Test; public boolean processRow(StepMetaIn ...
- windows forms 上一个类似于wpf snoop 的工具: Hawkeye
windows forms 上一个类似于wpf snoop 的工具: Hawkeye 周银辉 WPF上有snoop这样的run time object editor让人用着很爽, 今天搜到了一个for ...