You mean if I do something like:

(assuming all verts/polys are on the same object)

selListA = MSelectionList()
selListA.add(someVertsAndPolys)
selListB = MSelectionList()
selListB.add(otherVertsAndPolys)
selListA.merge(selListB)

...I will end up with 4 items when I iterate through... ie, verts from A,
polys from A, verts from B, polys from B... or just 2 (ie, merged verts, and
merged polys)?

I would expect the 2nd.

If you were expecting ONE item - containing both verts and polys - like I
said earlier - it's impossible to get an MObject which holds two different
component types.  You have to keep track of that on your own, unfortunately.

- Paul


On Tue, Dec 8, 2009 at 3:07 PM, Brandon Harris <[email protected]> wrote:

> Initial tests are showing that it does the same thing. If the
> component types are different it doesn't merge them together. I would
> have to itr through grab the individual indices and then add them back
> into a clean list with all of them if I want this to work. Feels not
> work it.
>
> Brandon L. Harris
>
>
>
> On Dec 8, 4:45 pm, Paul Molodowitch <[email protected]> wrote:
> > On Tue, Dec 8, 2009 at 2:15 PM, Brandon Harris <[email protected]>
> wrote:
> > > That MSelectionList.merge() actually sounds like what I'm going for.
> > > Will that work with multiple component types? (ie. edges and
> > > vertices)
> >
> > It SHOULD... though I've never explicitly tested it myself.  Actually,
> I'd
> > be curious to know what you find out.
> >
> > - Paul
> >
> >
> >
> > > On Dec 8, 4:07 pm, Paul Molodowitch <[email protected]> wrote:
> > > > Hmm... well, not entirely certain what exactly you're trying to
> > > accomplish.
> > > > Do you mean you'd like a single component MObject, which holds ALL of
> the
> > > > selected components on that object? Ie, something that would hold the
> > > > selected vertices, AND edges, AND uvs, etc?
> >
> > > > If so, that's not possible.  Component MObjects are hardwired to only
> > > > contain information about only one type of component.
> >
> > > > However, your comment about 'grabbing all the component indices and
> going
> > > > back through and rebuilding the selectionList' makes me think I'm
> just
> > > not
> > > > understanding what your end goal here is.  Are you trying to, say,
> build
> > > an
> > > > 'aggregate selection' from multiple MSelectionList objects?  In that
> > > case,
> > > > the best strategy might be to just use MSelectionList.merge()...
> >
> > > > - Paul
> >
> > > > On Tue, Dec 8, 2009 at 1:15 PM, Brandon Harris <[email protected]
> >
> > > wrote:
> > > > > ok, Issue now is with how to work around this particular
> limitation.
> > > > > If Iter over the selection list and grab the component data. Is
> there
> > > > > a way (without converting the component MObject into indexes) to
> add
> > > > > the component data together on objects that are the same. This is
> > > > > mainly to account for multiple component type selections on
> multiple
> > > > > objects.
> >
> > > > > import maya.OpenMaya as openMaya
> > > > > import maya.OpenMayaAnim as openAnim
> >
> > > > > #first thing is to find out how many objects we're selecting.
> >
> > > > > selection = openMaya.MSelectionList()
> > > > > openMaya.MGlobal.getActiveSelectionList(selection)
> >
> > > > > selectionItr = openMaya.MItSelectionList(selection)
> > > > > objects = {}
> > > > > while not selectionItr.isDone():
> > > > >        tmpObject = openMaya.MObject()
> > > > >        tmpPath = openMaya.MDagPath()
> > > > >        selectionItr.getDagPath(tmpPath,tmpObject)
> >
> > > > >        object[tmpPath.fullPathName()] = tmpObject
> >
> > > > >        selectionItr.next()
> >
> > > > > so here I have it use the dagPath as a key so that later I can add
> > > > > other components from the same mesh to it. The issue is that, as
> far
> > > > > as I know, there isn't a way of adding all of the components
> together
> > > > > as MObjects. Is there a way of doing it without going through the
> > > > > process of determining mesh  type, grabbing all the component
> indices
> > > > > and going back through and rebuilding the selectionList?
> >
> > > > > Brandon L. Harris
> >
> > > > > On Dec 3, 2:14 pm, Ling <[email protected]> wrote:
> > > > > > You guys are SSSSOOOOOOOOOOOO awesome!
> >
> > > > > > I got it works with your tips.. thanks a lot guys!
> >
> > > > > > On Dec 2, 7:21 am, Paul Molodowitch <[email protected]> wrote:
> >
> > > > > > > > 1.but if I run
> > > > > > > > dagFn = om.MFnDagNode(MObject)
> >
> > > > > > > > if will have error like:
> > > > > > > > RuntimeError: (kInvalidParameter): Object is incompatible
> with
> > > this
> > > > > > > > method #
> >
> > > > > > > > is this because the MFnDagNode is for MObject handle pointing
> to
> > > a
> > > > > dag
> > > > > > > > node instead of a component?
> >
> > > > > > > Yup, you got it.
> > > > > > > The component MObject doesn't have any information about nodes,
> or
> > > dag
> > > > > > > paths, etc.  It's essentially little more than a set of indices
> (in
> > > > > most
> > > > > > > cases, anyway - there's actually a large variety of different
> > > component
> > > > > > > types, some of which hide a bunch of information we can't
> access).
> > > This
> > > > > > > means, for instance, you could use the same component object to
> > > refer
> > > > > to
> > > > > > > vertices on two different meshes, if you wanted to reference
> the
> > > same
> > > > > set of
> > > > > > > vertices on both meshes.
> >
> > > > > > > > 2. also,dose the components, such as poly face or poly edge
> has
> > > any
> > > > > > > > bounding box?
> > > > > > > > If it dosen't, I want to get all the points position on that
> poly
> > > > > > > > face, and do some simple math, so how can get these
> positions?
> >
> > > > > > > I don't know of any easy built in method that will give you a
> > > bounding
> > > > > box
> > > > > > > if you have a dag path and an component mobj; As Brandon
> pointed
> > > out,
> > > > > though
> > > > > > > the best way to get the point positions is to use one of the
> MIt*
> > > > > classes.
> > > > > > > You could always feed those values into an MBoundingBox object
> as
> > > you
> > > > > go...
> >
> > > > > > > > 3. After some conditions, I want to return the component
> > > MObject's
> > > > > > > > string name,but
> >
> > > > > > > > dagPath.fullPathName()
> > > > > > > > will return : # Result: |pCube1|pCubeShape1 #
> >
> > > > > > > > how can i get the original  'pCubeShape1.f[0]' instead?
> >
> > > > > > > The fullPathName gives that because, just like the component
> > > mobject
> > > > > has no
> > > > > > > information about dag paths or nodes, the dagPath has no
> > > information
> > > > > about
> > > > > > > components. You need both to "completely specify" an exact
> > > component.
> > > > > If you
> > > > > > > want a string to a given component, the easiest way I know is
> to
> > > just
> > > > > use an
> > > > > > > MSelectionList:
> >
> > > > > > > # Do some stuff to get myDagPath and myComponentMobj
> > > > > > > sel = MSelectionList()
> > > > > > > sel.add(myDagPath, myComponentMobj)
> > > > > > > compNames = []
> > > > > > > sel.getSelectionStrings(0, compNames)
> >
> > > > > > > Note that you need an array of strings, even though you're only
> > > > > grabbing the
> > > > > > > first item in the selection list, because a single component
> mobj
> > > may
> > > > > need
> > > > > > > to be represented as several strings - ie,
> > > > > > > myComponentMobj =>  f[0], f[3:7], f[10]
> >
> > > > > > > - Paul
> >
> > > > > --
> > > > >http://groups.google.com/group/python_inside_maya
> >
> > > --
> > >http://groups.google.com/group/python_inside_maya
> >
> >
>
> --
> http://groups.google.com/group/python_inside_maya
>

-- 
http://groups.google.com/group/python_inside_maya

Reply via email to