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

Reply via email to