近期热门
粉丝36
关注 0
获赞 27
首页 其他资源区 其他资源 软件插件
MaxScript 教程 学习⑧

[软件插件] MaxScript 教程 学习⑧

[复制链接]
5283 2 0 1 12年前 举报
创造一个功能完整的工具

1.再次启动Visual MAXScript Editor可视化界面编辑器(如果你不是从前边练习继续到这里的话,就先打开 quickDraft_interface02.ms)。

2.在主菜单中,选择MAXScript -> Open Script... 打开DVD上的quickDraft_proof_of_concept.ms。

3.在界面编辑器里选择Render Hidden复选框,然后在右边属性页顶端选择Event Handlers事件处理器页面。

  Event Handlers是根据事件来触发指定动作的脚本模块。例如本例中的事件就是复选框被选择或清除时的操作。当我们点击一个复选框时,其中的处理器changed被触发,或者说被调用,而此时复选框的开关状态会被赋予一个叫做state的变量,并传达到事件处理代码部分进行运算。

4.点击event handler列表中的changed (只有这一个:),可以看到一个Edit Event Handler窗口弹出,这就是我们将要输入脚本来使Render Hidden复选框起作用的地方了。

5.在proof-of-concept.ms中找到--Render Hidden段,把它复制/粘贴到Edit Event Handler窗口中(如图6.8),OK关闭窗口。用同样的方法为其他每个复选框添加对应脚本。(前面有 -- 符号的代码表示注释,也就是给人阅读而不是给电脑处理的内容,在脚本编辑器中被染成绿色,因此实际上只需要复制该行下面的部分而不包括它本身即可。)
提示:在proof-of-concept.ms中有两个Render Elements段落,第一个是用于event handler的,而后面的是另一个示例,并不是在这里使用的。

6.选择可视化编辑器菜单File -> Save 来将脚本写入脚本编辑器,关闭可视化编辑器,并将脚本保存为 quickDraft_interface03.ms。

7.在整个脚本的最末端,最后一个括号关闭之后,添加这样一行:

createDialog quickDraft_rollout width:111 height:216 escapeEnable:false

  (↑作用就是命令MAXScript执行“创建窗口”动作)

8.好啦!在你的脚本编辑器窗口中按Ctrl+E也就是File菜单中的Evaluate All 全部运算。我们的脚本代码就变成了功能完整的悬浮工具框出现在界面中了。打开庞大的Render Scene 渲染设置窗口,在你的快捷草图小工具中测试点击每一个复选框并观察对应的设置项目在Render Scene大窗口中的变化。(渲染高手们别忘了把渲染器改回Scanline先:)

  如果你的脚本中没有什么手工输入内容的误差的话(可以全部来自界面工具的生成以及复制/粘贴操作),那么所有的控制功能应该都会正确生效,不过有些选项可能需要先点几下来使它们的开关与当前场景设置同步。(因为到目前为止该工具只是具有设置作用,并不会在打开时反映当前场景已有的设置,例如:即使渲染器默认状态的阴影是开启的,但启动我们的工具时它的阴影复选框仍然显示为关,即未选状态;并且你可以发现如果在大的渲染设置窗口中更改某项设置时并不会引起小工具框中的任何变化。)

  要解决这一问题,我们将在脚本中继续添加event handler事件,来使快捷草图工具在初次开启时能够反映当前的渲染器设置。这个事件不属于任何一个界面元素,而是属于工具本身的。

9.再次打开可视化脚本编辑器,选择工具框本身,然后查看Event Handler编辑页面。

  工具界面本身有一个open处理器,它会在工具框初次启动时被执行。我们要做的是在open处理器中输入脚本,让它把工具框中的各项设置开关显示为与渲染器设置相同。和MAXScript中的其他元素一样,UI界面元素也有各自的属性,因此要设置复选框的状态,只要读取场景渲染设置中的各项参数值,并将其赋予各个复选框的.state属性就可以了。

  通过把概念实证脚本中的写入渲染器参数改为读取当前设置,即可完成我们的open处理器,这不是什么麻烦事。

10.点击open hendler,在处理器编辑框中输入下面的脚本(如果你想复制粘贴的话还可以在DVD上的quickDraft_open_handler.ms中找到)

