Render.ru

Пауза выполнения скрипта до нажатия пкм

^_^

Знаток
Рейтинг
52
#1
нужно сделать макроскрипт который сначала запускает:

macros.run "Editable Polygon Object" "EPoly_Cut"

и потом ждёт когда пользователь нажмёт правую кнопку (это будет окончание функции "cut"), после чего делает это:

OLDsub=subobjectLevel
subobjectLevel = 1
OLDweld=$.weldThreshold
$.weldThreshold = 0.0001

$.EditablePoly.SetSelection #Vertex #{}--снять выделение
actionMan.executeAction 0 "40044"--инвертировать выделенное

$.EditablePoly.weldFlaggedVertices ()--weld

$.weldThreshold = OLDweld
subobjectLevel = OLDsub


скрипт заменит функцию cut, каждый раз связывая вершины, когда cut ошибается.

Вообщем, помогите, пожалуйста, советом. Как сделать паузу?
 

igorznag

Мастер
Рейтинг
103
#2
Вообщем, помогите, пожалуйста, советом.
Попробуйте такой вариант: Запускаем скрипт.
Режем и потом нажимаем правую кнопку, чтобы выйти из режима Cut.
Скрипт работает для всех режимов на панели Modify.
Код:
try destroydialog igorznag_auto_weld catch()
rollout igorznag_auto_weld "Auto Weld"
(
    timer clock "testClock" interval:1 active:true
    local old_commandmode
    on clock tick do
    (
        try
        (
            if selection.count==1 then
            (
                co=modpanel.getCurrentObject()
                if classof co==Editable_Poly then
                (
                    cur_cm=toolmode.commandmode
                    cma=#(#SELECT,#MOVE,#ROTATE,#NUSCALE,#USCALE,#SQUASH)
                    if finditem cma cur_cm !=0 and old_commandmode==#MODIFY then
                    (
                        OLDsub=subobjectLevel
                        subobjectLevel = 1
                        OLDweld=$.weldThreshold
                        $.weldThreshold = 0.01

                        $.EditablePoly.SetSelection #Vertex #{}
                        actionMan.executeAction 0 "40044"
                        $.EditablePoly.weldFlaggedVertices ()

                        $.weldThreshold = OLDweld
                        subobjectLevel = OLDsub
                    )--if classof co==Editable_Poly then
                    old_commandmode=toolmode.commandmode
                )--if classof co==Editable_Poly then
            )--if selection.count==1 then
        ) catch()
    )--on clock tick do
); createdialog igorznag_auto_weld 100 100 pos:[-200,-200]

macros.run "Editable Polygon Object" "EPoly_Cut"
 

^_^

Знаток
Рейтинг
52
#3
:woot:


Правильно ли я понял, что:
каждую секунду проверяется не сменился ли инструмент на
#SELECT,#MOVE,#ROTATE,#NUSCALE,#USCALE,#SQUASH и если да, то велдит.

А по другому никак? Паузы до нажатия какой-то клавиши в максскрипт нет?

Просто это как-то не совсем хорошо. Первое последствие обнаруживается сразу: несколько undo корёжит геометрию.

Если нужно прикрепляю файл 2012 макса. В этом ракурсе (если не вертеть камеру), если резать cut-ом из вершины 1 в вершину 2, то в вершине 2 всегда глюк.
 

Вложения

Последнее редактирование:

igorznag

Мастер
Рейтинг
103
#4
Паузы до нажатия какой-то клавиши в максскрипт нет?
Есть, только такой вариант: Запускаем скрипт.
Режем и потом выходим из режима Cut:
1. нажимаем среднюю кнопку мыши (или клавишу Esc).
2. нажимаем правую кнопку мыши.
В белое поле (Mini) Listener нажимаем клавишу Esc или Enter.
Код:
macros.run "Editable Polygon Object" "EPoly_Cut"

getKBValue prompt:"Enter:"

OLDsub=subobjectLevel
subobjectLevel = 1
OLDweld=$.weldThreshold
$.weldThreshold = 0.01

$.EditablePoly.SetSelection #Vertex #{}
actionMan.executeAction 0 "40044"
$.EditablePoly.weldFlaggedVertices ()

$.weldThreshold = OLDweld
subobjectLevel = OLDsub
 

^_^

Знаток
Рейтинг
52
#5
ну это тоже не вариант. Нужно ускорить процесс, а не затормозить))

Есть, только такой вариант: Запускаем скрипт.
Жаль...

Пока что самый быстрый надёжный вариант это сделать горячую клавишу велда и обновлять иногда.
Но тоже не хочется после каждого ката жать клавишу.

Спасибо.
 
Сверху