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组件式开发及应用》 科学出版社

你可能感兴趣的:(select)