2015-10-20 60 views
0

我在Autodesk Maya中使用Python。我有这样的剧本,我得到这个错误Maya Python无效语法#第1行

错误:线路1:在Python语法无效#

脚本

from maya import cmds , OpenMaya 
sel = cmds.ls(sl = 1) 
crv = "curveShape1" 
for s in sel : 
    pos = cmds.xform(s ,q = 1 , ws = 1 , t = 1) 
    u = getUParam(pos , crv) 
    name = s.replace("_LOC" , "_PCI") 
    pci = cmds.createNode(""pointOnCurveInfo" , n = name) 
    cmds.connectAttr(crv + '.worldSpace' , pci + '.inputCurve') 
    cmds.setAttr(pci + '.parameter' , u) 
    cmds.connectAttr(pci + '.position' , s + '.t') 

回答

0

字符串字面只使用“或”一行线形成。对于多行字符串你可以使用:“”” ....

所以,解决语法错误只是改变:

pci = cmds.createNode(""pointOnCurveInfo" , n = name) 

要:

pci = cmds.createNode("pointOnCurveInfo" , n = name) 

被提到的第二个错误,因为该功能getUParam没有在那一刻定义的,所以你必须在使用它之前定义此getUParam功能,如:

from maya import cmds , OpenMaya 

def getUParam(pnt = [], crv = None): 

    point = OpenMaya.MPoint(pnt[0],pnt[1],pnt[2]) 
    curveFn = OpenMaya.MFnNurbsCurve(getDagPath(crv)) 
    paramUtill=OpenMaya.MScriptUtil() 
    paramPtr=paramUtill.asDoublePtr() 
    isOnCurve = curveFn.isPointOnCurve(point) 
    if isOnCurve == True: 

     curveFn.getParamAtPoint(point , paramPtr,0.001,OpenMaya.MSpace.kObject) 
    else : 
     point = curveFn.closestPoint(point,paramPtr,0.001,OpenMaya.MSpace.kObject) 
     curveFn.getParamAtPoint(point , paramPtr,0.001,OpenMaya.MSpace.kObject) 

    param = paramUtill.getDouble(paramPtr) 
    return param 

def getDagPath(objectName): 

    if isinstance(objectName, list)==True: 
     oNodeList=[] 
     for o in objectName: 
      selectionList = OpenMaya.MSelectionList() 
      selectionList.add(o) 
      oNode = OpenMaya.MDagPath() 
      selectionList.getDagPath(0, oNode) 
      oNodeList.append(oNode) 
     return oNodeList 
    else: 
     selectionList = OpenMaya.MSelectionList() 
     selectionList.add(objectName) 
     oNode = OpenMaya.MDagPath() 
     selectionList.getDagPath(0, oNode) 
     return oNode 

sel = cmds.ls(sl =1) 
crv = "curveShape1" 
for s in sel : 
    pos = cmds.xform(s ,q = 1 , ws = 1 , t = 1) 
    u = getUParam(pos , crv) 
    name = s.replace("_LOC" , "_PCI") 
    pci = cmds.createNode("pointOnCurveInfo" , n = name) 
    cmds.connectAttr(crv + '.worldSpace' , pci + '.inputCurve') 
    cmds.setAttr(pci + '.parameter' , u) 
    cmds.connectAttr(pci + '.position' , s + '.t') 

希望它帮助,

+0

是的你太多了,但我有一个新的错误。 #错误:第1行:NameError:文件<玛雅控制台>线7:名称 'getUParam' 没有定义# 这是整个脚本 #错误:第1行:NameError:文件<玛雅控制台>线7:名称'getUParam'未定义# –

+0

tahnk你avenet,但我有这个新版本的脚本的新错误 “”“#错误:第1行:RuntimeError:文件S:\ Maya_2016_DI \ build \ Release \ runTime \ Python \ Lib \ site-packages \ maya \ OpenMaya.py行10923:(kInvalidParameter):Object does not exist#“” –

+0

对不起@RaoufBessghaier,我不能再帮你了,因为这是一个与Maya有关的问题,请检查pnt list是可以的,如果你看不到任何可疑的东西,这次可以发布另外一个关于Maya的问题。如果我的回答对你有帮助,如果你能投票并标记这是正确的。谢谢。 – avenet