You have to use MScriptUtil so that allows you pass pointers as
arguments to getKnotDomain.
Here is working example of doIt
def doIt(self,argList):
nPosts = 5
radius = 0.5
height = 5.0
# parse the arguments
argData = OpenMaya.MArgDatabase( self.syntax(), argList)
if argData.isFlagSet(kRadiusFlag):
radius = argData.flagArgumentDouble(kRadiusFlag, 0)
if argData.isFlagSet(kHeightFlag):
height = argData.flagArgumentDouble(kHeightFlag, 0)
if argData.isFlagSet(kHelpFlag):
OpenMayaMPx.MPxCommand.setResult(helpText)
selection = OpenMaya.MSelectionList()
OpenMaya.MGlobal.getActiveSelectionList( selection )
dagPath = OpenMaya.MDagPath()
curveFn = OpenMaya.MFnNurbsCurve()
heightRatio = height/radius
iter = OpenMaya.MItSelectionList( selection,
OpenMaya.MFn.kNurbsCurve )
tStartParam = OpenMaya.MScriptUtil()
tStartParam.createFromDouble(0)
tStartPtr = tStartParam.asDoublePtr()
tEndParam = OpenMaya.MScriptUtil()
tEndParam.createFromDouble(0)
tEndPtr = tEndParam.asDoublePtr()
tParam = OpenMaya.MScriptUtil()
tParam.createFromDouble(0)
tPtr = tParam.asDoublePtr()
while ( iter.isDone() == 0):
iter.getDagPath( dagPath )
curveFn.setObject( dagPath )
curveFn.getKnotDomain(tStartPtr, tEndPtr)
pt = OpenMaya.MPoint()
t = OpenMaya.MScriptUtil(tStartPtr).asDouble()
tIncr = ((OpenMaya.MScriptUtil(tEndPtr).asDouble()-
OpenMaya.MScriptUtil(tStartPtr).asDouble())) \
/(nPosts-1)
for i in range(0,nPosts):
curveFn.getPointAtParam(t, pt,
OpenMaya.MSpace.kWorld)
pt.y += 0.5 * height
t += tIncr
mc.cylinder( pivot=(pt.x, pt.y, pt.z),
radius=radius, axis=
(0,1,0), hr=heightRatio )
iter.next()
--~--~---------~--~----~------------~-------~--~----~
Yours,
Maya-Python Club Team.
-~----------~----~----~----~------~----~------~--~---