zoukankan      html  css  js  c++  java
  • SelectByShape 工具的实现

      1  public sealed class SelectByShapeTool : BaseTool
      2     {
      3         #region COM Registration Function(s)
      4         [ComRegisterFunction()]
      5         [ComVisible(false)]
      6         static void RegisterFunction(Type registerType)
      7         {
      8             // Required for ArcGIS Component Category Registrar support
      9             ArcGISCategoryRegistration(registerType);
     10 
     11             //
     12             // TODO: Add any COM registration code here
     13             //
     14         }
     15 
     16         [ComUnregisterFunction()]
     17         [ComVisible(false)]
     18         static void UnregisterFunction(Type registerType)
     19         {
     20             // Required for ArcGIS Component Category Registrar support
     21             ArcGISCategoryUnregistration(registerType);
     22 
     23             //
     24             // TODO: Add any COM unregistration code here
     25             //
     26         }
     27 
     28         #region ArcGIS Component Category Registrar generated code
     29         /// <summary>
     30         /// Required method for ArcGIS Component Category registration -
     31         /// Do not modify the contents of this method with the code editor.
     32         /// </summary>
     33         private static void ArcGISCategoryRegistration(Type registerType)
     34         {
     35             string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID);
     36             ControlsCommands.Register(regKey);
     37 
     38         }
     39         /// <summary>
     40         /// Required method for ArcGIS Component Category unregistration -
     41         /// Do not modify the contents of this method with the code editor.
     42         /// </summary>
     43         private static void ArcGISCategoryUnregistration(Type registerType)
     44         {
     45             string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID);
     46             ControlsCommands.Unregister(regKey);
     47 
     48         }
     49 
     50         #endregion
     51         #endregion
     52 
     53         private IHookHelper m_hookHelper;
     54         private INewEnvelopeFeedback m_Feedback;
     55         private IPoint m_point;
     56         private bool isMouseDown = false;
     57         IMap pMap;
     58 
     59         public SelectByShapeTool()
     60         {
     61             //
     62             // TODO: Define values for the public properties
     63             //
     64             base.m_category = "CustomTool"; //localizable text 
     65             base.m_caption = "拉框选择";  //localizable text 
     66             base.m_message = "拉框选择";  //localizable text
     67             base.m_toolTip = "拉框选择";  //localizable text
     68             base.m_name = "SelectByShape";   //unique id, non-localizable (e.g. "MyCategory_MyTool")
     69             try
     70             {
     71                 //
     72                 // TODO: change resource name if necessary
     73                 //
     74                 string bitmapResourceName = GetType().Name + ".bmp";
     75                 base.m_bitmap = new Bitmap(GetType(), bitmapResourceName);
     76                 base.m_cursor = new System.Windows.Forms.Cursor(GetType(), GetType().Name + ".cur");
     77             }
     78             catch (Exception ex)
     79             {
     80                 System.Diagnostics.Trace.WriteLine(ex.Message, "Invalid Bitmap");
     81             }
     82         }
     83 
     84         #region Overridden Class Methods
     85 
     86         /// <summary>
     87         /// Occurs when this tool is created
     88         /// </summary>
     89         /// <param name="hook">Instance of the application</param>
     90         public override void OnCreate(object hook)
     91         {
     92             if (m_hookHelper == null)
     93                 m_hookHelper = new HookHelperClass();
     94 
     95             m_hookHelper.Hook = hook;
     96             // TODO:  Add SelectByShapeTool.OnCreate implementation
     97         }
     98 
     99         /// <summary>
    100         /// Occurs when this tool is clicked
    101         /// </summary>
    102         public override void OnClick()
    103         {
    104             // TODO: Add SelectByShapeTool.OnClick implementation
    105         }
    106 
    107         public override void OnMouseDown(int Button, int Shift, int X, int Y)
    108         {
    109             if (m_hookHelper.ActiveView == null) return;
    110             //如果是视图
    111             if (m_hookHelper.ActiveView is IActiveView)
    112             {
    113                 IPoint pPoint = m_hookHelper.ActiveView.ScreenDisplay.
    114                     DisplayTransformation.ToMapPoint(X, Y) as IPoint;
    115                 pMap = m_hookHelper.ActiveView.HitTestMap(pPoint);
    116                 if (pMap != m_hookHelper.FocusMap)
    117                 {
    118                     m_hookHelper.ActiveView.FocusMap = pMap;
    119                     m_hookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.
    120                         esriViewGraphics, null, null);
    121                 }
    122             }
    123             //在焦点地图上创建一个点
    124             IActiveView pac = m_hookHelper.FocusMap as IActiveView;
    125             m_point = pac.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y) as IPoint;
    126             isMouseDown = true;
    127         }
    128 
    129         public override void OnMouseMove(int Button, int Shift, int X, int Y)
    130         {
    131             if (!isMouseDown) return;
    132             //得到焦点图
    133             IActiveView pac = m_hookHelper.FocusMap as IActiveView;
    134             //初始化一个范围
    135             if (m_Feedback == null)
    136             {
    137                 m_Feedback = new NewEnvelopeFeedbackClass();
    138                 m_Feedback.Display = pac.ScreenDisplay;
    139                 m_Feedback.Start(m_point);
    140             }
    141             //设置鼠标样式
    142 
    143             //画范围
    144             m_Feedback.MoveTo(pac.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y));
    145         }
    146 
    147         public override void OnMouseUp(int Button, int Shift, int X, int Y)
    148         {
    149             //设置鼠标样式
    150 
    151             if (!isMouseDown) return;
    152             //IEnvelope pEnv;
    153             IEnvelope pFeedEnv;
    154             IGeometry pGeo;  //查询用到图形,可能为点或者矩形
    155             //得到焦点地图
    156             IActiveView Pac = m_hookHelper.FocusMap as IActiveView;
    157             //如果不画范围
    158             if (m_Feedback == null)
    159             {
    160                 return;
    161             }
    162             else
    163             {
    164                 //停止画框
    165                 pFeedEnv = m_Feedback.Stop();
    166                 pGeo = pFeedEnv as IGeometry;
    167             }
    168 
    169             ISelectionEnvironment pSelectEnv = new SelectionEnvironmentClass();
    170             //改变默认选择集的颜色
    171             pSelectEnv.DefaultColor = MySymbology.GetRgbColor(110, 120, 210, 200);
    172             //选择要素,把它放入选择集中
    173             pMap = m_hookHelper.FocusMap;
    174             pMap.SelectByShape(pGeo, pSelectEnv, false);
    175             Pac.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
    176 
    177             isMouseDown = false;
    178             m_Feedback = null;
    179             m_point = null;
    180         }
    181         #endregion
    182     }

    参考资料:《ArcGIS  Engine组件式开发及应用》 科学出版社

  • 相关阅读:
    使用idea15搭建基于maven的springmvc-mybatis框架
    git本地提交到远程仓库命令
    jsp表格数据导出到Execl
    FreeMarker标签介绍
    FreeMarker常用语法
    mybatis批量删除
    git之https或http方式设置记住用户名和密码的方法
    INPUT只能输入数字
    mysql 日期格式化
    cygwin配置git
  • 原文地址:https://www.cnblogs.com/DayDreamEveryWhere/p/2565954.html
Copyright © 2011-2022 走看看