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

    return

def button_event(evt):

    if evt == 1:

       Draw.Exit()

    return

def msg(text):

    w = Draw.GetStringWidth(text)+20

    wb= Draw.GetStringWidth('Ok')+8

    BGL.glClearColor(0.6, 0.6, 0.6, 1.0)

    BGL.glClear(BGL.GL_COLOR_BUFFER_BIT)

    BGL.glColor3f(0.75, 0.75, 0.75)

    BGL.glRecti(3,30,w+wb,3)

    Draw.Button("Ok",1,4,4,wb,28)

    Draw.Label(text,4+wb,4,w,28)

def error(text):

   Draw.Register(lambda:msg(text), event, button_event)

В функции error() все начинается и заканчивается для пользователя; она сообщает Блендеру что рисовать, куда посылать события, такие, как щелчки по кнопке, куда послать нажатую клавишу, и начинает взаимодействие. Лямбда-функция необходима как функция, которую мы передаем в Draw.Register(), которая рисует, но не принимает аргументов, в то время как мы хотим передавать разные аргументы text каждый раз, когда мы вызываем error(). Функция lambda по существу определяет новую функцию без аргументов, но с вложенным текстом.

Функция msg() отвечает за отрисовку всех элементов на экране. Она рисует цветной фон с помощью функции BGL.glRecti(), сообщение с текстом для отображения (с Draw.Label()), и кнопку OK, которой назначается событие номер 1 (с Draw.Button()). Когда пользователь щелкает по кнопке OK, этот номер события посылается в обработчик событий (event handler) - функцию button_event(), которую мы передали в Draw.Register(). Все, что обработчик событий делает, когда он вызывается с этим номером события 1 - завершает функцию Draw.Register() вызовом Draw.Exit(), так что наша функция error() может завершиться.

Создание меш-объекта

Как только мы извлекли наши списки координат вершин и индексов граней из модуля mymesh, нам нужен некоторый способ для создания нового меш-объекта в нашей сцене и добавления объектов MVert и MFace в этот меш. Это можно осуществить, например, так:

me=Blender.Mesh.New('Bug')

me.verts.extend(verts)

me.faces.extend(faces)

scn=Blender.Scene.GetCurrent()

ob=scn.objects.new(me,'Bug')

scn.objects.active=ob

me.remDoubles(0.001)

me.recalcNormals()

Первая строка создает новый меш-объект с именем Bug (Жук). Он не будет содержать никаких вершин, рёбер или граней, не будет вставлен в объект Блендера, и не будет подключен пока ни к какой Сцене. Если имя меша уже существует, к нему будет добавлен уникальный цифровой суффикс (например, Bug.001).

Следующие две строки действительно создают геометрию в меше. Атрибут verts – это место, куда ссылается наш список объектов MVert. У него есть метод extend(), который принимает список кортежей, каждый из которых содержит координаты x, y, и z создаваемых вершин. Точно так же метод extend() атрибута faces принимает список кортежей, каждый из которых содержит три или больше индексов, указывающих на вершины, которые вместе определяют грань. Порядок здесь важен: нам нужно сначала добавить новые вершины; в противном случае вновь созданные грани не смогут ссылаться на них. Нет необходимости определять какие-либо рёбра, так как добавление граней также неявно создаст рёбра, которые ещё не присутствуют.

Меш по своей сути еще не является объектом, которым может манипулировать пользователь, так что в следующих нескольких строках (выделено), мы извлекаем текущую сцену и добавляем в неё новый объект. Аргументы функции new() - меш-объект, который мы создали ранее, и имя, которое мы хотим дать объекту. Имя, даваемое объекту, может быть таким же, как и данное мешу, так как имена мешей и имена объектов существуют в различных пространствах имён. Как и с мешем, существующее имя будет сделано уникальным посредством добавления суффикса. Если имя опущено, новый объект получит в качестве имени по-умолчанию тип своего аргумента (Mesh в нашем случае).

Вновь созданный объект будет выбран, но не активен, так что мы исправим это, присвоив наш объект в scene.objects.active.

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

<p>Преобразование топологии меша</p>
Перейти на страницу:

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

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

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

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

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

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

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

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