Michel Anders - Написание скриптов для Blender 2.49

Тут можно читать онлайн Michel Anders - Написание скриптов для Blender 2.49 - бесплатно полную версию книги (целиком) без сокращений. Жанр: Программы. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Написание скриптов для Blender 2.49
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4.38/5. Голосов: 81
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Michel Anders - Написание скриптов для Blender 2.49 краткое содержание

Написание скриптов для Blender 2.49 - описание и краткое содержание, автор Michel Anders, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Расширьте мощность и гибкость Блендера с помощью Питона: высокоуровневого, легкого для изучения скриптового языка

Написание скриптов для Blender 2.49 - читать онлайн бесплатно полную версию (весь текст целиком)

Написание скриптов для Blender 2.49 - читать книгу онлайн бесплатно, автор Michel Anders
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

И так, снова у нас есть скрипт, который будет вызываться двумя способами: как обработчик пространства (то есть, всякий раз, когда окно 3D-вида перерисовывается, чтобы выделить наши вершины), или при запуске его из текстового редактора с помощью Alt + P , чтобы подсказать пользователю выбрать группу вершин для подсвечивания.

Схема программы: AuraSpaceHandler.py

Следующая схема показывает, какие шаги мы предпримем в каждой ситуации:

1. Получить активный объект и меш.

2. Если запущено автономно:

◦ Получить список групп вершин

◦ Предложить на выбор

◦ Сохранить выбор как свойство объекта

3. Иначе:

◦ Получить свойство, которое содержит группу вершин

◦ Получить список координат вершин

◦ Для каждой вершины:

▪ нарисовать маленький диск

Результирующий код доступен как AuraSpaceHandler.py в файле scriptlinks.blend :

# SPACEHANDLER.VIEW3D.DRAW

Он начинается со строки комментария, которая является существенной, так как она сигнализирует Блендеру, что это - скрипт обработчика пространства, который может быть связан с 3D-видом (в настоящее время никакую другую область нельзя связать с обработчиком пространства) и должен быть вызван по событию обновления изображения redraw .

import Blender

from Blender import *

scn = Scene.GetCurrent()

ob = scn.objects.active

if ob.type == 'Mesh':

me = ob.getData(mesh = True)

if Blender.bylink:

p=ob.getProperty('Highlight')

vlist = me.getVertsFromGroup(p.getData())

matrix = ob.matrix

drawAuras([me.verts[vi].co*matrix for vi in vlist],

p.getData())

else:

groups = ['Select vertexgroup to highlight%t']

groups.extend(me.getVertGroupNames())

result = Draw.PupMenu( '|'.join(groups) )

if result>0:

try:

p=ob.getProperty('Highlight')

p.setData(groups[result])

except:

ob.addProperty('Highlight',groups[result])

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

Вторая выделенная строка показывает начало кода, который будет выполняться, если мы запускаем скрипт из текстового редактора. Он создаёт строку, состоящую из имен всех групп вершин, связанных с активным объектом, разделенных символами трубы (|) и с добавленным подходящим названием. Эта строка передаётся в функцию PupMenu() , которая отобразит меню, и возвратит выбор пользователя, либо -1, если ничего не было выбрано.

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

Затем мы должны убедиться, что скриптсвязи включены ( окно Кнопок | панель Scripts | Scriptlinks. Щелкните на Enable Script Links, если это еще не было сделано). Обратите внимание, что Блендеру все равно, имеем ли мы дело с обработчиками пространства или скриптсвязями, поскольку они включаются одинаково.

Последним шагом в использовании нашего обработчика пространства будет ассоциация его с 3D-видом. Чтобы сделать это, включите галочку Draw: AuraSpaceHandler.py в меню View - Space Handler Scriptsокна 3D-вида.

Использование тем Код который мы еще не видели имеет дело с фактическим - фото 53
Использование тем

Код, который мы еще не видели, имеет дело с фактическим рисованием подсветки и именем группы вершин, чтобы идентифицировать то, что мы выделяем. Он начинается с определения цвета, который мы используем для подсветки, и текста, извлекая их из текущей темы. Таким образом пользователь может настраивать эти цвета удобным способом из окна Пользовательских настроек:

