搜索

搜索

在线
客服

在线客服服务时间: 9:00-20:00

选择下列客服马上在线沟通:

快速
发帖

客服
热线

021-50343443
7*8小时客服服务热线

关注
微信

关注微信公众号
顶部
开启左侧

[插件脚本] 零起点入门MAXScript(第四节)

[复制链接]
有空 发表于 2015-11-23 10:40:43 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 
前几节,我们学习了一些程序基础知识,这节开始学习maxscript实际操作,其实maxscript没有那么神秘,有时候就像说话一样简单,而且max还告诉你该怎样通过脚本控制一些节点,这就是下面要讲的Macro Recorder宏记录器。

Macro Recorder宏录制器
打开max——Maxscript侦听器,菜单——宏录制器——勾选启用。
1.jpg
至此打开了宏录制器。

现在在max视口,随意创意并删除一些物体,如box,看看Maxscript侦听器上部红色区域有什么变化。
2.jpg
是的,上部会出现一行代码:
Box lengthsegs:1 widthsegs:1 heightsegs:1 length:36.3086 width:40.8638 height:19.9143 mapcoords:on pos:[-4.65715,8.82604,0] isSelected:on

这个代码就是创建一个box的代码。macro recorder宏录制器的功能就是把我们的鼠标和键盘操作转化为脚本并记录下来,但是有些操作macro recorder是无法记录的,有时也会给你错误的信息,并且像上面的例子一样,它生成的代码包含一些不必要的默认参数,因此就不要完全依赖它,我们要学会合理的利用这个工具。

那么创建一个简单的box,代码应该如何写呢?
box()
这样,在世界坐标正中心就创建了一个box,长宽高段数均为1,长度也者相同。那么,我要想控制它的参数怎么办呢?下面就要用到点语法"."
. 点语法 我们都知道小数里面要用到".",而maxscript里面它还有个作用就是属性控制。点右边的参数即为点左边的一个属性,这样可以很方便的调用一个节点属性,可以多次使用"."调用里层的属性。现在,首先确保Macro Recorder宏记录器已经启用,然后鼠标选择一下刚刚创建的box,然后在Maxscript侦听器上部红色区域输入如下代码:
$box001.length = 30
$.heightsegs = 2
$.widthsegs = 3
$.lengthsegs = 5
会得到一个带指定属性的box
3.jpg 4.jpg 5.jpg
这就是对应的属性,用脚本控制的参数。上面的代码里面,出现了一个符号,美元符号"$",这是Maxscript里常用的符号,单独出现表示当前选择的物体,$.height表示当前选择的物体box的height高度值,$.height也是一个数值,你可以调用它,也可以给它赋值,比如执行下面的代码:
$.width = 50
$.height = $.width
执行后就是把物体的宽度值赋给了高度width,就使得box的高度和宽度一样。
如果执行$.length = $.width = $.height = 50,那么就是一个正方体,长宽高均为50。


现在不管你调整Maxscript侦听器或者max面板内的属性数值,你会发现两边的数值均会相应改变。


show(showproperties)
Maxscript提供给我们查看节点属性的方法,语法:showproperties <maxwrapper_object>,show是showproperties的缩写,一样用。下面我们执行如下代码:
b = box()  --box()只是一个函数没有属性,赋值之后就产生了一个Node(节点)
show b
得到如下结果:
6.jpg

刚才b = box()语句产生了一个box,并且把这个box赋给了b,所以可以用b来控制这个box的所有属性。如:
b.width = 120
b.mapcoords = on
b.name = "mybox"
上面最后一句是将物体b的名称改为"mybox",b.name可以获取b的名称,也可以设置b的名称。

