P05 新建cube 选择cube 不选择cube 删除cube

MEL 命令:

select -cl ; // 取消选择
select -r pCube1 ; // 选择某个名字的物体
select -r pCube1 ;
doDelete; //删除这个物体

python:

from maya import cmds
cmds.polyCube(w=15,h=15,d=15) //新建长宽高多少的物体
cmds.select(clear=True) //取消选择

from maya import cmds
cmds.select(‘pCube1’,replace = True) //选择场景里某个名字的物体
cmds.delete() //进行一个删除的操作

物体移动旋转缩放操作

cmds.move()
cmds.rotate()
cmds.scale()

某个group里的所有物体进行centerPivot操作

cmds.xfrom(instanceGroupName,centerPivot=True)

P06 查找文档

右键下拉菜单 的 quick help 和 documentation

P07 变量

//////

P08 使用变量

from maya import cmds
cube = cmds.polyCube()
circle = cmds.circle()
cmds.parent(cube[0],circle[0]) // 放到父节点中

P09 节点

cube = cmds.polyCube()
// 转换节点 实际节点
//[“pCube1”,”polyCube1”]
转换(transfrom node)节点 负责将物体在场景里进行旋转移动缩放的变换
实际(constructor node)节点 创建节点 node的深度高度宽度 以及分支

1639779503(1).png
windows/Node editor 进入节点编辑器
1639779604(1).png

P10 P2 P3

使用P2

P11 For Loop

from maya import cmds

objectList = [cmds.polyCube,cmds.polyCone,cmds.polySphere]

for obj in objectList:
# print(“The object name is”,obj)
obj()

P12 While Loop

///////

P13 if else

P14

===============================
from maya import cmds

print(cmds.getAttr(‘pSphere1.translate’)) // 获得某个物体的某个属性
print(cmds.setAttr(‘pSphere1.translateX’,15)) //设置某个物体的某个属性

===============================

// 随机生成5个cube的位置
from maya import cmds
import random

numObjects = 5
mode = ‘Cube’

for n in range(numObjects):
if mode == ‘Cube’:
obj = cmds.polyCube()
elif mode == ‘Sphere’:
obj = cmds.polySphere()
elif mode == ‘Cone’:
obj = cmds.polyCone()
else:
cmds.error(“I dont know what to create”)

cmds.setAttr(obj[0]+’.translateX’,random.randint(0,20))
cmds.setAttr(obj[0]+’.translateY’,random.randint(0,20))
cmds.setAttr(obj[0]+’.translateZ’,random.randint(0,20))

P15 Functions

from maya import cmds
import random

numObjects = 5
mode = ‘Cube’

def createObject(mode,numObjects):
objList = []
for n in range(numObjects):
if mode == ‘Cube’:
obj = cmds.polyCube()
elif mode == ‘Sphere’:
obj = cmds.polySphere()
elif mode == ‘Cone’:
obj = cmds.polyCone()
else:
cmds.error(“I dont know what to create”)
objList.append(obj[0])
return objList

print(createObject(‘Cube’,3))

def randomize(objList,minValue = 0,maxValue = 50):
for obj in objList:
cmds.setAttr(obj+’.tx’,random.randint(minValue,maxValue))
cmds.setAttr(obj+’.ty’,random.randint(minValue,maxValue))
cmds.setAttr(obj+’.tz’,random.randint(minValue,maxValue))

objList = createObject(‘Cube’,5)
randomize(objList)

P16 选择

from maya import cmds
import random

numObjects = 5
mode = ‘Cube’

def createObject(mode,numObjects):
objList = []
for n in range(numObjects):
if mode == ‘Cube’:
obj = cmds.polyCube()
elif mode == ‘Sphere’:
obj = cmds.polySphere()
elif mode == ‘Cone’:
obj = cmds.polyCone()
else:
cmds.error(“I dont know what to create”)
objList.append(obj[0])
return objList

print(createObject(‘Cube’,3))

def randomize(objList,minValue = 0,maxValue = 50):
if objList == None:
objList = cmds.ls(selection=True) // 列出当前我们所选择场景里的物体
for obj in objList:
cmds.setAttr(obj+’.tx’,random.randint(minValue,maxValue))
cmds.setAttr(obj+’.ty’,random.randint(minValue,maxValue))
cmds.setAttr(obj+’.tz’,random.randint(minValue,maxValue))

objList = createObject(‘Cube’,5)
randomize(objList)

