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