下面再来看看"$"符号。
当"$"单独出现的时候,它只表示当前选择的物体,在我们只选择一个物体的时候,这个非常好用,你可以用"$.发生"来控制选择的物体,如现在创建一个sphere并单独选中,用show $命令就是显示这个 sphere的控制参数,然后可以通过$.radius控制它的半径。如果没选中物体能不能控制物体呢?能。
用"$物体名称”即是对此名称物体的调用,如我刚才创建一个 sphere,名字叫sphere01,那么$sphere01.radius = 20就是将此物体半径调为20。不管你有没有选择此物体。

move rotate scale...
对物体进行移动,旋转,缩放操作,宏记录如下:
move $ [61.5104,0,0]
macros.run "Tools" "Rotate"
rotate $ (angleaxis 86.3858 [1,0,0])
macros.run "Tools" "Scale"
scale $ [1.93848,1.93848,1.93848]
macros.run "Tools" "Move"


移动和缩放都用到了一个数值类型point3
point3  3维向量,它定义了3d空间中的一个点。表示形式是[数值,数值,数值],如[0,0,0]就表示坐标中心,[0,10,10]就表示x轴为0,y轴为10,z轴为10的一个点。
move  上面的移动和缩放都是相对操作,移动是相对以前坐标移动多少,后面的三维数值就是在x,y,z轴上各移动多少。
--Absolute Mode Transform Type-in
如果想调绝对坐标值怎么办?选择绝对变换指定。
7.jpg


现在如果移动,就变成了如下代码
macros.run "Tools" "Move"
select $Box003
$.pos = [70.6892,0,0]



如果你选择了很多物体,然后执行$.pos=[0,0,0],那么所有选择的物体都会回到坐标中心了。


如何单独控制x,y,z轴呢?也很简单,$.pos.x=100就是把选择物体x轴移到100,y,z轴同理。


scale
试下试行这一句:$.scale = [0.5,0.5,0.5],scale后面的数值意思是分别在x,y,z轴缩放0.5倍,也就是缩小一半;如果是$.scale = [2,2,2],则是缩放2倍。其他同理。


rotate
旋转语法1:rotate <node> <angle> <axis_point3>具体实例:
rotate $(angleaxis 30[0,0,1]    --将选择物体在Z轴旋转30度
旋转语法2:rotate <node> <eulerangles>具体实例:
rotate $ (eulerangles 0 0 30)也是将选择物体在Z轴旋转30度,那这两个有什么不同呢?
主要是两个数值类型的不同,这里大概讲一下。
maxscript提供3种旋转算法,上面讲了两种,还有一种是rotate <node> <quat>,这里的不同之处,就是旋转的角度表示方法不同,这3个表示方法分别是:
angleaxis
语法:angleaxis <degrees_float> <axis_point3>
<degrees_float>是角度,<axis_point3>是方向向量。
如:angleaxis 30[0,0,1]表示Z轴相对30度,用到旋转上就是Z轴正向旋转30度,同理,rotate $(angleaxis 30[0,0,1])则是Z轴负方向旋转30度。


eulerangles
语法:eulerangles <x_degrees>  <y_degrees> <z_degrees>这个好理解,分别定义x,y,z的角度。
如:eulerangles 30 30 0表示x轴30度,y轴30度,z轴0度。


quat比较复杂,这里暂不深入。


————————本节完————————
出售提现 接单赚钱 积分转换 推广 充值 赞助VIP 新手帮助
 
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 淡定 神作 路过 感恩
您需要登录后才可以回帖 登录 | 现在注册

本版积分规则


0关注

3粉丝

142帖子

排行榜
  • 任务内容: 根据cad及参考图片建模,先拉个大概再深入 任务周期: 2024年 03月 09日
    420
作者专栏

精品资源出售,数据快速变现

项目交易合作,保障双方权益

COLOR旗下综合交易服务平台

  • 公众号

    官方微信公众号,欢迎您的加入。

    扫码关注
  • 微信客服

    微信客服,有问题请找我。

    扫码联系
  • QQ客服
广告图片

自由者CG期待您来加入

Copyright   ©2014-现在  自由者CGPowered by©Discuz!技术支持:迪恩网络    ( 沪ICP备11008872号 )