P17 String

1639883625(1).png
1639883680(1).png
1639883741(1).png 使用%s可以避免这种错误
花括号:1639884027(1).png
1639884099(1).png
1639884136(1).png

P18 范围

1639886275(1).png

P19 Share

import randomrizer

reload(randomrizer)

help function : 三重引号括住的内容

号来进行注解

P20 New editor

1639887328(1).png

p23 user interface code - Windows

import importlib
importlib.reload(module)

1640039068(1).png

不能有同样名字的window
defshowWindow():

  1. name = "RandomizerWindow"<br /> ifcmds.window(name,query=True,exists=True): //删除已有打开的UI<br /> cmds.deleteUI(name)<br /> cmds.window(name)<br /> cmds.showWindow()

import importlib
import randomrizer

importlib.reload(randomrizer)
randomrizer.showWindow()

P24 添加界面元素

1640039747(1).png
1640039811(1).png

defshowWindow():

  1. name = "RandomizerWindow"<br /> ifcmds.window(name,query=True,exists=True):<br /> cmds.deleteUI(name)<br /> cmds.window(name)<br /> cmds.showWindow()<br /> column1 = cmds.columnLayout()<br /> cmds.frameLayout(label="choose an object type") //如图一整个的frame layout<br /> <br /> cmds.columnLayout() //一行一行layout<br /> cmds.radioCollection("objectCreationTypeForit")<br /> cmds.radioButton(label="Sphere")<br /> cmds.radioButton(label="Cube",select=True)<br /> cmds.radioButton(label="Cone") //摁纽选择<br /> <br /> cmds.intField("numObjects",value=3) //输入整形数字<br /> cmds.setParent(column1) //回到父节点<br />#===another grid=====#<br /> frame = cmds.frameLayout("Choose your max ranges")<br /> cmds.gridLayout(numberOfColumns=2,cellWidth=200)<br /> foraxisin'xyz':<br /> cmds.text(label='%s axis' % axis)<br /> cmds.floatField('%s AxisField' % axis ,value=random.uniform(0,10))<br /> cmds.setParent(frame) //回到父节点<br /> cmds.rowLayout(numberOfColumns=2) //一列一列的layout<br /> cmds.radioCollection("randomMode")<br /> cmds.radioButton(label='Absolute',select=True)<br /> cmds.radioButton(label='Relative')<br /> cmds.setParent(column1)<br /> cmds.rowLayout(numberOfColumns=2)<br /> cmds.button(label='Create')<br /> cmds.button(label='Randomize')

1640058661(1).png

1640052158(1).png

P25 添加命令

1640056729(1).png

对create button添加click事件,*args 代表传参到这里面,但可以不用管

1640058562(1).png1640058895(1).png

P26

1640142806(1).png
1640142909(1).png
继承:
1640143077(1).png
1640143572(1).png1640143651(1).png
init方法在你调用class的时候自动创建

super function 重写类的时候 调用父类方法
1640143826(1).png
1640143932(1).png

P28 lining tool 设计骨架

1640153228.png

P30 更好看的UI

1640294123(1).png
1640294143(1).png
1640294041(1).png加载图片

P33 支持其他顶点类型

1640296327(1).png

API 2

1641165055(1).png

API3 animation

1641165797(1).png
1641165854(1).png
1641165952(1).png,第一行还有个selectKey=True ,设置线性运动轨迹

API4 UI 制作

1641179375(1).png
1641179388(1).png
1641179490(1).png1641179592(1).png 如何对齐

1641179681(1).png playbackOptions :start time of the animation
1641179824(1).png
1641179929(1).png1641179970(1).png空白sperator

1641180082(1).png
1641180154.png
Button:
1641180176(1).png
1641180232(1).png
如何连上播放动画
1641180367(1).png import functools

1641180394(1).png
改一下成partial
1641180471(1).png1641180500(1).png
1641180647(1).png注意 textfield的时候是要设置text=True

1641180836(1).png 要调用这个函数

再applycallback里加上这个
1641180871(1).pngd
调用
1641181022(1).png

API5

实现的功能:
1641258906(1).png
1641258929(1).png
储存locators
1641258976(1).png
获得每个selection object里的translate attribute
1641259028(1).png
第0个才是object的transfrom值
1641259110(1).png
设置它为原先的之中
1641259159(1).png
center pivot整一个group locator
1641259292(1).png

1641259435(1).png

新建一个attribute
1641259933(1).png