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
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; |
|
} |
|
} |
|
}
|
|
|