I m trying to figure out how I could use the MMeshIntersector for
collision.
If I use it in an MPxDeformerNode, in conjunction with the geomIter, I
will get the vertex position without the deformation?
Because the MMeshIntersector::getClosestPoint can use the vertex
position to detect a closest point to another mesh, I think if the
actual vertex position is the point use it for the
MMeshIntersector::getClosestPoint.
The vertex will continue moving if the mesh collide with that point.
But I dont know how to get the deforming mesh inside the deform()

Heres is my code:

        def deform(self,dataBlock,geomIter,matrix,multiIndex):

            input = OpenMayaMPx.cvar.MPxDeformerNode_input
            inputArray = dataBlock.inputArrayValue(input)
            inputArray.jumpToElement(multiIndex)
            inputData = inputArray.inputValue()
            inputGeom = OpenMayaMPx.cvar.MPxDeformerNode_inputGeom
            inputGeomDataH = inputData.child(inputGeom)
            inputMesh = inputGeomDataH.asMesh()
            sourceFnMesh = OpenMaya.MFnMesh( inputMesh )

            connected = False
            verts = OpenMaya.MPointArray()
            geomIter.allPositions(verts)
            maxDistHandle = dataBlock.inputValue(self.aMaxDistance)
            maxDist = maxDistHandle.asDouble()

            try:
                colliderMesh   =
dataBlock.inputValue( sk_collideNode.aCollider ).asMesh()
                colliderFnMesh = OpenMaya.MFnMesh( colliderMesh )
                connected = True

            except:
                   connected = False

            if (connected):
               intersector = OpenMaya.MMeshIntersector()
               intersector.create(colliderMesh)
               point = OpenMaya.MPoint()

               while geomIter.isDone() == False:
                  ind = geomIter.index()
 
sourceFnMesh.getPoint(ind,point,OpenMaya.MSpace.kObject)
                  meshPoint = OpenMaya.MPointOnMesh()
                  try:
                      intersector.getClosestPoint(point,
meshPoint,maxDist)
                      FinalPoint =
OpenMaya.MPoint(meshPoint.getPoint())
                  except:
                         FinalPoint = OpenMaya.MPoint(point)
                  verts.set(FinalPoint,ind)
                  geomIter.next()

            geomIter.setAllPositions(verts)

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

Reply via email to