引用Autodesk 3DS MAX文档:
当你使用类似'fn test val = ...'的东西时,一个MAXScriptFunction 值创建并存储在变量测试中。如果变量检验为 传递给另一个方法,例如作为过滤器函数, 方法将测试值的类以确保它是 MAXScriptFunction,然后使用 apply(( 调用它。
我的问题:3DS MAX中的函数存储在变量中,就像任何其他值一样。您可以将它们存储在数组中,将它们传递给其他函数,对任何其他值执行任何操作。所以问题是:有没有办法从函数变量中获取函数期望的参数列表?
这里有一个小的解释,解释我为什么要问这个问题。
假设我有一个存储在结构中的大型函数库。例如,其中一个结构称为"建模工具">
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++ 中定义的函数或其他不属于您的代码没有帮助。