Цитата из документации Autodesk 3DS MAX:
Когда вы используете что-то вроде 'fn test val = ...", значение MAXScriptFunction создается и сохраняется в переменной test. Если переменная test была передана в другой метод, например, в качестве функции фильтра, этот метод будет проверять класс значение, чтобы убедиться, что это функция MAXScriptFunction, а затем вызвать ее с помощью apply().
Мой вопрос: функции в 3DS MAX хранятся в переменных, как и любые другие значения. Вы можете хранить их в массивах, передавать их другим функциям, делать то, что вы делаете с любым другим значением. Итак, вопрос: есть ли способ получить список аргументов, ожидаемых функцией, из переменной функции?
Вот небольшое пояснение, объясняющее, почему я задаю этот вопрос.
Допустим, у меня есть большая библиотека функций, хранящаяся в структурах. Например, одна из этих структур называется «ModelingTools».
Struct ModelingTools
(
fn tool1 arg1 agr2 arg3 = (...),
fn tool2 arg1 agr2 arg3 = (...),
...
)
ModelingTools = ModelingTools() --make an istance of the struct in global scope
А потом я хочу использовать эти функции в других скриптах. Я пишу это:
ModelingTools.tool1 arg1 arg2 arg3
А что, если внутри уже тонны этих структур и тонны функций? Во встроенном редакторе нет автозаполнения, как в Visual Studio или QT. Поэтому я решил изобрести свой собственный велосипед. К счастью, MAXScript имеет встроенный метод для вывода списка всех зарегистрированных глобальных значений в MAX: globalVars.gather(). Для определений структур это событие печатает все их элементы. Я почти доволен этим: теперь я могу быстро найти все зарегистрированные структуры MAX, щелкнуть одну из них в представлении списка и перечислить все их функции-члены, быстро скопировать и вставить вызов нужной функции в мой код.
Единственная проблема с аргументами. Как узнать, какие аргументы мне нужно предоставить для конкретной функции?