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

Reply via email to