ArcGis Engine, как выделить некоторые функции/фигуры?

В отдельном приложении c#/wpf, использующем ArcGis Engine, я загрузил несколько фигур, выбрал некоторые особенности.

Теперь я хочу выделить одну из выбранных функций. Я могу найти объект/функция в IFeatureSelection/Layer, у меня есть IGeometry из IFeature.Shape.

Есть ли простой способ пометить известную особенность/форму, скажем, красным цветом или что-то в этом роде?

У меня есть функция, использующая что-то вроде этого:

AxMapControl _mapControl;
IFeatureSelection features = _mapControl.Map.Layer[0] as IFeatureSelection;
ICursor cursor;
features.SelectionSet.Search(null, true, out cursor);
IFeature feature;
while ((feature = ((IFeatureCursor)cursor).NextFeature()) != null)
{
  IGeometry geometry = feature.Shape;
}

Я искал образцы, но не смог найти то, что мне нужно.


person Sam    schedule 22.03.2011    source источник
comment
Вы также можете попробовать: gis.stackexchange.com   -  person mlsteeves    schedule 22.03.2011


Ответы (1)


static public void FlashFeature(IFeature feature)
        {
            if (feature == null)
                return;
            IApplication app = ApplicationRef;
            IMxDocument doc = (IMxDocument)(app.Document);

            IFeatureIdentifyObj feature_identify_obj = new FeatureIdentifyObjectClass();
            feature_identify_obj.Feature = feature;
            ((IIdentifyObj)feature_identify_obj).Flash(doc.ActiveView.ScreenDisplay);
        }

Где ApplicationRef:

static public IApplication ApplicationRef
        {
            get
            {
                Type obj_type = Type.GetTypeFromCLSID(typeof(AppRefClass).GUID);

                IApplication obj = null;
                try
                {
                    obj = (IApplication)Activator.CreateInstance(obj_type);
                }
                catch {}

                return obj;
            }
        }

Или вы можете сделать это, создав графический элемент IElement в IGraphicsContainer, например:

        void ShowFeature(IFeature feature)
        {
            element.Geometry = geometry.Project(mapSpatialReference, feature.Shape);

            graphicsContainer.AddElement(element, 0);

            activeView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);

            featureHighlighted = true;
        }

        void HideFeature()
        {
            if (!featureHighlighted)
                return;

            graphicsContainer.DeleteElement(element);

            activeView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);

            featureHighlighted = false;
        }
person conqueror    schedule 28.03.2011
comment
Первое решение не работает, я получаю исключение COM при вызове Activator.CreateInstance для ApplicationRef: 80040154 Класс не зарегистрирован (HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)). - person Sam; 29.03.2011