📄 toolqueryhelp.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 + -