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.
		
		
		
		
		
			
		
			
				
					
					
						
							94 lines
						
					
					
						
							3.7 KiB
						
					
					
				
			
		
		
	
	
							94 lines
						
					
					
						
							3.7 KiB
						
					
					
				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 PointEx | 
						|
    { | 
						|
        public static bool IsSamePoint(this IPoint pPoint, IPoint pPointCompare, double dTolerance = 0.001) | 
						|
        { | 
						|
            if (pPoint != null && pPointCompare != null) | 
						|
            { | 
						|
                IProximityOperator proximityOperator = pPoint as IProximityOperator; | 
						|
                double num = proximityOperator.ReturnDistance(pPointCompare); | 
						|
                return num <= 0.001; | 
						|
            } | 
						|
            return false; | 
						|
        } | 
						|
        public static bool IsOnLine(this IPoint pPoint, System.Collections.Generic.List<IPolyline> listLines) | 
						|
        { | 
						|
            if (pPoint != null && listLines != null && listLines.Count >= 1) | 
						|
            { | 
						|
                int count = listLines.Count; | 
						|
                for (int i = 0; i < count; i++) | 
						|
                { | 
						|
                    IRelationalOperator relationalOperator = listLines[i] as IRelationalOperator; | 
						|
                    if (relationalOperator != null && (relationalOperator.Contains(pPoint) || relationalOperator.Touches(pPoint))) | 
						|
                    { | 
						|
                        return true; | 
						|
                    } | 
						|
                } | 
						|
                return false; | 
						|
            } | 
						|
            return false; | 
						|
        } | 
						|
        public static bool IsOnLine(this IPoint pPoint, IPolyline pPolyline) | 
						|
        { | 
						|
            if (pPoint != null && pPolyline != null) | 
						|
            { | 
						|
                IRelationalOperator relationalOperator = pPolyline as IRelationalOperator; | 
						|
                return relationalOperator != null && (relationalOperator.Contains(pPoint) || relationalOperator.Touches(pPoint)); | 
						|
            } | 
						|
            return false; | 
						|
        } | 
						|
        public static bool IsOnRing(this IPoint pPoint, IPolygon pPolygon) | 
						|
        { | 
						|
            if (pPoint != null && pPolygon != null) | 
						|
            { | 
						|
                ITopologicalOperator topologicalOperator = pPolygon as ITopologicalOperator; | 
						|
                IGeometry boundary = topologicalOperator.Boundary; | 
						|
                IRelationalOperator relationalOperator = boundary as IRelationalOperator; | 
						|
                return relationalOperator != null && (relationalOperator.Contains(pPoint) || relationalOperator.Touches(pPoint)); | 
						|
            } | 
						|
            return false; | 
						|
        } | 
						|
        public static bool IsInGeometry(this IPoint pPoint, IGeometry pGeometry) | 
						|
        { | 
						|
            if (pPoint != null && pGeometry != null) | 
						|
            { | 
						|
                IRelationalOperator relationalOperator = pGeometry as IRelationalOperator; | 
						|
                return relationalOperator != null && (relationalOperator.Contains(pPoint) || relationalOperator.Touches(pPoint)); | 
						|
            } | 
						|
            return false; | 
						|
        } | 
						|
        public static IPoint[] Explode(this IMultipoint iMultiPoint) | 
						|
        { | 
						|
            IPoint[] array = null; | 
						|
            IPointCollection pointCollection = iMultiPoint as IPointCollection; | 
						|
            int pointCount = pointCollection.PointCount; | 
						|
            if (pointCount != 1) | 
						|
            { | 
						|
                if (pointCount > 1) | 
						|
                { | 
						|
                    array = new IPoint[pointCount]; | 
						|
                    for (int i = 0; i < pointCount; i++) | 
						|
                    { | 
						|
                        array[i] = new PointClass(); | 
						|
                        IPoint point = pointCollection.get_Point(i); | 
						|
                        array[i].X = point.X; | 
						|
                        array[i].Y = point.Y; | 
						|
                    } | 
						|
                } | 
						|
                return array; | 
						|
            } | 
						|
            return new IPoint[] | 
						|
            { | 
						|
                iMultiPoint as IPoint | 
						|
            }; | 
						|
        } | 
						|
    } | 
						|
}
 | 
						|
 |