C++ RedrawViews(), Проблема |
Home· Статьи · Вакансии · Чертежи · 3D Галерея · 2D Галерея · Форум · Форум Realtime | Реклама |  Конкурсы | RAR Award | Правила |
Здравствуйте, гость ( Вход | Регистрация )
C++ RedrawViews(), Проблема |
19/01/2013, 00:28
Сообщение
#1
|
|
Избранный :) Группа: Участник Сообщений: 5 052 Регистрация: 20/01/2004 Из: Химки м/о Пользователь №: 4 253 |
Пишу процедурный объект, отрисовываю его в ViewExp, т.е он по сути не геометрия а хелпер, в зависимости от параметров введенных в ролаут, рисуется разный значок.
Важный момент то, что я не использую парам блок, все UI сделано самостоятельно... Проблема возникает вот где: после смены какого нибудь параметра в UI мне нужно перерисовать значок во вью порте... в примерах я часто вижу использование функции RedrawViews(), но в моем случае результата я не вижу никакого... что я делаю не так? и как вообще эта функция должна работать, ибо не первый раз натыкаюсь, что результата ее действия не наблюдаю... из хелпа (This method may be called to cause the viewports to be redrawn. ), если я эту функция меняю например на ForceCompleteRedraw то результат виден... Или возможно есть, какой-то иной способ, спровоцировать перерисовку именно этого объекта, а не всех? Сообщение отредактировал Pancir - 19/01/2013, 00:29 |
|
|
19/01/2013, 10:20
Сообщение
#2
|
|
Учитель Группа: Участник Сообщений: 322 Регистрация: 18/06/2002 Из: Москва Пользователь №: 72 |
Проблема может быть связана с неправильным интервалом валидности объекта. Если макс считает, что объект валиден, то и перестраивать его нет смысла.
|
|
|
19/01/2013, 12:30
Сообщение
#3
|
|
Избранный :) Группа: Участник Сообщений: 5 052 Регистрация: 20/01/2004 Из: Химки м/о Пользователь №: 4 253 |
Такс тогда снова вопрос возникает, порыл хелп,правда пока бегло на предмет Valid, и пока не понял как мне решить такую проблему ((( Можно попросить, подсказать путь куда рыть?
|
|
|
19/01/2013, 15:05
Сообщение
#4
|
|
Учитель Группа: Участник Сообщений: 322 Регистрация: 18/06/2002 Из: Москва Пользователь №: 72 |
Процедурный объект отрисовывается во вьюпорте путем вызова функции Display. Это виртуальная функция, описанная в классе BaseObject.
В MAX SDK написано (http://docs.autodesk.com/3DSMAX/15/ENU/3ds...2301217941d26fb Цитата For this method to be called the object's validity interval must be invalid at the specified time t. If the interval is valid, the system may not call this method since it thinks the display is already valid. Таким образом, после изменения объекта необходимо сбросить его интервал валидности.В простейшем случае это делается через функцию ObjectValidity (http://docs.autodesk.com/3DSMAX/15/ENU/3ds...54d0db63324f095). Это виртуальная функция, описанная в классе Object. В собственном классе ее необходимо переопределить так, чтобы она возвращала невалидный интервал при обновлении объекта. |
|
|
20/01/2013, 00:33
Сообщение
#5
|
|
Избранный :) Группа: Участник Сообщений: 5 052 Регистрация: 20/01/2004 Из: Химки м/о Пользователь №: 4 253 |
QUOTE Процедурный объект отрисовывается во вьюпорте путем вызова функции Display. Это виртуальная функция, описанная в классе BaseObject. В MAX SDK написано (http://docs.autodesk.com/3DSMAX/15/ENU/3ds...2301217941d26fb Да. я через нее значок рисую во вьюпорте... Есть засада. Функция RedrawViews() не провоцирует вызов функции ObjectValidity(). |
|
|
20/01/2013, 10:40
Сообщение
#6
|
|
Учитель Группа: Участник Сообщений: 322 Регистрация: 18/06/2002 Из: Москва Пользователь №: 72 |
Возможно не хватает уведомления об изменении объекта.
Обычно непосредственно перед RedrawViews или после изменения параметров вызывают функцию NotifyDependents с сообщением REFMSG_CHANGE. В SDK есть много примеров с использованием NotifyDependents. |
|
|
20/01/2013, 22:17
Сообщение
#7
|
|
Избранный :) Группа: Участник Сообщений: 5 052 Регистрация: 20/01/2004 Из: Химки м/о Пользователь №: 4 253 |
Да ее тоже пробовал....
правда вроде не перед RedrawViews надо еще раз попробовать.. |
|
|
Bots |
Системное сообщение
|
|
|
|
|
Текстовая версия | Сейчас: 26/04/2024 - 03:24 |