【龙渲经验】pythonInMaya_节点的选择(1)
【选择物体的函数】
在使用各种代码语句来控制物体前,获取物体的属性名称是十分重要的操作。本文主要介绍ls,listRelatives函数的使用。
ls函数和select不同,它并不具备选择物体的功能,它仅是将用户规定的元素载入内置列表中等待调用。如果先选择特定物体,ls函数会获取物体的基本名称;如果附加type 的参数,ls会获取场景中该类型的所有元素名称。
listRelatives函数用于列出DAG(DirectedAcyclicGraph)物体的父子级,常用来获取物体的shape形节点名称,之后调用形节点内的属性。
【上篇例子的改进】
maya中,选择一个物体,默认是选择了这个物体的变形节点,也就是设置运动动画的transform节点。按键盘的向下键,可以拾取物体的形节点(shape):上一个例子中,通过pickWalk这个函数,获取并操作了物体的下游形节点。
不过如果选择了元素模式,例如点、线,pickWalk的命令会产生特殊的选择操作。因此,我将使用其他函数来获取所选物体的形节点。修改上一篇文章中的代码,将pickWalk 函数替换为listRelatives。因为ls是列出所选物体或元素的函数,它只能是在先执行了pickWalk函数才能获得物体的形节点;而使用listRelatives,直接就完成了物体形节点的选择。
py.pickWalk(d='down')
mySel=py.ls(sl=True)
实际可以简化为:
mySel=py.listRelatives()
通过listRelatives函数获取物体的形节点,对应的参数是shape,不过在不输入参数的情况下,默认是开启的,也就是说listRelatives()等同于listRelatives(shapr=True)。maya中很多函数的内置布尔参数默认都是开启的。优化后的脚本:
ds as py
import sys
if py.window('pyColor',ex=True):
py.deleteUI('pyColor',wnd=True)
version=sys.version
def colorObject(arg):
Field('input',q=True,tx=True) mySel=py.listRelatives()
for mySel in mySel:
py.setAttr (mySel+".overrideEnabled",1)
py.setAttr (mySel+".overrideColor",int(value))
def note(arg):
mySel=py.ls(sl=True)
if len(mySel)==0:
colorObject(arg)
def reset(arg):
mySel=py.ls(sl=True)
if len(mySel)==0:
mySel= py.listRelatives()
for mySel in mySel:
py.setAttr (mySel+".overrideEnabled",0)
py.setAttr (mySel+".overrideColor",0)
py.window('pyColor',t='colorCurve')
py.button(en=False,l='python '+version)
<(l='请输入0到31的整数值',fn='fixedWidthFont')
py.button(l='去除颜覆写',c=reset)
py.showWindow()
【例子:自定义NURBS曲线控制器形状--多个物体共用一个变形节点】
通常情况下,我们对一个物体使用maya的parent(父子级)命令,可以将它作为子级加入到另一个物体中。此时改变父级物体的位移旋转缩放,子级会同时受到影响,但改变子级物体,父级不受影响。
以下将是parent命令的特殊用法。
1.创建两个NURBS线圈,调节点或者改变其位置,执行冻结变形命令:
delete inModify->FreezeTransformations;
2.在maya的脚本编辑器中,输入以下mel命令:parent -r -s nurbsCircleShape1 nurbsCircle2
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论