Ограничение перемещения грипсы

Автор Тема: Ограничение перемещения грипсы  (Прочитано 8784 раз)

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

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

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Добрый вечер.
Назрел такой вопрос:
можно ли как то ограничить перемещение грипсы в методе subMoveGripPointsAt, например только
по одной из осей, или в пределах заданной области? Буду признателен за совет.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ограничение перемещения грипсы
« Ответ #1 : 24-07-2016, 20:10:57 »
можно ли как то ограничить перемещение грипсы в методе subMoveGripPointsAt, например только
по одной из осей, или в пределах заданной области?
Конечно можно. А в чем с этим у тебя проблема?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Re: Ограничение перемещения грипсы
« Ответ #2 : 24-07-2016, 20:14:35 »
Да просто только решил реализовать эту идею и думаю с чего начать, где искать информацию.

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Re: Ограничение перемещения грипсы
« Ответ #3 : 24-07-2016, 20:19:21 »
Например, мне нужно чтобы одна из ручек двигалась только по оси Y и не выходила за определенные значения. А еще один тип ручек двигался только справа или слева от вертикальной линии и не переходил на другую сторону.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ограничение перемещения грипсы
« Ответ #4 : 24-07-2016, 20:27:20 »
Я не вижу в этом никаких проблем и реализовывал такое. Например, движение грипсы только по оси продольного лотка. Можно и ограничения поставить (например, грипса не выходит за начало лотка и длина лотка не превышает 6000 мм)
На этом видео без ограничения длины, но вдоль оси:



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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ограничение перемещения грипсы
« Ответ #5 : 24-07-2016, 21:06:57 »
А вот вдоль оси с граничными условиями:


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

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Re: Ограничение перемещения грипсы
« Ответ #6 : 24-07-2016, 21:08:17 »
Я так понимаю, что в методе subMoveGripPointsAt нужно анализировать полученную точку
Код - C++ [Выбрать]
  1. AcGePoint3d newPos = m_Pos + offset;
и если новые координаты не устраивают условию, то возвращать false.
Тогда курсор будет двигаться дальше, а ручка нет. Тогда все просто.
Я почему то думал, что нужно будет ещё и ограничивать движение самого курсора, с этим думаю
было бы сложнее.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ограничение перемещения грипсы
« Ответ #7 : 24-07-2016, 21:17:34 »
Я почему то думал, что нужно будет ещё и ограничивать движение самого курсора, с этим думаю было бы сложнее.
Движение курсора ограничивать не нужно.
Я так понимаю, что в методе subMoveGripPointsAt нужно анализировать полученную точку
Код - C++ [Выбрать]

    AcGePoint3d newPos = m_Pos + offset;

и если новые координаты не устраивают условию, то возвращать false.
Нет. Если координаты устраивают, то модифицируешь свой объект, а если не устраивают, то не модифицируешь. Если речь идёт о движении вдоль оси, то тебе нужно спроецировать на ось новую точку и если она в нужных пределах, то модифицируешь объект, если нет - то не модифицируешь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Gennadiy 24-07-2016, 22:03:12

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Re: Ограничение перемещения грипсы
« Ответ #8 : 24-07-2016, 21:28:02 »
Я хотел сказать, что если новые координаты устраивают

Код - C++ [Выбрать]
  1. if (условие)
  2. gpPos = newPos // и будет модифицироваться с учетом нового положения gpPos
  3. else return Acad::eOk; // все останется на прежнем месте
  4.  

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ограничение перемещения грипсы
« Ответ #9 : 24-07-2016, 21:55:24 »
Всё правильно, кроме того, что если координаты не устраивают, то возможно всё-таки понадобится изменение - к границе диапазона.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение