My-library.info
Все категории

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

На электронном книжном портале my-library.info можно читать бесплатно книги онлайн без регистрации, в том числе Michel Anders - Написание скриптов для Blender 2.49. Жанр: Программы издательство неизвестно, год 2004. В онлайн доступе вы получите полную версию книги с кратким содержанием для ознакомления, сможете читать аннотацию к книге (предисловие), увидеть рецензии тех, кто произведение уже прочитал и их экспертное мнение о прочитанном.
Кроме того, в библиотеке онлайн my-library.info вы найдете много новинок, которые заслуживают вашего внимания.

Название:
Написание скриптов для Blender 2.49
Автор
Издательство:
неизвестно
ISBN:
нет данных
Год:
неизвестен
Дата добавления:
17 сентябрь 2019
Количество просмотров:
254
Читать онлайн
Michel Anders - Написание скриптов для Blender 2.49

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

Michel Anders - Написание скриптов для Blender 2.49 - описание и краткое содержание, автор Michel Anders, читайте бесплатно онлайн на сайте электронной библиотеки My-Library.Info
Расширьте мощность и гибкость Блендера с помощью Питона: высокоуровневого, легкого для изучения скриптового языка

Написание скриптов для Blender 2.49 читать онлайн бесплатно

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

import Blender

def setlayer(ob):

   layer = 1+int(Blender.Get('curframe')/25.0)%2

   ob.layers = [ layer ]

   ob.makeDisplayList()

   Blender.Window.RedrawAll()

if Blender.bylink and Blender.event == 'FrameChanged':

   setlayer(Blender.link)

Как и в нашем предыдущем скрипте, последние строки нашего скрипта проверяют, что он был вызван как скриптсвязь и по событию изменения кадров, и если это так, передают связанный объект в функцию setlayer(). (Скрипт доступен как OddEvenScriptlink.py в файле scriptlinks.blend.)

Все, что осталось сделать, это назначить скрипт как скриптсвязь (scriptlink) выбранному объекту. Снова, это выполняется в Окне Кнопок | панель Script, щелкая по кнопке Enabling Script Links в панели Scriptlinks (если это необходимо, она могла все ещё быть выбранной после нашего предыдущего примера. Это глобальный выбор, то есть, включено или выключено для всех объектов).  На этот раз мы выбираем скриптсвязи объекта вместо скриптсвязей материала и щелкаем на New, чтобы выбрать OddEvenScriptlink.py из выпадающего списка.


Обратный отсчет - анимация таймера с помощью скриптсвязи

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

Одним из применений этой техники будет создание объекта счетчика, который отобразит время в секундах с тех пор, как началась анимация. Это выполнено изменением текста объекта Text3d с помощью его метода setText(). Функция setcounter() в следующем коде делает как раз это вместе с необходимыми действиями, чтобы скорректировать отображение в Блендере. (Скрипт доступен как CounterScriptLink.py в файле scriptlinks.blend.)

import Blender

objectname='Counter'

scriptname='CounterScriptLink.py'

def setcounter(counterob):

   seconds = int(Blender.Get('curframe')/25.0)+1

   counterob.getData().setText(str(seconds))

   counterob.makeDisplayList()

   Blender.Window.RedrawAll()

if Blender.bylink:

   setcounter(Blender.link)

else:

   countertxt    = Blender.Text3d.New(objectname)

   scn           = Blender.Scene.GetCurrent()

   counterob     = scn.objects.new(countertxt)

   setcounter(counterob)


   counterob.clearScriptLinks([scriptname])

   counterob.addScriptLink(scriptname,'FrameChanged')

Этот скрипт может быть ассоцирован в виде скриптсвязи с любым объектом Text3d, как показано прежде. Тем не менее, если запустить его с помощью Alt + P из текстового редактора, он создаст новый объект Text3d и присоединит себя к этому объекту как связанный скрипт. Выделенная строка показывает такую же простую проверку на его наличие, как в предыдущих скриптах, но в данном случае мы выполняем также некоторое действие в случае, если скрипт не был вызван как скриптсвязь (после else). Последние две выделенных строки показывают, как мы соединяем скрипт с вновь созданным объектом. Сначала, мы удаляем (clear) любую скриптсвязь с тем же именем, которая, возможно, была связана раньше. Это делается, чтобы предотвратить связывание этой же скриптсвязи более одного раза, что допустимо, но едва ли полезно. Затем, мы добавляем скрипт как скриптсвязь, которая будет вызываться, когда происходит изменение кадра (FrameChanged). Скриншот показывает 3D-вид с кадром из анимации вместе с окном Кнопок (слева вверху), который содержит список ассоциаций скриптсвязей с объектом.

Заметьте, что хотя возможно соединить скриптсвязь с объектом Блендера из скрипта на Питоне, скриптсвязи для него должны быть включены вручную, чтобы действительно работать! (Во вкладке ScriptLinks). В API Питона Блендера нет функциональности, позволяющей сделать это из скрипта.



Я буду следить за вами

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

Обработчики пространства  (Space handlers) предоставляют нам способ выполнять действия всякий раз, когда окно 3D-вида перерисовывается, или когда обнаружено действие клавиатуры или мыши. Эти действия также могут включать рисование в области 3D-вида, так что мы сможем добавить подсвечивание (Highlight) в любом месте, где нам нравится.

Как нам определить, какие вершины мы хотели бы подсветить? Блендер уже предоставляет нам унифицированный способ группировать наборы вершин в виде вершинных групп, так что всё, что мы должны сделать, это позволить пользователю указать, какую группу вершин он хотел бы подсветить. Затем мы сохраним имя этой выбранной группы вершин как свойство объекта (object property). Свойства объектов предназначены для использования в игровом движке, но нет причин, почему мы не можем использовать их в качестве средства постоянно хранить нашу выбранную группу вершин.

И так, снова у нас есть скрипт, который будет вызываться двумя способами: как обработчик пространства (то есть, всякий раз, когда окно 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 и в качестве данных также присваиваем имя выбранной группы вершин.


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

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


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

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

Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*
Все материалы на сайте размещаются его пользователями.
Администратор сайта не несёт ответственности за действия пользователей сайта..
Вы можете направить вашу жалобу на почту librarybook.ru@gmail.com или заполнить форму обратной связи.