Изменение или удаление примитива при копировании по условию

Автор Тема: Изменение или удаление примитива при копировании по условию  (Прочитано 8001 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн VtАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Здравствуйте, появился такой вопрос. У меня есть примитив и мультивыноска. В мультивыноске хранится хэндл данного примитива в xdata. при копировании мне необходимо проверить есть ли среди скопированных примитивов примитив на который ссылается выноска. если есть записать в выноску новый хэндл, если нет удалить выноску из скопированных обьектов. Какой способ для реализации этоого будет лучшим? Спасибо.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Давай поподробнее. Идёт речь об обычной команде _COPY, или копирование через буфер обмена (_COPYCLIP/_PASTECLIP) или копирование твоими средствами?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн VtАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Так, я в этой теме не слишком прошарен я думал о команде ctrl+c ctrl+v а copyclip это что-то другое?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Так, я в этой теме не слишком прошарен я думал о команде ctrl+c ctrl+v а copyclip это что-то другое?
Давай "разшаривайся". :-) Начни с этой темы: http://adn-cis.org/forum/index.php?topic=743.0
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн VtАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Спасибо за ссылку, как я понял существуют два метода
1. использовать
Код - C++ [Выбрать]
  1. virtual void endDeepClone(
  2.     AcDbIdMapping&
  3. );
  4.  
и по AcDbIdMapping найти скопированные объекты по id и откорректировать ссылки в результирующих объектах вручную.
2. Использовать xrecords и AcDbHardPointer, если я правильно понял
-при копировании объекта и выноски со ссылкой на объект произойдет привязывание скопированной выноски к скопированному объекту.
-только выноску копируем то она привяжется к старому объекту
-только объект - ничего не произойдет.
можно ли во втором пункте сделать логику удаления выноски или разрыва связи (может при softpointer это возможно)
Правильно ли я все понял. И какие подводные камни будут?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
можно ли во втором пункте сделать логику удаления выноски или разрыва связи
Без реакторов, чтобы AutoCAD это сделал самостоятельно - нет.
И какие подводные камни будут?
Подводных камней будет масса. В варианте 1 Ctrl-C/Ctrl-V создают промежуточный файл в который помещаются выбранные примитивы и тут нужно отслеживать кучу реакторов.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн VtАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Спасибо, а с помощью endDeepClone или какогото другого реактора можно получить пары id исходного и id вставленного, или как в теме по ссылке описывалось что нужно целую цепочку реакторов прослеживать и следить за трансформациями id?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
или как в теме по ссылке описывалось что нужно целую цепочку реакторов прослеживать и следить за трансформациями id?
Именно так.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение