Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
vikk
Зарегистрирован: 13.09.2006 Сообщения: 88
|
Добавлено: Ср Окт 23, 2013 1:23 pm Заголовок сообщения: поворот элемента |
|
|
Необходимо повернуть элемент на заданный угол вокруг его центра, точка position. Создаем крестик, как пример, потом вращаем. Поворот получается, но элемент отскакивает от точки position неизвестно куда.
Как вариант, пересчитывать координаты перед mdlLine_create(). Это понятно
Код: |
void GetDscr(MSElementDescr **dscC_porta)
{
RotMatrix rotMatrix;
Transform transform;
MSElementUnion el;
Dpoint3d position;
DPoint3d points[2];
....
....
mdlRMatrix_fromAngle(&rotMatrix,angle);
mdlTMatrix_fromRMatrix(&transform,&rotMatrix);
//
mdlCell_create (&el, NULL, NULL, FALSE);
mdlElmdscr_new (dscC_porta, NULL, &el);
//
memset(points,0,sizeof(DPoint3d)*2);
points[0].x = position.x-dist*0.5;
points[0].y = position.y;
points[1].x = position.x+dist*0.5;
points[1].y = position.y;
mdlLine_create (&el,NULL,points);
mdlElmdscr_appendElement(*dscC_porta,&el);
points[0].x = position.x;
points[0].y = position.y-dist*0.5;
points[1].x = position.x;
points[1].y = position.y+dist*0.5;
mdlLine_create (&el,NULL,points);
mdlElmdscr_appendElement(*dscC_porta,&el);
//
mdlCell_setRange (*dscC_porta,MASTERFILE);
mdlTMatrix_setTranslation (&transform, &position);
mdlElmdscr_transform(*dscC_porta, &transform);
}
|
|
|
Вернуться к началу |
|
|
Leonid давно здесь сидим
Зарегистрирован: 28.01.2006 Сообщения: 598 Откуда: С.-Петербург
|
Добавлено: Чт Окт 24, 2013 2:59 pm Заголовок сообщения: |
|
|
а как насчет создавать крестик в точке 0,0,0, поворачивать его, а потом делать ему трансляцию на нужный position.
я делаю обычно так... |
|
Вернуться к началу |
|
|
vikk
Зарегистрирован: 13.09.2006 Сообщения: 88
|
Добавлено: Пн Окт 28, 2013 10:51 am Заголовок сообщения: |
|
|
Объект, что создаю, состоит из набора простых линий.
Мне проще аффинными координаты пересчитать.
С поворотами не разобрался, даже относительно 000.
Интересно посмотреть фрагмент кода, или названия используемых функций. |
|
Вернуться к началу |
|
|
vikk
Зарегистрирован: 13.09.2006 Сообщения: 88
|
Добавлено: Пн Окт 28, 2013 11:23 am Заголовок сообщения: |
|
|
Леонид, все заработало. Я так фактически и делал, как вы написали.
Надо было только чуть подправить
Код: |
memset(points,0,sizeof(DPoint3d)*2);
points[0].x = -dist*0.5; //position.x-dist*0.5;
points[0].y = 0.0; //position.y;
points[1].x = dist*0.5; //position.x+dist*0.5;
points[1].y = 0.0; //position.y;
mdlLine_create (&el,NULL,points);
|
И с трансляцией стало понятно
Код: |
mdlTMatrix_setTranslation (&transform, &position);
|
|
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
Powered by phpBB © 2001, 2005 phpBB Group
|