Тема: Отрисовка "ручек" в ECS

Приветствую!
Наверное вопрос не совсем сюда...
Каким образом в WorldDrawFunc отрисовать примитив (например треугольную стрелку), направленный строго по оси X. Имея только матрицу преобразования объекта, к которому принадлежит "ручка"?

Re: Отрисовка "ручек" в ECS

Наверное вопрос не совсем сюда...

А куда же? :)

Каким образом в WorldDrawFunc отрисовать примитив (например треугольную стрелку), направленный строго по оси X

По оси X чего? По оси X из WCS или из ECS для которого у тебя есть матрица преобразования?
Если из WCS - то тут все ясно.
Если из ECS и у тебя есть матрица, то воспользуйся ей! Используй метод AcGeMatrix3d::getCoordSystem() для получения вектора оси X (подробнее смотри в Help'е)

Re: Отрисовка "ручек" в ECS

P.S.: Немного Off-topic...
Постарайся четко и ясно расписывать что у тебя есть и что нужно получить. Тогда и другие поймут что тебе нужно и, возможно, сам найдешь решение.

Re: Отрисовка "ручек" в ECS

> Александр Ривилис
У меня есть объект(примитив 2-мерный образ) - портальный кран, который перемещается по подкрановым путям.
Необходимо отрисовать "ручку" (за которую я "берусь" и перемещаю объект вдоль подкрановых путей), (примитив) повернутую так же как и сам объект.
Не могу сообразить каким образом РУКАМИ - своими собственными или функциями библиотеки прописать преобразование объекта с вершинами ([-1,-1,0];[-1,1,0];[2,0,0]) в координатную систему ECS. А потом уже поставить её на место (pThis->gripPoint())
==============================================
Проблема зашла в тупик, уже на грабли всевозможные наступил столько раз, что уже в прору вообще без головы остаться...
P.S. Просто не могу найти доку, где бы была собрана ВСЯ информация по определению (для чайников) матриц преобразования и векторов и работы с оными. Что они есть на самом деле по элементам и с чем и как их едят...

Re: Отрисовка "ручек" в ECS

> Sandrick
Про кран я уже читал! biggrin

Проблема зашла в тупик, уже на грабли всевозможные наступил столько раз, что уже в прору вообще без головы остаться...

Смотри, чтобы краном голову не снесло! :)
А теперь по теме:
1) "ручка" - это grips или это твое изображение? - это к тому, что если менять форму для grips'а на треугольник нужно немного поработать. Смотри пример samples\entity\grip.
2) Тебе фактически нужно выполнить преобразование координат. Если у тебя есть матрица преобразования из ECS в WCS(назовем ее matEcs), то для преобразования координат нужно воспользоваться таким очень простым кодом:

AcGeMatrix3d matEcs; // твоя матрица
AcGeMatrix3d matInv = matEcs.inverse(); // Матрица преобразования из WCS в ECS
AcGePoint3d p1(-1, -1, 0),
            p2(-1,  1, 0),
            p3( 2,  0, 0);
p1.transformBy(matInv);
p2.transformBy(matInv);
p3.transformBy(matInv);
//
// Теперь p1, p2 , p3 содержат преобразованные координаты в ECS
//

Re: Отрисовка "ручек" в ECS

> Александр Ривилис
Ручка - это grip.
Ручка (grip) "рисуется" функцией WorldDrawFunc. форма ручки (grip'a) - треугольник (как в динамических блоках AutoCAD'a для изменения размера...).
Есть: точка, в которой должен формироваться grip (

pThis->gripPoint()

), матрица преобразования из WCS в ECS.
Функция

TransformBy

мне в данном случае не совсем подходит, потому как мне необходимо сформировать grip "по месту" -

pThis->gripPoint

. Таким образом grip не формируется по координатам, относительно оси поворота матрицы преобразования.
Очень хочется понять сам математический процесс на простом примере...
Например:
Создать вершины образа grip'a с центром в заданной точке; повернуть сформированную фигуру в соответствии с матрицей преобразования объекта-"хозяина" grip'a.
Понимаю, может уже совсем замучил идиотскими вопросами. Но уж очень припекло.

Re: Отрисовка "ручек" в ECS

> Sandrick
Вопросы не идиотские, но без того как ты реализовал WorldDrawFunc я не смогу тебе помочь.
Посмотри samples\entity\grip\GripImp.cpp - в ней есть GripCback::WorldDrawfunc
Так что или текст "в студию" или на e-mail (весь проект в архиве). Не обещаю ответить сегодня-завтра - у нас выборы, но постараюсь помочь.

Re: Отрисовка "ручек" в ECS

Все. Решил проблему. Пришлось, конечно "извратными" методами действовать (сначала возвращать базовую точку в WCS, от нее плясать с вершинами, потом все уже готовые вершины - в UCS).
P.S. Выборы... Желаю сделать удачный, взвешенный выбор!
Полагаю, Вы, сударь, обитаете на Украине... как и я.
P.P.S. В очередной раз большое спасибо.
Как говорят у нас в Одессе, ...если бы вместо спасибо каждый раз давали по рублю... :)

Re: Отрисовка "ручек" в ECS

> Sandrick
Ну и отлично!
:) Off-topic - правильно поняли.
А я думаю, что за краны? Наверное еще те, на которых М. Жванецкий работал... :)
P.S.: А правильного выбора не бывает...

Re: Отрисовка "ручек" в ECS

P.S. Для тех, кто понял суть проблемы и также роет носом землю. Все оказалось очень просто.
Для получения искомых координат вершин использовал я простую формулу аффинного преобразования
K - опорная точка...
x` = Kx+ x*cosL - y*sinL
y` = Ky+ x*sinL + y*cosL
структура AcGeMatrix3d для поворота...
....0,0...1,0
0,0|cosL  sinL|
0,1|-sinL cosL|