Тема: Движение "ручек" по заданному вектору

Господа!
В математике не силен. Подскажите как реализовать алгоритм движения подобъекта "внутри" моего объекта под углом.
Само по себе движение я сделал, никак не могу сообразить, как сделать движение подобъекта в определенном направлении после поворота всего объекта.
Заранее благодарен!

Re: Движение "ручек" по заданному вектору

> Sandrick
Не очень понятны несколько моментов:
1) Что такое у тебя "подобъект"? Это отдельный примитив, который как-то связан с твоим и ты знаешь его AcDbObjectId?
2) Что такое "определенное направление" по отношению к твоему объекту? Как оно задается? Должен ли при этом поворачиваться и сам "подобъект" или только должно выполняться его смещение?
В общем случае ты должен воспользоваться для "подобъекта":

AcGeMatrix3d xform; // Матрица преобразования
// .....
// Здесь сформировать матрицу преобразования xform
// .....
pSubEnt->transformBy(xform); // Выполяем трансформацию

Предварительно матрица xform должна быть сформирована с использованием или при помощи или xform.setToRotation(...) для вращения, или xform.setToTranslation(...) для перемещения на заданный вектор, или нужна какая-то суперпозиция этих (а возможно и других методов) в зависимости от того, что ты хочешь получить.

Re: Движение "ручек" по заданному вектору

Сорри за неточность.
Под "подобъектом" подразумевается отдельная часть  геометрии примитива...
Например: кран с подкрановыми путями. Мне необходимо "двигать кран по подкрановым путям" (путь - две простые линии) вне зависимости от положения и поворота всего объекта.
Каким образом все это реализовать в MoveGripPointsAt?

Re: Движение "ручек" по заданному вектору

> Sandrick
Сейчас нет времени детально разбираться, но видится это приблизительно так:
1) Путь направление "подкрановых путей" определяется вектором AcGeVector3d path;
2) Проецируешь вектор offset (который передается в MoveGripPointsAt) на направление "подкрановых путей".
AcGeVector new_offset = offset.orthoProject(path);
3) Формируешь матрицу пребразования:
AcGeMatrix3d xform;
xform.setToTranslation(new_offset);
4) Выполняешь преобразование:
this->transformBy(xform);
Приблизительно так, хотя возможны нюансы. Надеюсь разберешься. Если нет - продолжим через дня три.

Re: Движение "ручек" по заданному вектору

Александр, еще раз огромное спасибо, респект!
Правда я пока еще не понял полностью "подоплеки" процесса, но после нескольких проб/ошибок все работает.

Re: Движение "ручек" по заданному вектору

:) Ну и отлично!