|
|
|
|
using System;
|
|
|
|
|
using System.Diagnostics;
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
using ESRI.ArcGIS.ADF.CATIDs;
|
|
|
|
|
using ESRI.ArcGIS.Carto;
|
|
|
|
|
using ESRI.ArcGIS.Controls;
|
|
|
|
|
using ESRI.ArcGIS.Display;
|
|
|
|
|
using ESRI.ArcGIS.Geometry;
|
|
|
|
|
using KGIS.Framework.Utils.Enum;
|
|
|
|
|
|
|
|
|
|
namespace Kingo.Plugin.ResultsOfProof
|
|
|
|
|
{
|
|
|
|
|
public class CustomDrawTool : BaseToolCommand
|
|
|
|
|
{
|
|
|
|
|
public override enumProductType AttachProductType
|
|
|
|
|
{
|
|
|
|
|
get { return enumProductType.KDB | enumProductType.KAP; }
|
|
|
|
|
}
|
|
|
|
|
private IHookHelper m_hookHelper;
|
|
|
|
|
private DrawParams m_pDrawParams;
|
|
|
|
|
private ISimpleFillSymbol m_pFillSymbol;
|
|
|
|
|
private IGeometry m_pGeom;
|
|
|
|
|
|
|
|
|
|
public event DoContinueEventHandler DoContinue;
|
|
|
|
|
|
|
|
|
|
public CustomDrawTool(DrawParams pDrawParams)
|
|
|
|
|
{
|
|
|
|
|
this.m_pGeom = null;
|
|
|
|
|
base.m_category = "";
|
|
|
|
|
base.m_caption = "";
|
|
|
|
|
base.m_message = "";
|
|
|
|
|
base.m_toolTip = "";
|
|
|
|
|
base.m_name = "画多边形";
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
string resource = base.GetType().Name + ".bmp";
|
|
|
|
|
//base.m_cursor = new Cursor(base.GetType(), base.GetType().Name + ".cur");
|
|
|
|
|
//base.m_bitmap = new Bitmap(base.GetType(), resource);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception exception)
|
|
|
|
|
{
|
|
|
|
|
Trace.WriteLine(exception.Message, "Invalid Bitmap");
|
|
|
|
|
}
|
|
|
|
|
this.m_pDrawParams = pDrawParams;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void AddElement(IActiveView pActiveView, ISimpleFillSymbol pSimpleFillSymbol)
|
|
|
|
|
{
|
|
|
|
|
m_pGeom = null;
|
|
|
|
|
IRubberBand band = new RubberRectangularPolygonClass();
|
|
|
|
|
if (m_pDrawParams.enumDrawMode == EnumDrawMode.DrawPolygon)
|
|
|
|
|
{
|
|
|
|
|
band = new RubberPolygonClass(); // 多边型
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
IPolygon polygon = (IPolygon)band.TrackNew(pActiveView.ScreenDisplay, null);
|
|
|
|
|
if (this.m_pDrawParams.bCreateTrail)
|
|
|
|
|
{
|
|
|
|
|
IFillShapeElement element = new PolygonElementClass();
|
|
|
|
|
IElement pElement = (IElement)element;
|
|
|
|
|
if (pSimpleFillSymbol == null)
|
|
|
|
|
{
|
|
|
|
|
pSimpleFillSymbol = (ISimpleFillSymbol)Symbol.CreateDefaultSymbol(EnumSymbolType.SimpleFillSymbol);
|
|
|
|
|
}
|
|
|
|
|
element.Symbol = pSimpleFillSymbol;
|
|
|
|
|
pElement.Geometry = polygon;
|
|
|
|
|
Element.DrawElement(pElement, pActiveView);
|
|
|
|
|
}
|
|
|
|
|
this.m_pGeom = polygon;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ArcGISCategoryRegistration(System.Type registerType)
|
|
|
|
|
{
|
|
|
|
|
ControlsCommands.Register(string.Format(@"HKEY_CLASSES_ROOT\CLSID\{{{0}}}", registerType.GUID));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ArcGISCategoryUnregistration(System.Type registerType)
|
|
|
|
|
{
|
|
|
|
|
ControlsCommands.Unregister(string.Format(@"HKEY_CLASSES_ROOT\CLSID\{{{0}}}", registerType.GUID));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override void OnClick()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override void OnCreate(object hook)
|
|
|
|
|
{
|
|
|
|
|
if (this.m_hookHelper == null)
|
|
|
|
|
{
|
|
|
|
|
this.m_hookHelper = new HookHelperClass();
|
|
|
|
|
}
|
|
|
|
|
this.m_hookHelper.Hook = hook;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override void OnMouseDown(int Button, int Shift, int X, int Y)
|
|
|
|
|
{
|
|
|
|
|
IMapControl2 hook = (IMapControl2)this.m_hookHelper.Hook;
|
|
|
|
|
if (this.m_pDrawParams.bClearOtherElement)
|
|
|
|
|
{
|
|
|
|
|
hook.ActiveView.GraphicsContainer.DeleteAllElements();
|
|
|
|
|
}
|
|
|
|
|
if (Button <= 2)
|
|
|
|
|
{
|
|
|
|
|
this.AddElement(hook.ActiveView, this.m_pDrawParams.pSymbol as ISimpleFillSymbol);
|
|
|
|
|
this.DoContinue(this.m_pGeom);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//Bug-15932 霍岩 2019-05-27 但点击鼠标滚轮时启动漫游工具
|
|
|
|
|
this.CurrentTool = new ControlsMapPanToolClass();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override void OnMouseMove(int Button, int Shift, int X, int Y)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override void OnMouseUp(int Button, int Shift, int X, int Y)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[ComRegisterFunction, ComVisible(false)]
|
|
|
|
|
private static void RegisterFunction(System.Type registerType)
|
|
|
|
|
{
|
|
|
|
|
ArcGISCategoryRegistration(registerType);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[ComUnregisterFunction, ComVisible(false)]
|
|
|
|
|
private static void UnregisterFunction(System.Type registerType)
|
|
|
|
|
{
|
|
|
|
|
ArcGISCategoryUnregistration(registerType);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IGeometry ReturnGeom
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return this.m_pGeom;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public delegate void DoContinueEventHandler(IGeometry pGeo);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public struct DrawParams
|
|
|
|
|
{
|
|
|
|
|
public EnumDrawMode enumDrawMode;
|
|
|
|
|
public bool bCreateTrail;
|
|
|
|
|
public bool bClearOtherElement;
|
|
|
|
|
public ISymbol pSymbol;
|
|
|
|
|
}
|
|
|
|
|
public enum EnumDrawMode
|
|
|
|
|
{
|
|
|
|
|
DrawPoint,
|
|
|
|
|
DrawLine,
|
|
|
|
|
DrawRect,
|
|
|
|
|
DrawPolygon,
|
|
|
|
|
DrawCircle,
|
|
|
|
|
DrawEllipse
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class Symbol
|
|
|
|
|
{
|
|
|
|
|
public static ISymbol CreateDefaultSymbol(EnumSymbolType pSymbolType)
|
|
|
|
|
{
|
|
|
|
|
ISymbol symbol = null;
|
|
|
|
|
IRgbColor color = new RgbColorClass();
|
|
|
|
|
color = GetRGBColor(0xff, 0, 0);
|
|
|
|
|
switch (pSymbolType)
|
|
|
|
|
{
|
|
|
|
|
case EnumSymbolType.SimpleMarkerSymbol:
|
|
|
|
|
return symbol;
|
|
|
|
|
|
|
|
|
|
case EnumSymbolType.SimpleLineSymbol:
|
|
|
|
|
{
|
|
|
|
|
ISimpleLineSymbol symbol2 = new SimpleLineSymbolClass();
|
|
|
|
|
symbol2.Color = color;
|
|
|
|
|
symbol2.Width = 1.5;
|
|
|
|
|
return (ISymbol)symbol2;
|
|
|
|
|
}
|
|
|
|
|
case EnumSymbolType.SimpleFillSymbol:
|
|
|
|
|
{
|
|
|
|
|
ISimpleFillSymbol symbol3 = new SimpleFillSymbolClass();
|
|
|
|
|
symbol3.Outline.Color = color;
|
|
|
|
|
symbol3.Color = color;
|
|
|
|
|
symbol3.Style = esriSimpleFillStyle.esriSFSDiagonalCross;
|
|
|
|
|
return (ISymbol)symbol3;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return symbol;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static IRgbColor GetRGBColor(int pRed, int pGreen, int pBlue)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
IRgbColor color = new RgbColorClass();
|
|
|
|
|
color.Red = pRed;
|
|
|
|
|
color.Green = pGreen;
|
|
|
|
|
color.Blue = pBlue;
|
|
|
|
|
return color;
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public enum EnumSymbolType
|
|
|
|
|
{
|
|
|
|
|
SimpleMarkerSymbol,
|
|
|
|
|
SimpleLineSymbol,
|
|
|
|
|
SimpleFillSymbol,
|
|
|
|
|
FormattedTextSymbol
|
|
|
|
|
}
|
|
|
|
|
public class Element
|
|
|
|
|
{
|
|
|
|
|
public static void DrawElement(IElement pElement, IActiveView pActiveView)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
((IGraphicsContainer)pActiveView).AddElement(pElement, 0);
|
|
|
|
|
pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|