まず、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.'
(視聴あなたのしやすさにはあまり重要な項目の多くを切り取るを。アイブ)誰も私は、コードのこの混乱を解決する手助けすることはできますか?
括弧を削除します'else():'ブロックのブロック – Greg
返信いただきありがとうございますが、それはうまく動作しませんでした – Calavid
あなたの問題のその部分は間違いありません。これは構文エラーです。スタックトレースがなければ、自分の問題が何であるかは分かりません。 – Greg