hidden.state = rendHidden
rfw.state = rendShowVFB
save.stage = rendSaveFile re = maxops.getCurRenderElementMgr() elements.state = re.getElementsActive() aa.state = renderers.current.antiAliasing samp.state = not renderers.current.enablePixelSampler shad.state = renderers.current.shadows area.state = rendSimplifyAreaLights rt = rayTraceGlobalSettings() raytrace.state = rt.enable_raytracing atmo.state = rendAtmosphere displace.state = renderDisplacements
11.成功了!保存界面代码,关闭可视化编辑器,再保存脚本为quickDraft_interface04.ms。之后使用Ctrl+E全部运算,就启动了我们快捷草图工具的最新版本!
现在我们的小工具界面上应该已经可以反映当前渲染器的设置了(仅限于初次打开的情况下,在这之后修改大的渲染设置窗口仍然无法反映在小的工具中,这一问题在本例教程中没有涉及,深表遗憾……)。此外如果上一个版本的工具框你没有关闭的话也还在那里保持原样。

12.在更理想的情况下,我们希望它再聪明一点,在开启工具界面时懂得关闭已有的同名工具框。这一功能可以通过在整个脚本的开端使用destoryDialog命令来实现,现在在所有代码的最前面回车添加一个空行,输入:

try(destoryDialog quickDraft_rollout)catch()

  其中的try()和catch()在所有类型的脚本任务中都非常有用!当一段脚本被放进try()语句中执行的时候,出现的任何错误都不会导致MAXScript的抱怨和停工,而是转为执行catch()语句所包含的动作。而在上面的例子中,catch()没有任何内容,是个空括号,这就等于我们在告诉MAXScript忽略任何错误信息(例如没有发现叫做quickDraft_rollout的工具框,无法关闭目标)。

  假如在上面脚本中去掉try()和catch()组合(即直接用destroyDialog),整个脚本就可能在开始时由于没有发现名叫quickDraft_rollout的工具框而运行失败。加上它们就可以运行,而且是正点运行,无论我们是要替换先前的工具框还是开启一个新的。

13.在快捷渲染工具框开启和关闭的情况下尝试运行新的脚本,测试新功能是否工作正常。有必要把原有工具框移动一下位置来观察它们是否被关闭,否则可能是和新工具框重合的。

  如果你又成功了,那现在离我们的目标达成还剩下一步:我们要在脚本中添加几行代码来把它变成一个 macroScript宏脚本。宏脚本包含了额外的信息来为我们实现诸如赋予快捷键、成为工具按钮以及右键菜单等功能,此外它的扩展名为.mcr而不是普通脚本的.ms

  当我们运行一个宏脚本的时候,脚本代码不会被立即执行……而是在max目录里的UI/MacroScripts目录中建立了一个和它本身略有不同的版本,这时该脚本工具就可以在Customize User Interface自定义用户界面对话框中找到,我们也就可以把它做成标准界面工具的一部分了。实际上,大量的3ds max内置工具都是宏脚本。

  提示:如果你要更改UI/MacroScripts目录中已有的宏脚本,把那个mcr文件复制到另一个目录下再编辑,然后通过MAXScript菜单运行它,就更新了目前正在使用的版本在界面中的定义。这样可以保证该界面元素被更新之后保持它们的代码与界面之间的连接。

14.为整个脚本的开端部分添写下列代码:

macroScript quickDraft Category:"Render" Tooltip:"quickDraft"
(

 ↑ 前两个词是把整个脚本做成一个名为quickDraft的工具,Category将它定位在自定义用户界面的Render分类中,Tooltip是在该工具作为按钮时,鼠标指向它时所出现的工具提示信息。

  注意上面脚本末尾是一个打开的括号,为了使MAXScript运转得高兴些,我们得在整个脚本的最后输入:

)

15.大功告成!把你现在的宏脚本保存吧,命名为quickdraft_final.mcr

16.从max主菜单中选择MAXScript -> Run Script,浏览到刚刚保存新鲜的quickdraft_final.mcr,打开它……看起来什么都没有发生,不过这一操作已经使quickDraft成为自定义用户界面中的一个命令了。

17.选择主菜单Customize -> Customize User Interface, 在自定义用户界面窗口上方选择Quads页面,即定义右键菜单功能。在左边Category类别下拉列表中选择Render,在下边标题为Action的长长的列表中随意选一个项目并按Q键,即可迅速翻到以字母Q开头的项目上,之后找到quickDraft,再用鼠标把它拖动到右边默认的菜单列表中一个合适的位置上。

18.关闭Customize User Interface 对话框,右键点击视图,从菜单中选择quickDraft即可启动我们的快捷草图工具框了。
转自:http://blog.sina.com.cn/s/blog_6798850f0100s6og.html
0
点赞
0
打赏
1
添加到收藏夹

0

点击复制链接

使用微信扫码分享
一次扣10个券
全部评论2
您需要登录后才可以回帖 登录

shenme
12年前
回复

使用道具 举报

最后一篇了,先收藏了再说!
12年前
回复

使用道具 举报

您当前使用的浏览器IE内核版本过低会导致网站显示错误

请使用高速内核浏览器或其他浏览器