遇见高人 发表于 2019-5-10 22:46

【maxscript】003.在时间轴下方再增加个工具栏,了解一下

本帖最后由 遇见高人 于 2019-5-10 22:55 编辑

上期讲到将任意脚本塞到工具栏中,并设置快捷键。
工具栏是有限的,至少,在当前主流的1920*1080的分辨率下,除去默认的按钮,上面已经没什么可以利用的空间了,那么,我们考虑一下max的下方。


先说下思路
1、写一个脚本A,主要是运用“fliein”的功能,放到max的startup目录内,每次启动自动加载这个脚本。
2、上面的fliein路径,指向一个其他路径脚本B,这个脚本的功能就是在max时间轴下方创建一个工具栏。
3、以后更新的脚本,就在B上面修改,至于A,不用管了,卸载max或者打包带回家只需要将B带走,A就一行字,重装max之后顺手写上放好,熟悉的脚本又回来了。

(至于脚本A只是一句filein的功能,那么它是否有存在的必要,我觉得这个问题不大的。假如你想把所有脚本都放在startup内,也是一点毛病都没有的。纯粹个人习惯,喜欢就好。)

下面开始全新的干货。(插入的代码好像又翻车了,主要代码我都有截图发出来的,文末的脚本有兴趣也可以了解下。)

1、打开脚本编辑器,新建脚本A,一行代码,简单易懂,直接将我在用的截图上来。
在这个例子中,只需要第一行的代码就行了,至于下方第二行那个,指向的是另一个自制工具集合,功能上随便你加什么(模型蒙皮,骨骼,FBX输出,MAX文件合并和另存等等),暂时不管它。


---------下方为代码--------------------
filein"D:\Maxscript_2013\\UI_TimeLine.ms" ----意思就是,运行这个路径下以UI_TimeLine.ms命名的脚本。
---------------

将上述代码保存为XXX.ms文件,至startup目录内即可。
此为第一步,max软件先别关。因为还要在对应目录创建个UI_TimeLine.ms的脚本,否则上面那个脚本A会找不到脚本B,报错弹框就会出现了。

2、新建脚本B。
首先来个最基础的代码,其实我也是拿大神的脚本来改的。我没去深入了解,留着以后回头再看看把。现在只是拿来用着,不出错,就行了。
代码如下

------------
--try(destroyDialog UnderTimerange)catch()--发现这句并没有什么卵用,在前面加横杠注释掉--
rollout UnderTimerange ("Test_UI")
(      
button bt_close "Close" height:20 width:80 tooltip:"Close" pos:      
on bt_close pressed do
         (               
                  try(cui.UnRegisterDialogBar UnderTimerange)catch()               
                  try(destroyDialog UnderTimerange)catch()
      )      
)createdialog UnderTimerange 1900 40      --设置长宽的参数,有兴趣的可以测试下自己喜欢的参数。
cui.RegisterDialogBar UnderTimerange style:#(#cui_dock_bottom,#cui_dock_top,#cui_floatable, #style_toolwindow)
cui.DockDialogBar UnderTimerange #cui_dock_bottom
--------------

运行之后出来的结果就是底下多出一条“工具栏”,除了已有的按钮 Colse, 其他地方都是空白。




我把close的按钮保留下来了,因为方便调试脚本。他的作用就是把这个工具栏关闭掉,然后你可以在脚本编辑器中随时修改,接着运行,就会重新出现在底下。假如去掉这个按钮,那么在不关闭原有脚本的情况下,新运行的脚本就会一层层叠加起来,最后就得重启max 了。就像下图,明显,这并不是我们想要的。




完成这两个步骤之后,即
1、脚本A在startup目录内。
2、脚本A所指向的路径,存在脚本B。

你就可以试下重启max,如无意外,脚本B就会自动运行,在max的时间轴下方显示出来。

基本的框架就像上面那样,就下来的事情, 就是添加各种button了。


下面是第二部分。



这里的按钮所实现的功能,大部分都是max里面有的,我只是把它们都集中在一起,省的来回点。

2vport----设置为2个视口显示。
3vport----设置为3个视口显示。
4vport----设置为4个视口显示。
1-4         ------四分之一倍速,并开启所有视口同时播放
1-2         ------二分之一倍速,并开启所有视口同时播放
1         ------原速,并开启所有视口同时播放
Loop------是否循环播放。

以我用的为例,首先的是2,3,4视口之间切换显示。关键词【 viewport】 查看maxscrtpi 的帮助文档。找到对应的说明



