Maya Сохранение информации меню (диапазон кадров) - PullRequest
0 голосов
/ 03 января 2019

введите описание изображения здесь У меня есть меню с несколькими диапазонами кадров для различных анимируемых объектов.Мне нужно это меню, чтобы сохранять этот диапазон кадров каждый раз, когда он закрывается и открывается снова.Можно ли сохранить данные во внешний файл.

Ответы [ 2 ]

0 голосов
/ 04 января 2019
import json
def saveS ():
    startFrame =  cmds.textField ('one', q= True, text = True)
    endFrame = cmds.textField ('two', q= True, text = True)
    frame= {}
    frame["start"] = startFrame
    frame["end"] = endFrame
    file2 = open ("maya/2018/scripts/test_pickle/dataCopy.json", "w")
    json.dump (frame, file2)
    file2.close()
def helpMenu():
    if(cmds.window('window1_ui',q=True,ex=True)):cmds.deleteUI('window1_ui')
    cmds.window('window1_ui')
    cmds.columnLayout(adj=True)
    cmds.checkBox( label='Default' )
    cmds.textField('one', cc= 'saveS ()')
    cmds.textField('two', cc= 'saveS ()')
    json_file = open ("maya/2018/scripts/test_pickle/dataCopy.json", "r")
    frame = json.load(json_file)
    json_file.close()
    ted=frame["start"]
    cmds.textField ('one', edit= True, text = ted)
    fred=frame["end"]
    cmds.textField ('two', edit= True, text = fred)
    cmds.showWindow('window1_ui')
 helpMenu()

Это то, что я придумал.Это работает Спасибо за вашу помощь @ GreenCell.

0 голосов
/ 03 января 2019

Есть много способов сохранить данные извне.Вероятно, одним из самых простых способов является использование модуля json:

import os
import json


path = "PATH/TO/YOUR/FILE/data.json"


def save_data(frame_range):
    with open(path, "w") as f:
        f.write(json.dumps(frame_range))


def load_data():
    if os.path.exists(path):
        with open(path, "r") as f:
            return json.loads(f.read())


save_data([1, 100])

stored_range = load_data()

print stored_range
# Output: [1, 100]

В этом случае он создает дамп list, но поддерживает гораздо больше (словари, вложенные структуры данных)

Другой альтернативой является сохранение данных с помощью модуля pickle:

import pickle


path = "PATH/TO/YOUR/FILE/data.p"


def save_data(frame_range):
    with open(path, "w") as f:
        f.write(pickle.dumps(frame_range))


save_data([1, 100])

Вы также можете использовать cpickle для экспорта в двоичном формате.

В самой Maya вы можете сохранять настройкинепосредственно к предпочтениям пользователя:

cmds.optionVar(iv=("frameStart", 1))
cmds.optionVar(iv=("frameEnd", 100))

Вы также можете просто сохранить строку json непосредственно в cmds.optionVar для более сложных структур данных.

...