以三角形为例
// azimuth:方位角
// circRadius:半径
// x, y:圆心
public void DrawTriangle(double azimuth, double circRadius, double x, double y)
{
double Direction = (450 - azimuth) % 360;
double every = 1;
// 三个点
IPoint startPoint = new PointClass();
startPoint.X = x;
startPoint.Y = y;
IPoint leftPoint = new PointClass();
leftPoint.X = x + circRadius * Math.Cos((Direction - 18 * every) * Math.PI / 180);
leftPoint.Y = y + circRadius * Math.Sin((Direction - 18 * every) * Math.PI / 180);
IPoint rightPoint = new PointClass();
rightPoint.X = x + circRadius * Math.Cos((Direction + 18 * every) * Math.PI / 180);
rightPoint.Y = y + circRadius * Math.Sin((Direction + 9 * every) * Math.PI / 180);
// 三条边
ILine pLine = new LineClass();
ILine pLine1 = new LineClass();
ILine pLine2 = new LineClass();
pLine.PutCoords(startPoint, leftPoint);
pLine1.PutCoords(leftPoint, rightPoint);
pLine2.PutCoords(rightPoint, startPoint);
// 通过ISegmentCollection构建Ring对象
ISegmentCollection pSegCollection = new RingClass();
object o = Type.Missing;
ISegment pSegment = pLine as ISegment;
ISegment pSegment1 = pLine1 as ISegment;
ISegment pSegment2 = pLine2 as ISegment;
pSegCollection.AddSegment(pSegment, ref o, ref o);
pSegCollection.AddSegment(pSegment1, ref o, ref o);
pSegCollection.AddSegment(pSegment2, ref o, ref o);
IRing pRing = pSegCollection as IRing;
pRing.Close(); // QI到IRing接口封闭Ring对象,使其有效
IGeometryCollection pGeometryColl = new PolygonClass();
pGeometryColl.AddGeometry(pRing, ref o, ref o);
IGraphicsLayer pLayer = (GISMapApplication.Instance.Scene as IBasicMap).BasicGraphicsLayer;
IGraphicsContainer3D pGC = pLayer as IGraphicsContainer3D;
IElement pElement = new PolygonElement();
pElement.Geometry = pGeometryColl as IGeometry;
pGC.AddElement(pElement);
}
调用
DrawTriangle(60, 30, 100, 100);