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

Два простых вопроса по maxscript.

Тема в разделе "MAXScript", создана пользователем oO Loki Oo, 4 июн 2010.

Модераторы: Savin Denis
  1. oO Loki Oo

    oO Loki Oo Знаток

    С нами с:
    02.08.2005
    Сообщения:
    136
    Симпатии:
    0
    Баллы:
    36
    1.) Как остановить работающий скрипт? (как советовали - ESC, не помогает).
    2.) Как автоматически закрывать окно рендера, после каждого кадра? (если у меня в цикле до N, рендерятся картинки, то все их мышкой напряжно закрывать, после окончания работы скрипта).
     
  2. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    1) Чтобы автоматически прервать скрипт по Esc, нужно установить глобальную переменную escapeEnable = true
    Действует на скрипты scripted utility, script controller, или запущенные в MAXScript Listener.
    Но лучше в циклах поставить свою проверку на нажатие keyboard.escPressed и организовать корректное завершение.
    2) Лучше просто отключить фрейм буффер ключем vfb:eek:ff, если нужно просмотреть полученный битмап то команнды:

    display <bitmap>
    Opens a virtual frame buffer (VFB) displaying the image. Changes to the bitmap are not automatically displayed to the VFB. To update the VFB, you need to call this function again. Setting the frame property does cause the VFB to update. Each bitmap has its own VFB, i.e., if you display two different bitmaps, two VFBs will be displayed.

    unDisplay <bitmap>
    Close the VFB associated with the bitmap if open.


     
  3. oO Loki Oo

    oO Loki Oo Знаток

    С нами с:
    02.08.2005
    Сообщения:
    136
    Симпатии:
    0
    Баллы:
    36
    Отлично! Всё, то что нужно и хорошо расписано. Большое спасибо, Денис!

    Ещё один маленький вопросик - Можно ли каким-то хоткем запускать скрипт?
    А то немного бесит сначала делать - "Open Script", редактировать его и потом - "Run Script" и выберать его же для запуска.
     
  4. Chebu

    Chebu Знаток

    С нами с:
    23.10.2005
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    60
    если вы про исполнение кода, то ctrl+e. Если в принципе нужно запускать скрипт по хоткею, оформляете его как макроскрипт, и назначаете хоткей
     
  5. oO Loki Oo

    oO Loki Oo Знаток

    С нами с:
    02.08.2005
    Сообщения:
    136
    Симпатии:
    0
    Баллы:
    36
    ctrl+e - именно то что нужно, благодарствую!
     
  6. nevestktovich

    nevestktovich Пользователь сайта

    С нами с:
    24.12.2009
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    2
    Здравствуйте, уважаемые знатоки языка Maxscript!

    У меня, видимо, простой вопрос, но пока я сам не справляюсь, так как язык стал изучать недавно и то, скорее по необходимости.

    Как организовать последовательное выполнение группы скриптов запуском одного скрипта или, если хотите, нажатием одной кнопки?
    Алгоритмы всех скриптов организованы одинаково, но они работают с различными наборами данных.

    Пока у меня получилось сделать вот что:

    Вариант 1.

    Пишем скрипт Runscript.ms, в котором используем последовательность команд:

    fileIn "filename1.ms"
    fileIn "filename2.ms"
    -----------------------
    и т.д., перечисляем все скриптовые файлы, которые необходимо выполнить. Копируя все скрипты в папку Scripts 3DMAXа, а также стартовый скрипт Runscript.ms, затем запускаем его в работу и получаем последовательное выполнение всех скриптов. Однако такой
    способ меня не совсем устраивает, так как всякий раз нужно формировать список выполняемых скриптов, что займет много времени.
    Было бы хорошо, если бы стартовый скрипт просто последовательно запускал на выполнение все скрипты, находящиеся вместе с ним в одной папке (либо в заранее указанной папке). Для этого я попытался составить стартовый скрипт Runscript1.ms с таким содержанием:

    Вариант 2

    files = getFiles "c:\3DSMAX2.5\Scripts\*.ms"
    for f in files do (fileIn f)

    После его запуска все скрипты последовательно выполняются, но потом эта работа "зацикливается" на выполнении первого скрипта из списка. В этом случае приходится закрывать 3DMAX в аварийном режиме.

    Как в последнем алгоритме правильно организовать остановку работы программы?
     
  7. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Если файл Runscript.ms находится в одной папке со всеми скриптами, тогда произойдет рекурсивное выполнения скриптов. То есть файл Runscript.ms не должен находится в одной папке со всеми скриптами, но если это необходимо, тогда нужно фильтровать его название, когда выполняются скрипты в цикле.
    Пример. Файл Runscript.ms и другие скриптовые файлы находятся в папке f:\scripts\.
    Код:
    files = getFiles "f:\\scripts\\*.ms"
    for f in files do
    if((stricmp (filenameFromPath f) "Runscript.ms")!=0)then fileIn f
     
  8. nevestktovich

    nevestktovich Пользователь сайта

    С нами с:
    24.12.2009
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    2

    Большое спасибо!

    Практически, помог совет о нахождении скрипта запуска и исполняемых скриптов в разных папках. Правда, я и сам пытался это делать, но я размещал скрипт запуска в другой папке (не в папке ...\3DSMAX\Scripts). Видимо, это связано с параметрами MAXScript, выставленными по умолчанию. Все заработало, когда скрипт запуска Runscript.ms оставил в папке ...\3DSMAX\Scripts, а исполняемые
    скрипты перенес в другую папку, прописав к ним путь в параметрах функции getFiles.
     
Модераторы: Savin Denis

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