阿赵的MaxScript学习笔记分享七《Macro Recorder》

MaxScript学习笔记目录
大家好,我是阿赵,这是MaxScript学习笔记分享的第七篇。
前面介绍了很多基础的东西,里面涉及到了很多max对象的操作。这里会存在一个疑惑,3DsMax里面的操作对象类型很多,修改器也很多,我们应该怎样去查询呢?还是要逐个的去记住呢?
其实不需要的,这里介绍一个很好用的工具,叫做MacroRecorder。这是一个命令记录器,可以把我们在3DsMax里面的所有操作的命令都显示出来。结合着之前学习的内容,我们应该很容易就能看懂,有新的操作命令需要查询时,通过MacroRecorder操作一次,就能知道用什么命令了。

1、MacroRecorder窗口

在3DsMax主工具栏上的Scripting/Macro Recorder,可以打开MacroRecorder功能,他的窗口其实是在MaxScript Listener窗口上面的。
在这里插入图片描述
在这里插入图片描述

我们也可以在ScriptListener的菜单里面找到MacroRecorder。需要注意的是,它是有开关的,需要把Enabled选项勾上,它才会真正记录命令

2、操作的例子

在这里插入图片描述
在这里插入图片描述

这个例子里面,我进行了以下操作
1.创建了一个box
2.点空白处取消选择
3.点box选择了box
4.修改box的高度99.1766和高度分段数量20
5.给box添加了Twist扭曲修改器
6.给Twist修改器输入了一个190的角度
7.把这个box塌陷为可编辑多面体

3、命令说明

1.创建命令

之前已经学习过,通过Box()命令可以创建一个盒子。从这个例子可以看出,我们在创建box的时候,随便可以指定各种参数。

2.选择命令

可以通过select命令来选择对象,然后通过clearSelection()命令来取消选择。
也可以通过名字来查找和选择场景中的物体,比如场景中有一个盒子叫做box001,在名字前面加 ,就可以获得这个物体,比如我们打印 ,就可以获得这个物体,比如我们打印 ,就可以获得这个物体,比如我们打印box001,发现获得了这个叫做box001的物体。需要注意的是,3DsMax里面并不要求物体的名字是唯一的,所以很有可能,场景里面会同时存在2个box001,如果使用 b o x 001 ,返回的并不是 2 个 b o x ,而是第一个起名字位 b o x 001 的盒子。需要注意的是,这个选择命令是模拟我们用鼠标选择物体 ( 1 ) 如果当前只有一个物体被选中,我们可以通过 s e l e c t 命令来选择这个物体,选择完了之后,可以通过 g e t c u r r e n t S e l e c t i o n ( ) 命令来获取当前已经选中的物体,也可以用 box001,返回的并不是2个box,而是第一个起名字位box001的盒子。 需要注意的是,这个选择命令是模拟我们用鼠标选择物体 (1)如果当前只有一个物体被选中,我们可以通过select命令来选择这个物体,选择完了之后,可以通过getcurrentSelection()命令来获取当前已经选中的物体,也可以用 box001,返回的并不是2box,而是第一个起名字位box001的盒子。需要注意的是,这个选择命令是模拟我们用鼠标选择物体(1)如果当前只有一个物体被选中,我们可以通过select命令来选择这个物体,选择完了之后,可以通过getcurrentSelection()命令来获取当前已经选中的物体,也可以用来获取当前选择的物体。
比如创建了一个boxt1 = box(),然后select boxt1。
打印$,就会发现打印的是boxt1的内容,然后我们可以delete ,就把 b o x t 1 删掉了 ( 2 ) 如果当前选择的物体不止一个,那么我们用 g e t c u r r e n t S e l e c t i o n ( ) 或者 ,就把boxt1删掉了 (2)如果当前选择的物体不止一个,那么我们用getcurrentSelection()或者 ,就把boxt1删掉了(2)如果当前选择的物体不止一个,那么我们用getcurrentSelection()或者来获得的当前选择,就会变成是一个数组。如果要用脚本同时选中多个物体,就要用数组的形式,比如:select #( B o x 001 , Box001, Box001,Box002)。
(3)这里就存在一个问题,需要判断获得当前选择的东西,是单个物体,还是数组。我们可以用classOf方法来判断。比如curSelect = getcurrentSelection(),然后classOf curSelect,如果得到的结果是Array,那就是数组了。
如果想对场景里面所有对象进行操作,也可以用默认的objects
在这里插入图片描述

objects是一个数组,可以遍历,如果使用select objects,就会选择场景里面所有的对象

3.修改属性

这个之前也学习过了,可以直接通过对象.属性名称来改变对应的属性

4.添加修改器

上面的例子里面,通过命令添加了一个Twist修改器,具体的命令是这样的:
modPanel.addModToSelection (Twist ()) ui:on
需要注意的是,后面还跟着一个 ui:on,这是一个什么东西呢?如果我们手动操作添加修改器,一般是会先跳转到修改面板,然后再添加修改器的。但如果我们使用脚本来添加修改器,那么当前我们可能并不是处于修改面板。
如果当前是在修改面板,那么不需要加ui:on就可以成功添加修改器。如果当前并不在修改面板,那么如果不加ui:on,虽然返回ok,但实际上修改器并没有添加成功。加上了ui:on后, 那边不管当前是否在修改面板,也会打开修改面板,并成功添加修改器。

5.修改器的获取、修改和删除

在这里插入图片描述

再做一个简单的例子,在boxt1上面添加了2个修改器,一个是Twist,一个是Unwrap_UVW,
这时候,我们可以通过boxt1.modifiers来获取boxt1身上的所有修改器列表,这是一个Array,所以可以通过count来获取长度,可以通过下标来获取对应的修改器
在获取到单独的修改器之后,就可以直接通过属性来改变修改器了。
最后,通过deleteModifier boxt1 序号来删除boxt1身上指定序号的修改器

6.塌陷对象

把对象身上的所有修改器塌陷,变成可编辑的网格、可编辑多面体、可编辑面片
macros.run “Modifier Stack” “Convert_to_Mesh”
macros.run “Modifier Stack” “Convert_to_Poly”
macros.run “Modifier Stack” “Convert_to_Patch”

MacroRecorder可以说为我们打开了一扇查询的大门,我们在写脚本遇到不知道怎么写的时候,可以通过正常操作,并在MacroRecorder里面看看具体的命令,就可以猜到一些大概的写法了。

猜你喜欢

转载自blog.csdn.net/liweizhao/article/details/129292013