Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Leonid давно здесь сидим
Зарегистрирован: 28.01.2006 Сообщения: 598 Откуда: С.-Петербург
|
Добавлено: Чт Июл 05, 2007 10:39 am Заголовок сообщения: RotMatrix для компаса AccuDraw |
|
|
Задачка сложная, потому быстрого ответа не жду
Нужно получить RotMatrix для компаса AccuDraw в реальном времени (в функции динамики)
Пробовал добраться до структуры accudrawData, но там почему-то сплошной НУЛЬ
Код: |
CExprResult result; /* Detailed result */
CExprValue value; /* Similar to result, but easier to interpret. */
int res;
MdlDesc* mdlDescP ;
AccudrawData acd;
mdlDescP = mdlSystem_findMdlDesc("accudraw");
res = mdlCExpression_restrictedGetValueForApp (
&value,
&result,
"accudrawData",
VISIBILITY_DIALOG_BOX,
mdlDescP,
TRUE);
if (res != SUCCESS)
{
printf("mdlCExpression_restrictedGetValueForApp returns %i\n",res);
}
else
{
printf("%i %i\n", value.type, result.value.pv);
memcpy(&acd, result.value.pv, sizeof(AccudrawData));
printf(" acd.angle = %f\n", acd.angle);
printf(" acd.distance = %f\n", acd.distance);
printf(" flags %i\n", acd.flags);
printf(" acd.origin.x = %f\n", acd.origin.x);
printf(" acd.origin.y = %f\n", acd.origin.y);
printf(" acd.origin.z = %f\n", acd.origin.z);
printf(" acd.delta.x = %f\n", acd.delta.x);
printf(" acd.delta.y = %f\n", acd.delta.y);
printf(" acd.delta.z = %f\n", acd.delta.z);
}
|
Может у кого есть идеи?
Буду весьма признателен. |
|
Вернуться к началу |
|
|
laggi
Зарегистрирован: 07.11.2006 Сообщения: 28 Откуда: WashDC
|
Добавлено: Сб Июл 07, 2007 4:39 pm Заголовок сообщения: |
|
|
Можно эту матрицу ориентации AD самому построить - у тебя есть точка привязки и текущие точки (положение мыша)...
Это если считать не получается |
|
Вернуться к началу |
|
|
Leonid давно здесь сидим
Зарегистрирован: 28.01.2006 Сообщения: 598 Откуда: С.-Петербург
|
Добавлено: Сб Июл 07, 2007 4:48 pm Заголовок сообщения: |
|
|
Я это все собственно из-за чего спрашиваю...
Обычная команда, запускаемая через mdlState_startPrimitive...
там в динамике хотелось бы, чтобы элемент реагировал на изменение ориентации компаса по горячим клавишам, как это происходит при вставке селла
Юзер жмет на клавишу, компас вертится, и элемент за ним,
а мыша тут тово... не при делах кажись |
|
Вернуться к началу |
|
|
laggi
Зарегистрирован: 07.11.2006 Сообщения: 28 Откуда: WashDC
|
Добавлено: Сб Июл 07, 2007 10:15 pm Заголовок сообщения: |
|
|
disclaimer: я терпеть не могу AD... один геморрой с ним...
Leonid писал(а): | Я это все собственно из-за чего спрашиваю...
Обычная команда, запускаемая через mdlState_startPrimitive...
там в динамике хотелось бы, чтобы элемент реагировал на изменение ориентации компаса по горячим клавишам, как это происходит при вставке селла
Юзер жмет на клавишу, компас вертится, и элемент за ним,
а мыша тут тово... не при делах кажись |
Ок.
А почему бы не отлавливать клаву (события точнее) и самому ориентировать елемент (cell) так как тебе надо?
Я делаю обычно так - у меня элемент вешается на мышь, юзер шлепает его куда хочет (ну там еще ориентация и коннекторы - ну да не суть), после чего юзер его может вращать как хочет вокруг активного коннектора или передвигать по заданному пути (если таковой имеется). Всё это контролируется с отдельного диалога.
Шлепается елемент согласно начальному построению, ориентированный по оси Х. А уж потом - крути как хочешь, ориентируй как хочешь...
А ориентацию AD я в этом случае задаю сам так, как мне надо, ручками. Исключительно в целях совместимости
я понимаю - это лузерство , но в определённый момент времени мне надоело копаться в потрохах микростанции и я начал такие штуки сам писать, отдельно. IMHO удобнее получается, больше контроля.
PS Старую (я бы сказал - древнюю) версию этого можно в Bentley PlantSpace посмотреть, там для некоторых компонент он пользуется до сих пор IMHO. |
|
Вернуться к началу |
|
|
Leonid давно здесь сидим
Зарегистрирован: 28.01.2006 Сообщения: 598 Откуда: С.-Петербург
|
Добавлено: Вс Июл 08, 2007 1:06 pm Заголовок сообщения: |
|
|
А мне AccuDraw нравится. Даже можно сказать - просто тащусь от него (с точки зрения пользователя), особенно это ощущается после работы в Автокаде или каком-нибудь долбаном Смартпланте. Что называется - почувствуйте разницу...
Цитата: |
Я делаю обычно так - у меня элемент вешается на мышь, юзер шлепает его куда хочет (ну там еще ориентация и коннекторы - ну да не суть), после чего юзер его может вращать как хочет вокруг активного коннектора или передвигать по заданному пути (если таковой имеется). Всё это контролируется с отдельного диалога.
Шлепается елемент согласно начальному построению, ориентированный по оси Х. А уж потом - крути как хочешь, ориентируй как хочешь...
|
Все эти вещи конечно сделать можно, это не проблема... если ответа на этот вопрос не будет, то этим путем и пойду...
Но трэба ведь такие вещи делать красиво!
Пользователь же привык ставить селлы таким образом, опять же действий меньше, кода... |
|
Вернуться к началу |
|
|
laggi
Зарегистрирован: 07.11.2006 Сообщения: 28 Откуда: WashDC
|
Добавлено: Вс Июл 08, 2007 8:48 pm Заголовок сообщения: |
|
|
Ок. Если нравится то конечно...
У меня такое ощущение что mdlRMatrix_fromView должна возвращать матрицу уже с наложенными ограничениями AD.
Если я конечно правильно понимаю логику взаимодейсвия AD и MS.
Попробуй - или я могу в понедельник попробовать. |
|
Вернуться к началу |
|
|
laggi
Зарегистрирован: 07.11.2006 Сообщения: 28 Откуда: WashDC
|
Добавлено: Пн Июл 09, 2007 3:02 am Заголовок сообщения: |
|
|
проверил.
RotMatrix matr;
mdlRMatrix_fromView( &matr, 1, TRUE);
при выключенном AD на iso-view даёт iso матрицу. При включенном AD даёт матрицу текущей ориентации AD.
Все остальные локи были выключены. |
|
Вернуться к началу |
|
|
Leonid давно здесь сидим
Зарегистрирован: 28.01.2006 Сообщения: 598 Откуда: С.-Петербург
|
Добавлено: Пн Июл 09, 2007 10:05 am Заголовок сообщения: |
|
|
Ок! Работат!
Я вообще-то и брал матрицу вида, только все дело то и оказалось - в том что надо один аргумент поменять с FALSE на TRUE
Семен Семеныч...
laggi - тебе респект! |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
Powered by phpBB © 2001, 2005 phpBB Group
|