【笔记】【Maya工具】Python For Maya(Cmds)(一)Introduction

从零开始

1
2
from maya import cmds
cmds.polyCube()

maya创建了一个物体,但是其实在这里maya脚本并没有获取到这个创建的物体

1
2
cmds.polyCube()

本身是一个命令command,其实返回了这个物体作为一个list

1
2
3
cube = cmds.polyCube()
print(cube)
#['pCube1', 'polyCube1']

在之前的==过期教程==我们了解到,一个属于Transform Node,一个属于Shape Node

实际上pCube1是这个立方体的名字,在大纲可以看到,而polyCube1是创建这个立方体的Maya Node的名字

1
2
3
4
cubeShape = cube[0]#这样就把pCube1取出来了
circle = cmds.circle()
circleShape = circle[0]
cmds.parent(cubeShape,circleShape)#child,parent

1
2
3
4
5
cmds.setAttr("pCube1.tx",lock = True)#锁定立方体的TranslateX属性
cmds.setAttr(cubeShape +".ty",lock = True)
cmds.setAttr(cubeShape +".translate",lock = True)#同时锁定所有translate属性
cmds.setAttr(cubeShape +".rotate",lock = True)#同时锁定所有translate属性
cmds.setAttr(cubeShape +".scale",lock = True)#同时锁定所有translate属性

这样子物体的立方体被锁定了,但是父物体的circle还是正常的,依然会带动子物体变化

1
cmds.select(circleShape)

MayaAPI

  • cmds

    • MEL
      • 可交互性
      • 会在窗口中打印命令
    • 只能用于脚本
    • 只能在maya中使用
  • OpenMaya

    • C++ / C#(only for windows)
      • 不可交互
      • 需要编译
      • 可以在maya外使用
      • 只能用于插件
      • 性能更优
  • Python

    • 两种API均可以使用
    • 可以用于插件或脚本
    • 可以在maya外使用
    • 性能不如C++/C#
    • 简单,有社区

Maya-python API

  • cmds
    • 原本是为MEL设计的
    • 语法风格不太python化
    • 性能不错
    • 过于繁杂
    • 物体通过name来处理
  • OpenMaya
    • 两种版本
      • version1 built for C++
      • version 2 built for python
    • 原本是为C++设计
    • 语法风格不太python化
    • 非常繁杂
    • 更难使用
    • 高性能
    • 直接处理物体
  • PyMEL
    • warps both cmds and OpenMaya
    • 语法更符合python
    • 不太稳定
    • 直接处理物体
Nodes in maya

maya主要影响物体属性,属性通过名称获得

1
polyCube1.input

image-20220628232113093

在api中,attributes被称作plugs,可以给plug赋值

也可以和其他plug进行连接