AE+C#实现鹰眼功能——(二)(带鼠标拖动)
来源:互联网 发布:三大电商网络有哪些 编辑:程序博客网 时间:2024/06/08 04:10
AE+C#实现鹰眼功能——(二)(带鼠标拖动)
vs2005+AE9.2实现,主要功能:鹰眼视图里面鼠标左键画红框,右键拖动代码中主视图为Mapcontrol1,鹰眼视图为MapControl2。
主要利用了Envelope进行视图范围传递,从而控制视图同步等。
代码如下:
几个变量声明 :
//变量
IMapDocument pMapDocument = new MapDocumentClass();
IEnvelope pEn = new EnvelopeClass();
object oFillobject = new object();
private void CreateOverviewSymbol()
{
IRgbColor iRgb = new RgbColorClass();
iRgb.RGB = 255;
ILineSymbol pOutline = new SimpleLineSymbolClass();
pOutline.Color = iRgb;
pOutline.Width = 2.3;
ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass();
pSimpleFillSymbol.Outline = pOutline;
pSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSHollow;
oFillobject = pSimpleFillSymbol;
}
IMapDocument pMapDocument = new MapDocumentClass();
IEnvelope pEn = new EnvelopeClass();
object oFillobject = new object();
private void CreateOverviewSymbol()
{
IRgbColor iRgb = new RgbColorClass();
iRgb.RGB = 255;
ILineSymbol pOutline = new SimpleLineSymbolClass();
pOutline.Color = iRgb;
pOutline.Width = 2.3;
ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass();
pSimpleFillSymbol.Outline = pOutline;
pSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSHollow;
oFillobject = pSimpleFillSymbol;
}
控制拖动变量:
private IMoveEnvelopeFeedback pSmallViewerEnvelope;//鹰眼小地图的红框,IMoveEnvelopeFeedback,用来移动Envelope的接口
private IPoint pSmallViewerMouseDownPt;//拖动时鼠标落点
private bool isTrackingSmallViewer = false; //标识是否在拖动
static int moveCount = 0;//记录移动的个数,为移动过程中显示红框用。
private IPoint pSmallViewerMouseDownPt;//拖动时鼠标落点
private bool isTrackingSmallViewer = false; //标识是否在拖动
static int moveCount = 0;//记录移动的个数,为移动过程中显示红框用。
axMapControl1_OnMapReplaced事件:
axMapControl2.LoadMxFile(axMapControl1.DocumentFilename);
两个视图加载数据可能存在鹰眼视图数据显示不完全(不知道是不是我电脑的毛病。。。),这样加载可以控制数据的同步更新axMapControl1_OnExtentUpdated事件:
pEn = e.newEnvelope as IEnvelope;
axMapControl2.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewForeground, null, null);
axMapControl2.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewForeground, null, null);
axMapControl1_OnAfterDraw:
esriViewDrawPhase viewDrawPhase = (esriViewDrawPhase)e.viewDrawPhase;
if (viewDrawPhase == esriViewDrawPhase.esriViewForeground)
{
axMapControl2.DrawShape(pEn, ref oFillobject);
}
if (viewDrawPhase == esriViewDrawPhase.esriViewForeground)
{
axMapControl2.DrawShape(pEn, ref oFillobject);
}
axMapControl2_OnMouseDown:
if(e.button==1)//左键画红框
{
pEn = axMapControl2.TrackRectangle();
axMapControl1.Extent = pEn;
axMapControl2.DrawShape(pEn, ref oFillobject);
if (e.button == 2)//右键拖动红框
{
pSmallViewerMouseDownPt = new PointClass();
pSmallViewerMouseDownPt.PutCoords(e.mapX, e.mapY);
axMapControl1.CenterAt(pSmallViewerMouseDownPt);
isTrackingSmallViewer = true;
if (pSmallViewerEnvelope == null)
{
pSmallViewerEnvelope = new MoveEnvelopeFeedbackClass();
pSmallViewerEnvelope.Display = axMapControl2.ActiveView.ScreenDisplay;
pSmallViewerEnvelope.Symbol = (ISymbol)oFillobject;
}
pSmallViewerEnvelope.Start(pEn, pSmallViewerMouseDownPt);
{
pEn = axMapControl2.TrackRectangle();
axMapControl1.Extent = pEn;
axMapControl2.DrawShape(pEn, ref oFillobject);
if (e.button == 2)//右键拖动红框
{
pSmallViewerMouseDownPt = new PointClass();
pSmallViewerMouseDownPt.PutCoords(e.mapX, e.mapY);
axMapControl1.CenterAt(pSmallViewerMouseDownPt);
isTrackingSmallViewer = true;
if (pSmallViewerEnvelope == null)
{
pSmallViewerEnvelope = new MoveEnvelopeFeedbackClass();
pSmallViewerEnvelope.Display = axMapControl2.ActiveView.ScreenDisplay;
pSmallViewerEnvelope.Symbol = (ISymbol)oFillobject;
}
pSmallViewerEnvelope.Start(pEn, pSmallViewerMouseDownPt);
axMapControl2_OnMouseMove:
if (isTrackingSmallViewer)
{
moveCount++;
if (moveCount % 4 == 0)//因为一刷新,红框就没了。所以每移动4次就刷新一下,保持红框的连续性。
axMapControl2.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewForeground, null, null);
pSmallViewerMouseDownPt.PutCoords(e.mapX, e.mapY);
pSmallViewerEnvelope.MoveTo(pSmallViewerMouseDownPt);
}
{
moveCount++;
if (moveCount % 4 == 0)//因为一刷新,红框就没了。所以每移动4次就刷新一下,保持红框的连续性。
axMapControl2.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewForeground, null, null);
pSmallViewerMouseDownPt.PutCoords(e.mapX, e.mapY);
pSmallViewerEnvelope.MoveTo(pSmallViewerMouseDownPt);
}
axMapControl2_OnMouseUp:
if (pSmallViewerEnvelope != null)
{
pEn = pSmallViewerEnvelope.Stop();
axMapControl1.Extent = pEn;
isTrackingSmallViewer = false;
}
{
pEn = pSmallViewerEnvelope.Stop();
axMapControl1.Extent = pEn;
isTrackingSmallViewer = false;
}
Form初始化:
axMapControl1.LoadMxFile(@"load data");
pEn = axMapControl1.Extent;//鹰眼红框初始化
CreateOverviewSymbol();
pEn = axMapControl1.Extent;//鹰眼红框初始化
CreateOverviewSymbol();
经过测试可以实现鹰眼中画红框和拖动功能。
现在存在问题是,拖动功能还不太完善,抓紧研究,有了结果在贴上来。
其中,拖动部分思路即代码来自ESRI中国社区AE版。
- AE+C#实现鹰眼功能——(二)(带鼠标拖动)
- AE实现鹰眼功能
- C#初学者——鹰眼功能的完整实现
- C#制作鹰眼全过程(带注释)
- AE 中鹰眼实现
- ArcEngine 鹰眼功能C#实现
- 用OnMouseMove()消息可以实现鼠标的拖动功能
- 实现鹰眼图C#+AE
- C# + MapX 鹰眼功能的实现
- c# 实现鼠标拖动form
- Silverlight事件之鼠标拖动(二)
- 【AE二次开发】实现鹰眼的联动
- 【高德地图API】从零开始学高德JS API(二)地图控件与插件——测距、圆形编辑器、鼠标工具、地图类型切换、鹰眼鱼骨
- 【高德地图API】从零开始学高德JS API(二)地图控件与插件——测距、圆形编辑器、鼠标工具、地图类型切换、鹰眼鱼骨
- 看,别人是怎么实现鹰眼的(C#版)!
- 鼠标拖动层(可任意绑定DIV标签)(实现方法二)
- C#实现窗体的鼠标拖动代码
- unity3D C#脚本实现鼠标拖动物体
- 双模(CDMA/GSM)手机实现短信监听
- 数据分析这点事
- UNIX 高级编程 学习
- Windows Server 2008 R2 为用户“IIS APPPOOL\DefaultAppPool”授予的权限不足,无法执行此操作
- 在Eclipse中配置tomcat
- AE+C#实现鹰眼功能——(二)(带鼠标拖动)
- IOS Core Location-ios定位
- MySQL编程笔记
- Convert to Objective-C ARC工具
- 确定比赛名次
- 构造器的那点事
- Spring MVC test
- SHELL命令学习笔记
- AIR-文件操作:使用文件对象操作文件和目录