Đây có thể là một câu hỏi khá phức tạp vì có thể rất nhiều bạn không biết phần mềm mà tôi đang viết nó cho: Autodesk Maya 2011. Tôi đang cố gắng tăng tốc quá trình chậm chạp (gian lận: cho các ký tự 3d khả năng di chuyển) bằng cách viết một tập lệnh tự động thực hiện.Lặp lại qua BA danh sách cùng một lúc bằng Python?
Tôi sẽ cố hết sức để giải thích tình huống.
Tôi có một tập lệnh nhận một đối tượng, lặp qua con của đối tượng đó, lưu trữ chúng trong danh sách, sau đó đặt đối tượng ban đầu ở cuối danh sách, đảo ngược danh sách vì nó sai đường, đặt đối tượng ban đầu ở phía trước.
Sự cố: Có ba danh sách khác nhau tất cả cùng một đối tượng TYPE nhưng có tên khác nhau và chúng thực sự là các đối tượng khác nhau. Mục tiêu của tôi là kết nối chúng với nhau bằng cách tạo ra các nút gọi là 'pha trộn'. Nhưng nếu tôi có một vòng lặp để tạo chúng cho từng đối tượng trong danh sách A, thì tôi cần các vòng lặp kết nối chúng với các đối tượng trong các danh sách khác và tôi không thể tìm ra điều này.
Đây là mã của tôi, nó đã được phát với số lượng không đầy đủ so với trước đây so với vòng lặp thực tế.
import maya.cmds as cmds
def crBC(IKJoint, FKJoint, bindJoint, xQuan, switch):
# gets children joints of the selected joint
chHipIK = cmds.listRelatives(IKJoint, ad = True, type = 'joint')
chHipFK = cmds.listRelatives(FKJoint, ad = True, type = 'joint')
chHipBind = cmds.listRelatives(bindJoint, ad = True, type = 'joint')
# list is built backwards, this reverses the list
chHipIK.reverse()
chHipFK.reverse()
chHipBind.reverse()
# appends the initial joint to the list
chHipIK.append(IKJoint)
chHipFK.append(FKJoint)
chHipBind.append(bindJoint)
# puts the last joint at the start of the list because the initial joint
# was added to the end
chHipIK.insert(0, chHipIK.pop())
chHipFK.insert(0, chHipFK.pop())
chHipBind.insert(0, chHipBind.pop())
# pops off the remaining joints in the list the user does not wish to be blended
chHipBind[xQuan:] = []
chHipIK[xQuan:] = []
chHipFK[xQuan:] = []
# goes through the bind joints, makes a blend colors for each one, connects
# the switch to the blender
for a in chHipBind
rotBC = cmds.shadingNode('blendColors', asUtility = True, n = a + 'rotate_BC')
tranBC = cmds.shadingNode('blendColors', asUtility = True, n = a + 'tran_BC')
scaleBC = cmds.shadingNode('blendColors', asUtility = True, n = a + 'scale_BC')
cmds.connectAttr(switch + '.ikFkSwitch', rotBC + '.blender')
cmds.connectAttr(switch + '.ikFkSwitch', tranBC + '.blender')
cmds.connectAttr(switch + '.ikFkSwitch', scaleBC + '.blender')
# goes through the ik joints, connects to the blend colors
for b in chHipIK:
cmds.connectAttr(b + '.rotate', rotBC + '.color1')
cmds.connectAttr(b + '.translate', tranBC + '.color1')
cmds.connectAttr(b + '.scale', scaleBC + '.color1')
# connects FK joints to the blend colors
for c in chHipFK:
cmds.connectAttr(c + '.rotate', rotBC + '.color2')
cmds.connectAttr(c + '.translate', tranBC + '.color2')
cmds.connectAttr(c + '.scale', scaleBC + '.color2')
# connects blend colors to bind joints
cmds.connectAttr(rotBC + '.output', d + '.rotate')
cmds.connectAttr(tranBC + '.output', d + '.translate')
cmds.connectAttr(scaleBC + '.output', d + '.scale')
# executes function
crBC('L_hip_IK', 'L_hip_FK', 'L_hip_JNT', 6, 'L_legSwitch_CTRL')
Are các chỉ số trong tất cả ba danh sách giống nhau không? I E. 0 là như nhau cho cả ba danh sách? – GWW
Sẽ dễ dàng hơn nếu bạn làm theo những gì mã của bạn đang cố gắng thực hiện nếu các tên biến không phải là nhiễu đường. – Daenyth
@Denyeny: Chúng không phải là nhiễu đường nếu bạn hiểu không gian sự cố. –