在Maya的模型制作过程当中,会出现一些点的重合带来不必要的麻烦,下面将用maya command和python实现检查模型中的重合点并删除。
整体思路:
检查是否存在重合点:我们可以获取模型中点的坐标并将其存入列表中,用count方法判断坐标出现的次数,若返回值大于1则有重点。
def check(self):
self.dict = {}
self.mynewvertex = []
self.lastvertex = []
self.mylistvertex = mc.ls(selection=True, fl=True)
#print (self.mylistvertex)
for item in self.mylistvertex:
verlocation = mc.xform(item, q=True, ws=True, t=True)
self.dict[item] = verlocation
self.mynewvertex.append(verlocation)
for item in self.mynewvertex:
a = self.mynewvertex.count(item)
if a >= 2:
self.lastvertex.append(item)
#pprint.pprint(self.lastvertex)
if len(self.lastvertex)>0:
print 'have coincident point'
else:
print 'not have coincident point'
选中重合点:我们先将模型中的点全部选中并返回点的名称列表,然后将列表遍历,并将点的名称和坐标存入到字典中,通过获取重合点的坐标而确定点的名称,从而选中点。
其中因为我们用count方法来判断是否将点选全,所以我们每选中一个点就要将该点的信息删除
def select(self):
mc.select(clear=True)
value_dict = []
key_dict = []
for item in self.dict.values():
value_dict.append(item)
# pprint.pprint (value_dict)
for item in self.dict.keys():
key_dict.append(item)
# print key_dict
for item in self.lastvertex:
print'yes'
if item in value_dict:
print'if'
while value_dict.count(item) > 1:
get_value_index = value_dict.index(item)
name = key_dict[get_value_index]
print name
mc.select(name, add=True)
value_dict.pop(get_value_index)
key_dict.pop(get_value_index)
print (mc.ls(selection=True))
删除重合点:我们可以将多余的点选中之后deiete删除,这样并不会删掉构造模型的点,只会删除多余的点。
def fix(self):
mc.Delete(mc.ls(sl=True))
print('Deleting completed')
注意:在将点的名称和坐标存入字典时要注意,为了简便要将坐标存为键、名称存为值。因为通过键获取值只需用get方法即可,而通过键获取值则相对麻烦。
maya帮助文档:Maya Help | Autodeskhttps://help.autodesk.com/view/MAYAUL/2019/ENU/