Maxscript listener где находится
Перейти к содержимому

Maxscript listener где находится

  • автор:

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

1.) Как остановить работающий скрипт? (как советовали — ESC, не помогает).
2.) Как автоматически закрывать окно рендера, после каждого кадра? (если у меня в цикле до N, рендерятся картинки, то все их мышкой напряжно закрывать, после окончания работы скрипта).

Savin Denis
Модератор форума

Команда форума
Рейтинг 138

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

display
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
Close the VFB associated with the bitmap if open.

oO Loki Oo
Знаток

Рейтинг 36

Отлично! Всё, то что нужно и хорошо расписано. Большое спасибо, Денис!

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

Chebu
Знаток

Рейтинг 59

если вы про исполнение кода, то ctrl+e. Если в принципе нужно запускать скрипт по хоткею, оформляете его как макроскрипт, и назначаете хоткей

oO Loki Oo
Знаток

Рейтинг 36
ctrl+e — именно то что нужно, благодарствую!

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

Здравствуйте, уважаемые знатоки языка Maxscript!

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

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

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

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

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

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

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

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

FAQ форума MaxScript

В этой теме буду собирать ответы на часто задаваемые вопросы.

(Q) Как задать вопрос по Maxscript ?
(A) Для начала обязательно найдите и прочтите все по данному вопросу в хелпе !
Человека, читавшего хелп сразу видно, и если после этого вопрос не решился задайте его на форуме:
Если в ответ вам указали на главу в хелпе, не обижайтесь значит ответ там, и освещен достаточно для понимания, прочитайте раздел.
Если в ответ вам указали на большой раздел в хелпе, значит вопрос был слишком расплывчатым либо затрагивает большую тему.
Ищите в разделе то что вам больше подходит или уточните вопрос.
Задавайте конкретные вопросы, но задачу описывайте полностью, возможно она решается другим путем.
Приведите свой код, пусть и не рабочий.
Если это ваш код выделите только ту часть что относиться к вопросу.
Если код чужой, обратитесь прежде всего к автору, если это не возможно приводите ссылку на ресурс откуда его взяли.
Не спрашивайте как работать с чужим скриптом, обратитесь к автору или пользователям скрипта.
Если вы все сделали по инструкции но так и не добились результата, вам стоит подумать о заказе разработки данного скрипта.

(Q) У меня макс выдает Ошибку ! Помогите разобраться .
(A) Инструкция как правильно задать вопрос по ошибке:
1. Указываешь версию софта: операционнка, 3dsmax, используемые модули.
2. КОПИРУЕШЬ в тему код или даешь ссылку на файл если большой.
3. Делаешь скриншот сразу после ошибки и приводишь ссылку на него, где видно:
. a) Заголовок окна 3dsmax c версией.
. b) Диалог с названием ошибки.
. c) Открытый редактор с подсвеченной строкой в которой остановился и ее номером.
4. Дальше закрываешь диалог и открываешь Max Listener (кнопка F11) и копируешь полный текст ошибки.

Ошибки выдаваемые 3dsmax на системных скриптах не рассматриваются, если 3dsmax установлен не c оригинального полного диска c английской (не локализованной) версией !

(Q) Мне нужен скрипт, . ?
(A) Прежде чем просить помощи в написании скрипта сначала делайте поиск на Scriptspot, есть большая вероятность что кто-то уже решил эту проблему.
Укажите версию 3dsmax c которой работаете.
Четко опишите задачу: входные параметры, предполагаемый алгоритм работы, результат.
Помните, что никто не обязан писать за вас скрипт, но с другой стороны это лучший способ изучить язык для начинающих, не новичков можно заинтересовать интересной идеей.
В сложных случаях можно договориться о работе, но все финансы обсуждать через личку.
Уважайте чужое время и силы.

(Q) C чего начать изучение Maxscript ?
(A) Для начала:
1) Открываем Max Listener [F11].
2) И включаем MacroRecorder. Теперь создавая или изменяя объекты мы сможем видеть в верхнем окне Max Listener команды необходимые для повторения этих действий средствами Maxscript.
3) Далее учимся работать со справкой по Maxscript: Находясь в Max Listener нажимаем [F1].
4) И первым делом находим и изучаем раздел «Learning MAXScript»
5) Активно пользуемся поиском. Для тех кто еще не освоил, читаем раздел «Using the HTML Help Viewer»
6) Разбираем как работают примеры. В хелпе практически все примеры разобраны по шагам. Кому не хватаемт идем на Scriptspot
7) В качестве средств отладки используем вывод в Max Listener операторами print и format «value = %\n» value, а также читаем раздел «The MAXScript Debugger».
8) Если возникла ситуация с которой самостоятельно не удалось справиться пишем на форум но обязательно подробно описываем проблему и что в результате хотели получить. Обязательно приводим версию и разрядность 3dsmax, полный листинг ошибки из Max Listener и код вашего скрипта.

