年度变更建库软件5.0版本
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

177 lines
5.7 KiB

using ESRI.ArcGIS.ADF;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Geometry;
using KGIS.Framework.Platform;
using KGIS.Framework.Utils;
using KGIS.Framework.Utils.Enum;
using Kingo.Plugin.EngineEditor;
using System;
namespace Kingo.Plugin.EngineEditor.Commands.Tools
{
public class SelectFwjCmd : BaseToolCommand
{
private IHookHelper m_hookHelper;
private EngineEditorClass m_editor = new EngineEditorClass();
INewEnvelopeFeedback pFeedBack = null;
IGeometry pGeometry = null;
bool IsDrawing = false;
public override enumProductType AttachProductType
{
get { return enumProductType.KDB | enumProductType.KAP; }
}
public override void OnCreate(object hook)
{
try
{
if (hook == null)
{
return;
}
m_hookHelper = new HookHelperClass() { Hook = hook };
if (m_hookHelper.ActiveView == null)
{
m_hookHelper = null;
return;
}
}
catch
{
m_hookHelper = null;
}
}
public override void OnClick()
{
pFeedBack = new NewEnvelopeFeedbackClass();
pFeedBack.Display = m_hookHelper.ActiveView.ScreenDisplay;
this.OnCreate(base.hook);
}
IPoint startPoint = null;
public override void OnMouseDown(int button, int shift, int x, int y)
{
try
{
if (button != 1)
{
return;
}
if (IsDrawing == false)
{
pFeedBack = new NewEnvelopeFeedbackClass();
pFeedBack.Display = m_hookHelper.ActiveView.ScreenDisplay;
startPoint = m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(x, y);
pFeedBack.Start(startPoint);
IsDrawing = true;
}
}
catch (Exception ex)
{
LogAPI.Debug(ex);
}
}
public override void OnMouseMove(int button, int shift, int x, int y)
{
try
{
if (pFeedBack == null)
{
return;
}
IPoint pPoint = m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(x, y);
pFeedBack.MoveTo(pPoint);
}
catch (Exception ex)
{
LogAPI.Debug(ex);
}
}
public override void OnMouseUp(int button, int shift, int x, int y)
{
try
{
IsDrawing = false;
IEnvelope pEnvelope = pFeedBack.Stop();
if (pEnvelope.IsEmpty)
{
Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "SelectFWJ", Content = new PointClass() { X = x, Y = y } });
}
else
{
pGeometry = GetPolygon(pEnvelope.Envelope.XMin, pEnvelope.Envelope.XMax, pEnvelope.Envelope.YMin, pEnvelope.Envelope.YMax);
pFeedBack = null;
Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "SelectFWJ", Content = pGeometry });
}
base.OnMouseUp(button, shift, x, y);
}
catch (Exception ex)
{
LogAPI.Debug(ex);
}
}
public override bool Enabled
{
get
{
ESRI.ArcGIS.Carto.ILayer layer = (m_editor as EngineEditorClass).TargetLayer;
if (m_editor.EditState == esriEngineEditState.esriEngineStateEditing)
{
return true;
}
else
{
return false;
}
}
}
/// <summary>
/// 切换工具,释放关闭窗体
/// </summary>
/// <returns></returns>
public override bool Deactivate()
{
if (pGeometry != null)
{
ComReleaser.ReleaseCOMObject(this.pGeometry);
}
pFeedBack = null;
IsDrawing = false;
return base.Deactivate();
}
public override int Cursor
{
get
{
return base.Cursor;
}
}
private IPolygon GetPolygon(double XMin, double XMax, double YMin, double YMax)
{
IPolygon pPolygon = new PolygonClass();
IPointCollection pPointCollection = pPolygon as IPointCollection;
IPoint point1 = new PointClass();
point1.PutCoords(XMin, YMin);
pPointCollection.AddPoint(point1);
IPoint point2 = new PointClass();
point2.PutCoords(XMin, YMax);
pPointCollection.AddPoint(point2);
IPoint point3 = new PointClass();
point3.PutCoords(XMax, YMax);
pPointCollection.AddPoint(point3);
IPoint point4 = new PointClass();
point4.PutCoords(XMax, YMin);
pPointCollection.AddPoint(point4);
IPoint point5 = new PointClass();
point5.PutCoords(XMin, YMin);
pPointCollection.AddPoint(point5);
pPolygon = pPointCollection as IPolygon;
pPolygon.Close();
return pPolygon;
}
}
}