查看原文
其他

【教程077】如何用MAXScript快速选择指定多边形

图灵 3D科研绘图 2021-12-21

今天的教程还是教大家一些Max脚本的知识,据不完全统计,之前教过大家的MAXScript知识有:

创建对象——

如:sphere segments:24 radius:50

随机材质【教程035】——

如:$.material = meditMaterials[(random 1 3)]

阵列&环形阵列【教程062 & 图释016】——

如:b = sphere()

       for i = 1 to 6 do copy b pos:[(i-1)*30, 0, 0]

随机移动、旋转和缩放的基本语句【教程071】——

如:move $ [x = (random -100 100), y, z]

       for a in $ do rotate a (eulerangles (random -180 180) 0 0)

……


MAXScript的好处在于能够解决常规建模难以处理的问题,比如让一堆对象随机旋转任意角度,手动操作的话会累到手抽筋,而用max脚本也就一句话的事情。


在科研绘图中,“随机”是经常会遇到的字眼,各种random脚本的使用学习必不可少。但是今天我要教大家的是另一项功能,如何快速选择指定的多边形?


有人会问了,直接在多边形子层级用鼠标点击对应的多边形不就行了吗,我还费那个劲要输代码来实现,这不是脑子有病么!


那么,如果给你一个9×10的平面,让你快速选中下图红色区域的多边形,你是按着Ctrl键一个一个加选呢,还是用参数调节如着了魔一样的体积选择修改器呢?


如果换做MAXScript的话,以上这些操作不过是几行代码和按一次Shift+Enter运行的事情。


前提是,你得知道这些代码是什么意思。


其实,我不是一个专业的程序员,但谁说只有程序员才能写代码呢?只要你感兴趣,肯努力,肯花时间,哪怕是在街边卖莴苣的大婶,我也能教会你MAXScript。


对于我这种现学现卖的玩家,如果你怕我把你教坏了,以下内容就不必看了。如果你觉得确实能学到点儿东西,那这里的教程将是你的宝藏。


上面的十几行代码其实也就for循环语句是核心内容,前面的都是些准备工作,我们一行行来剖析(坐稳了,我要开车了):


1/

plane length:100 width:90 lengthsegs:10 widthsegs:9

意思是创建一个长度100,宽度90的平面,长度分段为10,宽度分段为9。下面是这一句单独运行的结果,没错的话你会得到Plane001。


2/

converttopoly $plane001

convert-to-poly,亦即将plane001转为可编辑多边形,MAXScript的方便之处在于你无需区分大小写,符号对了就能生效。注意这里plane001前面加了个$,我们说过$是选择的意思,因为在鼠标操作中我们也是先选中对象,再转为可编辑多边形的,这里是互相对应的。


3/

b = select $plane001

这句是选中平面对象,并将其命名为b。其实命不命名都没啥关系,这一步主要是选中这个对象。鼠标操作时我们会很自然地先选中对象然后操作,同样,在脚本编辑中,选择语句也是一个使用频率较高的句子,否则出了错都不知道什么原因。


以上3句运行完之后,会在脚本侦听器中返回如下结果,都是蓝色的说明没问题。


4/

sym = polyop.getnumfaces $

这一句的意思是得到选中对象的面数,即9*10 = 90。记住polyop.getnumfaces的表达方式就好。


5/

subobjectLevel = 4

选择多边形子层级,因为我们要设置多边形的id值,必须先切换到多边形子层级。在可编辑多边形中,多边形对应的是第4个层级。


现在返回结果如下:


6-13/

for i = 1 to sym do

(

if mod i 2 == 0 then

(

polyop.setfaceselection $ #{i}

polyop.setfacematid $ #{i} 2

)

)

重点来了!!这是一个for循环语句,之前有过很多次例子了。这里需要注意的有三处,一是余数的表达式mod i 2 == 0,表示当i除以2的余数为0,即i为偶数时;二是polyop.setfaceselection $ #{i}表示选择了第i个面;最后polyop.setfacematid $ #{i} 2表示将所选的第i个面的多边形id值设为2(因为默认的是1)。现在,我们已经将对应的多边形id值从1改成2了,一切就是发生的这么悄无声息。

14/

$.editablepoly.selectbymaterial 2

选择所有id值为2的面就可以了。


再比如,我们创建一个100×100的平面,长和宽分段各位50,每隔2个面选一个。只需将mod i 2 == 0改成mod i 3 == 0即可,运行得到如下结果。


如果在for循环中加一个多边形挤出随机高度的语句,将会得到高低起伏的柱状分布,如图所示。


总之呢,你要控制住自己,见好就收。学一点是一点,贪多嚼不烂。


今日教程到此结束,可能感兴趣的人不是很多。但教程是死的,人是活的,活学活用才是学习的目的啊。


更多教程欢迎查看往期教程,有问题可以在微信后台留言,或者加入我们的QQ学习交流群,1群将满,可加2群。(群号见下方图片)



: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存