⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 toolqueryhelp.cs

📁 以构建的方式来实现对通用的查询统计
💻 CS
字号:
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using ESRI.ArcGIS.ADF.BaseClasses;
using ESRI.ArcGIS.ADF.CATIDs;
using ESRI.ArcGIS.Controls;
using System.Windows.Forms;
using ESRI.ArcGIS.Geometry;
using System.Collections;
using ESRI.ArcGIS.Carto;
using dist.hb.EnvQueryStat.Pub;

namespace dist.hb.EnvQueryStat.Query
{
   /// <summary>
  /// Summary description for ToolQueryHelp.
  /// </summary>
  [Guid("0ff7fe3f-9c63-4b44-87fc-82b704b2114c")]
  [ClassInterface(ClassInterfaceType.None)]
  [ProgId("EnvQueryStat.Query.ToolQueryHelp")]
  public sealed class ToolQueryHelp : BaseTool
  {
    public IGeometry DrawGeometry;
    public bool IsComplete;
    private IMapControl4 MapControl;
    public  clsMapQueryEnv MapQueryEnv;
    public SpacialSel SSel;//空间选择对象
    #region COM Registration Function(s)
    [ComRegisterFunction()]
    [ComVisible(false)]
    static void RegisterFunction(Type registerType)
    {
      // Required for ArcGIS Component Category Registrar support
      ArcGISCategoryRegistration(registerType);

      //
      // TODO: Add any COM registration code here
      //
    }

    [ComUnregisterFunction()]
    [ComVisible(false)]
    static void UnregisterFunction(Type registerType)
    {
      // Required for ArcGIS Component Category Registrar support
      ArcGISCategoryUnregistration(registerType);

      //
      // TODO: Add any COM unregistration code here
      //
    }

