Несколько аргументов в функции. Передача информации через функции. - '' <функция save_snapshots в "###"> не найдена » - PullRequest
0 голосов
/ 26 мая 2019

# Error: RuntimeError: file <maya console> line 13: Object '<function save_snapshots at 0x000001757D101EB8>' not found. #

Я работаю над сценарием для создания ультрафиолетовых снимков.В настоящее время я застрял на получении «save_snapshots» для получения целого числа, которое должен дать «uv_snap_res».

В моем пользовательском интерфейсе кнопка «сохранить» использует частичное, и я не до конца понимаю, как это работает.Если я перемещу save_snapshots за 'texSizeControl' в порядке команд, он просто не запускается (я думаю?).

Хотелось бы немного помочь объяснить, как работает передача аргументов при использовании функций, ипорядок операций, когда дело доходит до «частичной» вещи ... Единственная причина, по которой я так далеко, это из-за этого сайта и поиска примеров в других областях.Все, что связано с переключателями - это сложная задача, и я не знаю, правильно ли она работает: / Извините.

Любая помощь или совет, который вы можете предложить, Я весь в ушах !!

## UV SNAPSHOTS
## PYTHON
import maya.cmds as mc


def get_snapshot_res(label, *args):
    uv_snap_res = label

def save_snapshots(get_snapshot_res, uv_snap_res, *args):
    get_snapshot_res(uv_snap_res)
    print get_snapshot_res

def passValue(texSizeControl, *args):
    radioCol = mc.radioCollection(texSizeControl, query=True, sl=True)
    getSelectRadioVal = mc.radioButton(radioCol, query=True, label=True)
    get_snapshot_res(getSelectRadioVal)

def save_snapshots_ui(*args):
    myWindow = 'Create UV Snapshots'
    if mc.window(myWindow, exists=True):
        mc.deleteUI(myWindow)
    mc.window(myWindow, title = myWindow)
    mc.columnLayout(adjustableColumn=True)
    mc.text(label='Choose your resolution for UV Snapshots', font='obliqueLabelFont')
    texSizeControl = mc.radioCollection()
    saveRadio1k = mc.radioButton(label='1024')
    saveRadio2k = mc.radioButton(label='2048')
    saveRadio4k = mc.radioButton(label='4096')
    saveRadio8k = mc.radioButton(label='8192')
    texSizeControl = mc.radioCollection(texSizeControl, edit=True, select=saveRadio2k )
    mc.button(label='save', command= partial(passValue, save_snapshots, texSizeControl))
    mc.setParent( '..' )
    mc.showWindow()

save_snapshots_ui()

1 Ответ

0 голосов
/ 27 мая 2019

Попробуйте удалить * args там, где это не нужно, вы должны написать свой скрипт так:

  • cmd SNAPSHOT Need (FULLPATH, RES, UVRANGE)
  • UI установить разрешение
  • имя набора PNG
  • UI Set Path
  • выберите интерфейс uvRange
  • кнопка моментального снимка отправить -> res, имя, путь, uvRange
  • получить пользовательский интерфейс RES
  • получить имя и путь для создания FULLPATH
  • получить UI UVRANGE
  • соберите все это в один cmd для запуска SNAPSHOT

====================================

import maya.cmds as mc
# GATHER
def ui_save_snapshots(texSizeControl, *args):
    # *args is only used when the def is inside ui
    # here it is gathering information to launch the maya command
    RATIO = get_snapshot_res(texSizeControl)
    path = 'something to get the path'
    save_snapshots(path, RATIO)
# GET RES
def ui_get_snapshot_res(label):
    radioCol = mc.radioCollection(texSizeControl, query=True, sl=True)
    RATIO = mc.radioButton(radioCol, query=True, label=True)
    return RATIO
SNAPSHOT
def save_snapshots(path, resolution, uvRange=[0,1,0,1]):
    # this def is a without any ui
    # path = "/marza/proj/fuji2019/work/Prop/trap/sim/everyone/simRig/images/outUV.jpg"
    uMin, uMax, vMin, vMax = uvRange
    cmds.uvSnapshot(o=True,ff='jpg', xr=resolution, yr=4096, aa=True, r=255, g=255, b=255, n=path, uMin=uMin, uMax=uMax, vMin=vMin, vMax=vMax)

def save_snapshots_ui():
    myWindow = 'Create UV Snapshots'
    if mc.window(myWindow, exists=True):
        mc.deleteUI(myWindow)
    mc.window(myWindow, title = myWindow)
    mc.columnLayout(adjustableColumn=True)
    mc.text(label='Choose your resolution for UV Snapshots', font='obliqueLabelFont')
    texSizeControl = mc.radioCollection()
    saveRadio1k = mc.radioButton(label='1024')
    saveRadio2k = mc.radioButton(label='2048')
    saveRadio4k = mc.radioButton(label='4096')
    saveRadio8k = mc.radioButton(label='8192')
    texSizeControl = mc.radioCollection(texSizeControl, edit=True, select=saveRadio2k )
    # send textSiZeControl to passValue 
    mc.button(label='save', command= partial(passValue, texSizeControl))
    mc.setParent( '..' )
    mc.showWindow()

save_snapshots_ui()
...