Читаем Написание скриптов для Blender 2.49 полностью

if not Draw.PupBlock('Add CreepyCrawly', [

('Thorax segments:' , THORAXSEGMENTS, 2, 50,

   'Number of thorax segments'),

('Tail segments:' , TAILSEGMENTS, 0, 50, 'Number of tail

segments'),

('Leg segments:' , LEGSEGMENTS, 2, 10, 

  'Number of thorax segments with legs'),

('Wing segments:' , WINGSEGMENTS, 0, 10, 

  'Number of thorax segments with wings'),

('Eye size:' , EYESIZE, 0.1,10, 'Size of the eyes'),

('Tail taper:' , TAILTAPER, 0.1,10, 

   'Taper fraction of each tail segment'),]):

   return

Как Вы можете видеть, мы ограничиваем возможные величины наших кнопок ввода в разумном диапазоне (вплоть до 50 для сегментов торса и хвоста), чтобы исключить нежелательные результаты (огромные величины могут обрушить вашу систему, если память или процессорная мощность скудны).

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

Было бы очень удобно, если бы мы могли запоминать выбор пользователя, чтобы можно было выставить последние настройки, когда скрипт заработает снова, но в Блендере каждый скрипт запускается изолированно, и вся информация внутри скрипта теряется, как только он завершится. Следовательно, нам нужен некоторый механизм, сохраняющий информацию в постоянном режиме. С этой целью, 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 … .

Вся мощь графики Блендера

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

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

from Blender import Window,Draw,BGL

def event(evt, val):

    if evt == Draw.ESCKEY:

       Draw.Exit() # exit when user presses ESC

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных