//调用 IPolyline newLine = GetSubCurve(polyline, p1, p2); ESRI.ArcGIS.Display.IScreenDisplay screenDisplay = axMapControl1.ActiveView.ScreenDisplay; screenDisplay.StartDrawing(screenDisplay.hDC, System.Convert.ToInt16(ESRI.ArcGIS.Display.esriScreenCache.esriNoScreenCache)); IRgbColor rgbColor = new RgbColorClass(); rgbColor.Red = 255; ESRI.ArcGIS.Display.IColor color = rgbColor; // Implicit Cast ESRI.ArcGIS.Display.ISimpleLineSymbol simpleLineSymbol = new ESRI.ArcGIS.Display.SimpleLineSymbolClass(); simpleLineSymbol.Color = color; ESRI.ArcGIS.Display.ISymbol symbol = (ESRI.ArcGIS.Display.ISymbol)simpleLineSymbol; // Explicit Cast screenDisplay.SetSymbol(symbol); screenDisplay.DrawPolyline(newLine); screenDisplay.FinishDrawing(); private IPolyline GetSubCurve(IPolyline inpolyLine, IPoint pnt1, IPoint pnt2) { double d1 = GetDistAlong(inpolyLine, pnt1); double d2 = GetDistAlong(inpolyLine, pnt2); var c = inpolyLine as ICurve; ICurve outCurve; c.GetSubcurve(d1, d2, false, out outCurve); if (c == null || c.IsEmpty) throw new Exception(fail); var outPolyline = outCurve as IPolyline; if (outPolyline == null) { outPolyline = new PolylineClass() as IPolyline; var sc = outPolyline as ISegmentCollection; sc.AddSegment((ISegment)outCurve); ((IGeometry)sc).SpatialReference = outCurve.SpatialReference; } return outPolyline; } private double GetDistAlong(IPolyline polyLine, IPoint pnt) { var outPnt = new PointClass() as IPoint; double distAlong = double.NaN; double distFrom = double.NaN; bool bRight = false; polyLine.QueryPointAndDistance(esriSegmentExtension.esriNoExtension, pnt, false, outPnt, ref distAlong, ref distFrom, ref bRight); return distAlong; }