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.
704 lines
26 KiB
704 lines
26 KiB
using ESRI.ArcGIS.ADF; |
|
using ESRI.ArcGIS.Carto; |
|
using ESRI.ArcGIS.Controls; |
|
using ESRI.ArcGIS.Display; |
|
using ESRI.ArcGIS.esriSystem; |
|
using ESRI.ArcGIS.Geodatabase; |
|
using ESRI.ArcGIS.Geometry; |
|
using ESRI.ArcGIS.SystemUI; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Utils.Helper; |
|
using KGIS.PlatformPlugin.Commands.Tools.TraceTool.Enum; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Reflection; |
|
using ICommand = ESRI.ArcGIS.SystemUI.ICommand; |
|
|
|
namespace KGIS.PlatformPlugin.Commands.Tools.TraceTool |
|
{ |
|
public class NewPolygonTraceTool : ICommand, ITool |
|
{ |
|
protected IGeometry m_pGeometry; |
|
private IRing m_pRing; |
|
|
|
private List<IFeatureCache2> m_pListFeatureCache; |
|
private List<IPolyline> m_pListBeTracePolyline; |
|
List<IFeatureLayer> lstTraceLayer { get; set; } |
|
private IDisplayFeedback m_pDisplayFeedback { get; set; } |
|
private ITraceFeedback m_pTraceFeedback; |
|
|
|
private IFeatureLayer featureLayer { get; set; } |
|
|
|
private IEngineEditor m_engineEditor; |
|
|
|
private bool m_checked; |
|
|
|
private IHookHelper m_hookHelper; |
|
private IGeometryCollection geometryCollection { get; set; } |
|
protected ISnappingFeedback m_pSnappingFeedback; |
|
protected ISnappingEnvironment m_pSnappingEnv; |
|
protected IPointSnapper m_pPntSnapper; |
|
private IPoint m_pPointCatched = null; |
|
|
|
public void OnCreate(object hook) |
|
{ |
|
try |
|
{ |
|
if (m_hookHelper == null) |
|
{ |
|
m_hookHelper = new HookHelperClass(); |
|
m_hookHelper.Hook = hook; |
|
} |
|
//System.IO.Stream delVerStream = GetType().Assembly.GetManifestResourceStream("KGIS.PlatformPlugin.Cur.InsertVertexCursor.cur"); |
|
//if (delVerStream != null) |
|
//{ |
|
// m_Cursor = new System.Windows.Forms.Cursor(delVerStream); |
|
//} |
|
if (m_engineEditor == null) |
|
{ |
|
m_engineEditor = new EngineEditorClass(); |
|
} |
|
IHookHelper2 hookHelper2 = m_hookHelper as IHookHelper2; |
|
if (hookHelper2 != null) |
|
{ |
|
IExtensionManager extensionManager = hookHelper2.ExtensionManager; |
|
if (extensionManager != null) |
|
{ |
|
IExtension extension = extensionManager.FindExtension(new UIDClass |
|
{ |
|
Value = "{E07B4C52-C894-4558-B8D4-D4050018D1DA}" |
|
}); |
|
if (extension != null) |
|
{ |
|
this.m_pSnappingEnv = (extension as ISnappingEnvironment); |
|
this.m_pPntSnapper = this.m_pSnappingEnv.PointSnapper; |
|
this.m_pSnappingFeedback = new SnappingFeedbackClass(); |
|
this.m_pSnappingFeedback.Initialize(hook, this.m_pSnappingEnv, true); |
|
} |
|
} |
|
} |
|
IActiveViewEvents_Event activeViewEvents_Event = this.m_hookHelper.ActiveView as IActiveViewEvents_Event; |
|
//activeViewEvents_Event.ContentsChanged += new IActiveViewEvents_ContentsChangedEventHandler(this, (UIntPtr)ldftn(pActiveViewEvents_Event_ContentsChanged)); |
|
activeViewEvents_Event.ItemAdded += new IActiveViewEvents_ItemAddedEventHandler(pActiveViewEvents_Event_ItemAdded); |
|
activeViewEvents_Event.ItemDeleted += new IActiveViewEvents_ItemDeletedEventHandler(pActiveViewEvents_Event_ItemDeleted); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("NewPolygonTool OnCreate异常:" + ex.Message); |
|
} |
|
} |
|
private void pActiveViewEvents_Event_ItemDeleted(object Item) |
|
{ |
|
//if (this.m_pDisplayFeedbackMethod == DisplayFeedbackMethod.Trace) |
|
//{ |
|
this.EndTraceFeedback(); |
|
//} |
|
} |
|
private void pActiveViewEvents_Event_ItemAdded(object Item) |
|
{ |
|
//if (this.m_pDisplayFeedbackMethod == DisplayFeedbackMethod.Trace) |
|
//{ |
|
this.EndTraceFeedback(); |
|
//} |
|
} |
|
private void pActiveViewEvents_Event_ContentsChanged() |
|
{ |
|
} |
|
private void axMapControl_OnExtentUpdated(object sender, IMapControlEvents2_OnExtentUpdatedEvent e) |
|
{ |
|
//this.m_pDisplayFeedbackMethod == DisplayFeedbackMethod.Trace && |
|
if (this.m_pTraceFeedback != null) |
|
{ |
|
this.FillFeatureCache(this.m_pPointCatched); |
|
this.GetBeTracedPolyline(); |
|
this.m_pTraceFeedback.ListBeTracePolyline = this.m_pListBeTracePolyline; |
|
} |
|
} |
|
|
|
public void OnClick() |
|
{ |
|
try |
|
{ |
|
//featureLayer = (m_engineEditor as IEngineEditLayers).TargetLayer; |
|
//if (featureLayer == null || featureLayer.FeatureClass == null) |
|
//{ |
|
// m_checked = false; |
|
// return; |
|
//} |
|
//IsUseing = true; |
|
m_checked = true; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex.Message); |
|
MessageHelper.ShowError(ex.Message); |
|
} |
|
} |
|
|
|
public bool Enabled { get { return m_engineEditor.EditState == esriEngineEditState.esriEngineStateEditing; } } |
|
|
|
public bool Checked |
|
{ |
|
get |
|
{ |
|
return m_checked; |
|
} |
|
} |
|
|
|
public string Name |
|
{ |
|
get |
|
{ |
|
return "追踪绘面"; |
|
} |
|
} |
|
public string Caption |
|
{ |
|
get |
|
{ |
|
return ""; |
|
} |
|
} |
|
|
|
public string Tooltip |
|
{ |
|
get |
|
{ |
|
return "追踪绘面"; |
|
} |
|
} |
|
|
|
public string Message |
|
{ |
|
get |
|
{ |
|
return ""; |
|
} |
|
} |
|
|
|
public string HelpFile |
|
{ |
|
get |
|
{ |
|
return ""; |
|
} |
|
} |
|
|
|
public int HelpContextID |
|
{ |
|
get |
|
{ |
|
return 0; |
|
} |
|
} |
|
|
|
public int Bitmap |
|
{ |
|
get |
|
{ |
|
return 0; |
|
} |
|
} |
|
|
|
public string Category |
|
{ |
|
get |
|
{ |
|
return ""; |
|
} |
|
} |
|
|
|
public void OnMouseDown(int button, int shift, int x, int y) |
|
{ |
|
try |
|
{ |
|
if (button != 1) |
|
{ |
|
return; |
|
} |
|
if (this.m_pGeometry == null) |
|
{ |
|
this.NewPolygon(); |
|
} |
|
if (this.m_pListFeatureCache == null) |
|
{ |
|
this.FillFeatureCache(this.m_pPointCatched); |
|
this.GetBeTracedPolyline(); |
|
} |
|
IPolyline polyline = this.AddToTraceFeedBack(this.m_pPointCatched); |
|
if (polyline != null) |
|
{ |
|
this.AddPolylineToPolygon(polyline); |
|
this.AddToFeedback(polyline); |
|
} |
|
//AddToFeedback(m_pPointCatched); |
|
//AddPointToPolygon(m_pPointCatched); |
|
this.m_hookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, this.m_hookHelper.ActiveView.Extent); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex.Message); |
|
MessageHelper.ShowError(ex.Message); |
|
} |
|
} |
|
|
|
private void NewPolygon() |
|
{ |
|
this.m_pGeometry = new PolygonClass(); |
|
this.m_pGeometry.SpatialReference = this.m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.SpatialReference; |
|
//this.m_pEditor.SketchGeometry = new SketchGeometry(this.m_pGeometry, null, true); |
|
IEngineEditSketch editSketch = m_engineEditor as IEngineEditSketch; |
|
editSketch.Geometry = m_pGeometry; |
|
//editSketch.FinishSketch(); |
|
} |
|
|
|
private void EndPolygon() |
|
{ |
|
if (this.m_pRing != null) |
|
{ |
|
System.Runtime.InteropServices.Marshal.ReleaseComObject(this.m_pRing); |
|
this.m_pRing = null; |
|
} |
|
} |
|
|
|
private void AddToFeedback(IPoint pPoint) |
|
{ |
|
if (this.m_pDisplayFeedback == null) |
|
{ |
|
m_pDisplayFeedback = new NewPolygonFeedbackClass(); |
|
m_pDisplayFeedback.Display = this.m_hookHelper.ActiveView.ScreenDisplay; |
|
(this.m_pDisplayFeedback as INewPolygonFeedback).Start(pPoint); |
|
return; |
|
} |
|
if (this.m_pDisplayFeedback is INewPolygonFeedback) |
|
{ |
|
(this.m_pDisplayFeedback as INewPolygonFeedback).AddPoint(pPoint); |
|
} |
|
} |
|
|
|
public void FinishSketch() |
|
{ |
|
this.EndFeedback(); |
|
//this.EndArcFeedback(); |
|
this.EndTraceFeedback(); |
|
this.EndPolygon(); |
|
if (this.m_pGeometry != null && (this.m_pGeometry as IPointCollection).PointCount > 2) |
|
{ |
|
(this.m_pGeometry as IPolygon).SimplifyPreserveFromTo(); |
|
//if (this.OnDrawEnd != null) |
|
//{ |
|
// this.OnDrawEnd(this, this.m_pGeometry); |
|
//} |
|
IEngineEditSketch editSketch = m_engineEditor as IEngineEditSketch; |
|
editSketch.Geometry = m_pGeometry; |
|
editSketch.FinishSketch(); |
|
} |
|
System.Runtime.InteropServices.Marshal.ReleaseComObject(this.m_pGeometry); |
|
this.m_pGeometry = null; |
|
//if (this.m_pEditor.SketchGeometry != null) |
|
//{ |
|
// this.m_pEditor.SketchGeometry.Deactivate(); |
|
// this.m_pEditor.SketchGeometry = null; |
|
//} |
|
//this.m_pEditor.RefreshForeground(null); |
|
this.m_hookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, this.m_hookHelper.ActiveView.Extent); |
|
} |
|
|
|
private void AddPointToPolygon(IPoint pPoint) |
|
{ |
|
if (this.m_pRing != null) |
|
{ |
|
IPointCollection arg_24_0 = this.m_pRing as IPointCollection; |
|
object value = Missing.Value; |
|
object value2 = Missing.Value; |
|
arg_24_0.AddPoint(pPoint, ref value, ref value2); |
|
return; |
|
} |
|
this.NewPolygonPart(); |
|
IPointCollection arg_4C_0 = this.m_pRing as IPointCollection; |
|
object value3 = Missing.Value; |
|
object value4 = Missing.Value; |
|
arg_4C_0.AddPoint(pPoint, ref value3, ref value4); |
|
} |
|
|
|
private void NewPolygonPart() |
|
{ |
|
if (this.m_pRing == null) |
|
{ |
|
this.m_pRing = new RingClass(); |
|
IGeometryCollection geometryCollection = this.m_pGeometry as IGeometryCollection; |
|
IGeometryCollection arg_36_0 = geometryCollection; |
|
IGeometry arg_36_1 = this.m_pRing; |
|
object value = Missing.Value; |
|
object value2 = Missing.Value; |
|
arg_36_0.AddGeometry(arg_36_1, ref value, ref value2); |
|
} |
|
} |
|
|
|
private void EndFeedback() |
|
{ |
|
if (this.m_pDisplayFeedback != null) |
|
{ |
|
System.Runtime.InteropServices.Marshal.ReleaseComObject(this.m_pDisplayFeedback); |
|
this.m_pDisplayFeedback = null; |
|
} |
|
} |
|
|
|
//private void AddPointToPolygon(IPoint pPoint) |
|
//{ |
|
// if (this.m_pRing != null) |
|
// { |
|
// IPointCollection arg_24_0 = this.m_pRing as IPointCollection; |
|
// object value = Missing.Value; |
|
// object value2 = Missing.Value; |
|
// arg_24_0.AddPoint(pPoint, ref value, ref value2); |
|
// return; |
|
// } |
|
// this.NewPolygonPart(); |
|
// IPointCollection arg_4C_0 = this.m_pRing as IPointCollection; |
|
// object value3 = Missing.Value; |
|
// object value4 = Missing.Value; |
|
// arg_4C_0.AddPoint(pPoint, ref value3, ref value4); |
|
//} |
|
|
|
public void OnMouseMove(int button, int shift, int x, int y) |
|
{ |
|
try |
|
{ |
|
m_pPointCatched = this.m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(x, y); |
|
if (this.m_pSnappingEnv != null && this.m_pSnappingEnv.Enabled) |
|
{ |
|
ISnappingResult snappingResult = this.m_pPntSnapper.Snap(this.m_pPointCatched); |
|
this.m_pSnappingFeedback.Update(snappingResult, 0); |
|
if (snappingResult != null) |
|
{ |
|
this.m_pPointCatched = snappingResult.Location; |
|
} |
|
} |
|
//if (m_pDisplayFeedback != null) |
|
//{ |
|
// m_pDisplayFeedback.MoveTo(m_pPointCatched); |
|
//} |
|
if (this.m_pTraceFeedback == null && this.m_pDisplayFeedback != null) |
|
{ |
|
this.m_pDisplayFeedback.MoveTo(this.m_pPointCatched); |
|
} |
|
if (this.m_pTraceFeedback != null) |
|
{ |
|
this.m_pTraceFeedback.MoveTo(this.m_pPointCatched); |
|
RefreshForeground(this.m_hookHelper.ActiveView.Extent); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex.Message); |
|
MessageHelper.ShowError(ex.Message); |
|
} |
|
} |
|
public void RefreshForeground(IEnvelope pEnvelope = null) |
|
{ |
|
this.m_hookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewForeground, null, pEnvelope); |
|
KGIS.Framework.Platform.Platform.Instance.GetMapsManager().GetMapService().getAxMapControl().Update(); |
|
} |
|
|
|
public void OnMouseUp(int button, int shift, int x, int y) |
|
{ |
|
|
|
} |
|
|
|
public void OnDblClick() |
|
{ |
|
try |
|
{ |
|
FinishSketch(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex.Message); |
|
MessageHelper.ShowError(ex.Message); |
|
} |
|
} |
|
|
|
public void OnKeyDown(int keyCode, int shift) |
|
{ |
|
if (keyCode == (int)ConsoleKey.F9 || keyCode == (int)ConsoleKey.Escape) |
|
{ |
|
} |
|
} |
|
|
|
public void OnKeyUp(int keyCode, int shift) |
|
{ |
|
|
|
} |
|
|
|
public bool OnContextMenu(int x, int y) |
|
{ |
|
return true; |
|
} |
|
|
|
public void Refresh(int hdc) |
|
{ |
|
if (this.m_pDisplayFeedback != null) |
|
{ |
|
this.m_pDisplayFeedback.Refresh(hdc); |
|
} |
|
} |
|
|
|
public bool Deactivate() |
|
{ |
|
try |
|
{ |
|
m_checked = false; |
|
if (m_pDisplayFeedback != null) |
|
{ |
|
System.Runtime.InteropServices.Marshal.ReleaseComObject(m_pDisplayFeedback); |
|
m_pDisplayFeedback = null; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex.Message); |
|
} |
|
return true; |
|
} |
|
|
|
public int Cursor |
|
{ |
|
get |
|
{ |
|
return System.Windows.Forms.Cursors.Cross.Handle.ToInt32(); |
|
} |
|
} |
|
|
|
private void FillFeatureCache(IPoint pPoint) |
|
{ |
|
try |
|
{ |
|
List<IFeatureLayer> listAllLayer = KGIS.Framework.Platform.Platform.Instance.GetMapsManager().GetMapService().GetAllLayerInMap<IFeatureLayer>(); |
|
lstTraceLayer = new List<IFeatureLayer>(); |
|
foreach (IFeatureLayer item in listAllLayer) |
|
{ |
|
if (item == null || !item.Visible || !item.Selectable || item.FeatureClass == null) |
|
{ |
|
continue; |
|
} |
|
if (item.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon || item.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolyline) |
|
{ |
|
lstTraceLayer.Add(item); |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex); |
|
} |
|
IEnvelope arg_41_0 = this.m_hookHelper.ActiveView.Extent; |
|
int width = KGIS.Framework.Platform.Platform.Instance.GetMapsManager().GetMapService().getAxMapControl().Size.Width; |
|
double size = ConvertPixelsToMapUnits((double)width); |
|
if (this.m_pListFeatureCache != null) |
|
{ |
|
this.ReleaseFeatureCache(); |
|
} |
|
this.m_pListFeatureCache = new List<IFeatureCache2>(); |
|
foreach (IFeatureLayer current in lstTraceLayer) |
|
{ |
|
IFeatureCache2 featureCache = new FeatureCacheClass(); |
|
featureCache.Initialize(pPoint, size); |
|
featureCache.AddFeatures(current.FeatureClass, null); |
|
this.m_pListFeatureCache.Add(featureCache); |
|
} |
|
} |
|
|
|
private void ReleaseFeatureCache() |
|
{ |
|
if (this.m_pListFeatureCache != null) |
|
{ |
|
using (List<IFeatureCache2>.Enumerator enumerator = this.m_pListFeatureCache.GetEnumerator()) |
|
{ |
|
if (enumerator.MoveNext()) |
|
{ |
|
IFeatureCache2 current = enumerator.Current; |
|
ComReleaser.ReleaseCOMObject(current); |
|
} |
|
} |
|
this.m_pListFeatureCache.Clear(); |
|
this.m_pListFeatureCache = null; |
|
} |
|
} |
|
|
|
public double ConvertPixelsToMapUnits(double dPixelUnits = 0.0) |
|
{ |
|
if (dPixelUnits == 0.0) |
|
{ |
|
dPixelUnits = 10.0; |
|
} |
|
int num = this.m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.get_DeviceFrame().right - this.m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.get_DeviceFrame().left; |
|
double width = this.m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds.Width; |
|
double num2 = width / (double)num; |
|
return dPixelUnits * num2; |
|
} |
|
private void GetBeTracedPolyline() |
|
{ |
|
if (this.m_pListBeTracePolyline != null) |
|
{ |
|
this.ReleaseBeTracedPolyline(); |
|
} |
|
this.m_pListBeTracePolyline = new List<IPolyline>(); |
|
foreach (IFeatureCache2 current in this.m_pListFeatureCache) |
|
{ |
|
int count = current.Count; |
|
for (int i = 0; i < count; i++) |
|
{ |
|
IFeature feature = current.get_Feature(i); |
|
IGeometry shapeCopy = feature.ShapeCopy; |
|
ITopologicalOperator topologicalOperator = shapeCopy as ITopologicalOperator; |
|
if (shapeCopy.GeometryType == esriGeometryType.esriGeometryPolygon) |
|
{ |
|
IPolyline polyline = topologicalOperator.Boundary as IPolyline; |
|
IGeometryCollection geometryCollection = polyline as IGeometryCollection; |
|
int geometryCount = geometryCollection.GeometryCount; |
|
for (int j = 0; j < geometryCount; j++) |
|
{ |
|
IPath path = geometryCollection.get_Geometry(j) as IPath; |
|
IPolyline item = ToPolyline(path); |
|
this.m_pListBeTracePolyline.Add(item); |
|
ComReleaser.ReleaseCOMObject(path); |
|
} |
|
ComReleaser.ReleaseCOMObject(polyline); |
|
} |
|
else |
|
{ |
|
if (shapeCopy.GeometryType == esriGeometryType.esriGeometryPolyline) |
|
{ |
|
IPolyline polyline2 = shapeCopy as IPolyline; |
|
IGeometryCollection geometryCollection2 = polyline2 as IGeometryCollection; |
|
int geometryCount2 = geometryCollection2.GeometryCount; |
|
for (int k = 0; k < geometryCount2; k++) |
|
{ |
|
IPath path2 = geometryCollection2.get_Geometry(k) as IPath; |
|
IPolyline item2 = ToPolyline(path2); |
|
this.m_pListBeTracePolyline.Add(item2); |
|
ComReleaser.ReleaseCOMObject(path2); |
|
} |
|
} |
|
} |
|
ComReleaser.ReleaseCOMObject(shapeCopy); |
|
} |
|
} |
|
} |
|
private IPolyline AddToTraceFeedBack(IPoint pPoint) |
|
{ |
|
if (this.m_pTraceFeedback == null) |
|
{ |
|
this.m_pTraceFeedback = new TraceFeedbackExClass(); |
|
m_pTraceFeedback.Display = this.m_hookHelper.ActiveView.ScreenDisplay; |
|
this.m_pTraceFeedback.ListBeTracePolyline = this.m_pListBeTracePolyline; |
|
if (this.m_pGeometry.IsEmpty) |
|
{ |
|
this.m_pTraceFeedback.Start(pPoint, null, null); |
|
} |
|
else |
|
{ |
|
IPoint fromPoint = this.m_pRing.FromPoint; |
|
IPoint toPoint = this.m_pRing.ToPoint; |
|
this.m_pTraceFeedback.Start(pPoint, fromPoint, toPoint); |
|
} |
|
return null; |
|
} |
|
IPolyline result = this.m_pTraceFeedback.Stop(pPoint); |
|
this.m_pTraceFeedback = null; |
|
return result; |
|
} |
|
private void ReleaseBeTracedPolyline() |
|
{ |
|
if (this.m_pListBeTracePolyline != null) |
|
{ |
|
foreach (IGeometry current in this.m_pListBeTracePolyline) |
|
{ |
|
ComReleaser.ReleaseCOMObject(current); |
|
} |
|
this.m_pListBeTracePolyline.Clear(); |
|
this.m_pListBeTracePolyline = null; |
|
} |
|
} |
|
public static IPolyline ToPolyline(IPath pPath) |
|
{ |
|
IPolyline polyline = new PolylineClass(); |
|
polyline.SpatialReference = pPath.SpatialReference; |
|
ISegmentCollection segments = pPath as ISegmentCollection; |
|
ISegmentCollection segmentCollection = polyline as ISegmentCollection; |
|
segmentCollection.AddSegmentCollection(segments); |
|
polyline.SimplifyNetwork(); |
|
return polyline; |
|
} |
|
private void AddPolylineToPolygon(IPolyline pPolyline) |
|
{ |
|
if (pPolyline != null && !pPolyline.IsEmpty) |
|
{ |
|
if (this.m_pRing == null) |
|
{ |
|
this.NewPolygonPart(); |
|
} |
|
ISegmentCollection segmentCollection = this.m_pRing as ISegmentCollection; |
|
if (!this.m_pRing.IsEmpty && this.m_pRing.ToPoint != null) |
|
{ |
|
ILine line = new LineClass(); |
|
line.PutCoords(this.m_pRing.ToPoint, pPolyline.FromPoint); |
|
ISegmentCollection arg_7B_0 = segmentCollection; |
|
ISegment arg_7B_1 = line as ISegment; |
|
object value = Missing.Value; |
|
object value2 = Missing.Value; |
|
arg_7B_0.AddSegment(arg_7B_1, ref value, ref value2); |
|
} |
|
ISegmentCollection segmentCollection2 = pPolyline as ISegmentCollection; |
|
int segmentCount = segmentCollection2.SegmentCount; |
|
for (int i = 0; i < segmentCount; i++) |
|
{ |
|
ISegmentCollection arg_AE_0 = segmentCollection; |
|
ISegment arg_AE_1 = segmentCollection2.get_Segment(i); |
|
object value3 = Missing.Value; |
|
object value4 = Missing.Value; |
|
arg_AE_0.AddSegment(arg_AE_1, ref value3, ref value4); |
|
} |
|
return; |
|
} |
|
} |
|
private void AddToFeedback(IPolyline pPolyline) |
|
{ |
|
if (this.m_pDisplayFeedback != null) |
|
{ |
|
IPointCollection pointCollection = pPolyline as IPointCollection; |
|
int pointCount = pointCollection.PointCount; |
|
for (int i = 0; i < pointCount; i++) |
|
{ |
|
(this.m_pDisplayFeedback as INewPolygonFeedback).AddPoint(pointCollection.get_Point(i)); |
|
} |
|
return; |
|
} |
|
this.m_pDisplayFeedback = new NewPolygonFeedbackClass(); |
|
m_pDisplayFeedback.Display = this.m_hookHelper.ActiveView.ScreenDisplay; |
|
if (pPolyline.IsEmpty) |
|
{ |
|
return; |
|
} |
|
IPointCollection pointCollection2 = pPolyline as IPointCollection; |
|
int pointCount2 = pointCollection2.PointCount; |
|
(this.m_pDisplayFeedback as INewPolygonFeedback).Start(pointCollection2.get_Point(0)); |
|
for (int j = 1; j < pointCount2; j++) |
|
{ |
|
(this.m_pDisplayFeedback as INewPolygonFeedback).AddPoint(pointCollection2.get_Point(j)); |
|
} |
|
} |
|
|
|
private void EndTraceFeedback() |
|
{ |
|
if (this.m_pTraceFeedback != null) |
|
{ |
|
this.m_pTraceFeedback.Stop(null); |
|
this.m_pTraceFeedback = null; |
|
} |
|
this.ReleaseFeatureCache(); |
|
this.ReleaseBeTracedPolyline(); |
|
} |
|
} |
|
}
|
|
|