Sorry should of said which maya I was working with, currently testing in maya2011
So Ive tested this out in a few versions of maya, 2010 for example this code works fine Ive tracked it down to what seems to be the facePtr? facePtr = None, code runs no problems and gives correct results now..if I move hitFacePtr = om.MScriptUtil().asIntPtr() to be declared the line before the hit takes place it works no problem... again I have only seem to have found this in maya 2011 default or sp1 Strange... it seems that this combination, declaring our om.MFloatPoint() after we try to create a pointer will trip out in maya2011? hitFacePtr = om.MScriptUtil().asIntPtr() hitPoint = om.MFloatPoint() On May 13, 4:45 pm, Rik <[email protected]> wrote: > Hey guys, > > First of all a big thank you to all that have contributed to this > list, its helped me no end! > Its my first time here so apologies if this is a dumb question or Ive > completely over looked something?? > > I'm a little mystified.... when I do a meshFn.closestIntersection() I > get hitPoint.x = 0? > It seems to find y and z fine? > > Just to show a simplified example the code below is a slightly adapted > version from:: [Maya-Python Club:1743] Re: Need an itterator HELP ! ! > > import maya.cmds as mc > import maya.OpenMaya as om > > mc.file(new=True, force=True) > mc.polyCube() > mc.spaceLocator(name='originLOC') > mc.spaceLocator(name='finishLOC') > mc.spaceLocator(name='hitLOC') > mc.setAttr('originLOC.tx', 5) > mc.setAttr('finishLOC.tx', 3) > mc.setAttr('hitLOC.tz', 5) > > ## create 2 locators named start and finish to angle the ray points > > startWP = mc.xform('originLOC',q=1,rp=1,ws=1) > FinishWP = mc.xform('finishLOC',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] # result 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 > > mc.setAttr("hitLOC.tx", hitPoint[0]) # result 0? > mc.setAttr("hitLOC.ty", hitPoint[1]) > mc.setAttr("hitLOC.tz", hitPoint[2]) -- view archives: http://groups.google.com/group/python_inside_maya change your subscription settings: http://groups.google.com/group/python_inside_maya/subscribe