    #region ArcGIS Component Category Registrar generated code
    /// <summary>
    /// Required method for ArcGIS Component Category registration -
    /// Do not modify the contents of this method with the code editor.
    /// </summary>
    private static void ArcGISCategoryRegistration(Type registerType)
    {
      string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID);
      ControlsCommands.Register(regKey);

    }
    /// <summary>
    /// Required method for ArcGIS Component Category unregistration -
    /// Do not modify the contents of this method with the code editor.
    /// </summary>
    private static void ArcGISCategoryUnregistration(Type registerType)
    {
      string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID);
      ControlsCommands.Unregister(regKey);

    }

    #endregion
    #endregion

    private IHookHelper m_hookHelper;

    public ToolQueryHelp()
    {
      //
      // TODO: Define values for the public properties
      //
      base.m_category = ""; //localizable text 
      base.m_caption = "";  //localizable text 
      base.m_message = "";  //localizable text
      base.m_toolTip = "";  //localizable text
      base.m_name = "";   //unique id, non-localizable (e.g. "MyCategory_MyTool")
      try
      {
        //
        // TODO: change resource name if necessary
        //
        string bitmapResourceName = GetType().Name + ".bmp";
        base.m_bitmap = new Bitmap(GetType(), bitmapResourceName);
        base.m_cursor = new System.Windows.Forms.Cursor(GetType(), GetType().Name + ".cur");
      }
      catch (Exception ex)
      {
        System.Diagnostics.Trace.WriteLine(ex.Message, "Invalid Bitmap");
      }
    }

    #region Overriden Class Methods

    /// <summary>
    /// Occurs when this tool is created
    /// </summary>
    /// <param name="hook">Instance of the application</param>
    public override void OnCreate(object hook)
    {
      IsComplete = false;
      if (m_hookHelper == null)
        m_hookHelper = new HookHelperClass();

      m_hookHelper.Hook = hook;
      MapControl = hook as IMapControl4;
     // MessageBox.Show("ok");
      // TODO:  Add ToolQueryHelp.OnCreate implementation
    }

    /// <summary>
    /// Occurs when this tool is clicked
    /// </summary>
    public override void OnClick()
    {
      // TODO: Add ToolQueryHelp.OnClick implementation
    }

    public override void OnMouseDown(int Button, int Shift, int X, int Y)
    {
      ArrayList AList = null;
      IGeometry geo = null;
      if (MapQueryEnv == null || MapControl == null || SSel == null) return;
      if(MapQueryEnv.MapQueryMethod == MapQueryMethod.CODE ) return;
      if (MapQueryEnv.MapQueryMethod == MapQueryMethod.DRAW)//在地图上画几何体来选择
      {
        if (MapQueryEnv.MapDraw == MAPDRAW.MAPDRAW_POINT) geo = SSel.GetDrawPoint(MapControl.ToMapPoint(X, Y));
        else if (MapQueryEnv.MapDraw == MAPDRAW.MAPDRAW_LINE) geo = SSel.GetDrawLine(MapControl.TrackLine());
        else if (MapQueryEnv.MapDraw == MAPDRAW.MAPDRAW_POLYGON) geo = SSel.GetDrawPolygon(MapControl.TrackPolygon());
        else if (MapQueryEnv.MapDraw == MAPDRAW.MAPDRAW_RECT) geo = SSel.GetDrawRect(EnvelopeToPolygon(MapControl.TrackRectangle()));
        else if (MapQueryEnv.MapDraw == MAPDRAW.MAPDRAW_CIRCLE) geo = SSel.GetDrawCircle(MapControl.TrackCircle());
        if (geo == null) return;
        AList = SSel.QueryGeoOnDraw(geo);
      }
      else if (MapQueryEnv.MapQueryMethod == MapQueryMethod.SELECT)//在地图上选择几何要素
      {
        geo = EnvelopeToPolygon(MapControl.TrackRectangle());
        if (geo == null) return;
         AList = SSel.SelectGeosOnMap(geo);
      }

      if (AList == null) return;
      //在地图上选择查询的对象
      if (MapQueryEnv.IsAddSelectionOnMap)  SSel.ShowSelection(AList);
      MapQueryEnv.arrayList = AList;//保存选择的几何体
      MapQueryEnv.WorkForm.WindowState = FormWindowState.Normal;
      MapQueryEnv.arrayList = AList;
      if (MapQueryEnv.IsSaveCodeToDb)  SSel.SaveCodeToDB(AList);
      if (MapQueryEnv.IsAddSelectionOnMap)  MapQueryEnv.MapControl.Refresh(esriViewDrawPhase.esriViewGeography, Type.Missing, Type.Missing);
      if (AList != null && AList.Count != 0)
      {
        MapQueryEnv.MsgProc(null, null);
      }

    }

    public override void OnMouseMove(int Button, int Shift, int X, int Y)
    {
      // TODO:  Add ToolQueryHelp.OnMouseMove implementation
    }

    public override void OnMouseUp(int Button, int Shift, int X, int Y)
    {
    }
    #endregion

    IGeometry EnvelopeToPolygon(IEnvelope pEnv)
    {
      if (pEnv == null) return null;
      IPolygon pPolygon = new PolygonClass();
      IPointCollection pPnts = pPolygon as IPointCollection;
      IPoint pPnt;
      pPnt = pEnv.LowerLeft;
      double x0 = pPnt.X;
      object missing = Type.Missing;
      pPnts.AddPoint(pPnt, ref missing, ref missing);
      pPnt = pEnv.LowerRight;
      double x1 = pPnt.X;
      pPnts.AddPoint(pPnt, ref missing, ref missing);
      pPnt = pEnv.UpperRight;
      pPnts.AddPoint(pPnt, ref missing, ref missing);
      pPnt = pEnv.UpperLeft;
      pPnts.AddPoint(pPnt, ref missing, ref missing);
      pPnt = pEnv.LowerLeft;
      pPnts.AddPoint(pPnt, ref missing, ref missing);
      if (x1 - x0 < BaseDataDef.ZERO) return pPnt;
      return pPolygon;
    }

  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -