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.
		
		
		
		
		
			
		
			
				
					
					
						
							71 lines
						
					
					
						
							3.0 KiB
						
					
					
				
			
		
		
	
	
							71 lines
						
					
					
						
							3.0 KiB
						
					
					
				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<IPoint> 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<IPoint> list = new System.Collections.Generic.List<IPoint>(); | 
						|
            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; | 
						|
        } | 
						|
    } | 
						|
}
 | 
						|
 |