Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Петр Кузнецов
Зарегистрирован: 21.07.2008 Сообщения: 9
|
Добавлено: Пн 21 Июл 2008 17:01 Заголовок сообщения: Как правильно создать слой? |
|
|
Добрый день!
Прошу дать старт! Необходимо создать слой в активной карте, как правильно это сделать? Код ошибок не выдает, слой не появляется.
Код: |
var
aVectorMap : IIngeoVectorMap;
aLayers : IIngeoLayers;
aNewLayer : IIngeoLayer;
aActiveMapView: IIngeoMapView;
aMapObjects: IIngeoMapObjects;
begin
aActiveMapView:= FIngeo.ActiveProjectView.ActiveMapView;
if aActiveMapView.Map.MapType = inmtVector then
begin
aVectorMap:= aActiveMapView.Map as IIngeoVectorMap;
aLayers:= aVectorMap.Layers;
aNewLayer:= aLayers.Add;
aNewLayer.Name:= 'TEST';
end;
|
UpdateChanges надо куда-то вставить? |
|
Вернуться к началу |
|
 |
RuslanG

Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
Добавлено: Вт 22 Июл 2008 11:06 Заголовок сообщения: |
|
|
У слоя есть метод "Update", который вносит изменения свойств слоя в базу данных. Добавьте вызов этого метода: Код: | aNewLayer.Name:= 'TEST';
aNewLayer.Update;
end; |
_________________ С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия |
|
Вернуться к началу |
|
 |
Петр Кузнецов
Зарегистрирован: 21.07.2008 Сообщения: 9
|
Добавлено: Ср 23 Июл 2008 12:35 Заголовок сообщения: |
|
|
Спасибо! все получилось!  |
|
Вернуться к началу |
|
 |
Петр Кузнецов
Зарегистрирован: 21.07.2008 Сообщения: 9
|
Добавлено: Ср 23 Июл 2008 13:05 Заголовок сообщения: |
|
|
А есть ли функция для создания копии слоя в пределах одной карты или необходимо копировать все объекты и семантику отдельно?
И где взять библиотеки API ИнГЕО о которых говорится здесь
http://integro.ru/projects/gis/addon_d3_2.htm ? |
|
Вернуться к началу |
|
 |
RuslanG

Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
|
Вернуться к началу |
|
 |
Петр Кузнецов
Зарегистрирован: 21.07.2008 Сообщения: 9
|
Добавлено: Ср 23 Июл 2008 16:05 Заголовок сообщения: |
|
|
Благодарю! |
|
Вернуться к началу |
|
 |
Петр Кузнецов
Зарегистрирован: 21.07.2008 Сообщения: 9
|
Добавлено: Пт 01 Авг 2008 16:00 Заголовок сообщения: |
|
|
В продолжение темы:
Как вы могли понять, мне необходимо сделать копию слоя
слой нашел, создал, копирую стили так:
Код: |
for j:= 0 to aLayer.Styles.Count - 1 do
begin
aStl:= aNewLayer.Styles.Add;
aStl.Name:= aLayer.Styles[j].Name;
aStl.Update;
end;
aNewLayer.Update;
|
В строке
Код: | aStl:= aNewLayer.Styles.Add; |
эксепшн, указатель aNewLayer.Styles рвен nil |
|
Вернуться к началу |
|
 |
RuslanG

Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
|
Вернуться к началу |
|
 |
Петр Кузнецов
Зарегистрирован: 21.07.2008 Сообщения: 9
|
Добавлено: Вт 05 Авг 2008 17:03 Заголовок сообщения: |
|
|
проблема решилась вызовом метода Update у вновь созданного слоя, далее копируем методы стиля ... и затем еще раз вызываем Update
Код: |
aNewLayer:= aLayers.Add;
aNewLayer.Name:= 'Новый слой';
aNewLayer.Update;
// Скопировать стили
for j:= 0 to aLayer.Styles.Count - 1 do
begin
aStl:= aNewLayer.Styles.Add;
aStl.Name:= aLayer.Styles[j].Name;
aStl.Flags:= aLayer.Styles[j].Flags;
aStl.Update;
// В Данном стиле скопировать методы отображения
for k:= 0 to aLayer.Styles[j].Painters.Count - 1 do
begin
...
end;
// снова обновить стиль (для актуализации методов)
aStl.Update;
end;
// последний вызов метода Update для создаваемого слоя
aNewLayer.Update;
|
Не идеально, но работает... |
|
Вернуться к началу |
|
 |
kirigal
Зарегистрирован: 01.12.2009 Сообщения: 5
|
Добавлено: Пн 15 Фев 2010 19:25 Заголовок сообщения: |
|
|
(допустим aLayers.Count = 2)
aNewLayer:= aLayers.Add;
aNewLayer.Name:= 'Новый слой';
aNewLayer.Update;
Почему после этого aLayers.Count равно 2ум?
Также aLayers.Count не меняеться после удалния слоя "ручками" из проводника базы данных.
При добавлении слоя ручками в проводнике базы данных aLayers.Count честно равно числу слоев |
|
Вернуться к началу |
|
 |
|