我是Python和编程的新手,对于我的课程,我已经对树进行了模型化,我想创建一个脚本,允许我删除每行两行的树干的一行面。我希望结果看起来像你看到的缎带树干?删除一行面,保留下一行,删除下一行...依此类推。
在互联网和本网站上查看时,我已经开始这样做了:
TrunkFaces=cmds.ls("Trunk.f[0:414]", fl=True)
DeletedTrunkFaces=TrunkFaces[::5]
print DeletedTrunkFaces
cmds.delete(DeletedTrunkFaces)
所以基本上它很酷,因为它每5个脸都会删除一张脸,但这对我想要的东西来说还不够,我希望程序每两行删除12个面(因为我的主干是一个每边有2个边循环的立方体)面部每面都有3个子面。)
如果已经在某个地方得到回答,我深感抱歉,我找不到答案。谢谢你的帮助!
破皮
答案 0 :(得分:0)
您将遇到的问题是,无法保证面部行始终保持一致;它现在可能是真的但是如果你以后删除了一个面或一个顶点,那么排序将不再一致(实际上,每次运行它时它都会改变顺序。
但是,要从每个R行中抓取N个面,您可以执行以下操作:
def get_face_subsets(object, row_size, take):
faces_count = cmds.polyEvaluate(object, f=True)
subsets = []
# first break the original indexes into a list-of-lists
# each containing <row_size> items
for range_set in range(faces_count / row_size):
start = range_set * row_size
subsets.append(range(faces_count)[start: start+row_size + 1])
results = []
# now loop over the lists, grabbing the first <take> items
# from each
for subset in subsets:
for f in subset[:take]:
results.append(object + ".f[%i]" % f)
return results
get_face_subsets('pSphere1', 5, 2)
// Result: ['pSphere1.f[0]', 'pSphere1.f[1]', 'pSphere1.f[5]', 'pSphere1.f[6]'...
从编程的角度来看,有更好的方法可以做到这一点,但这种方式很容易理解。主要技巧是使用polyEvaluate
和range
将索引作为可预测的数字流,然后将其拆分为更小的组('行')并使用切片来获取这些数据的子集