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

Reply via email to