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

Reply via email to