【问题标题】:How to get arguments list for a MAXScript function如何获取 MAXScript 函数的参数列表
【发布时间】:2020-04-08 02:26:40
【问题描述】:

来自 Autodesk 3DS MAX 文档的引用:

当您使用类似 'fn test val = ..." 时,MAXScriptFunction 值被创建并存储在变量 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 结构,在列表视图中单击其中一个并列出其所有成员函数,快速将所需的函数调用复制粘贴到我的代码中。

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

【问题讨论】:

    标签: metaprogramming maxscript


    【解决方案1】:

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

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


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

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

    【讨论】:

    • 那个showSource命令更好,它打开源文件,跳转到函数定义。完全解决了我的问题。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多