(Q) Если вы уже имели дело с низкоуровневыми языками такими как C++ .
1) Специально для тех кто работал с C++: i++ в maxscript i += 1; блок кода в maxscript ( _code_ ).
2) Если оператор в строке один то не обязательно ставить разделитель в конце — «;»
3) При инициализации переменных не нужно явно указывать их тип.
4) При инициализации распространеных имен переменных внутри функций, не лишним будет явно указать локальную видимость переменной: local name = «». Это позволит избежать редких но трудно уловимых ошибок связанных с видимостью переменных.
5) Функция может не иметь оператора Return, в этом случае она возвращает результат последнего оператора.
6) Настоятельно советую изучить разделы: For Loop, Skipping Loop Iterations, Loop Exit. Иначе ваши конструкции выглядят очень несуразно. Хотя работать и будут.
7) В обязательном порядке прочитать разделы: Manual Garbage Collection, Memory Allocation and Garbage Collection !
8) Не лишним будет заглянуть и в радел: «How To Make It Faster?»
9) Для любителей ООП, смотрим раздел Structure Definition и ссылки в низу.

(Q) А где можно достать хороший учебник на русском по max скрипту ?
(A) Пока, обучающей литературы по языку MaxScript на русском очень мало.
Лучший учебник всегда был и будет родной хелп по MaxScript, + примеры на любой вкус c сайта Scriptspot
Хелп содержит множество примеров, с подробными пояснениями, что какая команда делает.
Не стоит по началу забывать и про MacroRecorder.
Полного перевода хелпа нет и не будет. Не имеет смысла переводить — слишком часто меняется с выходом новой версии 3dsMax.

