Сформировать полигон из дуги

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
novice
Гуру
Сообщения: 527
Зарегистрирован: 21 окт 2012, 00:17
Репутация: 15
Ваше звание: developer

Сформировать полигон из дуги

Сообщение novice »

Есть объект типа CircularArc

Код: Выделить всё

IConstructCircularArc constructCircularArcKWEmulator = new CircularArc() as IConstructCircularArc;
ICircularArc circularArcKWEmulator = constructCircularArcKWEmulator as ICircularArc;
constructCircularArcKWEmulator.ConstructEndPointsAngle(farMap, nearMap, true, Math.Abs(s_Info.Azimuth - s_Info.OpeningAngle) * Math.PI / 180.0);
Как из этого объекта получить массив из, например, 200 точек, чтобы впоследствии по ним построить полигон?
Последний раз редактировалось novice 18 мар 2013, 17:52, всего редактировалось 1 раз.
novice
Гуру
Сообщения: 527
Зарегистрирован: 21 окт 2012, 00:17
Репутация: 15
Ваше звание: developer

Re: Сформировать полигон из дуги

Сообщение novice »

Если у кого-то есть пример с Densify, CircularArc и ISegment на с# скиньте его пожалуйста
novice
Гуру
Сообщения: 527
Зарегистрирован: 21 окт 2012, 00:17
Репутация: 15
Ваше звание: developer

Re: Сформировать полигон из дуги

Сообщение novice »

Может кому понадобится. Если точность в 200 км не принципиальна, то можно применить следующий подход.
Нарисовать сегмент, его разбить на точки и из них сформировать одну из сторон полигона. Код хреновый, но работает быстро.
работает на порядки быстрее, чем построение всяких ортодромий

Код: Выделить всё

 IConstructCircularArc constructCircularArcKWEmulator1 = new CircularArc() as IConstructCircularArc;
                    ICircularArc circularArcKWEmulator1 = constructCircularArcKWEmulator1 as ICircularArc;
                    constructCircularArcKWEmulator1.ConstructEndPointsAngle(farMap1, nearMap1, true, Math.Abs(s_Info.Azimuth - s_Info.OpeningAngle) * Math.PI / 180.0);

                    ISegment oneLineOfPolygon = (ISegment)circularArcKWEmulator1 as ISegment;
                    ILine[] listSegments = new ILine[10];
                    int myTest = 10;

                    IGeometryBridge whatIsItXZ = new GeometryEnvironment() as IGeometryBridge;
                    whatIsItXZ.Densify(oneLineOfPolygon, 0, ref myTest, ref listSegments);

                    IEnumerator iterator = listSegments.GetEnumerator();
                    while (iterator.MoveNext())
                    {
                        ILine myTestObject = (ILine)iterator.Current;
                        arrayX.Add(myTestObject.FromPoint.X);
                        arrayY.Add(myTestObject.FromPoint.Y);
                    }
Ответить

Вернуться в «ArcGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: Semrush [Bot] и 1 гость