年度变更建库软件5.0版本
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.

680 lines
31 KiB

using ESRI.ArcGIS.ADF;
using ESRI.ArcGIS.esriSystem;
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 PolylineEx
{
public static IPolygon Buffer(this IPolyline pPolyline, double dLeftRadius, double dRightRadius, int nBufferType)
{
IBufferConstruction bufferConstruction = new BufferConstructionClass();
IBufferConstructionProperties2 bufferConstructionProperties = bufferConstruction as IBufferConstructionProperties2;
IDoubleArray doubleArray = new DoubleArrayClass();
bufferConstructionProperties.EndOption = (esriBufferConstructionEndEnum)nBufferType;
if (dLeftRadius > 0.0 && dRightRadius == 0.0)
{
bufferConstructionProperties.SideOption = esriBufferConstructionSideEnum.esriBufferLeft;
doubleArray.Add(dLeftRadius);
}
else
{
if (dLeftRadius == 0.0 && dRightRadius > 0.0)
{
bufferConstructionProperties.SideOption = esriBufferConstructionSideEnum.esriBufferRight;
doubleArray.Add(dRightRadius);
}
else
{
bufferConstructionProperties.SideOption = esriBufferConstructionSideEnum.esriBufferFull;
doubleArray.Add(dLeftRadius);
doubleArray.Add(dRightRadius);
}
}
bufferConstructionProperties.UnionOverlappingBuffers = true;
bufferConstructionProperties.GenerateCurves = true;
IGeometryCollection geometryCollection = new GeometryBagClass();
IGeometryCollection arg_A7_0 = geometryCollection;
object value = System.Reflection.Missing.Value;
object value2 = System.Reflection.Missing.Value;
arg_A7_0.AddGeometry(pPolyline, ref value, ref value2);
IGeometryCollection geometryCollection2 = new GeometryBagClass();
bufferConstruction.ConstructBuffersByDistances2(geometryCollection as IEnumGeometry, doubleArray, geometryCollection2);
IGeometry geometry = geometryCollection2.get_Geometry(0);
return geometry as IPolygon;
}
public static IPolygon BufferFlat(this IPolyline pPolyline, double dLeftRadius, double dRightRadius)
{
IConstructCurve constructCurve = new PolylineClass();
IConstructCurve arg_1C_0 = constructCurve;
double arg_1C_2 = -dLeftRadius;
object value = System.Reflection.Missing.Value;
object value2 = System.Reflection.Missing.Value;
arg_1C_0.ConstructOffset(pPolyline, arg_1C_2, ref value, ref value2);
IConstructCurve constructCurve2 = new PolylineClass();
IConstructCurve arg_3C_0 = constructCurve2;
object value3 = System.Reflection.Missing.Value;
object value4 = System.Reflection.Missing.Value;
arg_3C_0.ConstructOffset(pPolyline, dRightRadius, ref value3, ref value4);
(constructCurve2 as IPolyline).ReverseOrientation();
IPointCollection pointCollection = constructCurve as IPointCollection;
IPointCollection newPoints = constructCurve2 as IPointCollection;
pointCollection.AddPointCollection(newPoints);
IPointCollection pointCollection2 = new PolygonClass();
pointCollection2.AddPointCollection(pointCollection);
IPointCollection arg_8B_0 = pointCollection2;
IPoint arg_8B_1 = pointCollection.get_Point(0);
object value5 = System.Reflection.Missing.Value;
object value6 = System.Reflection.Missing.Value;
arg_8B_0.AddPoint(arg_8B_1, ref value5, ref value6);
IPolygon polygon = pointCollection2 as IPolygon;
polygon.SimplifyPreserveFromTo();
return polygon;
}
public static IPolyline AddVertex(this IPolyline pPolyline, IPoint iPoint)
{
if (pPolyline == null)
{
return null;
}
bool flag = false;
int num = -1;
int num2 = -1;
pPolyline.SplitAtPoint(iPoint, true, false, out flag, out num, out num2);
return pPolyline;
}
public static IPolygon ToPolygon(this IPolyline pPolyline)
{
if (pPolyline == null || !pPolyline.IsClosed)
{
return null;
}
ITopologicalOperator topologicalOperator = pPolyline as ITopologicalOperator;
topologicalOperator.Simplify();
if (!pPolyline.IsClosed)
{
return null;
}
ISegmentCollection segmentCollection = pPolyline as ISegmentCollection;
if (segmentCollection != null)
{
ISegmentCollection segmentCollection2 = new PolygonClass();
segmentCollection2.AddSegmentCollection(segmentCollection);
IPolygon polygon = segmentCollection2 as IPolygon;
polygon.SpatialReference = pPolyline.SpatialReference;
polygon.SimplifyPreserveFromTo();
ITopologicalOperator topologicalOperator2 = polygon as ITopologicalOperator;
topologicalOperator2.Simplify();
return polygon;
}
return null;
}
public static IPolyline CloseLine(this IPolyline pPolyline)
{
if (pPolyline == null || pPolyline.IsEmpty)
{
return null;
}
if (!pPolyline.IsClosed)
{
ISegmentCollection segmentCollection = new RingClass();
segmentCollection.AddSegmentCollection(pPolyline as ISegmentCollection);
IRing ring = segmentCollection as IRing;
ring.Close();
ISegmentCollection segmentCollection2 = new PolylineClass();
segmentCollection2.AddSegmentCollection(ring as ISegmentCollection);
return segmentCollection2 as IPolyline;
}
return pPolyline;
}
public static bool IsOnBoundary(this IPolyline pPolyline, System.Collections.Generic.List<IPolygon> listPolygon)
{
if (pPolyline != null && listPolygon != null && listPolygon.Count >= 1)
{
int count = listPolygon.Count;
for (int i = 0; i < count; i++)
{
if (pPolyline.IsOnBoundary(listPolygon[i]))
{
return true;
}
}
return false;
}
return false;
}
public static Tuple<IPoint, IPoint> GetOffsetPoints(this IPolyline pPolyline, int nCalcType, double dTolerance)
{
if (pPolyline == null)
{
return null;
}
IPoint point = new PointClass();
IPoint point2 = new PointClass();
IPointCollection pointCollection = pPolyline as IPointCollection;
int longestLineSegmentStartPoint = pointCollection.GetLongestLineSegmentStartPoint();
if (longestLineSegmentStartPoint < 0)
{
return null;
}
IPoint point3 = pointCollection.get_Point(longestLineSegmentStartPoint);
IPoint point4 = pointCollection.get_Point(longestLineSegmentStartPoint + 1);
IPoint point5 = new PointClass();
point5.PutCoords((point3.X + point4.X) / 2.0, (point3.Y + point4.Y) / 2.0);
ILine line = new LineClass();
line.PutCoords(point3, point4);
double angle = line.Angle;
if (nCalcType == 0)
{
point.X = point5.X - dTolerance * System.Math.Sin(angle);
point.Y = point5.Y + dTolerance * System.Math.Cos(angle);
point2.X = point5.X + dTolerance * System.Math.Sin(angle);
point2.Y = point5.Y - dTolerance * System.Math.Cos(angle);
}
else
{
if (nCalcType == 1)
{
double num = 0.001;
IProximityOperator proximityOperator = point3 as IProximityOperator;
double num2 = proximityOperator.ReturnDistance(point4);
if (num2 > 1E-06)
{
num2 /= 2.0;
}
else
{
num2 = dTolerance;
}
point.X = point3.X - num2 * System.Math.Sin(angle + num);
point.Y = point3.Y + num2 * System.Math.Cos(angle + num);
point2.X = point3.X + num2 * System.Math.Sin(angle - num);
point2.Y = point3.Y - num2 * System.Math.Cos(angle - num);
}
}
return new Tuple<IPoint, IPoint>(point, point2);
}
public static bool IsOnBoundary(this IPolyline pPolyline, IPolygon iPolygon)
{
if (iPolygon != null && pPolyline != null)
{
bool result = false;
ITopologicalOperator topologicalOperator = iPolygon as ITopologicalOperator;
if (topologicalOperator != null)
{
IPolyline polyline = topologicalOperator.Boundary as IPolyline;
if (polyline != null)
{
IRelationalOperator relationalOperator = polyline as IRelationalOperator;
if (relationalOperator != null)
{
result = relationalOperator.Contains(pPolyline);
}
ComReleaser.ReleaseCOMObject(polyline);
}
}
return result;
}
return false;
}
public static System.Collections.Generic.List<IPolyline> BreakLine(this IPolyline pPolyline, IPolyline pPolylineCutter)
{
IRelationalOperator relationalOperator = pPolyline as IRelationalOperator;
System.Collections.Generic.List<IPoint> selfIntersectPoints = pPolyline.GetSelfIntersectPoints();
if (!relationalOperator.Crosses(pPolylineCutter) && selfIntersectPoints.Count == 0)
{
return null;
}
System.Collections.Generic.List<IPoint> intersectPoints = pPolyline.GetIntersectPoints(pPolylineCutter);
if (intersectPoints.Count > 0)
{
selfIntersectPoints.AddRange(intersectPoints);
}
int count = selfIntersectPoints.Count;
System.Collections.Generic.List<double> list = new System.Collections.Generic.List<double>();
IPoint outPoint = new PointClass();
double item = 0.0;
double num = 0.0;
bool flag = false;
for (int i = 0; i < count; i++)
{
IPoint inPoint = selfIntersectPoints[i];
pPolyline.QueryPointAndDistance(esriSegmentExtension.esriExtendAtFrom, inPoint, false, outPoint, ref item, ref num, ref flag);
list.Add(item);
}
list.Sort();
System.Collections.Generic.List<IPolyline> list2 = new System.Collections.Generic.List<IPolyline>();
ICurve curve = null;
System.Collections.Generic.List<IPolyline> list3;
for (int j = 0; j < count; j++)
{
if (j == 0)
{
pPolyline.GetSubcurve(0.0, list[j], false, out curve);
}
else
{
pPolyline.GetSubcurve(list[j - 1], list[j], false, out curve);
}
(curve as IPolyline).SimplifyNetwork();
list3 = (curve as IPolyline).SplitPolyline(selfIntersectPoints);
if (list3 != null && list3.Count != 0)
{
list2.AddRange(list3);
}
else
{
list2.Add(curve as IPolyline);
}
}
pPolyline.GetSubcurve(list[count - 1], pPolyline.Length, false, out curve);
list3 = (curve as IPolyline).SplitPolyline(selfIntersectPoints);
if (list3 == null || list3.Count == 0)
{
list2.Add(curve as IPolyline);
}
else
{
list2.AddRange(list3);
}
return list2;
}
public static System.Collections.Generic.List<IPolyline> BreakLine(this IPolyline pPolyline, System.Collections.Generic.List<IPolyline> pListPolylineCutter)
{
IRelationalOperator relationalOperator = pPolyline as IRelationalOperator;
System.Collections.Generic.List<IPoint> selfIntersectPoints = pPolyline.GetSelfIntersectPoints();
foreach (IPolyline current in pListPolylineCutter)
{
if (relationalOperator.Crosses(current))
{
System.Collections.Generic.List<IPoint> intersectPoints = pPolyline.GetIntersectPoints(current);
if (intersectPoints.Count > 0)
{
selfIntersectPoints.AddRange(intersectPoints);
}
}
}
int count = selfIntersectPoints.Count;
if (count == 0)
{
return null;
}
System.Collections.Generic.List<double> list = new System.Collections.Generic.List<double>();
IPoint outPoint = new PointClass();
double item = 0.0;
double num = 0.0;
bool flag = false;
for (int i = 0; i < count; i++)
{
IPoint inPoint = selfIntersectPoints[i];
pPolyline.QueryPointAndDistance(esriSegmentExtension.esriExtendAtFrom, inPoint, false, outPoint, ref item, ref num, ref flag);
list.Add(item);
}
list.Sort();
System.Collections.Generic.List<IPolyline> list2 = new System.Collections.Generic.List<IPolyline>();
ICurve curve = null;
System.Collections.Generic.List<IPolyline> list3;
for (int j = 0; j < count; j++)
{
if (j == 0)
{
pPolyline.GetSubcurve(0.0, list[j], false, out curve);
}
else
{
pPolyline.GetSubcurve(list[j - 1], list[j], false, out curve);
}
(curve as IPolyline).SimplifyNetwork();
list3 = (curve as IPolyline).SplitPolyline(selfIntersectPoints);
if (list3 != null && list3.Count != 0)
{
list2.AddRange(list3);
}
else
{
list2.Add(curve as IPolyline);
}
}
pPolyline.GetSubcurve(list[count - 1], pPolyline.Length, false, out curve);
(curve as IPolyline).SimplifyNetwork();
list3 = (curve as IPolyline).SplitPolyline(selfIntersectPoints);
if (list3 != null && list3.Count != 0)
{
list2.AddRange(list3);
}
else
{
list2.Add(curve as IPolyline);
}
return list2;
}
public static System.Collections.Generic.List<IPolyline> BreakSelfIntersectLine(this IPolyline pPolyline)
{
ISegmentCollection segmentCollection = pPolyline as ISegmentCollection;
int segmentCount = segmentCollection.SegmentCount;
System.Collections.Generic.List<IPoint> list = new System.Collections.Generic.List<IPoint>();
for (int i = 0; i < segmentCount; i++)
{
ISegment pSegment = segmentCollection.get_Segment(i);
for (int j = i + 1; j < segmentCount; j++)
{
ISegment pSegment2 = segmentCollection.get_Segment(j);
System.Collections.Generic.List<IPoint> interserctPoint = pSegment.GetInterserctPoint(pSegment2);
if (interserctPoint != null && interserctPoint.Count > 0)
{
list.AddRange(interserctPoint);
}
}
}
System.Collections.Generic.List<IPolyline> list2 = new System.Collections.Generic.List<IPolyline>();
int count = list.Count;
if (count == 0)
{
list2.Add(pPolyline);
return list2;
}
System.Collections.Generic.List<double> list3 = new System.Collections.Generic.List<double>();
IPoint outPoint = new PointClass();
double item = 0.0;
double num = 0.0;
bool flag = false;
for (int k = 0; k < count; k++)
{
IPoint inPoint = list[k];
pPolyline.QueryPointAndDistance(esriSegmentExtension.esriExtendAtFrom, inPoint, false, outPoint, ref item, ref num, ref flag);
list3.Add(item);
}
list3.Sort();
ICurve curve = null;
System.Collections.Generic.List<IPolyline> list4;
for (int l = 0; l < count; l++)
{
if (l == 0)
{
pPolyline.GetSubcurve(0.0, list3[l], false, out curve);
}
else
{
pPolyline.GetSubcurve(list3[l - 1], list3[l], false, out curve);
}
(curve as IPolyline).SimplifyNetwork();
list4 = (curve as IPolyline).SplitPolyline(list);
if (list4 != null && list4.Count != 0)
{
list2.AddRange(list4);
}
else
{
list2.Add(curve as IPolyline);
}
}
pPolyline.GetSubcurve(list3[count - 1], pPolyline.Length, false, out curve);
(curve as IPolyline).SimplifyNetwork();
list4 = (curve as IPolyline).SplitPolyline(list);
if (list4 != null && list4.Count != 0)
{
list2.AddRange(list4);
}
else
{
list2.Add(curve as IPolyline);
}
return list2;
}
public static System.Collections.Generic.List<IPoint> GetSelfIntersectPoints(this IPolyline pPolyline)
{
ISegmentCollection segmentCollection = pPolyline as ISegmentCollection;
int segmentCount = segmentCollection.SegmentCount;
System.Collections.Generic.List<IPoint> list = new System.Collections.Generic.List<IPoint>();
for (int i = 0; i < segmentCount; i++)
{
ISegment pSegment = segmentCollection.get_Segment(i);
for (int j = i + 1; j < segmentCount; j++)
{
ISegment pSegment2 = segmentCollection.get_Segment(j);
System.Collections.Generic.List<IPoint> interserctPoint = pSegment.GetInterserctPoint(pSegment2);
if (interserctPoint != null && interserctPoint.Count > 0)
{
list.AddRange(interserctPoint);
}
}
}
return list;
}
public static System.Collections.Generic.List<IPoint> GetIntersectPoints(this IPolyline pPolyline, IPolyline pPolylineOther)
{
ITopologicalOperator topologicalOperator = pPolyline as ITopologicalOperator;
IRelationalOperator relationalOperator = pPolyline as IRelationalOperator;
System.Collections.Generic.List<IPoint> list = new System.Collections.Generic.List<IPoint>();
if (relationalOperator.Crosses(pPolylineOther))
{
IGeometry geometry = topologicalOperator.Intersect(pPolylineOther, 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);
}
}
}
}
return list;
}
public static System.Collections.Generic.List<IPolyline> SplitPolyline(this IPolyline pPolyline, System.Collections.Generic.List<IPoint> plistPoint)
{
return pPolyline.SplitPolyline(plistPoint, 0.001);
}
public static System.Collections.Generic.List<IPolyline> SplitPolyline(this IPolyline pPolyline, System.Collections.Generic.List<IPoint> plistPoint, double dTolerance)
{
IRelationalOperator relationalOperator = pPolyline as IRelationalOperator;
System.Collections.Generic.List<double> list = new System.Collections.Generic.List<double>();
IPoint point = new PointClass();
double num = 0.0;
double num2 = 0.0;
bool flag = false;
if (dTolerance == 0.0)
{
dTolerance = 0.001;
}
foreach (IPoint current in plistPoint)
{
if (!relationalOperator.Touches(current) && !relationalOperator.Disjoint(current))
{
pPolyline.QueryPointAndDistance(esriSegmentExtension.esriExtendAtFrom, current, false, point, ref num, ref num2, ref flag);
if (num > dTolerance)
{
list.Add(num);
}
}
}
list.Sort();
ComReleaser.ReleaseCOMObject(point);
int count = list.Count;
if (count == 0)
{
return null;
}
System.Collections.Generic.List<IPolyline> list2 = new System.Collections.Generic.List<IPolyline>();
ICurve curve = null;
for (int i = 0; i < count; i++)
{
if (i != 0)
{
pPolyline.GetSubcurve(list[i - 1], list[i], false, out curve);
}
else
{
pPolyline.GetSubcurve(0.0, list[i], false, out curve);
}
(curve as IPolyline).SimplifyNetwork();
list2.Add(curve as IPolyline);
}
pPolyline.GetSubcurve(list[count - 1], pPolyline.Length, false, out curve);
(curve as IPolyline).SimplifyNetwork();
list2.Add(curve as IPolyline);
return list2;
}
public static IPolyline GetFromClosedPolyline(IPolyline pPolyline, int nPointIndex1, int nPointIndex2, bool bAlongPolyline = true)
{
if (pPolyline != null && !pPolyline.IsEmpty && nPointIndex1 != nPointIndex2)
{
IPolyline polyline = new PolylineClass();
polyline.SpatialReference = pPolyline.SpatialReference;
ISegmentCollection segmentCollection = pPolyline as ISegmentCollection;
ISegmentCollection segmentCollection2 = polyline as ISegmentCollection;
int segmentCount = segmentCollection.SegmentCount;
if (bAlongPolyline)
{
if (nPointIndex1 >= nPointIndex2)
{
if (nPointIndex1 > nPointIndex2)
{
for (int i = nPointIndex1; i < segmentCount; i++)
{
ISegmentCollection arg_70_0 = segmentCollection2;
ISegment arg_70_1 = segmentCollection.get_Segment(i);
object value = System.Reflection.Missing.Value;
object value2 = System.Reflection.Missing.Value;
arg_70_0.AddSegment(arg_70_1, ref value, ref value2);
}
for (int j = 0; j < nPointIndex2; j++)
{
ISegmentCollection arg_A0_0 = segmentCollection2;
ISegment arg_A0_1 = segmentCollection.get_Segment(j);
object value3 = System.Reflection.Missing.Value;
object value4 = System.Reflection.Missing.Value;
arg_A0_0.AddSegment(arg_A0_1, ref value3, ref value4);
}
}
}
else
{
for (int k = nPointIndex1; k < nPointIndex2; k++)
{
ISegmentCollection arg_D5_0 = segmentCollection2;
ISegment arg_D5_1 = segmentCollection.get_Segment(k);
object value5 = System.Reflection.Missing.Value;
object value6 = System.Reflection.Missing.Value;
arg_D5_0.AddSegment(arg_D5_1, ref value5, ref value6);
}
}
}
else
{
if (nPointIndex1 >= nPointIndex2)
{
if (nPointIndex1 > nPointIndex2)
{
for (int l = nPointIndex1 - 1; l >= nPointIndex2; l--)
{
ISegment segment = segmentCollection.get_Segment(l);
segment.ReverseOrientation();
ISegmentCollection arg_125_0 = segmentCollection2;
ISegment arg_125_1 = segment;
object value7 = System.Reflection.Missing.Value;
object value8 = System.Reflection.Missing.Value;
arg_125_0.AddSegment(arg_125_1, ref value7, ref value8);
}
}
}
else
{
for (int m = nPointIndex1 - 1; m >= 0; m--)
{
ISegment segment = segmentCollection.get_Segment(m);
segment.ReverseOrientation();
ISegmentCollection arg_164_0 = segmentCollection2;
ISegment arg_164_1 = segment;
object value9 = System.Reflection.Missing.Value;
object value10 = System.Reflection.Missing.Value;
arg_164_0.AddSegment(arg_164_1, ref value9, ref value10);
}
for (int n = segmentCount - 1; n >= nPointIndex2; n--)
{
ISegment segment = segmentCollection.get_Segment(n);
segment.ReverseOrientation();
ISegmentCollection arg_1A1_0 = segmentCollection2;
ISegment arg_1A1_1 = segment;
object value11 = System.Reflection.Missing.Value;
object value12 = System.Reflection.Missing.Value;
arg_1A1_0.AddSegment(arg_1A1_1, ref value11, ref value12);
}
}
}
polyline.SimplifyNetwork();
return polyline;
}
return null;
}
public static IPolyline[] Explode(this IPolyline iPolyline)
{
IPolyline[] array = null;
IGeometryCollection geometryCollection = iPolyline as IGeometryCollection;
int geometryCount = geometryCollection.GeometryCount;
if (geometryCount != 1)
{
if (geometryCount > 1)
{
array = new IPolyline[geometryCount];
for (int i = 0; i < geometryCount; i++)
{
IPolyline polyline = new PolylineClass();
polyline.SpatialReference = iPolyline.SpatialReference;
IPath path = geometryCollection.get_Geometry(i) as IPath;
(polyline as ISegmentCollection).AddSegmentCollection(path as ISegmentCollection);
polyline.SimplifyNetwork();
(polyline as ITopologicalOperator).Simplify();
array[i] = polyline;
}
}
return array;
}
return new IPolyline[]
{
iPolyline
};
}
public static bool IsSelfIntersection(this IPolyline pPolyline)
{
ITopologicalOperator3 topologicalOperator = pPolyline as ITopologicalOperator3;
topologicalOperator.IsKnownSimple_2 = false;
esriNonSimpleReasonEnum esriNonSimpleReasonEnum = esriNonSimpleReasonEnum.esriNonSimpleOK;
return !topologicalOperator.get_IsSimpleEx(out esriNonSimpleReasonEnum) && esriNonSimpleReasonEnum == esriNonSimpleReasonEnum.esriNonSimpleSelfIntersections;
}
public static bool IsSimple(this IPolyline pPolyline)
{
ITopologicalOperator3 topologicalOperator = pPolyline as ITopologicalOperator3;
topologicalOperator.IsKnownSimple_2 = false;
esriNonSimpleReasonEnum esriNonSimpleReasonEnum = esriNonSimpleReasonEnum.esriNonSimpleOK;
return !topologicalOperator.get_IsSimpleEx(out esriNonSimpleReasonEnum) && esriNonSimpleReasonEnum == esriNonSimpleReasonEnum.esriNonSimpleOK;
}
public static esriNonSimpleReasonEnum GetNonSimpleReason(this IPolyline pPolyline)
{
ITopologicalOperator3 topologicalOperator = pPolyline as ITopologicalOperator3;
topologicalOperator.IsKnownSimple_2 = false;
esriNonSimpleReasonEnum result = esriNonSimpleReasonEnum.esriNonSimpleOK;
bool arg_18_0 = topologicalOperator.get_IsSimpleEx(out result);
return result;
}
public static void RepairGeometry(this IPolyline pPolyline)
{
ITopologicalOperator3 topologicalOperator = pPolyline as ITopologicalOperator3;
topologicalOperator.IsKnownSimple_2 = false;
topologicalOperator.Simplify();
}
}
}