Тема где будут выкладываться новые линки на найденные ресурсы по MaxScirpt`у:

«Единственный способ изучать новый язык программирования — писать на нем программы.»
— Брайэн Керниган

(Q) Как запустить пример из MaxScript Reference ?
(A) 1) Открываем Max Listener [F11].
2) Открываем новое окно из Max Listener [Cntl — N]
3) Теперь копируем из хелпа текст примера в новое окно [Cntl -C]/[Cntl -V] (или перетаскиваем в него)
4) И запускаем его из этого окна на исполнение следующей комбинацией клавиш [Cntl -E]
(так же можно создать в любом редакторе текстовой файл с расширением «.ms’ и скопировав туда текст примера, и запустить через Main Menu\MAXScript\Run Script)

(Q) Где мне найти скрипт после исполнения ?
(A) Существует ряд скриптов которые сразу после исполнения не производят никаких действий, а встраиваются в интерфейс 3dsmax расширяя его возможности.
Как же найти куда встроился такой скрипт ?
Прежде всего нужно внимательно прочитать все справочные материалы которые могли идти в комплекте со скриптом, поискать справку на сайте автора, заглянуть в сам файл скрипта, часто справка по установке скрипта пишется в начале файла, в комментарии.
Если никаких инструкций найти не удалось, попробуем разобраться сами.
Итак существуют следующие типы интерфейсных скриптов:

1) MacroScript (Макро-Скрипт)
Пожалуй самый распространенный тип интерфейсного скрипта с котором вам придется встречаться.
Обычно код макро-скрипта находиться в файле с расширением «*.mcr». но не обязательно по этому ищем в коде такой блок:

macroScript AutoMat category:"HowTo" ( . )

Нас интересует два параметра по которым мы найдем и настроим исполнение скрипта в пользовательском интерфейсе (UI):
(a) Это уникальное имя скрипта в данном примере это «AutoMat»,
если есть параметр toolTip: то он будет использоваться в диалоге Custimize вместо уникального имени скрипта.
Пример — (macroScript AutoMat category:»HowTo» toolTip:»Automatick Materials»)
(b) А также имя категории после параметра — category:». «

Зная название категории и уникальное имя макро-скрипта мы сможем найти его через меню Customize. и настроить для него кнопку в Toolbars или «Шорт-кат».
1. Откройте Main Menu\Customize\Customize User Interface .
2. Выбери закладку Toolbars
3. Выбери в выпадающем списке Сategory: найденную в коде категорию. (первый список должен быть — Group: Main UI !)
4. Создай новую панель инструментов нажав на кнопку New и введя для нее имя
5. Найдем в списке Action Имя нашего макро и перетащим его (методом Drag and Drop) на новую панель (ToolBar)
6. Нажав на кнопку мы запустим скрипт

2) Utility
Ищем в коде блок

utility spread "Spread objects" ( . )

Если такой блок есть, то ищем наш скрипт в Command Pannel\Utilities\MaxScript\Utilities (смотрим в выпадающем меню)

3) Plugins — Плугин написанный на скрипте, как и скомпилированный на C++, может встраиваться в разные части интерфейса в зависимости от типа:
Пример блока плугина:

plugin helper getsetHandlerTest name:"DummyEx" classID:#(1453456,5432110) category:"Scripted Primitives" extends:dummy ( . )

Где параметры по которым мы сможем его найти:
plugin — Superclass определяет тип плугина и место поиска
name: — Имя которое будет отраженно на кнопке в панели Create, если например этот плугин создает объект.
category: — Имя категории которое нужно выбрать в выпадающем списке в панели Create

Возможные типы Superclass, а также и где можно найти новый функционал:

Geometry — Объект в панели Command Pannel\Create\Geometry\(категория указанная в параметре category: )
SimpleObject — Объект в панели Command Pannel\Create\Geometry\(Сategory
Shape — Шейп в панели Command Pannel\Create\Shapes\(Сategory
Light — Источник света в панели Command Pannel\Create\Lights\(Сategory
Camera — Камера в панели Command Pannel\Create\Cameras\(Сategory
Helper — Новый вспомогательный объект в панели Command Pannel\Create\Helpers\(Сategory
Modifier — Модификатор в панели Command Pannel\Modify\ (в выпадающем списке — name: )
SimpleMod — Модификатор в панели Command Pannel\Modify\ (в выпадающем списке — name: )
TrackViewUtility — Утилита в окне треков Main Menu\Graph Editors\New Track View\Utilities\Track View Utilities .
Material — В навигаторе материалов Main Menu\Rendering\Material/Map Browser\ Browser From: New
TextureMap — В навигаторе материалов Main Menu\Rendering\Material/Map Browser\ Browser From: New
RenderEffect — В пост эффектах рендера Main Menu\Rendering\Effects. \Add
Atmospheric — В атмосферных эффектах Main Menu\Rendering\Environment. \Atmosphe\Add

Окно редактора MAXScript

В окне редактора MAXScript можно открывать и редактировать любой тип текстового файла, но чаще всего это окно используется для редактирования файлов сценариев MAXScript. Вы можете открыть только одно окно MAXScript Listener, а окон редактора MAXScript — сколько угодно.

Чтобы открыть новое окно редактора MAXScript, выберите команду MAXScript^ New Script, либо команду File>New Script (Файл>Создать сценарий) в меню окна MAXScript Listener, либо щелкните на кнопке New Script (Создать сценарий) в разворачивающейся панели MAXScript вкладки Utilities. Окно редактора MAXScript можно использовать для редактирования ранее созданных сценариев.

Для создания нового сценария лучше открыть два окна: MAXScript Listener и окно редактора MAXScript. Так можно создавать отлаженный код, т.е. вы тестируете фрагмент кода в окне MAXScript Listener, а затем вставляете его в окно редактора.

Выполнить фрагмент кода сценария можно непосредственно в окне MAXScript Listener. Для этого выделите фрагмент кода в окне редактора MAXScript и нажмите комбинацию клавиш (или клавишу на цифровой клавиатуре). Выделенный фрагмент будет скопирован и выполнен в окне MAXScript Listener.

Команды меню File, Search и Help в окне редактора MAXScript аналогичны командам меню окна MAXScript Listener, за исключением Evaluate All (Выполнить все). Эта команда (Fil>Evaluate All) предназначена для быстрого тестового выполнения всего сценария. Без нее вам пришлось бы выделить весь сценарий, копировать его в окно MAXScript Listener, последовательно переместить курсор в конец каждой строки и нажать клавишу .

Меню Edit (Правка) включает команды, позволяющие отменить последнее действие (Undo или ), вырезать текст в буфер (Cut или ), копировать в буфер (Сору или ) и удалить текст (Delete или ). В этом же меню с помощью команд New Rollout и Edit Rollout () можно попасть в окно Visual MAXScript. Кроме этого, в меню Edit находится команда Select All (Выделить все), ей соответствует комбинация клавиш . Аналогичные команды находятся в контекстном меню, появляющемся после щелчка правой кнопкой мыши в любой части окна редактора MAXScript.

Окно Visual MAXScript подробно описано в главе 41, «Использование средства Visual MaxScripF.

В. З. Окно диалога MAXScript Listener (Отладчик MAXScript)


Чтобы вызвать появление окна отладчика сценариев MAXScript, выберите команду меню MAXScript Listener (Отладчик MAXScript). С этой же целью можно также щелкнуть на кнопке Open Listener (Открыть отладчик) свитка MAXScript или нажать клавишу F11. Еще один способ вызова этого окна состоит в том, чтобы щелкнуть правой кнопкой мыши в любой из двух строк окна мини-отладчика, располагающегося в левом нижнем углу экрана max 6, и выбрать в появившемся меню команду Open Listener Window (Открыть окно отладчика).

В левой части строк состоянии и подсказки max 6 имеется окно мини-отладчика, панели записи макросов и вывода данных которого содержат по одной строке (рис. В. 4). В этих строках всегда отображаются те же данные, какие имеются в текущих строках панелей окна MAXScript Listener (Отладчик MAXScript). И наоборот, ввод каких-либо данных в одну из двух строк мини-отладчика вызывает автоматический перенос этих данных на соответствующие панели окна MAXScript Listener (Отладчик MAXScript).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *