Список форумов Конференция САПР Bentley MicroStation Конференция САПР Bentley MicroStation
www.ustation.ru
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

поворот элемента

 
Начать новую тему   Ответить на тему    Список форумов Конференция САПР Bentley MicroStation -> Профессиональное
Предыдущая тема :: Следующая тема  
Автор Сообщение
vikk



Зарегистрирован: 13.09.2006
Сообщения: 87

СообщениеДобавлено: Ср Окт 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.
я делаю обычно так...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
vikk



Зарегистрирован: 13.09.2006
Сообщения: 87

СообщениеДобавлено: Пн Окт 28, 2013 10:51 am    Заголовок сообщения: Ответить с цитатой

Объект, что создаю, состоит из набора простых линий.
Мне проще аффинными координаты пересчитать.
С поворотами не разобрался, даже относительно 000.
Интересно посмотреть фрагмент кода, или названия используемых функций.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
vikk



Зарегистрирован: 13.09.2006
Сообщения: 87

СообщениеДобавлено: Пн Окт 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);
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Конференция САПР Bentley MicroStation -> Профессиональное Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group