1.) Как остановить работающий скрипт? (как советовали - ESC, не помогает).
2.) Как автоматически закрывать окно рендера, после каждого кадра? (если у меня в цикле до N, рендерятся картинки, то все их мышкой напряжно закрывать, после окончания работы скрипта).
1) Чтобы автоматически прервать скрипт по Esc, нужно установить глобальную переменную escapeEnable = true
Действует на скрипты scripted utility, script controller, или запущенные в MAXScript Listener.
Но лучше в циклах поставить свою проверку на нажатие keyboard.escPressed и организовать корректное завершение.
2) Лучше просто отключить фрейм буффер ключем vfb😮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.
Отлично! Всё, то что нужно и хорошо расписано. Большое спасибо, Денис!
Ещё один маленький вопросик - Можно ли каким-то хоткем запускать скрипт?
А то немного бесит сначала делать - "Open Script", редактировать его и потом - "Run Script" и выберать его же для запуска.
У меня, видимо, простой вопрос, но пока я сам не справляюсь, так как язык стал изучать недавно и то, скорее по необходимости.
Как организовать последовательное выполнение группы скриптов запуском одного скрипта или, если хотите, нажатием одной кнопки?
Алгоритмы всех скриптов организованы одинаково, но они работают с различными наборами данных.
Пока у меня получилось сделать вот что:
Вариант 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 в аварийном режиме.
Как в последнем алгоритме правильно организовать остановку работы программы?
Было бы хорошо, если бы стартовый скрипт просто последовательно запускал на выполнение все скрипты, находящиеся вместе с ним в одной папке (либо в заранее указанной папке).
Если файл 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
igorznagЦитирую:
Было бы хорошо, если бы стартовый скрипт просто последовательно запускал на выполнение все скрипты, находящиеся вместе с ним в одной папке (либо в заранее указанной папке).
Если файл 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
Большое спасибо!
Практически, помог совет о нахождении скрипта запуска и исполняемых скриптов в разных папках. Правда, я и сам пытался это делать, но я размещал скрипт запуска в другой папке (не в папке ...\3DSMAX\Scripts). Видимо, это связано с параметрами MAXScript, выставленными по умолчанию. Все заработало, когда скрипт запуска Runscript.ms оставил в папке ...\3DSMAX\Scripts, а исполняемые
скрипты перенес в другую папку, прописав к ним путь в параметрах функции getFiles.
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
oO Loki Oo
2.) Как автоматически закрывать окно рендера, после каждого кадра? (если у меня в цикле до N, рендерятся картинки, то все их мышкой напряжно закрывать, после окончания работы скрипта).
Savin Denis
Действует на скрипты scripted utility, script controller, или запущенные в MAXScript Listener.
Но лучше в циклах поставить свою проверку на нажатие keyboard.escPressed и организовать корректное завершение.
2) Лучше просто отключить фрейм буффер ключем vfb😮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.
oO Loki Oo
Ещё один маленький вопросик - Можно ли каким-то хоткем запускать скрипт?
А то немного бесит сначала делать - "Open Script", редактировать его и потом - "Run Script" и выберать его же для запуска.
Chebu
oO Loki Oo
nevestktovich
У меня, видимо, простой вопрос, но пока я сам не справляюсь, так как язык стал изучать недавно и то, скорее по необходимости.
Как организовать последовательное выполнение группы скриптов запуском одного скрипта или, если хотите, нажатием одной кнопки?
Алгоритмы всех скриптов организованы одинаково, но они работают с различными наборами данных.
Пока у меня получилось сделать вот что:
Вариант 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 в аварийном режиме.
Как в последнем алгоритме правильно организовать остановку работы программы?
igorznag
Пример. Файл Runscript.ms и другие скриптовые файлы находятся в папке f:\scripts\.
nevestktovich
Большое спасибо!
Практически, помог совет о нахождении скрипта запуска и исполняемых скриптов в разных папках. Правда, я и сам пытался это делать, но я размещал скрипт запуска в другой папке (не в папке ...\3DSMAX\Scripts). Видимо, это связано с параметрами MAXScript, выставленными по умолчанию. Все заработало, когда скрипт запуска Runscript.ms оставил в папке ...\3DSMAX\Scripts, а исполняемые
скрипты перенес в другую папку, прописав к ним путь в параметрах функции getFiles.