2017-02-05 10 views
0

まず、mayaからaimconstraint UIを再作成しようとしていることをお知らせください。これはPythonを使った初めてのiveなので、私の頭を包み込む小さなプロジェクトをやっています。if/elseステートメントで文字列を駆動するmaya/python API

問題の子は、オフセットオフセットboolとワールドアップベクトルの列挙型です。目標の制約の変数を駆動するために結果を呼び出す方法を理解できません。

だから、私のif/else文がうまく動作するのにいくつかの問題があります。私が試してみるたびに(Offset Row、World Up Type Rowを維持する)、私は "無効な構文"や "予期しないインデント"やCsharpを使用している間に決して得られない何か他のエラーが発生します。その上に、ある定義を別の定義で呼び出す方法を考えることはできません。

#AimConstrain.py 

import maya.cmds as cmds 
import functools 

#main 
maintainOffsetBool = False 
OffsetX = 0.0 
OffsetY = 0.0 
OffsetZ = 0.0 
aimVectorX = 1.0 
aimVectorY = 0.0 
aimVectorZ = 0.0 
upVectorX = 0.0 
upVectorY = 1.0 
upVectorZ = 0.0 
worldUpTypeField = '' 
worldUpVectorX = 0.0 
worldUpVectorY = 1.0 
worldUpVectorZ = 0.0 
weightFloat = 1.0 

def createUI(pWindowTitle, pApplyCallback): 

    windowID = 'CustomAimConstraint' 

    if cmds.window(windowID, exists=True): 
     cmds.deleteUI(windowID) 

    cmds.window(windowID, title=pWindowTitle, sizeable=False, resizeToFitChildren=True) 

    cmds.rowColumnLayout(numberOfColumns=6, columnWidth=[ (1,60), (2,90), (3,75), (4,75), (5,75), (6,60) ], columnOffset=[ (1, 'right',3) ]) 


    # Maintain Offset Row 
    cmds.separator(h=10, style='none') 

    cmds.text(label='Maintain Offset: ') 

    maintainOffsetCB = cmds.checkBox(value = False, label=''): 
    if(maintainOffsetCB): 
     maintainOffsetBool = True 
    else(): 
     maintainOffsetBool = False 

    cmds.separator(h=10, style='none') 
    cmds.separator(h=10, style='none') 
    cmds.separator(h=10, style='none') 

    # The XYZ of the Offset 
    cmds.separator(h=10, style='none') 

    cmds.text(label='Offset:') 

    OffsetX = cmds.floatField(value=0, maxValue=1.0, minValue=0.0) 

    OffsetY = cmds.floatField(value=0, maxValue=1.0, minValue=0.0) 

    OffsetZ = cmds.floatField(value=0, maxValue=1.0, minValue=0.0) 

    cmds.separator(h=10, style='none') 

    # The XYZ of the Aim Vector 
    cmds.separator(h=10, style='none') 

    cmds.text(label='Aim Vector:') 

    aimVectorX = cmds.floatField(value=1, maxValue=1.0, minValue=0.0) 

    aimVectorY = cmds.floatField(value=0, maxValue=1.0, minValue=0.0) 

    aimVectorZ = cmds.floatField(value=0, maxValue=1.0, minValue=0.0) 

    cmds.separator(h=10, style='none') 

    # The XYZ of the Up Vector 
    cmds.separator(h=10, style='none') 

    cmds.text(label='Up Vector:') 

    upVectorX = cmds.floatField(value=0, maxValue=1.0, minValue=0.0) 

    upVectorY = cmds.floatField(value=1, maxValue=1.0, minValue=0.0) 

    upVectorZ = cmds.floatField(value=0, maxValue=1.0, minValue=0.0) 

    cmds.separator(h=10, style='none') 

    # World Up Type Row 
    cmds.separator(h=10, style='none') 

    cmds.text(label='World Up Type:') 

    cmds.optionMenu("worldUpTypeMenu", width=2) 
    cmds.menuItem(label = 'Vector') 
    cmds.menuItem(label = 'World') 
    cmds.menuItem(label = 'None') 

    cmds.separator(h=10, style='none') 
    cmds.separator(h=10, style='none') 
    cmds.separator(h=10, style='none') 

    # World Up XYZ 
    cmds.separator(h=10, style='none') 

    cmds.text(label='World Up Vector:') 

    worldUpVectorX = cmds.floatField(value=0, maxValue=1.0, minValue=0.0) 

    worldUpVectorY = cmds.floatField(value=1, maxValue=1.0, minValue=0.0) 

    worldUpVectorZ = cmds.floatField(value=0, maxValue=1.0, minValue=0.0) 

    cmds.separator(h=10, style='none') 

    # Weight Setting 
    cmds.separator(h=10, style='none') 

    cmds.text(label='Weight: ') 

    weightFloat = cmds.floatField(value=1) 

    cmds.separator(h=10, style='none') 
    cmds.separator(h=10, style='none') 
    cmds.separator(h=10, style='none') 

    # Bottom Row/Buttons and shit 
    cmds.separator(h=10, style='none') 
    cmds.separator(h=10, style='none') 

    cmds.button(label='Add', command=addCallBack) 

    cmds.button(label='Apply', command=applyCallBack) 

    cmds.button(label='Cancel', command=cancelCallBack) 

    cmds.showWindow() 

