Example: dagList = ['|a|b|c', '|a', '|a|b', '|a']
print sortByHierarchy(dagList) # ['|a|b|c', '|a', '|a|b', '|a'] On Fri, Aug 24, 2012 at 10:37 AM, Justin Israel <[email protected]> wrote: > Haha, no don't get me wrong. I am totally NOT making a statement that > it is lame. I was saying that I don't see where the sort aspect is > occurring in your function. All i see is that you append them to the > list and then go back over that same list and strip away the bit you > put in front again. How does it sort? > > > On Fri, Aug 24, 2012 at 10:33 AM, Nicolas Combecave > <[email protected]> wrote: >> It does the same as yours but it's okay to say it's lame, obfuscated and not >> leveraging python power ^^ >> >> >> 2012/8/24 Justin Israel <[email protected]> >>> >>> Well ya, but in your code it wasn't sorting at all. What was it trying >>> to do actually? >>> >>> From a python interp you can do: >>> >>> help([].sort) >>> sort(...) >>> L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*; >>> cmp(x, y) -> -1, 0, 1 >>> >>> >>> >>> On Fri, Aug 24, 2012 at 10:21 AM, Nicolas Combecave >>> <[email protected]> wrote: >>> > 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 >>> >>> -- >>> 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
