RUS  ENG 

раскраска контурных объектов без использования тематич. слоев

Страницы: 1
RSS
раскраска контурных объектов без использования тематич. слоев
 
Здравствуйте.
Есть несколько вопросов.
1) пробую раскрашивать контурные объекты без использования тематических слоев. Создаю контур, соотношу его с текущим-активным,переношу его в память, меняю цвет заливки для контура и добавляю мой контур в созданный слой. Если выделенный объект состоит из больше, чем из одного контура - ошибка: "ZuluLib exception caught with code 770". Вопрос: можно ли сделать проще данную раскраску(полностью программно, кроме исходного слоя для раскраски). Если нет, то как обработать объекты состоящие из нескольких контуров.
2)пока не получается вывести текст через addtext, точнее он выводится, но его не видно. вывел и нашел его по id.
Спасибо.
 
Программка пишется на Delphi.

первый вопрос сделал через polycontour
Осталась вторая часть первого вопроса. можно ли проще. И второй вопрос, о выводе текста в середине закрашенного контура (а если он не один?).

Спасибо.
 
2)пока не получается вывести текст через addtext, точнее он выводится, но его не видно. вывел и нашел его по id.
AddText не выводит текст, а добавляет текстовый объект в слой. Добавляет в X,Y на местности и размером и цветом, заданным в ElemStyle. Если этот X,Y не попадает в окно карты, то текст все равно добавляется за экраном. Он также добавляется и когда вообще окна карты нет, а объект ILayer есть.

Пришлите куски текста, которые Вы считаете, что должны работать и не работают. На словах понять трудно. [email protected]
 
Проще контуры раскрашивать именно тематической раскраской. Чем этот способ не подходит?

По поводу вывода текста не совсем понял, а как эта проблема решается, когда контур один?
 
письмо написал.
 
l:ILayer;
el:IElement;
begin
l:=CoLayer.Create;
l:=MapCtrl1.Map.Layers.Active;
l.InMemory:=true;
//l.Elements.count;//возвращает -1
el:=l.Elements.FirstItem;//а так работает, но как заканчивать цикл
...
Почему не возвращается количество элементов, я что-то не так делаю?
 
В справке по объектной модели про это написано:

Если коллеция имеет доступ к элементам по ключу, то Count возвращает -1. Если коллеция имеет доступ к элементам по индексу, то Count возвращает число элементов, входящих в коллекцию.


Если не получить первый элемент, то в возвращенном объекте Element свойство Key будет равно -1. Обычно используется совместно со свойством NextItem.
Если следующего в коллекции по порядку элемента нет, то в возвращенном объекте Element свойство Key будет равно -1.
 
спасибо, за быстрый ответ.
А по-поводу посланного письма?
 
Письма пока не получал.
 
письмо повторил на [email protected]
 
Еще раз повторите пожалуйста. Случайно стерли.
 
Повторил ещё раз. Может удобнее будет сразу в форуме? примерно на экран.
 
спасибо за ответ.
вопрос по хелпу (Parameter property (Theme)):
Пример:
...
'Присваиваем красный цвет заливки контуру с ключом 123
theme.Parameter(123, eThemePatColor) = 255
...
'Теперь все объекты активного слоя будут отображаться как
'отображались, а объект с ID =123 будет заливаться красным цветом.
End Sub

Я понял, что здесь идет работа именно с ключами, а не с id. Это так? То есть в хелпе опечатка? Или можно работать по ID?
 
Здесь ключ и ID - одно и то же
 
может я что-то не так делаю, но изменить цвет, толщину линий контура с конркетным ID, я могу, а залить(закрасить) этот контур не могу..
часть кода:
var th: ITheme;
i:integer;
begin
th := CoTheme.Create;
Th.Create('путь','раскраска', MapCtrl1.Map.Layers.Active.Name); //'Создаем объект
i:=mapctrl1.CurrentID;
th.parameter[i, eThemeBorderColor] := 100;
th.parameter[i, eThemePatColor] := 100;
th.Save;
MapCtrl1.Map.Layers.Active.ThemeName := 'путь';
MapCtrl1.Redraw;
End;
 
Все красится. Может у тебя объект не площадной или стиль заливки пустой?
Страницы: 1