# -*-coding:utf-8-*-
from maya import cmds
# 创建Gear类
class Gear(object):
def __init__(self):
"""
初始化transform,exturde,constructor的值
"""
self.transform = None
self.extrude = None
self.constructor = None
# 创建齿轮的函数
def createGear(self, teeth=10, length=0.2):
"""
创建齿轮的函数
:param teeth: 齿轮数
:param length: 齿轮长度
:return: None
"""
# 物体细分数应该为齿轮数的两倍
spans = teeth * 2
# 创建一个pipe物体(Return value string[]Object name and node name.)
self.transform, self.constructor = cmds.polyPipe(subdivisionsAxis=spans)
# 将选择面的序号放入列表中
sideFaces = range(spans*2, spans*3, 2)
cmds.select(clear=True)
for face in sideFaces:
# 每隔一个面选择一个面
cmds.select("%s.f[%s]" % (self.transform, face), add=True)
# 挤出面,返回节点名称
self.extrude = cmds.polyExtrudeFacet(localTranslateZ=length)[0]
# 返回polyPipe的物体名称和节点名称和extrude的节点名称
return None
def modifyGear(self, teeth=20, length=0.1):
"""
修改齿轮的函数
:param teeth:齿轮数
:param length: 齿轮长度
:return: None
"""
spans = teeth*2
# 修改poplyPipe的细分数
cmds.polyPipe(self.constructor, edit=True, subdivisionsAxis=spans)
# 重新确定应该挤出的面
sideFaces = range(spans*2, spans*3, 2)
faceNames=[]
for face in sideFaces:
faceName = "f[%s]" %(face)
faceNames.append(faceName)
# 重新设置extrude节点输入面组件的属性(?看不太懂setAttr的帮助文档)
cmds.setAttr("%s.inputComponents" %(self.extrude),
len(faceNames), *faceNames, type="componentList")
# 重新设置挤出节点的挤出长度
cmds.polyExtrudeFacet(self.extrude, edit=True, localTranslateZ=length)
return None