根据之前的做法,稍微调整下,就可以对号入座了。
---------------------------视口切换----------------------------------------
      button bt_2vport "2vport" height:20 tooltip:"2视口" pos:
      button bt_3vport "3vport" height:20 tooltip:"3视口" pos:
      button bt_4vport "4vport" height:20 tooltip:"4视口" pos:
      on bt_2vport pressed do
                (
                viewport.setLayout(#layout_2v)
                )
       on bt_3vport pressed do
                (
               viewport.setLayout(#layout_3vl)
               )
      on bt_4vport pressed do
                (
                viewport.setLayout(#layout_4)
            )
-------------------------


把上面代码复制到脚本B中,如下图(注意各个button之间,括号的配对,是成对组成的,如果运行出错,检查下是不是使用了中文输入法,或者是括号写少写多了)



好了,按CTRL+E 运行之后,一切如常。


接着后面的按钮,是播放速度的切换。帮助文档的说明,说得比较精简。


主要意思就是:1 ,2 ,3,4,5 ,5个数值对应max的5个选项。






1 - 1/4x   意思就是如果这个值为1那么对应的播放速度则是四分之一的速度。
3 - 1x   这就是是设置为3的时候,对应的是原速播放。
我只设置了3个,分别是四分之一,二分之一,和原速。代码如下,将它依次复制到上面那块代码的下方,就行。
-----------------------播放速度切换---------------------------------
      button bt_1D4Speed "1-4" width:50 height:20 tooltip:"0.25倍速" pos:
      button bt_1D2Speed "1-2" width:50 height:20 tooltip:"0.5倍速" pos:
      button bt_1Speed "1" width:50 height:20 tooltip:"1倍速" pos:
         on bt_1D4Speed pressed do
                (
                timeConfiguration.playActiveOnly = false--是否只在激活的窗口才播放动画
                timeConfiguration.playbackSpeed = 1 --播放速度 按顺序1 就是四分之一速度,2 就是二分之一,3 就是原速,4,5.
      )
      on bt_1D2Speed pressed do
                (
                timeConfiguration.playActiveOnly = false--是否只在激活的窗口才播放动画
                timeConfiguration.playbackSpeed = 2 --播放速度 按顺序1 就是四分之一速度,2 就是二分之一,3 就是原速,4,5.
      )
      on bt_1Speed pressed do
                (
                timeConfiguration.playActiveOnly = false--是否只在激活的窗口才播放动画
                timeConfiguration.playbackSpeed = 3 --播放速度 按顺序1 就是四分之一速度,2 就是二分之一,3 就是原速,4,5.
      )
-----------------------



接下来那个Loop,继续安排在后面即可。
--------------是否循环播放动画----------------
      checkbox check_loop "Loop" pos: width:40 height:20 tooltip:"循环播放"
      on check_loop changed state do
      (
                if state then
               (
                              timeConfiguration.playbackLoop = true
                        )
               else
               (
                        timeConfiguration.playbackLoop = false
                )
         )
-------------------



完整脚本见附件。




















补充内容 (2019-5-24 07:14):
过段时间回来,发现不能编辑了?
关于这个脚本,这个算是上篇吧。
下篇部分,正在准备中……

遇见高人 发表于 2019-12-24 11:23

zenozheng 发表于 2019-12-23 22:19
高人,请教自制工具集合,anitool,窗口写法。跪求。。。

我也是边学习边写,有些功能还能完善,有些倒是越来月少用了。你想要的东西,我晚点也会慢慢发出来。只不过越靠近年底越少时间。
我争取年底前继续下一篇吧。

书叹 发表于 2019-12-24 10:06

感谢大佬,学习了

zenozheng 发表于 2019-12-23 22:19

高人,请教自制工具集合,anitool,窗口写法。跪求。。。

Araragi 发表于 2019-10-29 10:37

第一行是用来将已经打开的脚本关闭的

LFZY 发表于 2019-6-1 13:56

谢谢楼主分享

kingseve 发表于 2019-5-22 19:52

哈哈哈哈哈

一溜轻烟 发表于 2019-5-20 23:34

赞一个

CC14克罗克达尔 发表于 2019-5-11 13:26

先收藏..再慢慢看

bright47 发表于 2019-5-11 11:42

先收藏..再慢慢看

J丶K 发表于 2019-5-11 10:11

{:6_199:}
页: [1] 2
查看完整版本: 【maxscript】003.在时间轴下方再增加个工具栏,了解一下