Сообщество программистов Autodesk в СНГ

ADN Club => ObjectARX => Тема начата: Vt от 05-10-2018, 08:06:06

Название: Изменение или удаление примитива при копировании по условию
Отправлено: Vt от 05-10-2018, 08:06:06
Здравствуйте, появился такой вопрос. У меня есть примитив и мультивыноска. В мультивыноске хранится хэндл данного примитива в xdata. при копировании мне необходимо проверить есть ли среди скопированных примитивов примитив на который ссылается выноска. если есть записать в выноску новый хэндл, если нет удалить выноску из скопированных обьектов. Какой способ для реализации этоого будет лучшим? Спасибо.
Название: Re: Изменение или удаление примитива при копировании по условию
Отправлено: Александр Ривилис от 05-10-2018, 12:33:33
Давай поподробнее. Идёт речь об обычной команде _COPY, или копирование через буфер обмена (_COPYCLIP/_PASTECLIP) или копирование твоими средствами?
Название: Re: Изменение или удаление примитива при копировании по условию
Отправлено: Vt от 05-10-2018, 13:05:01
Так, я в этой теме не слишком прошарен я думал о команде ctrl+c ctrl+v а copyclip это что-то другое?
Название: Re: Изменение или удаление примитива при копировании по условию
Отправлено: Александр Ривилис от 05-10-2018, 13:09:44
Так, я в этой теме не слишком прошарен я думал о команде ctrl+c ctrl+v а copyclip это что-то другое?
Давай "разшаривайся". :-) Начни с этой темы: http://adn-cis.org/forum/index.php?topic=743.0
Название: Re: Изменение или удаление примитива при копировании по условию
Отправлено: Vt от 05-10-2018, 15:03:17
Спасибо за ссылку, как я понял существуют два метода
1. использовать
Код - C++ [Выбрать]
  1. virtual void endDeepClone(
  2.     AcDbIdMapping&
  3. );
  4.  
и по AcDbIdMapping найти скопированные объекты по id и откорректировать ссылки в результирующих объектах вручную.
2. Использовать xrecords и AcDbHardPointer, если я правильно понял
-при копировании объекта и выноски со ссылкой на объект произойдет привязывание скопированной выноски к скопированному объекту.
-только выноску копируем то она привяжется к старому объекту
-только объект - ничего не произойдет.
можно ли во втором пункте сделать логику удаления выноски или разрыва связи (может при softpointer это возможно)
Правильно ли я все понял. И какие подводные камни будут?
Название: Re: Изменение или удаление примитива при копировании по условию
Отправлено: Александр Ривилис от 05-10-2018, 18:51:23
можно ли во втором пункте сделать логику удаления выноски или разрыва связи
Без реакторов, чтобы AutoCAD это сделал самостоятельно - нет.
И какие подводные камни будут?
Подводных камней будет масса. В варианте 1 Ctrl-C/Ctrl-V создают промежуточный файл в который помещаются выбранные примитивы и тут нужно отслеживать кучу реакторов.
Название: Re: Изменение или удаление примитива при копировании по условию
Отправлено: Vt от 05-10-2018, 20:17:45
Спасибо, а с помощью endDeepClone или какогото другого реактора можно получить пары id исходного и id вставленного, или как в теме по ссылке описывалось что нужно целую цепочку реакторов прослеживать и следить за трансформациями id?
Название: Re: Изменение или удаление примитива при копировании по условию
Отправлено: Александр Ривилис от 05-10-2018, 20:58:53
или как в теме по ссылке описывалось что нужно целую цепочку реакторов прослеживать и следить за трансформациями id?
Именно так.