如何获取 MAXScript 函数的参数列表

How to get arguments list for a MAXScript function

引自 Autodesk 3DS MAX 文档:

When you use something like 'fn test val = ...", a MAXScriptFunction value is created and stored in variable test. If variable test was passed into another method, for example as a filter function, that method would test the class of the value to make sure it's a MAXScriptFunction and then call it using 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 结构,在列表视图中单击其中一个并列出它们的所有成员函数,快速复制粘贴所需的函数调用到我的代码中。

唯一的问题是参数。我怎么知道我需要为特定函数提供哪些参数?

遗憾的是,没有 MAXScript 方法可以从函数定义中获取函数参数信息。我可能是错的(很乐意得到纠正),但也可能没有 SDK 获取上述信息的方式。

由于没有获取此信息的编程方式,如果您需要通过代码访问它,您将不得不自己发明。例如在反映功能的结构中精心编目和存储这些额外的元数据。


我遇到过与您描述的情况类似的情况:许多库组织成结构。在我们的案例中行之有效的是手动解决方案:在定义函数的正上方编写详细的函数文档作为注释。 诀窍是:如果在 maxscript 文件中定义了函数或结构方法,则可以在定义函数的代码行调用 showSource <functionVariable> 打开编辑器。您会立即看到文档。

但是,这对用 C++ 定义的函数或不属于您的代码没有帮助。