Actually, looking at the python doc for the list.sort() method, it doesn't mention optional arguments... http://docs.python.org/tutorial/datastructures.html
I've had to search in here to find the info: http://docs.python.org/library/stdtypes.html#mutable-sequence-types 2012/8/24 Nicolas Combecave <[email protected]> > Damn, your version is QUITE shorter! > > As my python is very weak, I tried to do a conversion of how I'd do it in > mel! > I sure do need to deepen my python seriously... > Although I don't fully understand the lambda usage, I sure will look into > it right now ^^ > > So, about the (lame and lenghty) function I sent before, that was doing > nothing, it's because in the process of cleaning for pasting into gmail, > I forgot the sort command... > > It should have been like this... > > def sortByHierarchy(dagList): > # we'll use '@' as it can't never be found in maya node names > > sortedByHierarchy = [] > > for elem in dagList: > depth = elem.count('|') > sortedByHierarchy.append (str(depth) + "@" + elem) > > * sortedByHierarchy.sort()* > > for i in range(sortedByHierarchy.__len__()): > sortedByHierarchy[i] = sortedByHierarchy[i].split('@')[1] > > return sortedByHierarchy > > > The idea was to prefix each long name with it's depth info, sort that, and > strip back this depth info to return a proper list... > > Nicolas > > > > 2012/8/24 Justin Israel <[email protected]> > >> Maybe I am missing something, but it doesn't seem like the sortByHierarchy() >> function is doing anything. >> It takes in a list, then loops over it, creating a new list with the >> depth count + @ + name. Then it just loops back over the new list, and >> replaces it with the name again. But no sorting is happening at all. >> >> If that function is supposed to simply sort by the depth value, couldn't >> you just do this? >> >> dagList.sort(key=lambda x: x.count('|')) >> # dagList.sort(key=lambda x: x.count('|'), reverse=True) >> >> What is the logic of concatenating the depth + @ + name? >> >> >> On Fri, Aug 24, 2012 at 5:54 AM, Nicolas Combecave < >> [email protected]> wrote: >> >>> I've tested this and it seems to work as you need: >>> >>> import maya.cmds as cmds >>> import random >>> >>> # CREATING RANDOM LOCATORS AND JOINTS TO TEST SNAPPING HIERARCHIES >>> max = 10 >>> prevLoc = None >>> prevJoint = None >>> >>> for i in range(max): >>> >>> loc = cmds.spaceLocator(name = "Gizmo_"+str(i)) >>> cmds.xform(worldSpace = True, t = [random.random()*10, >>> random.random()*10, random.random()*10]) >>> cmds.select(cl = True) >>> joint = cmds.joint(name = "joint_"+str(i), position = >>> [random.random()*10, random.random()*10, random.random()*10]) >>> >>> if prevLoc != None: >>> cmds.parent (loc[0], prevLoc[0]) >>> if prevJoint != None: >>> cmds.parent (joint, prevJoint) >>> >>> prevLoc = loc >>> prevJoint = joint >>> >>> # HERE YOU CAN REPARENT SOME LOCATORS AND JOINTS IN THE SAME WAY IN >>> ORDER TO TEST HIERARCHIES WITH BRANCHES >>> >>> # NOW SNAPPING JOINTS HIEARCHY TO LOCATORS HIERARCHY >>> # WE ASSUME YOU DON'T HAVE DUPLICATE SHORT NAMES IN JOINTS HIERARCHY >>> liste = cmds.ls('Gizmo_*', type = "transform", dag = True, l = True) >>> >>> for gizmo in liste: >>> gizmo_id = gizmo.split('|')[-1].split('_')[-1] >>> joint_id = "joint_" + gizmo_id >>> gizmoPos = cmds.xform(gizmo, q = True, worldSpace = True, t = True) >>> cmds.xform(joint_id, worldSpace= True, absolute = True, t = >>> (gizmoPos[0],gizmoPos[1],gizmoPos[2])) >>> >>> >>> >>> Anyway, it's always a good thing to have a little utility function to >>> order list by hierarchy >>> Here is one quickly hacked: >>> >>> def sortByHierarchy(dagList): >>> # we'll use '@' as it can't never be found in maya node names >>> >>> sortedByHierarchy = [] >>> >>> for elem in dagList: >>> depth = elem.count('|') >>> sortedByHierarchy.append (str(depth) + "@" + elem) >>> for i in range(sortedByHierarchy.__len__()): >>> sortedByHierarchy[i] = sortedByHierarchy[i].split('@')[1] >>> >>> return sortedByHierarchy >>> >>> print sortByHierarchy(liste) >>> >>> Nicolas >>> >>> -- >>> view archives: http://groups.google.com/group/python_inside_maya >>> change your subscription settings: >>> http://groups.google.com/group/python_inside_maya/subscribe >>> >> >> -- >> view archives: http://groups.google.com/group/python_inside_maya >> change your subscription settings: >> http://groups.google.com/group/python_inside_maya/subscribe >> > > -- view archives: http://groups.google.com/group/python_inside_maya change your subscription settings: http://groups.google.com/group/python_inside_maya/subscribe