# this is for the enum, go to World Up Type row. 
def worldUpTypeDef(): 
    currentValue = cmds.optionMenu("worldUpTypeMenu", query=True, value=True): 
    if currentValue == 'Vector': 
     worldUpTypeField = 'Vector' 
    elif currentValue == 'World': 
     worldUpTypeField = 'World' 
    elif currentValue == 'None': 
     worldUpTypeField = 'None' 

def cancelCallBack(): 
    if cmds.window(windowID, exists=True): 
     cmds.deleteUI(windowID) 

def applyCallBack(applyConstraint, worldUpTypeDef): 


def addCallBack(applyConstraint, worldUpTypeDef): 
    if cmds.window(windowID, exists=True): 
     cmds.deleteUI(windowID) 

createUI('Custom Aim Constraint', applyCallBack) 

# Defines the Aim Constraint itself. 
def applyConstraint(): 
    selectionList = cmds.ls(orderedSelection=True) 

    if len(selectionList) >= 2: 

     print 'Selected items: %s' % (selectionList) 

     targetName = selectionList[0] 

     selectionList.remove(targetName) 

     for objectName in selectionList: 

      print 'Constraining %s towards %s' % (objectName, targetName) 

      cmds.aimConstraint(targetName, objectName, aimVector = [aimVectorX, aimVectorY, aimVectorZ], maintainOffset = maintainOffestBool, offset = [OffsetX, OffsetY, OffsetZ], upVector = [upVectorX, upVectorY, upVectorZ], weight = weightFloat, worldUpType = worldUpTypeField, worldUpVector = [worldUpVectorX, worldUpVectorY, worldUpVectorZ]) 
       #aimConstraint([target...] object , [aimVector=[float, float, float]], [maintainOffset=boolean], [name=string], [offset=[float, float, float]], [remove=boolean], [skip=string], [targetList=boolean], [upVector=[float, float, float]], [weight=float], [weightAliasList=boolean], [worldUpObject=name], [worldUpType=string], [worldUpVector=[float, float, float]]) 

    else: 

     print 'Please select two or more objects.' 

(視聴あなたのしやすさにはあまり重要な項目の多くを切り取るを。アイブ)誰も私は、コードのこの混乱を解決する手助けすることはできますか?

+1

括弧を削除します'else():'ブロックのブロック – Greg

+0

返信いただきありがとうございますが、それはうまく動作しませんでした – Calavid

+0

あなたの問題のその部分は間違いありません。これは構文エラーです。スタックトレースがなければ、自分の問題が何であるかは分かりません。 – Greg

答えて

0

私はすべての構文エラーを修正しましたが、私はMayaモジュールをインストールしていません。あなたのコードが何をしているかわからないので、何か問題があるかどうかはわかりません。

# Error: addCallBack() takes exactly 2 arguments (1 given) # 

