Список форумов www.integro.ru www.integro.ru
ЦСИ ИНТЕГРО
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Как скопировать объект

 
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков
Предыдущая тема :: Следующая тема  
Автор Сообщение
Hunter



Зарегистрирован: 29.08.2006
Сообщения: 9
Откуда: Belarus

СообщениеДобавлено: Чт 29 Ноя 2007 00:55    Заголовок сообщения: Как скопировать объект Ответить с цитатой

Доброго времени суток!
Есть два слоя с идентичными стилями.
Как скопировать объект из одного слоя в другой и чтобы ID были разными? Rolling Eyes
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Михаил Власов



Зарегистрирован: 14.02.2005
Сообщения: 580
Откуда: ИНТЕГРО

СообщениеДобавлено: Пт 30 Ноя 2007 17:52    Заголовок сообщения: Ответить с цитатой

Меню "Сервис | Массовые операции"
_________________
С уважением, Михаил Власов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Hunter



Зарегистрирован: 29.08.2006
Сообщения: 9
Откуда: Belarus

СообщениеДобавлено: Пт 30 Ноя 2007 20:45    Заголовок сообщения: Ответить с цитатой

Благадарю Вас Михаил, но это я как бы знаю)
Хотелось бы узнать как это можно реализовать в своем модуле.
Просто если делаю я автоматизацию, то хотелось бы чтобы этот процесс не прерывался.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Михаил Власов



Зарегистрирован: 14.02.2005
Сообщения: 580
Откуда: ИНТЕГРО

СообщениеДобавлено: Вт 04 Дек 2007 16:59    Заголовок сообщения: Ответить с цитатой

Например так:
Код:

// Выполняет поиск подходящего стиля
function FindSuitableStyle(aSourceStyle: IIngeoStyle; aTargetLayer: IIngeoLayer): IIngeoStyle;
var
  i: Integer;
begin
  for i := 0 to aTargetLayer.Styles.Count - 1 do begin
    Result := aTargetLayer.Styles[i];
    if AnsiSameText(Result.Name, aSourceStyle.Name) then begin
      Exit;
    end
  end;
  Result := nil;
end;
// Выполняет копирование геометрии
procedure CopyShapes(aSourceObject, aTargetObject: IIngeoMapObject; aTargetLayer: IIngeoLayer);
var
  aSourceShape, aTargetShape: IIngeoShape;
  aTargetStyle: IIngeoStyle;
  i: Integer;
begin
  for i := 0 to aSourceObject.Shapes.Count - 1 do begin
    aSourceShape := aSourceObject.Shapes[i];
    aTargetStyle := FindSuitableStyle(aSourceShape.Style, aTargetLayer);
    if Assigned(aTargetStyle) then begin
      aTargetShape := aTargetObject.Shapes.Insert(-1, aTargetStyle.Id);
      aTargetShape.Contour.AddPartsFrom(aSourceShape.Contour);
    end;
  end;
end;
// Выполняет копирование семантических данных
procedure CopySemData(aSourceObject, aTargetObject: IIngeoMapObject; aTargetLayer: IIngeoLayer);
begin
  тут писать не буду, по аналогии со стилями, но несколько сложнее
end;
// Создает дубликат объекта в другом слое
function CloneObject(aSourceObject: IIngeoMapObject; aTargetLayer: IIngeoLayer): IIngeoMapObject;
begin
  Result := aSourceObject.MapObjects.AddObject(aTargetLayer.Id);
  CopyShapes(aSourceObject, Result, aTargetLayer);
  CopySemData(aSourceObject, Result, aTargetLayer);
end;

Памятка: не забыть в конце вызвать MapObjects.UpdateChanges.

_________________
С уважением, Михаил Власов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
RuslanG



Зарегистрирован: 10.07.2005
Сообщения: 171
Откуда: ИНТЕГРО

СообщениеДобавлено: Вт 29 Апр 2008 23:41    Заголовок сообщения: Ответить с цитатой

http://www.integro.ru/forum/viewtopic.php?p=1334#1334
_________________
С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
burgomistr



Зарегистрирован: 24.03.2008
Сообщения: 10

СообщениеДобавлено: Сб 03 Май 2008 17:58    Заголовок сообщения: Ответить с цитатой

Ну почти все понятно, только я никак не соображу как можно получить ссылку на слой-источник в процедуре
Код:
 procedure CopySemData(aSourceObject, aTargetObject: IIngeoMapObject; aTargetLayer: IIngeoLayer);

если это вообще возможно, то зачем тогда передавать в процедуру ссылку на aTargetLayer ?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Михаил Власов



Зарегистрирован: 14.02.2005
Сообщения: 580
Откуда: ИНТЕГРО

СообщениеДобавлено: Пн 05 Май 2008 07:51    Заголовок сообщения: Ответить с цитатой

Если на руках есть пространственный объект, то слой, к которому он относится, можно получить так:
Код:
aLayer := anIngeoDb.LayerFromID(aMapObject.LayerID);

burgomistr писал(а):
если это вообще возможно, то зачем тогда передавать в процедуру ссылку на aTargetLayer ?

Вы правы - можно не передавать.

_________________
С уважением, Михаил Власов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Oleg_at



Зарегистрирован: 28.09.2007
Сообщения: 10
Откуда: Ижевск

СообщениеДобавлено: Вт 12 Авг 2008 16:54    Заголовок сообщения: Пойдем от обратного. Ответить с цитатой

Как в любой теореме:
Во всех просматриваемых вопросах (может ошибаюсь) выбран пространственный объект, и по нему мы определяем Style, Layer и д.т. Но допустим зная GUID Style и Layer как сделать выбору (набор) всех Shapes Style и Layer? Т.е. от общего к частному:
1. зная GUID Layer, получиь все Shapes которые в него входят;
2. зная GUID Style, получиь все Shapes которыми они отбражаются.
3. задаю GUID Style или Layer и получаю соответствующие им Shape.
P.S. конструкция
MapO := FApp.ActiveDb.MapObjects.GetObject('001D0000040A');
MapO.Shapes.Count;
не проходит. Где 001D0000040A - GUID Layer.
???
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Михаил Власов



Зарегистрирован: 14.02.2005
Сообщения: 580
Откуда: ИНТЕГРО

СообщениеДобавлено: Ср 13 Авг 2008 08:36    Заголовок сообщения: Ответить с цитатой

Для выборки пространственных объектов по стилю или слою предназначены методы QueryByLayers и QueryByStyle у объекта IIngeoMapObjects.
Пример использования см. по адресу http://www.integro.ru/wiki/index.php?title=%D0%98%D0%BD%D0%93%D0%B5%D0%BE:API0001

_________________
С уважением, Михаил Власов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков Часовой пояс: GMT + 5
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять приложения в этом форуме
Вы можете скачивать файлы в этом форуме


© phpBB Group
Русская поддержка phpBB