Я пытаюсь создать инструмент дублирования в Maya, используя Python, но я продолжаю получать сообщение об ошибке

#python #maya

#python #maya

Вопрос:

Я пытаюсь создать инструмент дублирования в Maya в рамках изучения Python. Мне удалось сделать это только с помощью скрипта, но я хотел создать редактируемое окно, которое определяло бы начальное значение случайной генерации и количество дублируемых объектов (в данном случае я назвал их щитами).). Однако пока единственное, что я получаю, это «# Error: недопустимый синтаксис # «. Я был бы признателен за любую помощь или объяснение, спасибо!

 import maya.cmds as cmds
import random

def createUI(pWindowTitle, pApplyCallback):
    
    windowID = 'myWindowID'
    
    if cmds.window( windowID, exists=True):
        cmds.deleteUI (windowID)
        
    cmds.window( windowID, title=pWindowTitle, sizeable=True, resizeToFitChildren=True)
    
    cmds.rowColumnLayout (numberOfColumns=3, columnWidth=[ (1,75), (2,60), (3, 60)], columnOffset=[ (1,'right', 3) ] )
    
    cmds.text( label='Random Seed:')
    
    seedNumber = cmds.intField( minValue=0, maxValue=10000, value=0 )
    
    cmds.separator (h=10, style='none')
    
    cmds.text( label='Shield Amount:')
    
    shieldAmount = cmds.intField( minValue=0, maxValue=1000, value=0 )
    
    cmds.separator (h=10, style='none')
    
    cmds.separator (h=10, style='none')
    cmds.separator (h=10, style='none')
    cmds.separator (h=10, style='none')
    
    cmds.separator (h=10, style='none')
    
    cmds.button( label='Apply', command=functools.partial( pApplyCallback,
                                                  seedNumber,
                                                  shieldAmount) )
    
    def cancelCallback(*pArgs):
        if cmds.window( windowID, exists=True):
            cmds.deleteUI (windowID)
    
    cmds.button( label='Cancel', command=cancelCallback)
    
    cmds.showWindow()
    
def ShieldCreation (pSeedNumber, pShieldAmount)
    random.seed (pSeedNumber)

    result = cmds.ls( orderedSelection = True)

    transformName = result[0]

    instanceGroupName = cmds.group( empty=True, name = transformName   '_instance_grp#')

    for i in range( 0, pShieldAmount):

        instanceResult = cmds.instance( transformName, name = transformName   '_instance#')
    
        cmds.parent ( instanceResult, instanceGroupName )
    
        x = random.uniform(-10, 10)
        y = random.uniform(0, 20)
        z = random.uniform(-10, 10)
    
        cmds.move( x, y, z, instanceResult)
    
        xRot = random.uniform(0, 360)
        yRot = random.uniform(0, 360)
        zRot = random.uniform(0, 360)
    
        cmds.rotate( xRot, yRot, zRot, instanceResult)
    
        scalingFactor = random.uniform (0.3, 1.5)
    
        cmds.scale( scalingFactor, scalingFactor, scalingFactor, instanceResult)
    
    cmds.hide (transformName)

    cmds.xform( instanceGroupName, centerPivots = True)
    result: [u'pCylinder1']    

def applyCallback ( pSeedNumber, pShieldAmount, *Args):
    
    seedNumber = cmds.intField( pSeedNumber, query=True, value=True)
    
    shieldAmount = cmds.intField( pShieldAmount, query=True, value=True)
 
    selectionList  = cmds.ls( selection = True, type = 'transform' )

createUI( 'My Title', applyCallback)
  

Комментарии:

1. Ваш синтаксис result: [u'pCylinder1'] неверен — вы не можете назначить его таким образом. Если вы хотите установить значение, тогда сделайте result = [u'pCylinder1'] .

2. @dmitryro Спасибо, что указали на это! Это кажется неуместным, поэтому я удалил его и понял, что я не импортировал ‘functools’, но даже после этого он все еще выдает мне синтаксическую ошибку.

3. Также замените def ShieldCreation (pSeedNumber, pShieldAmount) на def ShieldCreation(pSeedNumber, pShieldAmount): — добавьте знак двоеточия : , чтобы он стал ): отсутствующим в line 45 вашем коде.

4. @dmitryro Я исправил синтаксис. Теперь появляется окно, но ничего не происходит, так что, возможно, я что-то неправильно назначил.

5. Там есть консоль Python, где вы можете запускать свои функции, поэтому createUI( 'My Title', applyCallback) в вашей последней строке должен быть вызван — вы, вероятно, хотите посмотреть, можете ли вы вызвать его вручную и что произойдет, когда вы его вызовете.