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