あなたが定義された:

def addCallBack(applyConstraint, worldUpTypeDef): 

だから、あなたのDEFを養うために、部分的に使用する必要があり、新しいエラーが説明もされ

#AimConstrain.py 

import maya.cmds as cmds 
import functools 

#main 
maintainOffsetBool = False 
OffsetX = 0.0 
OffsetY = 0.0 
OffsetZ = 0.0 
aimVectorX = 1.0 
aimVectorY = 0.0 
aimVectorZ = 0.0 
upVectorX = 0.0 
upVectorY = 1.0 
upVectorZ = 0.0 
worldUpTypeField = '' 
worldUpVectorX = 0.0 
worldUpVectorY = 1.0 
worldUpVectorZ = 0.0 
weightFloat = 1.0 

def createUI(pWindowTitle, pApplyCallback): 

    windowID = 'CustomAimConstraint' 

    if cmds.window(windowID, exists=True): 
     cmds.deleteUI(windowID) 

    cmds.window(windowID, title=pWindowTitle, sizeable=False, resizeToFitChildren=True) 

    cmds.rowColumnLayout(numberOfColumns=6, columnWidth=[ (1,60), (2,90), (3,75), (4,75), (5,75), (6,60) ], columnOffset=[ (1, 'right',3) ]) 


    # Maintain Offset Row 
    cmds.separator(h=10, style='none') 

    cmds.text(label='Maintain Offset: ') 

    maintainOffsetCB = cmds.checkBox(value = False, label='') 
    if(maintainOffsetCB): 
     maintainOffsetBool = True 
    else: 
     maintainOffsetBool = False 

    cmds.separator(h=10, style='none') 
    cmds.separator(h=10, style='none') 
    cmds.separator(h=10, style='none') 

    # The XYZ of the Offset 
    cmds.separator(h=10, style='none') 

    cmds.text(label='Offset:') 

    OffsetX = cmds.floatField(value=0, maxValue=1.0, minValue=0.0) 

    OffsetY = cmds.floatField(value=0, maxValue=1.0, minValue=0.0) 

    OffsetZ = cmds.floatField(value=0, maxValue=1.0, minValue=0.0) 

    cmds.separator(h=10, style='none') 

    # The XYZ of the Aim Vector 
    cmds.separator(h=10, style='none') 

    cmds.text(label='Aim Vector:') 

    aimVectorX = cmds.floatField(value=1, maxValue=1.0, minValue=0.0) 

    aimVectorY = cmds.floatField(value=0, maxValue=1.0, minValue=0.0) 

    aimVectorZ = cmds.floatField(value=0, maxValue=1.0, minValue=0.0) 

    cmds.separator(h=10, style='none') 

    # The XYZ of the Up Vector 
    cmds.separator(h=10, style='none') 

    cmds.text(label='Up Vector:') 

    upVectorX = cmds.floatField(value=0, maxValue=1.0, minValue=0.0) 

    upVectorY = cmds.floatField(value=1, maxValue=1.0, minValue=0.0) 

    upVectorZ = cmds.floatField(value=0, maxValue=1.0, minValue=0.0) 

    cmds.separator(h=10, style='none') 

    # World Up Type Row 
    cmds.separator(h=10, style='none') 

    cmds.text(label='World Up Type:') 

    cmds.optionMenu("worldUpTypeMenu", width=2) 
    cmds.menuItem(label = 'Vector') 
    cmds.menuItem(label = 'World') 
    cmds.menuItem(label = 'None') 

    cmds.separator(h=10, style='none') 
    cmds.separator(h=10, style='none') 
    cmds.separator(h=10, style='none') 

    # World Up XYZ 
    cmds.separator(h=10, style='none') 

    cmds.text(label='World Up Vector:') 

    worldUpVectorX = cmds.floatField(value=0, maxValue=1.0, minValue=0.0) 

    worldUpVectorY = cmds.floatField(value=1, maxValue=1.0, minValue=0.0) 

    worldUpVectorZ = cmds.floatField(value=0, maxValue=1.0, minValue=0.0) 

    cmds.separator(h=10, style='none') 

    # Weight Setting 
    cmds.separator(h=10, style='none') 

    cmds.text(label='Weight: ') 

    weightFloat = cmds.floatField(value=1) 

    cmds.separator(h=10, style='none') 
    cmds.separator(h=10, style='none') 
    cmds.separator(h=10, style='none') 

    # Bottom Row/Buttons and shit 
    cmds.separator(h=10, style='none') 
    cmds.separator(h=10, style='none') 

    cmds.button(label='Add', command=addCallBack) 

    cmds.button(label='Apply', command=applyCallBack) 

    cmds.button(label='Cancel', command=cancelCallBack) 

    cmds.showWindow() 