theme = Window.Theme.Get()[0]

textcolor = [float(v)/255 for v in theme.get(

Window.Types.VIEW3D ).text_hi[:3]]

color = [float(v)/255 for v in

theme.get(Window.Types.VIEW3D).active[:3]]

В первой строке извлекается список тем, которые присутствуют. Первая из них является активной темой. Из этой темы мы извлекаем пространство VIEW3D , и его атрибут text_hi является списком из четырех целых, представляющим цвет RGBA. Мы удаляем из списка альфа-компоненту и преобразуем его в список трех чисел с плавающей точкой (floats) в дипазоне [0, 1], которые мы используем как цвет нашего текста. Таким же образом мы создаем цвет подсветки из атрибута active .

Нашей следующей проблемой будет нарисовать подсветку в форме диска в специфическом месте. Так как размер диска совсем небольшой (его можно скорректировать изменением переменной size), мы можем аппроксимировать его достаточно хорошо формой восьмиугольника. Мы загружаем список координат x и y такого восьмиугольника в список diskvertices :

size=0.2

diskvertices=[( 0.0, 1.0),( 0.7, 0.7),

( 1.0, 0.0),( 0.7,-0.7),

( 0.0,-1.0),(-0.7,-0.7),

(-1.0, 0.0),(-0.7, 0.7)]

def drawDisk(loc):

BGL.glBegin(BGL.GL_POLYGON)

for x,y in diskvertices:

BGL.glVertex3f(loc[0]+x*size,loc[1]+y*size,loc[2])

BGL.glEnd()

Само рисование восьмиугольника сильно зависит от функций, предоставляемых модулем Блендера BGL (выделено в предыдущем коде). Мы начинаем с установки режима рисования многоугольника, затем добавляем вершину для каждого кортежа в списке diskvertices . Позиция, переданная в функцию drawDisk() , будет центром, а вершины будут целиком лежать в круге с радиусом, равным размеру size . Когда мы вызываем функцию glEnd() , будет нарисован многоугольник, заполненный внутри текущим цветом.

Вы можете спросить, каким образом эти функции рисования знают, как перевести местоположение в 3D в координаты на экране, и тут есть действительно больше, чем кажется на первый взгляд, как мы увидим в следующей части кода. Необходимая функция, вызываемая для сообщения графической системе, как преобразовать 3D-координаты в координаты экрана, не включена в функцию drawDisk() (в предшествующем куске кода). Дело в том, что вычисление этой информации отдельно для каждого диска должно привести к лишней потере в производительности, так как эта информация одинаковая для каждого диска, который мы рисуем.

Следовательно, мы определяем функцию drawAuras() , которая принимает список locations (позиции) и аргумент groupname (имя группы, строкового типа). Она вычислит параметры преобразования, вызовет drawDisk() для каждой позиции в списке, и, затем, добавит имя группы как на-экранную этикетку приблизительно справа от центра подсветки. Модуль Блендера Window предоставляет нам функцию GetPerspMatrix() , которая извлекает матрицу для правильного преобразования точки в пространстве 3D в точку на экране. Эта матрица размером 4x4 является объектом Питона, который должен быть преобразован в единственный список чисел с плавающей точкой, чтобы его могла использовать графическая система. Выделенные строки в следующем коде заботятся об этом. Следующие три строки сбрасывают режим проецирования и сообщают графической системе использовать нашу должным образом преобразованную перспективную матрицу для вычисления экранных координат. Заметьте, что изменение этих режимов проецирования и других настроек графики не влияет на то, как сам Блендер рисует объекты на экране, так как эти настройки сохраняются перед вызовом нашего скрипта обработчика и восстанавливаются впоследствии:

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Michel Anders читать все книги автора по порядку

Michel Anders - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Написание скриптов для Blender 2.49 отзывы


Отзывы читателей о книге Написание скриптов для Blender 2.49, автор: Michel Anders. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x