this is a quick snippet I through together for you... it basically will
iterate the dag for meshes (you can set the filter type to whatever you
want)... then once you have the MDagPath or you can get an MObject to the
data you can do whatever you want to it.


###############################################

import maya.OpenMaya as om

iter = om.MItDag(om.MItDag.kDepthFirst, om.MFn.kMesh)

while not iter.isDone():

    path = om.MDagPath()
    iter.getPath(path)
    print iter.partialPathName()

    iter.next()


###############################################

On Thu, Feb 12, 2009 at 11:44 AM, ryant <[email protected]> wrote:

>
> This is not exactly what your asking for but it is along those lines.
> This is an example of how to iterate over the selected meshes. This is
> outside the context of my plug which I could show also but from the
> looks there you have most of what you need and something like this
> might work.
>
> # Get the selection and create a selection list of all the nodes
> meshes
> selection = OpenMaya.MSelectionList()
> OpenMaya.MGlobal.getActiveSelectionList( selection );
>
> # Create an itorator to iterate over the selection
> # Use the MFn class to as a filter to filter geometry types
> iter = OpenMaya.MItSelectionList ( selection,
> OpenMaya.MFn.kGeometric );
>
> # Iterate over selected geometry nodes
> while not iter.isDone():
>
>        #Define local vars
>        MObject iterMesh;
>        MFnMesh selectMesh;
>        MString name;
>        MDagPath dagpath;
>
>        #Get the mesh from iter
>        iter.getDependNode( iterMesh );
>
>        #Debuging and displaying info
>        selectMesh.setObject( iterMesh );
>        name = selectMesh.name();
>        MGlobal::displayInfo( "retreiving mesh named : " + name );
>
>        #Get the dag path of the geometry node
>        iter.getDagPath( dagpath );
>
>        iter.next()
>
> On Feb 12, 8:44 am, "[email protected]"
> <[email protected]> wrote:
> > Hey, i ve been writing a bullet collsion tool and have completed the
> > first part of the technical part. basically the function is to fire a
> > ray and detect the first intersection with a mesh. a big thanks to all
> > the people who post here cuz without your help i would nt of been able
> > to begin to understand what the hell any of this means! the code is
> > good and with 2 locators as ray start and direction it detects
> > intersection the name of the face intersected and the normals of the
> > face.
> >
> > The next stage is to build in an itterator that will cycle through all
> > the meshs in a scene? any suggestions ? at the moment it just looks
> > for pcube1
> >
> > import maya.cmds as mc
> > import maya.OpenMaya as om
> >
> > ## create 2 locators named start and finish to angle the ray points
> >
> > startWP = mc.xform('start',q=1,rp=1,ws=1)
> > FinishWP = mc.xform('Finish',q=1,rp=1,ws=1)
> >
> > vectBtwPnts=  ((startWP  [0] -FinishWP  [0])*-1), ((startWP  [1] -
> > FinishWP  [1])*-1), ((startWP  [2] -FinishWP  [2])*-1)
> > vectorToFinish = om.MFloatVector(vectBtwPnts[0],vectBtwPnts
> > [1],vectBtwPnts[2])
> >
> > def nameToNode(name ):
> >         selectionList = om.MSelectionList()
> >         selectionList.add( name )
> >         node = om.MObject()
> >         selectionList.getDependNode( 0, node )
> >         return node
> >
> > #retireves the right DAG node for selected objects
> >
> > def nameToDag( name ):
> >         selectionList = om.MSelectionList()
> >         selectionList.add( name )
> >         node = om.MDagPath()
> >         selectionList.getDagPath( 0, node )
> >         return node
> >
> > ## this is where the itterator is needed ? ?
> >
> > dag = nameToDag(" pCube1 " )
> >
> > meshFn = om.MFnMesh()
> > meshFn.setObject( dag )
> >
> > raySource = om.MFloatPoint(startWP[0],startWP[1],startWP[2])
> > rayDirection = vectorToFinish
> > rayDirection = rayDirection.normal()
> >
> > hitFacePtr = om.MScriptUtil().asIntPtr()
> > hitPoint   = om.MFloatPoint()
> >
> > idsSorted          = False
> > testBothDirections = False
> > faceIds            = None
> > triIds             = None
> > accelParams        = None
> > hitRayParam        = None
> > hitTriangle        = None
> > hitBary1           = None
> > hitBary2           = None
> >
> > maxParamPtr                  = 99999999
> > worldSpace = om.MSpace.kWorld
> >
> > hit =  meshFn.closestIntersection(raySource,
> > rayDirection,
> > faceIds,
> > triIds,
> > idsSorted,
> > worldSpace,
> > maxParamPtr,
> > testBothDirections,
> > accelParams,
> > hitPoint,
> > hitRayParam,
> > hitFacePtr,
> > hitTriangle,
> > hitBary1,
> > hitBary2)
> >
> > if hit:
> >         hitFace = om.MScriptUtil ( hitFacePtr ).asInt()
> >
> >         faceNumber = hitFace
> >         vector = om.MVector()
> >         NormalFn = om.MFnMesh(dag)
> >         NormalFn.getPolygonNormal(faceNumber, vector, worldSpace)
> >         hitFace = om.MScriptUtil ( hitFacePtr ).asInt()
> >         print "The hit point in X is %f " %hitPoint[0]
> >         print "The hit point in Y is %f " %hitPoint[1]
> >         print "The hit point in Z is %f " %hitPoint[2]
> >         print "The number of the face hit is %d" %hitFace
> >
> >         print "The normal of the hit face is %f in x"   %vector.x
> >         print "The normal of the hit face is %f in y"   %vector.y
> >         print "The normal of the hit face is %f in z"   %vector.z
> >
>

--~--~---------~--~----~------------~-------~--~----~
Yours,
Maya-Python Club Team.
-~----------~----~----~----~------~----~------~--~---

Reply via email to