一、获取图元的外部曲线(多边形节点集)
/// <summary>
/// 获取图元的外部曲线(多边形节点集)
/// </summary>
/// <param name="ftr">面或矩形</param>
/// <returns></returns>
internal static FeatureGeometry GetGeometryCurve(FeatureGeometry ftr)
{
if (ftr is MultiPolygon)
{
var mulPolygon = ftr as MultiPolygon;
if (mulPolygon.PolygonCount > 0)
{
var pts = mulPolygon[0].Exterior[0].SamplePoints();
return new MultiCurve(ftr.CoordSys, CurveSegmentType.Linear, pts);
}
}
else if (ftr is MapInfo.Geometry.Rectangle)
{
var rc = ftr as MapInfo.Geometry.Rectangle;
var pts = new List<DPoint>();
pts.AddRange(rc.Data.Corners());
pts.Add(pts[0]);
return new MultiCurve(ftr.CoordSys, CurveSegmentType.Linear, pts.ToArray());
}
else if (ftr is MultiCurve)
{
return (MultiCurve)ftr;
}
return null;
}
二、取图元的拐点
/// <summary>
/// 取图元的拐点
/// </summary>
/// <param name="ftr">图元</param>
/// <returns></returns>
internal static List<DPoint> GetBorderNode(FeatureGeometry ftr)
{
var list = new List<DPoint>();
if (ftr is MultiPolygon)
{
var polygon = ((MultiPolygon)ftr)[0];
var pts = polygon.Exterior[0].SamplePoints();
list.AddRange(pts);
}
else if (ftr is MultiCurve)
{
var multiCurve = (MultiCurve)ftr;
foreach (Curve cv in multiCurve)
{
list.AddRange(cv.SamplePoints());
}
}
return list;
}