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

ADN Club => ObjectARX => Тема начата: Gennadiy от 24-07-2016, 20:09:36

Название: Ограничение перемещения грипсы
Отправлено: Gennadiy от 24-07-2016, 20:09:36
Добрый вечер.
Назрел такой вопрос:
можно ли как то ограничить перемещение грипсы в методе subMoveGripPointsAt, например только
по одной из осей, или в пределах заданной области? Буду признателен за совет.
Название: Re: Ограничение перемещения грипсы
Отправлено: Александр Ривилис от 24-07-2016, 20:10:57
можно ли как то ограничить перемещение грипсы в методе subMoveGripPointsAt, например только
по одной из осей, или в пределах заданной области?
Конечно можно. А в чем с этим у тебя проблема?
Название: Re: Ограничение перемещения грипсы
Отправлено: Gennadiy от 24-07-2016, 20:14:35
Да просто только решил реализовать эту идею и думаю с чего начать, где искать информацию.
Название: Re: Ограничение перемещения грипсы
Отправлено: Gennadiy от 24-07-2016, 20:19:21
Например, мне нужно чтобы одна из ручек двигалась только по оси Y и не выходила за определенные значения. А еще один тип ручек двигался только справа или слева от вертикальной линии и не переходил на другую сторону.
Название: Re: Ограничение перемещения грипсы
Отправлено: Александр Ривилис от 24-07-2016, 20:27:20
Я не вижу в этом никаких проблем и реализовывал такое. Например, движение грипсы только по оси продольного лотка. Можно и ограничения поставить (например, грипса не выходит за начало лотка и длина лотка не превышает 6000 мм)
На этом видео без ограничения длины, но вдоль оси:



В принципе можно вдоль любой кривой или внутри некоторой ограниченной области....
Название: Re: Ограничение перемещения грипсы
Отправлено: Александр Ривилис от 24-07-2016, 21:06:57
А вот вдоль оси с граничными условиями:


Название: Re: Ограничение перемещения грипсы
Отправлено: Gennadiy от 24-07-2016, 21:08:17
Я так понимаю, что в методе subMoveGripPointsAt нужно анализировать полученную точку
Код - C++ [Выбрать]
  1. AcGePoint3d newPos = m_Pos + offset;
и если новые координаты не устраивают условию, то возвращать false.
Тогда курсор будет двигаться дальше, а ручка нет. Тогда все просто.
Я почему то думал, что нужно будет ещё и ограничивать движение самого курсора, с этим думаю
было бы сложнее.
Название: Re: Ограничение перемещения грипсы
Отправлено: Александр Ривилис от 24-07-2016, 21:17:34
Я почему то думал, что нужно будет ещё и ограничивать движение самого курсора, с этим думаю было бы сложнее.
Движение курсора ограничивать не нужно.
Я так понимаю, что в методе subMoveGripPointsAt нужно анализировать полученную точку
Код - C++ [Выбрать]

    AcGePoint3d newPos = m_Pos + offset;

и если новые координаты не устраивают условию, то возвращать false.
Нет. Если координаты устраивают, то модифицируешь свой объект, а если не устраивают, то не модифицируешь. Если речь идёт о движении вдоль оси, то тебе нужно спроецировать на ось новую точку и если она в нужных пределах, то модифицируешь объект, если нет - то не модифицируешь.
Название: Re: Ограничение перемещения грипсы
Отправлено: Gennadiy от 24-07-2016, 21:28:02
Я хотел сказать, что если новые координаты устраивают

Код - C++ [Выбрать]
  1. if (условие)
  2. gpPos = newPos // и будет модифицироваться с учетом нового положения gpPos
  3. else return Acad::eOk; // все останется на прежнем месте
  4.  
Название: Re: Ограничение перемещения грипсы
Отправлено: Александр Ривилис от 24-07-2016, 21:55:24
Всё правильно, кроме того, что если координаты не устраивают, то возможно всё-таки понадобится изменение - к границе диапазона.