подскажите как в ArcGIS Desktop сделать кнопку по нажатии которой происходил бы вызов какойто моей функции которая возврасчает обьект типа IGeometry, и как этот обьект теперь нарисовать.
То есть, есть такой вызов:
IGeometry geom = MyFunc();
И после этого geom нужно отобразить. Как это сделать на C#?
разумеется ни воркспэйса, ни фичеркласса покачто нет.
как отобразить IGeometry?
-
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 21 мар 2009, 13:57
- Репутация: 0
-
- Участник
- Сообщения: 70
- Зарегистрирован: 02 апр 2009, 14:41
- Репутация: 1
Re: как отобразить IGeometry?
Если в двух словах, то для того, чтобы показать какой-то объект на карте, надо сначала создать его (т.е., создать новый IFeature, затем добавить его к конкретный IFeatureClass), а потом обновить карту. Если с ArcObjects более-менее, то особых трудностей вызвать не должно.
-
- Новоприбывший
- Сообщения: 5
- Зарегистрирован: 14 апр 2009, 10:08
- Репутация: 0
Re: как отобразить IGeometry?
типа так:
это конкретно для полигона
рисовать можно на GraphicsContainer окна карты
но сначала нужно создать Элемент IElement - только они добавляются в GraphicsContainer
вот, а далее добавить в контейнер
вот как то так
Код: Выделить всё
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);
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя