码迷,mamicode.com
首页 > 其他好文 > 详细

Engine中如何截取线上指定两点间的线段?

时间:2016-02-23 11:17:00      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

//调用 
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; 
} 

Engine中如何截取线上指定两点间的线段?

标签:

原文地址:http://www.cnblogs.com/gisoracle/p/5209133.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!