Аннотации: что-то лыжи не едут

0 голосов
спросил 01 Апр, 09 от -3A- (5,220 баллов) в категории Программные продукты Esri
Есть слой аннтоаций, в нем соответственно подслои: каждый со своими настройками шрифта. Вроде все как положено.

Есть одно но: я никак не могу добраться до настроек программно :(
То есть мне нужно для каждого подслоя получить Symbol.

Следующий код не работает, увы.
Я понимаю, что делаю что-то не так, но вот что именно? Этого никак понять не могу


IFeatureClassPtr fc(GetFeatureClass());
if (fc)
{
    IAnnotationClassExtensionPtr ac(fc->Extension);
    if (ac)
    {
        long index = ac->AnnotationClassIDFieldIndex;
        if (index != -1)
        {
            // индекс нужного поля я получил, а вот куда его теперь присобачить?
            // как мне теперь из этого индекса получить SymbolID, чтобы передать его в ac->GetSymbol()?
        }
    }
}


5 Ответы

0 голосов
ответил 01 Апр, 09 от Alexander1 (32,520 баллов)
Схема примерно такая:

- получаешь: IFeatureClass featureClass
- QI:             IAnnoClass annoClass = featureClass.Extension;
- получаешь: ISymbolCollection symbolCollection = annoClass.SymbolCollection;

- перебираешь все символы в коллекции (через ISymbolIdentifier symbolIdentifier):

                    symbolCollection.Reset;
                    ISymbolIdentifier symbolIdentifier = symbolCollection.Next;
                    while(symbolIdentifier != null)
                    {
                        ISymbol symbol = symbolIdentifier.Symbol;
                        // Делаешь с символом то, что надо...
                      // ..............................
                        symbolIdentifier = symbolCollection.Next;
                     }
0 голосов
ответил 02 Апр, 09 от -3A- (5,220 баллов)
не, это не то, что мне надо
перебор коллекции мне ничего не даст

мне нужно получить символ именно для заданного конкретного слоя

как это сделать, я не знаю :(

извиняюсь, что нечетко сформулировал изначальную мысль
0 голосов
ответил 02 Апр, 09 от -3A- (5,220 баллов)
перефразирую вопрос

у меня есть слой аннотаций, у него есть интерфейсы ILayer, IFeatureLayer, IAnnotationLayer и т.д.

как я могу, имея указатели на эти интерфейсы, получить IRow?
чтобы потом напрямую получать значения нужных мне полей слоя?
0 голосов
ответил 02 Апр, 09 от Alexander1 (32,520 баллов)
Не существует такого: "символ именно для заданного конкретного слоя".
Есть коллекция символов для всего AnnoClass, а не для сабклассов. Для каждого AnnotationFeature есть символ, которым этот объект отображается. Этот символ может быть в коллекции символов для данного AnnoClass, а может храниться в записи объекта.
Чтобы найти, каким символом отображается конкретный объект, надо использовать IAnnotationFeature Interface.
0 голосов
ответил 03 Апр, 09 от -3A- (5,220 баллов)
мда уж
это я уже и сам понял

жаль, что аннотации организованы абсолютно отличным от всех остальных элементов способом :(

спасибо за разъяснения :)
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...