Как нарисовать Круг?

0 голосов
спросил 30 Апр, 09 от Ulukbek (6,020 баллов) в категории Программные продукты Esri
Подскажите, как вывести на GraphicsContainer объект CircleArc? У меня что то не получается. Curve усть, его Extent рисуется, а сам круг не могу нарисовать!?

вот код:

    Sub AddCurve2GC(ByVal pGC As IGraphicsContainer, ByVal pCurve As ICurve)
        Dim pElem As IElement
        Dim pFSE As IFillShapeElement
        If pCurve Is Nothing Then Exit Sub

        pElem = New CircleElement
        pFSE = pElem

        Dim fsym As ISimpleFillSymbol, sym As ISymbol
        Dim lsym As ILineSymbol, pColor As IRgbColor

        pColor = New RgbColor
        pColor.RGB = RGB(255, 0, 0)
        fsym = New SimpleFillSymbol
        lsym = fsym.Outline : lsym.Width = 1 : lsym.Color = pColor
        pColor.RGB = RGB(200, 220, 120) : pColor.Transparency = 10
        fsym.Color = pColor : fsym.Outline = lsym
        fsym.Style = esriSimpleFillStyle.esriSFSHollow
        pFSE.Symbol = fsym
        'Dim pTOP As ITopologicalOperator
        'pTOP = pCurve
        Dim pCArc As ICircularArc
        Dim pg As IGeometry
        Try   ' Set up structured error handling.
            pg = pCurve '.Envelope
            pCArc = pCurve
            pCurve.SpatialReference = AxMapControl1.SpatialReference
            pElem.Geometry = pCurve.Envelope  ' pCArc ' pCurve
            pGC.AddElement(pElem, 0)
        Catch ex As Exception
            Console.WriteLine(ex.ToString)
        End Try

    End Sub

2 Ответы

0 голосов
ответил 05 Май, 09 от Ulukbek (6,020 баллов)
Я так и не смог работать с ICircularArc, чтоб сохранить в полигональном слое круги. Решил по другому: создавал полигоны круглого вида. Вот код, если кому понадобится:

        Private Function ConstructCirclePolygon(ByVal pCP As IPoint, ByVal dist As Double) As IPolygon
            Const PI = 3.14159265358979
            Dim d As Double
            Dim pCPoint As IConstructPoint, pPC As IPointCollection
            pPC = New Polygon
            pCPoint = New Point
            For d = 0 To PI * 2 Step PI / 40
                pCPoint.ConstructAngleDistance(pCP, d, dist)
                pPC.AddPoint(pCPoint)
            Next
            Return pPC
        End Function
...
            Dim pFnew As IFeature, pol As IPolygon
            pol = ConstructCirclePolygon(pCenterPoint, dRaduis)
            pol.Close()
            pFnew = pFC.CreateFeature
            pFnew.Shape = pol
...

0 голосов
ответил 06 Май, 09 от filippov70 (5,320 баллов)
Земляк, можно и так:

public static IGeometry GeometryCreateCircle(IPointCollection[] PointCollArr)
        {
            try
            {
                object Miss = Type.Missing;
                ICircularArc Circle = new CircularArcClass();
                IConstructCircularArc construtionCircularArc = Circle as IConstructCircularArc;

                IPoint CentrPoint = PointCollArr[0].get_Point(0);
                IPoint OtherPoint = PointCollArr[0].get_Point(1);
                construtionCircularArc.ConstructCircle(CentrPoint, OtherPoint.Y, false);// OtherPoint.Y это радиус Smile
                ISegmentCollection SegColl = new PolygonClass();
                ISegment seg = construtionCircularArc as ISegment;
                SegColl.AddSegment(seg, ref Miss, ref Miss);
                IGeometry g = SegColl as IGeometry;
                return g;
            }
            catch (Exception ex)
            {
                Error.SaveError(ex);
                return null;
            }
        }
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...