2015-10-20 143 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