using ESRI.ArcGIS.ADF; using ESRI.ArcGIS.Geometry; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace KGIS.PlatformPlugin.Commands.Tools.TraceTool { public static class SegmentEx { public static IPolyline ConvertSegmentToPolyline(this ISegment pSegment) { if (pSegment == null) { return null; } ISegmentCollection segmentCollection = new PolylineClass(); if (segmentCollection != null) { ISegmentCollection arg_20_0 = segmentCollection; object value = System.Reflection.Missing.Value; object value2 = System.Reflection.Missing.Value; arg_20_0.AddSegment(pSegment, ref value, ref value2); return segmentCollection as IPolyline; } return null; } public static System.Collections.Generic.List GetInterserctPoint(this ISegment pSegment0, ISegment pSegment1) { IPolyline polyline = new PolylineClass(); IPolyline polyline2 = new PolylineClass(); ISegmentCollection arg_25_0 = polyline as ISegmentCollection; object value = System.Reflection.Missing.Value; object value2 = System.Reflection.Missing.Value; arg_25_0.AddSegment(pSegment0, ref value, ref value2); ISegmentCollection arg_43_0 = polyline2 as ISegmentCollection; object value3 = System.Reflection.Missing.Value; object value4 = System.Reflection.Missing.Value; arg_43_0.AddSegment(pSegment1, ref value3, ref value4); System.Collections.Generic.List list = new System.Collections.Generic.List(); ITopologicalOperator topologicalOperator = polyline as ITopologicalOperator; IRelationalOperator relationalOperator = polyline as IRelationalOperator; if (relationalOperator.Crosses(polyline2)) { IGeometry geometry = topologicalOperator.Intersect(polyline2, esriGeometryDimension.esriGeometry0Dimension); if (geometry != null && !geometry.IsEmpty) { if (geometry is IPoint) { list.Add(geometry as IPoint); } if (geometry is IMultipoint) { IPointCollection pointCollection = geometry as IPointCollection; int pointCount = pointCollection.PointCount; for (int i = 0; i < pointCount; i++) { IPoint item = pointCollection.get_Point(i); list.Add(item); } } } } ComReleaser.ReleaseCOMObject(polyline); ComReleaser.ReleaseCOMObject(polyline2); return list; } } }