fyl
fyl
路人甲
路人甲
  • 注册日期2004-05-12
  • 发帖数43
  • QQ
  • 铜币363枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2668回复:5

在mapcontrol中如何实现鹰眼功能?

楼主#
更多 发布于:2005-01-07 09:10
在mapcontrol中如何实现鹰眼功能?
喜欢0 评分0
ch1219553
路人甲
路人甲
  • 注册日期2004-06-01
  • 发帖数25
  • QQ
  • 铜币258枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2005-02-03 11:53
<P>朋友下面的代码,也许可以帮你!  </P><P>/// <summary>
  /// 根据主地图的边界值,改变当前地图的填充元素位置和大小
  /// </summary>
  public void DrawRectangle()
  {
   if( axMapControl.LayerCount > 0 )
   {
    // 删除地图中的所有绘制元素
    axMapControl.ActiveView.GraphicsContainer.DeleteAllElements();
    IElement pElement  = new RectangleElementClass();
    IFillShapeElement pFillShapeElement = pElement as IFillShapeElement;
    pFillShapeElement.Symbol = pFillSymbol;  
    pElement.Geometry = pActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds;
  
    // 添加矩形元素到当前地图
    axMapControl.ActiveView.GraphicsContainer.AddElement( pElement, 0);
    axMapControl.CtlRefresh( esriViewDrawPhase.esriViewGraphics, pElement, axMapControl.Extent );
   }
  }</P><P>private void axMapControl_OnMouseDown(object sender, ESRI.ArcObjects.AxMapControl.IMapControlEvents2_OnMouseDownEvent e)
  {
   if( axMapControl.LayerCount > 0 )
   {
    IEnvelope pEnv = axMapControl.ActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds;
    axMapControl.ActiveView.GraphicsContainer.DeleteAllElements();
    IEnvelope pEnvelope = new EnvelopeClass();
    IElement pElement  = new RectangleElementClass();
    IFillShapeElement pFillShapeElement = pElement as IFillShapeElement;
    pFillShapeElement.Symbol = pFillSymbol;  
    pEnvelope = axMapControl.TrackRectangle();
    if( pEnvelope.IsEmpty || pEnvelope.Width == 0.0 || pEnvelope.Height == 0.0)
    {
     // 移动当前主地图显示区域矩形的坐标调整
     IEnvelope pEnvelope1 = hook.ActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds;  
     pEnvelope.XMin = e.mapX - (pEnvelope1.XMax - pEnvelope1.XMin) / 2;
     pEnvelope.XMax = e.mapX + (pEnvelope1.XMax - pEnvelope1.XMin) / 2;
     pEnvelope.YMin = e.mapY - (pEnvelope1.YMax - pEnvelope1.YMin) / 2;
     pEnvelope.YMax = e.mapY + (pEnvelope1.YMax - pEnvelope1.YMin) / 2;    
    }
    else
    {
    
     IEnvelope pEnvelope1 = hook.ActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds;
     // 计算主地图显示区域矩形宽度与高度的比例
     double btWidth = pEnvelope1.Width / pEnvelope1.Height;
     // 判断划出矩形的边界值调整
     if( pEnvelope.Width > pEnvelope.Height * btWidth )
      pEnvelope.YMin = pEnvelope.YMax - pEnvelope.Width / btWidth;
     else
      pEnvelope.XMax = pEnvelope.XMin + pEnvelope.Height * btWidth;
    }   </P><P>    pElement.Geometry = pEnvelope;
    // 添加矩形元素到当前地图
    axMapControl.ActiveView.GraphicsContainer.AddElement( pElement, 0);
    axMapControl.CtlRefresh( esriViewDrawPhase.esriViewGraphics, pElement, axMapControl.Extent );</P><P>    // 改变主地图显示区域
    hook.ActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds = pEnvelope;
    hook.ActiveView.Refresh();
   }
  }</P>
我会努力的!
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
2楼#
发布于:2005-02-03 14:41
<img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em05.gif" />
GIS麦田守望者,期待与您交流。
举报 回复(0) 喜欢(0)     评分
追风浪子
路人甲
路人甲
  • 注册日期2004-06-08
  • 发帖数166
  • QQ
  • 铜币782枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2005-02-20 16:34
<img src="images/post/smile/dvbbs/em06.gif" />
举报 回复(0) 喜欢(0)     评分
wrbwf
路人甲
路人甲
  • 注册日期2003-12-01
  • 发帖数944
  • QQ
  • 铜币2516枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2005-02-23 08:45
<img src="images/post/smile/dvbbs/em01.gif" />
举报 回复(0) 喜欢(0)     评分
Qoo
Qoo
路人甲
路人甲
  • 注册日期2004-12-09
  • 发帖数216
  • QQ
  • 铜币1752枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2005-02-23 11:35
<P>小弟我是新来的,看了很受益!谢谢!</P>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部