Render.ru

Переход из Перспективы во все Ортографические виды (с помощь одной кнопки)

Рейтинг
47
#1
Товарищи, добрый вечер. Помогите пожалуйста расшифровать (вторую) строчку из хелпа

ViewCubeOps.DragSnapping : bool : Read|Write -- Работающая функция
Get/set the state of the "Snap To Closest View" option. -- Приписка к ней


Для чего это надо:

Создал скрикпт, который переводит вид вьюпорта из Перспективы в любой Изометрический и назад (с помощью одной кнопки)
Для того что бы прейти в Ортографический (Топ, Фронт, Лефт) перед запуском скрипта приходится клацать по одной из сторон Виев куба.

Первая строчка - ViewCubeOps.DragSnapping : bool : Read|Write - включает функцию – выравнивать вид по ближайшей стороне куба (во время вращения куба). Предполагаю, что есть функция которая автоматически определяет какой вид ближе, и по нему выравнивает (К примеру: если вид почти Лефт – делает его Лефт и т.д.) (Рис. 1)


Идея Скрипта:

1) Щелкаю по имени нужного вида на Виев кубе ( Нужно чтоб определялось автоматически)
2) Запуск скрипта, входит в ортографический вид.
3) Повторных запуск скрипта, выходит в перспективу
(Для сохранения опорной точки вращения после перехода из оргто в перспективу, перед входом в орто совершается SetCurrentViewAsHome, а при выходе GoHome())
(Работает в режиме вращения Орбит, не обриб сай обджект)


Код:
(
CurentViewType = viewport.getType ()

if
(CurentViewType == #view_persp_user)

Then
-- Вот тут бы не помешало автоматическое определение ближайшего вида.
(ViewCubeOps.SetCurrentViewAsHome()
viewport.setType #view_iso_user)

else 
(ViewCubeOps.GoHome())
)
 

Вложения

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#2
Это параметр позволяет получить / установить свойство "Snap To Closest View"
если установить его то при вращении куба будет пытаться прилипать к ближайшей позиции.

функцию определение ближайшего вида нужно писать.

PS
Если не ошибаюсь где-то был скрипт доворота объекта, тебе же вроде и писал.
 

igorznag

Мастер
Рейтинг
103
#3
Попробуй так:
Код:
vTM = Inverse(getViewTM()); viewDir = -vTM.row3; 
CurentViewType =viewport.getType() 
if(CurentViewType==#view_persp_user)then
(
proj1=dot viewDir [1,0,0]; proj2=dot viewDir [0,1,0]; proj3=dot viewDir [0,0,1];
proj_array=#(proj1,proj2,proj3); proj_array_abs=#(abs proj1,abs proj2, abs proj3)
proj_index=finditem proj_array_abs (amax proj_array_abs)
proj=proj_array[proj_index]; view_type=#view_persp_user
if(proj_index==1)then if(proj>0)then view_type=#view_left else view_type=#view_right
if(proj_index==2)then if(proj>0)then view_type=#view_front else view_type=#view_back 
if(proj_index==3)then if(proj>0)then view_type=#view_bottom else view_type=#view_top

actionMan.executeAction 0 "40227"  -- Views: Save Active View
viewport.setType view_type
)
else (viewport.setType #view_persp_user; actionMan.executeAction 0 "40228")  -- Views: Restore Active View
 
Рейтинг
47
#4
Igorznag большое спасибо за код. Он хороший, но делает не совсем то, что я имел в виду когда задавал это вопрос. Сейчас скрипт определяет какой вид ближе и переходит в его орто проекцию. Я хотел, что б он определял ближайший вид и доворачивал до него в окне перскективы (ни куда не переключаясь.).

Текстово объяснить более подробно сложно, так что видео.


Видео со звуком.
Звук с помехами. Заикание :)


 
Сверху