2011-06-05 81 views
0

我的MaxScript工具需要场景对象的类型为editable_mesh或editable_poly,并根据对象类型启用和禁用GUI控件。MaxScript:当节点改变类型/类时,将使用什么'回调类型名称'来触发回调?

使用#selectionSetChanged回调当用户更改所选对象时,我可以成功部署更新,但是如果他们转换对象,则他们被迫取消选择并再次选择它以对其进行操作。

我应该向callbacks.addscript提供什么回调类型名称,以便在用户更改/转换对象的类型/类时调用它?

回答

1

通过调用NodeEventCallback使用Node Event System并将函数提供给modelstructured属性。

这是一个覆盖标准事件回调系统的层,并有许多新事件,但它仅适用于3ds Max 2009及更高版本。

0

没有这样的回调事件,我知道,甚至没有什么时候构造会在这里工作。实现这一目标的一种方法是在部署中使用计时器,并在每次打勾时检查所选对象的class/superClass,但我不确定它实际上是否首先需要。

如果你想警告用户该对象需要转换,有很多方法可以做到这一点与他的合作,如弹出一个查询框选择,会说类似“点击的对象不是一个可编辑网格,把它转换成一个?“或带选项的自定义查询框转换为可编辑多边形/转换为可编辑网格/丢弃

甚至是老式的方式,在默认情况下禁用了所有的控件,只启用了一个大的Pick Node选取按钮。该应用程序将提供一个筛选功能,只允许您选择可编辑的节点。

+0

谢谢!虽然在CGS论坛上发布这张海报后,实际上告诉我一个方法NodeEventCallback,它允许您为特定事件提供函数(在原始回调函数之上)。模型结构化的“触发器”为我想做的事情工作得很好。 我可以问,什么时候构造?这听起来像是对其他问题可能有用的东西。 – sebf 2011-06-07 18:37:38

+0

Max 9在这里,没有NodeEventCallback可供使用,对不起。最好的解释是在maxscript引用中,在Change Handlers和When Constructs中。基本语法是'when 更改[s] [id:] \ [handleAt:#redrawViews | #timeChange] \ []做'和相比,你必须指定某个节点/节点/集合回调例如$ node,#($ node1,$ node2,$ node3),$ box *,选择,对象等)。 – Swordslayer 2011-06-08 13:25:16

+0

感谢'when'原型。我没有想到版本,如果我上传我的工具,我可能会用一个选择按钮编写一个替代版本,或者可能依靠用户阅读ReadMe *来了解它的行为。 (*它发生!....有时候......也许......对吧);) – sebf 2011-06-08 14:53:51

相关问题