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结构,在列表视图中单击其中之一,并列出其所有成员函数,然后将所需的函数调用快速粘贴到我的代码中。
唯一的问题是参数。我如何知道需要为特定功能提供的参数?
答案 0 :(得分:1)
不幸的是,没有MAXScript方法可以从函数定义中获取函数参数信息。我可能是错的(并且很乐意得到纠正),但是也可能没有SDK的方式来获取上述信息。
由于没有以编程方式获取此信息的方法,因此,如果需要通过代码访问它,则必须自己发明。例如,将这些额外的元数据精心分类并存储在与功能相同的结构中。
我遇到了与您描述的情况类似的情况:许多库都组织成结构。在我们的案例中,一种行之有效的方法是手动解决方案:在定义了我们功能的上方,以注释的形式编写详细的功能文档。
诀窍是:如果在maxscript文件中定义了函数或struct方法,则可以调用showSource <functionVariable>
在定义函数的代码行处打开编辑器。您会立即看到文档。
但是,这对于用C ++定义的功能或不是您自己的代码没有帮助。