RUS  ENG 

Подключение пользовательских меток

Страницы: 1
RSS
Подключение пользовательских меток
 
В текущей версии zulu есть возможность подключать к примитивам и к каждому типу объектов слоя по несколько типов меток (раньше было по одному). Изменились ли в связи с этим свойства LabelsID слоя и метод GetLabelsID объекта Layer при использовании в событии OnDrawUserLabels?
 
Вопрос возник, потому что в ранее разработанном приложении, скомпилированном с новой библиотекой под BDS, перестали правильно отображаться пользовательские метки для разных типов - отображаются только для одного типа.
Я взяла ваш пример UsingLabels на VisualBasic и с ним поэкспериментировала, добавив 2 типовых символа
Пришла к выводу:
1. Если к слою подключить метки, а потом отключить, то LabelsID не будет -1. И присвоить ему -1 (т.е. отключить метки) не удается
2. В событии DrawUserLabels функция
Set els = MapCtrl1.Map.Layers.Item(LayerIndex).DrawLabelsInit(DrawHandle, -1)
возвращает в коллекции ключи элементов, которые могут быть как примитивами, так и типовыми символами
3. Set els = MapCtrl1.Map.Layers.Item(LayerIndex).DrawLabelsInit(DrawHandle, oid)
(где oid - номер типа типового символа) возвращает непустую коллекцию ключей только для одного типового символа, хотя надписи подключены к нескольким, и они видны на карте
4. DrawElemIDLabel вообще непронятно как работает - что-то отрисовывает, а что-то нет
5. Аналогичный пример, перенесенный на BDS, работает по другому, и тоже неправильно

Если надо, я могу прислать на mail измененную карту и исходники.
 
Еще одно открытие - приложение под BDS правильно работает с картой, созданной в старой версии Zulu (когда можно было подключать по одному типу меток на объект)! Это если не проверять LabelsID :)
И не рисует метки в карте, отредактированной в новом Zulu :(
 
Изучу вопрос, отвечу подробно. Понятно, что при расширении возможностей, какие-то из старых могли отвалится или потерять смысл.
 
Посмотрел на работу с метками через объектную модель. Ошибки, касающиеся подключения-отключения меток подправил. Можно скачать обновление. Потестируйте. Может еще что-то вылезет.
Что касается пользовательских меток, когда несколько вариантов меток подключено к одному типу, тут существующими методами трудно обойтись. В существующих методах вывод адресован меткам указанного типа, а нужно бы адресовать вывод для конкретного варианта. Вряд ли имеет смысл для нескольких вариантов меток выводить на экран одно и тоже. Так что пока для UserLabel будет выводиться для какого-то одного варианта у каждого типа.
А вообще нужно нам сделать новое событие:
1. Чтобы UserLabel задавался каждому LabelLayer персонально (как уже сделано подключение-отключение Active.LabelLayers.ItemById(i).Enable, взамен LabelsID)
2. Чтобы событие приходило для каждого из помеченых как USerLabel=true свое. Тогда и обработка будет своя для каждого варианта меток.
 
Проверьте, пожалуйста, выложено ли на сайт обновление (HTTP). Я скачала текщую версию, но файлы идентичны скачанным ранее, и ведут себя соответственно неправильно.
 
Да вроде файлы от вчерашнего числа 17 вечера.
Zulu50Update.exe 6196977 17.07.06 17:23
А с кем он идентичен?
 
Щелкаю по
"Загрузить обновление Zulu 5.2 (HTTP, ~4.1Мб) "
Получаю файл размером 6184971, идентичный скачанному 14.07.2006
 
Может у вас в кэше где-то? Сейчас скачал с сайта - все нормально. Попробуйте с ftp.
 
Спасибо, вроде сейчас работает правильно. Я использую только один тип меток для каждого типового символа, так что пока функций хватает. А вот привязка меток неудобна - когда я создаю файл меток, потом сдвигаю символ, а метка остается на старом месте. Было бы удобнее, чтоб координаты меток сохранялись в файле относительно координат соотв. символов.
 
Как вариант при создании наверно можно сделать. Но изначально метки создавались как элемент оформления, когда объекты уже устаканились и их массовое перемещение закончено. А подвинуть несколько объектов и их метки казалось, все-таки несложно.
Страницы: 1