Очередная проблема

0 голосов
спросил 10 Апр, 09 от -3A- (5,220 баллов) в категории Программные продукты Esri
Всем доброго времени суток!

Есть слой, содержащий графические элементы. Для простоты пусть будут точки.
На слой настроено отображение надписей. Заданы классы, стили и т.д.

Вот и возникает вопрос: как для каждого отдельного графического элемента (Feature в терминах ArcMap) получить соответствующую ему надпись (то есть текст и стиль этого текста).

Про IAnnotateLayerPropertiesCollection и IAnnotateLayerProperties я знаю, просьба к ним не отсылать. Мне нужны настройки для конкретного элемента, а не целые коллекции.

Или опять я что-то не понимаю и с отдельными элементами никак не поработать?

6 Ответы

0 голосов
ответил 10 Апр, 09 от Alexander1 (32,520 баллов)
-3A- , смотри в другом топике:

"Чтобы найти, каким символом отображается конкретный объект, надо использовать IAnnotationFeature Interface"

https://forum.esri-cis.ru/index.php?qa=31440

я не стал расписывать всю цепочку, думал догадаешься. Примерно так:

IAnnotationFeature -> IAnnotationFeature.Annotation Property -> IElement Interface -> ITextElement Interface -> ITextElement.Symbol Property -> ITextSymbol Interface.

И из ITextSymbol получаешь то, что тебе надо.
0 голосов
ответил 13 Апр, 09 от -3A- (5,220 баллов)
если б все было так просто, я бы здесь вопросов не задавал
эту цепочку я разобрал, само собой :)

проблема возникает раньше: как мне получить этот самый AnnotationFeature?

дело в том, что этот интерфейс работает только для аннотаций, для геообъектов возвращается NULL

то есть, следующий код не работает:

// здесь имеем валидный объект (к примеру, точку)
//
IFeaturePtr feature(cursor->NextFeature());

// пытаемся получить соответствующую аннотацию
// и обламываемся
//
IAnnotationFeaturePtr af(feature);
if (af)
{
  // сюда мы никогда не попадаем :(
}


ps в данном топике я говорю не про слои аннотаций: с ними я уже разобрался
здесь речь идет именно о надписях (тех, что настраиваются на вкладке "Надписи" в окне "Свойства слоя") для геообъектов
0 голосов
ответил 13 Апр, 09 от Alexander1 (32,520 баллов)

если б все было так просто, я бы здесь вопросов не задавалэту цепочку я разобрал, само собой :)

    
Молодца! Похоже, проблемы начинаются гораздо раньше - на этапе определений image

"Прежде, чем о чём-то спорить, надо определить понятия."
Б.Г. Соколовский.

Итак, в ArcGIS существуют 2 типа annotation (оставим в сторoне Dynamic labels и PageLayout graphics):

1) geodatabase annotation

"...Geodatabase annotation elements are stored in special types of feature classes inside the geodatabase..."

2) and map document annotation

"...Map annotation consists of text or graphics stored in the map document. With this type of annotation, pieces of text or graphics are stored as elements in a map's annotation group..."

Внимание, вопрос - о каком типе annotation идёт речь в данном топике?


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

речь идет о НАДПИСЯХ для геообъектов
о тех, которые включаются галкой "Надписать объекты этого слоя" на вкладке "Свойства слоя" для геослоев
и там же настраиваются

вроде в исходном посте я сразу об этом написал
0 голосов
ответил 14 Апр, 09 от Grigoriy (127,020 баллов)
Или опять я что-то не понимаю и с отдельными элементами никак не поработать?

Надписи - свойство всего слоя, а не отдельного объекта.

http://resources.esri.com/help/9.3/arcgisdesktop/ArcObjects/esricarto/ILabelEngineLayerProperties.htm

http://resources.esri.com/help/9.3/arcgisdesktop/ArcObjects/esricarto/ILabelEngineLayerProperties2.htm
0 голосов
ответил 14 Апр, 09 от -3A- (5,220 баллов)
то есть надпись для отдельного объекта мне никак не получить?

что удивляет в данной ситуации: текст надписи для заданного объекта я таки получить смогу (правда, процесс напоминает натягивание штанов через голову, столько неуклюжих телодвижений придется проделать), а вот шрифт для этого текста - фиг

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