【Maya常用指令】节点获取篇

本篇文章主要讲述如何获取Maya文件的一些节点。

这种东西以前我就说过好几遍了哈,最后一次说了哈,别管中间操作是什么样,别想着某个操作的命令怎么写,直接手动操作一遍看最终的节点链接效果,结果生成了多少相关节点就用多少个createNode,打上了哪些链接就给哪些链接上connectAttr,各自节点的属性是什么就setAttr,需要什么父子关系就parent,需要重命名就rename,需要获取关系就listRelatives,需要获取链接就listConnections,查询transform信息就xform,列出场景节点就ls。节点(createNode)-链接(connectAttr)-属性(setAttr)永远围绕着3个东西来转。最终呈现给你的并不是中间怎么操作,而是最终的结果,使用到的命令来回就这几个,就是这些命令最终能组成可以生效的节点网络,完毕。————劲爆羊厂长

在Maya内开发的时候通常需要获取当前文件内的某些节点,来更改名称或者设置一些属性。Maya也提供了获取节点的command命令ls。接下来将围绕ls来展开讲讲一们会用到的一些commands命令

通过命令直接获取

Maya的ls命令有内置的获取一些基础物体的参数。例如:

#python
from maya import cmds
cmds.ls(ap=1)#获取当前场景所有节点
cmds.ls(sl=1)#获取选择的节点
cmds.ls(ca=1)#获取所有相机的shape节点
cmds.ls(mat=1)#获取所有材质球
#剩下的就不例举了

通过节点类型获取

在编写脚本的过程中,经常会遇到需要获取某个类型的节点,例如模型,Aistandsurface等

  • 创建一个名为pSphere1的球

  • 获取节点类型objectType

    cmds.objectType("pSphere1")
    # Result: transform # 
  • 使用ls获取某个类型的所有接单

    cmds.ls(type = "transform")
    # Result: [u'front', u'pSphere1', u'persp', u'side', u'top'] # 
  • 注意
    Maya的模型分为transform节点和shape节点,这两个节点的type不一样,在使用时要注意。
    从某种类型获取场景中的某些节点比直接用ls内置的要来的方便,例如cmds.ls(mat=1),会返回所有材质,里面可能有一些事我们不想要的,而通过类型获取可以避免这种情况。同时还有获取不到某些材质球的情况,这个问题后面会开一篇文章来讲述

通过节点名获取

在写脚本过程中,会用到获取某个命名的节点,例如:我要获取命名中包含某个字符串的模型,这个要怎么做到呢?

  • 创建一些基础物体,命名为aaa_bbb,bbb_aaa,bbb_aaa_ccc
  • 利用简单的表达式获取
    ls命令可以使用一些简单的表达式,通过观察,我们可以发现3个物体的名称中都有aaa,我们可以以这个作为突破点

    cmds.ls("aaa*")
    # Result: [u'aaa_bbb', u'aaa_bbbShape']
    cmds.ls("*aaa")
    # Result: [u'bbb_aaa']
    cmds.ls("*aaa*")
    # Result: [u'aaa_bbb', u'aaa_bbbShape', u'bbb_aaa', u'bbb_aaaShape', u'bbb_aaa_ccc', u'bbb_aaa_cccShape']
  • 在通过命名获取节点时,经常会因为namespace的问题,造成大大小小的干扰,这时我们可以用下参数recursive,我们将文件保存为ccccc.ma,在Maya中新建一个场景,然后reference刚刚保存的文件,我们可以看到模型文件的命名前方多了ccccc:
    cmds.ls("*aaa")
    # Result: []

    居然返回为空,这时候我们加上参数

    cmds.ls("*aaa", recursive=1)
    # Result: [u'ccccc:bbb_aaa']

多种方法混合

在刚刚运行命令cmds.ls("*aaa*")的时候,我们得到了6个节点的名字,这里面3个是transform,3个是shape,这时,我们可以加上type参数,来精确筛选

cmds.ls("*aaa*", type="transform")
# Result: [u'aaa_bbb', u'bbb_aaa', u'bbb_aaa_ccc']

长短名称问题

在获取节点的时候有时候会返回一个很长的名字,例如|group3|group2|group1|bbb_aaa_ccc
这是因为Maya中有同名物体的原因,Maya同层级下是禁止重命名的,如果2个物体的命名一样,Maya会自动更改后命名的物体的名称。但是不同层级是可以创建相同命名的物体。Maya为了区分同名的不同物体,加了一个长名称的概念,其实自己观察不难发现,他就是文件所在的层级的全称。
那么我们也可以主动去获取长名称

cmds.ls("*aaa*", type="transform", long=1)
# Result: [u'|aaa_bbb', u'|bbb_aaa', u'|group3|group2|group1|bbb_aaa_ccc']

评论

  1. tipxy
    1 年前
    2023-1-11 9:34:20

    你好,我有个问题,我想判断”基于摄像机选择”这个功能是否开启,有办法实现吗?

    • 博主
      tipxy
      1 年前
      2023-1-11 11:12:43

      可以的,api可以实现这个功能

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