# this is for the enum, go to World Up Type row. 
def worldUpTypeDef(): 
    currentValue = cmds.optionMenu("worldUpTypeMenu", query=True, value=True) 
    if currentValue == 'Vector': 
     worldUpTypeField = 'Vector' 
    elif currentValue == 'World': 
     worldUpTypeField = 'World' 
    elif currentValue == 'None': 
     worldUpTypeField = 'None' 

def cancelCallBack(): 
    if cmds.window(windowID, exists=True): 
     cmds.deleteUI(windowID) 

def applyCallBack(applyConstraint, worldUpTypeDef): 
    print() 


def addCallBack(applyConstraint, worldUpTypeDef): 
    if cmds.window(windowID, exists=True): 
     cmds.deleteUI(windowID) 

createUI('Custom Aim Constraint', applyCallBack) 

# Defines the Aim Constraint itself. 
def applyConstraint(): 
    selectionList = cmds.ls(orderedSelection=True) 

    if len(selectionList) >= 2: 

     print ('Selected items: %s' % (selectionList)) 

     targetName = selectionList[0] 

     selectionList.remove(targetName) 

     for objectName in selectionList: 

      print ('Constraining %s towards %s' % (objectName, targetName)) 

      cmds.aimConstraint(targetName, objectName, aimVector = [aimVectorX, aimVectorY, aimVectorZ], maintainOffset = maintainOffestBool, offset = [OffsetX, OffsetY, OffsetZ], upVector = [upVectorX, upVectorY, upVectorZ], weight = weightFloat, worldUpType = worldUpTypeField, worldUpVector = [worldUpVectorX, worldUpVectorY, worldUpVectorZ]) 
       #aimConstraint([target...] object , [aimVector=[float, float, float]], [maintainOffset=boolean], [name=string], [offset=[float, float, float]], [remove=boolean], [skip=string], [targetList=boolean], [upVector=[float, float, float]], [weight=float], [weightAliasList=boolean], [worldUpObject=name], [worldUpType=string], [worldUpVector=[float, float, float]]) 

    else: 

     print ('Please select two or more objects.') 
+0

これはすごくありがとうございます:) – Calavid

1

すべての問題がある場合は私に知らせてください。ここに:

行131:cmds.button(label='Add', command=addCallBack)

マヤは、我々はデフ

--- EDITに「*引数」を追加だからこそ、あなたのほかに、コマンドフラグをtrueの値を返すUIというは

[...etc] 

cmds.button(label='Add', command=partial(addCallBack, "First Arg", "Scnd Arg")) 

[...etc] 

def addCallBack(applyConstraint, worldUpTypeDef, *args): 

注---

用部分の詳細な説明:「最初のArg」が、それはあらゆる種類のデータになります:私が書いたMaya Python - Using data from UI

注文字列、リスト、値、引数、dictionnary、デフ、クラス...など

+0

本当にありがとう、あなたの助けをありがとう:私はなぜ知っていませんが、私は本当にpythonで苦労しています。 ああ、病気になる。あなたの時間をもう一度ありがとう。 – Calavid

+0

タイトルに答えるので最初の回答が正しいとマークされましたが、あなたはちょうど感謝しています:) – Calavid

+1

[stackoverflow docs](http://stackoverflow.com/documentation/maya/7627/creating-maya-ui) maya pythonのUIに物事をフックする方法については、いくつか参考にしてください。 – theodox

関連する問題