как отобразить IGeometry?

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
Hexed
Новоприбывший
Сообщения: 2
Зарегистрирован: 21 мар 2009, 13:57
Репутация: 0

как отобразить IGeometry?

Сообщение Hexed »

подскажите как в ArcGIS Desktop сделать кнопку по нажатии которой происходил бы вызов какойто моей функции которая возврасчает обьект типа IGeometry, и как этот обьект теперь нарисовать.
То есть, есть такой вызов:
IGeometry geom = MyFunc();
И после этого geom нужно отобразить. Как это сделать на C#?
разумеется ни воркспэйса, ни фичеркласса покачто нет.
new_sergei
Участник
Сообщения: 70
Зарегистрирован: 02 апр 2009, 14:41
Репутация: 1

Re: как отобразить IGeometry?

Сообщение new_sergei »

Если в двух словах, то для того, чтобы показать какой-то объект на карте, надо сначала создать его (т.е., создать новый IFeature, затем добавить его к конкретный IFeatureClass), а потом обновить карту. Если с ArcObjects более-менее, то особых трудностей вызвать не должно.
fvlad
Новоприбывший
Сообщения: 5
Зарегистрирован: 14 апр 2009, 10:08
Репутация: 0

Re: как отобразить IGeometry?

Сообщение fvlad »

типа так:

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

        public static IGeometry GeometryCreatePolygon(IPointCollection[] PointCollArr)
        {
            try
            {
				IPolygon PartPoly;
				IGeometryCollection GeomColl = null;
				GeomColl = new PolygonClass(); //PolyGonHost as IGeometryCollection;

                for (int i = 0; i < PointCollArr.Length; i++)
                {
					IPointCollection Ring = new PolygonClass();
					Ring.AddPointCollection(PointCollArr[i]);
					PartPoly = Ring as IPolygon;
					PartPoly.Close();
					ISegmentCollection pSegColl = PartPoly as ISegmentCollection;
					ISegmentCollection RingColl = new RingClass();
					RingColl.AddSegmentCollection(pSegColl);
					 
					object objectBefore = Type.Missing;
					object objectAfter = Type.Missing;
					GeomColl.AddGeometry(RingColl as IGeometry, ref objectBefore, ref objectAfter);
                }

				IPolygon p = GeomColl as IPolygon;
				p.Close();							  
				IGeometry g = p as IGeometry;
                return g;
            }
            catch (Exception ex)
            {
                Error.SaveError(ex);
                return null;
            }
        }
это конкретно для полигона
рисовать можно на GraphicsContainer окна карты
но сначала нужно создать Элемент IElement - только они добавляются в GraphicsContainer

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

        public static IElement ElementCreatePolyGon(IGeometry g)
        {
            try
            {
                IRgbColor rgbColorCls = new RgbColorClass();
                rgbColorCls.Red = 0;
                rgbColorCls.Green = 0;
                rgbColorCls.Blue = 255;
                //IRgbColor rgbColorClsFill = new RgbColorClass();
                //rgbColorClsFill.Red = 170;
                //rgbColorClsFill.Green = 54;
                //rgbColorClsFill.Blue = 150;
                //rgbColorClsFill.NullColor = false;
                //byte tr = 255;
                //rgbColorClsFill.Transparency = tr;
                
                IFillShapeElement FillShp = new PolygonElementClass();
                ISimpleFillSymbol FillSym = new SimpleFillSymbolClass();
                //ILineFillSymbol FillSym = new LineFillSymbolClass();
                FillSym.Style = esriSimpleFillStyle.esriSFSHollow;
                ILineSymbol lSym = new SimpleLineSymbolClass();
                lSym.Width = 1.4;
                lSym.Color = rgbColorCls as IColor;
                FillSym.Color = rgbColorCls;
                FillSym.Outline = lSym;
                //ICartographicLineSymbol lSym = new CartographicLineSymbolClass();
                //lSym.Cap = esriLineCapStyle.esriLCSButt;
                //lSym.Join = esriLineJoinStyle.esriLJSMitre;
                //lSym.Color = rgbColorCls as IColor;
                //lSym.Width = 1.4;

                //FillSym.Outline = lSym;
                //FillSym.Angle = 45;
                //FillSym.Separation = 10;
                //FillSym.Color = rgbColorCls as IColor;
                //FillSym.LineSymbol = lSym;
                FillShp.Symbol = FillSym;
                
                IElement El = FillShp as IElement;
                El.Geometry = g;

                return El;
            }
            catch (Exception ex)
            {
                Error.SaveError(ex);
                return null;
            }
        }
вот, а далее добавить в контейнер

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

axMapControl1.ActiveView.GraphicsContainer.DeleteAllElements();
                axMapControl1.ActiveView.GraphicsContainer.AddElement(_Element,0);
вот как то так
Ответить

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя