Страница 1 из 1

доступ к цветам слоя в ArcObjects

Добавлено: 21 сен 2011, 11:30
new_sergei
Как доступиться к цветам слоя из программы?
Например, когда мы счёлкаем мышкой по прямоугольнику в ТОС и получаем окно с выбором цвета для полигонального слоя. Как это программно сделать?

Re: доступ к цветам слоя в ArcObjects

Добавлено: 21 сен 2011, 12:32
Дмитрий Барышников
Цвет, также как тип и толщина линий и т.п., является характеристикой выбранного символа для отображения. Программно это меняется через интерфейс ISymbol и его производные
http://edndoc.esri.com/arcobjects/9.2/C ... Symbol.htm

Re: доступ к цветам слоя в ArcObjects

Добавлено: 21 сен 2011, 14:22
new_sergei
Bishop писал(а):Цвет, также как тип и толщина линий и т.п., является характеристикой выбранного символа для отображения. Программно это меняется через интерфейс ISymbol и его производные
http://edndoc.esri.com/arcobjects/9.2/C ... Symbol.htm

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

Re: доступ к цветам слоя в ArcObjects

Добавлено: 21 сен 2011, 14:47
Дмитрий Барышников
Вам сюда: http://resources.esri.com/help/9.3/arcg ... erview.htm
Еще на форуме обсуждается близкая тема: viewtopic.php?f=16&t=8472

Re: доступ к цветам слоя в ArcObjects

Добавлено: 21 сен 2011, 15:27
new_sergei
Спасибо, вроде, то что надо. Буду разбираться...

Re: доступ к цветам слоя в ArcObjects

Добавлено: 23 сен 2011, 10:03
new_sergei
В общем, всё оказалось достаточно просто. Може, кому-то понадобится:

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

        IColor getColor(ILayer layer)
        {
            IColor color = null;

            IGeoFeatureLayer geoFeatureLayer = layer as IGeoFeatureLayer;
            IFeatureRenderer featureRenderer = geoFeatureLayer.Renderer;
            IFeatureClass featureClass = geoFeatureLayer.FeatureClass;

            IQueryFilter queryFilter = new QueryFilterClass();
            featureRenderer.PrepareFilter(featureClass, queryFilter);
    
            IFeatureCursor featureCursor = featureClass.Search(queryFilter, false);
            IFeature feature = featureCursor.NextFeature();

            ISymbol symbol = featureRenderer.get_SymbolByFeature(feature);

            if (symbol is IFillSymbol)
            {
                IFillSymbol fillSymbol = symbol as IFillSymbol;
                color = fillSymbol.Color;
            }
            if (symbol is IMarkerSymbol)
            {
                IMarkerSymbol markerSymbol = symbol as IMarkerSymbol;
                color = markerSymbol.Color;
            }
            if (symbol is ILineSymbol)
            {
                ILineSymbol lineSymbol = symbol as ILineSymbol;
                color = lineSymbol.Color;
            }

            return color;
        }