AcEdJig::drag - видимость базового объекта при перемещении

Автор Тема: AcEdJig::drag - видимость базового объекта при перемещении  (Прочитано 4226 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • Сообщений: 45
  • Карма: 0
Здравствуйте
Создал класс для перемещения и поворота объекта с использованием AcEdJig::drag    (AutoCAD2015-2016)
Класс отрабатывает корректно, но при перемещении виден и базовый объект и тот который перемещается.

Как сделать, чтобы при перемещении объекта - базовый объект не отображался и был виден только перемещаемый объект?

Сделал как указано ниже, не помогает. Базовый объект все равно отображается.

Код - C++ [Выбрать]
  1. AcEdDragStyle  dragStyleNew;
  2.  
  3. dragStyleNew.setStyleTypeForDragged(AcEdDragStyle::kNone);  //стиль отображения перемещаемого объекта (можно закоментировать, это значение по умолчанию)
  4. dragStyleNew.setStyleTypeForOriginal(AcEdDragStyle::kHide);   //стиль отображения базового объекта
  5.  
  6. AcEdJig::DragStatus stat = drag(dragStyleNew);  //перемещение объекта
  7.  

Если установить стиль перемещаемого объекта AcEdDragStyle::kHide, перемещаемый объект не отображается
Этот же стиль для базового объекта не работает.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Установить базовому объекту setVisibility в false. Пишу по памяти и проверить нет возможности.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 45
  • Карма: 0
Попробовал добавить  pEntity->setVisibility(AcDb::Visibility::kInvisible), как показано ниже
Не помогло

Код - C++ [Выбрать]
  1. AcEdDragStyle  dragStyleNew;
  2.  
  3. dragStyleNew.setStyleTypeForDragged(AcEdDragStyle::kNone);  //стиль отображения перемещаемого объекта (можно закоментировать, это значение по умолчанию)
  4. dragStyleNew.setStyleTypeForOriginal(AcEdDragStyle::kHide);   //стиль отображения базового объекта
  5.  
  6. pEntity->setVisibility(AcDb::Visibility::kInvisible);
  7.  
  8. AcEdJig::DragStatus stat = drag(dragStyleNew);  //перемещение объекта
  9.  

Базовый объект остается видимым, перемещаемый не отображается. А нужно наоборот - чтобы не отображался базовый.

После перемещения базовый тоже не отображается. Для отображения объекта, в конце функции добавил pEntity->setVisibility(AcDb::Visibility::kVisible);

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Все игры с AcEdDragStyle я считаю совершенно лишними.
1. Создаёшь клон базового объекта:
Код - C++ [Выбрать]
  1. AcDbEntity *pCloneEnt = (AcDbEntity *) pEntity->clone();
2. После этого самому базовому объекту pEntity->setVisibility(AcDb::Visibility::kInvisible).
3. Таскаешь в AcEdJig клон, а не базовый объект.
P.S.: Конечно неплохо бы увидеть весь код, чтобы понять что у тебя не так.

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Александр Ривилис 01-12-2016, 18:12:44

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

  • ADN OPEN
  • Сообщений: 45
  • Карма: 0
Все оказалось проще, чем я думал
Никаких клонов создавать ненужно.

В функции перемещения оставил только drag без параметров

Код - C++ [Выбрать]
  1. AcEdJig::DragStatus stat = drag();

Самое главное - в начале функции ::sampler() добавил перерисовку объекта, в этом случае видно как объект перемещается, базового объекта не остается.

Код - C++ [Выбрать]
  1. pEntity->draw();

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

  • ADN OPEN
  • Сообщений: 45
  • Карма: 0
Уточнение по прошлому ответу

На разных машинах код, указанный выше, отрабатывал по разному, на одних работал на других нет.
Поэтому код изменил следующим образом
1) Поскольку базовый объект скрыть не получается, указываю, что при перемещении
необходимо скрывать клон объекта, а базовый отображать (у меня стоит подсвечивать)

Код - C++ [Выбрать]
  1. AcEdJig::DragStatus stat = drag(AcEdDragStyle(AcEdDragStyle::kNone, AcEdDragStyle::kHide));

2) в функции sampler() получаем новое положение объекта
3) чтобы было видно, как объект перемещается, в функции update(), обновляю положение базового элемента
Например для блока
pBlockEntity->setPosition(PointBlock);

Теперь работает корректно.