1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

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

Тема в разделе "MAXScript", создана пользователем ^_^, 20 мар 2015.

Модераторы: Savin Denis
  1. ^_^

    ^_^ Знаток

    С нами с:
    07.01.2014
    Сообщения:
    524
    Симпатии:
    44
    Баллы:
    46
    нужно сделать макроскрипт который сначала запускает:

    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 ошибается.

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

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Попробуйте такой вариант: Запускаем скрипт.
    Режем и потом нажимаем правую кнопку, чтобы выйти из режима 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"
     
  3. ^_^

    ^_^ Знаток

    С нами с:
    07.01.2014
    Сообщения:
    524
    Симпатии:
    44
    Баллы:
    46
    :woot:


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

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

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

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

    Вложения:

    • cut2012.max
      Размер файла:
      676 КБ
      Просмотров:
      74
    • cut.jpg
      cut.jpg
      Размер файла:
      110,3 КБ
      Просмотров:
      82
    Последнее редактирование: 20 мар 2015
  4. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Есть, только такой вариант: Запускаем скрипт.
    Режем и потом выходим из режима 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
     
  5. ^_^

    ^_^ Знаток

    С нами с:
    07.01.2014
    Сообщения:
    524
    Симпатии:
    44
    Баллы:
    46
    ну это тоже не вариант. Нужно ускорить процесс, а не затормозить))

    Жаль...

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

    Спасибо.
     
Модераторы: Savin Denis

Поделиться этой страницей