Книга: Написание скриптов для Blender 2.49

Запоминание выбора

Запоминание выбора

Было бы очень удобно, если бы мы могли запоминать выбор пользователя, чтобы можно было выставить последние настройки, когда скрипт заработает снова, но в Блендере каждый скрипт запускается изолированно, и вся информация внутри скрипта теряется, как только он завершится. Следовательно, нам нужен некоторый механизм, сохраняющий информацию в постоянном режиме. С этой целью, API Блендера имеет модуль Registry (Реестра), который позволяет нам сохранять величины в памяти (а также на диске), индексируемые произвольным ключом.

Наш код инициализации GUI изменится немного по своей сути, если мы хотим добавить эту функциональность, но мы покажем код, извлекающий запомненные значения (если они существуют), и сопроводим код, сохраняющий выборы пользователя:

reg = Blender.Registry.GetKey('CreepyCrawlies',True)
try:
   nthorax=reg['ThoraxSegments']
except:
   nthorax=3
try:
   ntail=reg['TailSegments']
except:
   ntail=5
... <подобный код для остальных параметров> …
Draw = Blender.Draw
THORAXSEGMENTS = Draw.Create(nthorax)
TAILSEGMENTS = Draw.Create(ntail)
LEGSEGMENTS = Draw.Create(nleg)
WINGSEGMENTS = Draw.Create(nwing)
EYESIZE = Draw.Create(eye)
TAILTAPER = Draw.Create(taper)
if not Draw.PupBlock('Add CreepyCrawly', [
... <идентичный код, как в предыдущем примере> …
return
reg={'ThoraxSegments':THORAXSEGMENTS.val,
     'TailSegments' :TAILSEGMENTS.val,
     'LegSegments' :LEGSEGMENTS.val,
     'WingSegments' :WINGSEGMENTS.val,
     'EyeSize' :EYESIZE.val,
     'TailTaper':TAILTAPER.val}
Blender.Registry.SetKey('CreepyCrawlies',reg,True)

Фактические чтение и запись нашего ключа в реестре выделены. Аргумент True (Истина) указывает, что мы хотим извлечь наши данные с диска, если они не доступны в памяти, или записать их на диск также при сохранении, чтобы наш скрипт мог иметь доступ к этой сохраненной информации, даже если мы останавливали Блендер и перезапустили его позже. Фактически получаемый или записываемый ключ реестра - это словарь, который может содержать любые данные, которые нам нужны. Конечно, к настоящему времени ключа реестра может еще не существовать, в этом случае мы получим значение None (Ничто) - об этой ситуации заботится оператор try … except … .

Оглавление книги


Генерация: 1.112. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз