当前位置:   article > 正文

mayapython学习笔记(4)结合使用变量和maya命令_maya学习笔记

maya学习笔记

1.输入:

import maya.cmds;
sphereNodes=maya.cmds.polySphere();
print (sphereNodes);

输出:

 

我们可以看到maya.cmds.polySphere();创建圆球后返回值被记录到sphereNodes中,注意返回的列表不包含maya节点,只包含节点的名称。此列表使用del()函数不会删除maya节点,仅仅会删除具有两个字符串的列表。

maya大纲视图示例:

 我们可以使用sphereShape=sphereNodes[1];将列表中1标量的值传给sphereShape,来进行后续一系列的操作。

输入:

rad=maya.cmds.polySphere(
    sphereShape,q=True,radius=True
);
maya.cmds.polySphere(sphereShape,e=True,radius=rad*2);

此时maya窗口:

代码表示的是查询sphereShape中名称的半径,将值传输给rad,并进入编辑模式将rad查询的半径值乘以2。

输出后此时maya窗口:

 

 因此可以读取球体属性以创建其他物体:

 rad=maya.cmds.polySphere(
    sphereShape,q=True,radius=True
);
print (rad);
maya.cmds.polyCube(
width=rad*2,
height=rad*2,
depth=rad*2
);

代码表示的是读取查询sphereShape的半径,存储到rad中,并打印rad值,读取出为2,后续则创建4*4*4的立方体

maya窗口:

2.需要注意的是maya创建相同名字的时候,后创建的物体会在名称后面叠加数字,例如:

import maya.cmds;
maya.cmds.polySphere(name='head');
maya.cmds.polyCube(name='head');

代码分别创建名为head的球体和立方体

 窗口:

此时后创建的Cube名称改成了head1,maya要避免重名。

此时查询名为head的Cube,得到的是错误信息。

mayapython是根据选择物体名称来操作节点和属性的,因此如果没有捕获到正确的名称,将无法进行操作,后续会有替代方法。

3.获取与设置值。getAttr和setAttr。

import maya.cmds;
loc=maya.cmds.spaceLocator()[0];

创建新的定位器,将其transform节点的名称保存在名为loc的变量中。

 sx=maya.cmds.getAttr(loc+'.scaleX');
print(sx);

将定位器x-scale保存在变量中打印结果,结果默认为1.0

 getAttr命令允许获得任意节点的属性值,只需要将节点名称、句点和属性名称作为字符串传递。此例字符串为“locator1.scaleX”。

sx *=2;
maya.cmds.setAttr(loc+'.scaleX',sx);

此代码将sx的值增加一倍并为节点设置一个新值。

4.符合属性

由于一些属性属于符合属性,可能包含多个值,这些属性类型与setAttr命令和getAttr命令的工作方式不同。造成这种差别的原因是,setAttr与getAttr命令不知道特点属性想要或包含的数据类型,除非通过属性名称查找。其他命令只适用于特点节点的特定属性,因此可以一种更为直接的方式工作。

继续上一步代码,查询平移数据:

print(maya.cmds.xform(loc,q=True,translation=True));

输出值为[0.0, 0.0, 0.0]

同样使用xform命令时可以改变平移值:

maya.cmds.xform(loc,translation=[0.0, 1.0, 0.0]);

 getAttr()查询值:

print(maya.cmds.getAttr(loc+'.translate'));

输出值为[(0.0, 1.0, 0.0)],这是一个包含元组的列表。

使用setAttr()设置值:

maya.cmds.setAttr(loc+'.translate',1,2,3);

重新print(maya.cmds.getAttr(loc+'.translate'));

打印值为[(1.0, 2.0, 3.0)]

5.connectAttr和disconnectAttr

属性连接的基本要求是类型相同,字符串与十进制数无法连接,但是maya会自动内置转换,比如角度值控制平移。

import maya.cmds;
sphere=maya.cmds.polySphere()[0];
cube=maya.cmds.polyCube()[0];
maya.cmds.connectAttr(cube+'.ry',sphere+'.ty');
maya.cmds.select(cube);

创建立方体和球体,将立方体的y-rotation连接到球体的y-translation。

此时使用旋转工具沿着y轴旋转立方体,球体会大幅度平移。

执行下列代码断开连接:

maya.cmds.disconnectAttr(cube+'.ry',sphere+'.ty');

执行下列代码创建multiplyDivide节点:

mult=maya.cmds.createNode('multiplyDivide');
maya.cmds.connectAttr(cube+'.ry',mult+'.input1X');
maya.cmds.setAttr(mult+'.input2X',1.0/90.0);
maya.cmds.connectAttr(mult+'.outputX',sphere+'.ty');
maya.cmd.select(cube);

现在旋转立方体,每旋转90度,球体偏移一个单位。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/347878
推荐阅读
相关标签
  

闽ICP备14008679号