Скрипты в Blender. Субмодули Scene и Object.

Модуль Scene предоставляет доступ к сценам в Blender.
Трудно рассматривать возможности этого модуля без другого модуля Object. Поэтому постараемся изучать эти два модуля совместно.
Как вы можете догадаться, модуль Object предоставляет доступ к объектам в Blender.
Объект сам по себе не может существовать без объекта данных, ассоциированного с объектом а также необходимо связывать объект Object с объектом Scene.
В новом файле .blend присутствует по-умолчанию объект-куб, источник-лампа и камера .
Давайте попробуем "посмотреть" на эту сцену из Python.
Откроем интерактивную консоль Python (как это делается смотрите в самом первом посте).
Вот то, что будет выведено в консоли:
import bpy
import Blender
from Blender import *

При открытии консоли c с помощью этих инструкций автоматически импортируются модули bpy, Blender, а также все субмодули модуля Blender (Scene и Object в том числе).
Давайте создадим переменную sce и свяжем ее с текущей сценой Blender. Введем в консоли:
sce=Blender.Scene.GetCurrent()
c помощью функции GetCurrent() мы получаем текущую активную сцену в Blender.
Посмотрим, что у нас теперь храниться в переменной. Просто наберите в консоли Python имя переменной:
sce
у вас должна вывестись следующая строка
[Scene "Scene"]
Попробуем узнать имя сцены:
sce.getName()
Результатом будет:
"Scene"
с помощью функции getName() вы можете получить имя сцены. Давайте попробуем изменить это имя на другое, например Scena1. Для этого необходимо использовать функцию setName(name). Введем в консоли:
sce.setName('Scena1')
давайте посмотрим на индикатор имени сцены на экране. Имя сцены не изменилось? Щелкните мышкой и сразу увидите изменения. Нажатие указателем мышки вызывает повторную прорисовку экрана. Для того, чтобы перерисовать окна из консоли просто введите команду:
Blender.Window.RedrawAll()
эта команда заставит все окна принудительно перерисовать все объекты и вы увидите изменения уже без лишних телодвижений.
давайте теперь посмотрим, что содержит текущая сцена. Для этого пока есть несколько функций. Пока - потому что старые методы понемногу вытесняются и появляются новые. Начнем со старого. Введем в консоли команду:
sce.getChildren()
на экран будет выведен список объектов сцены:
[[Object "Cube"], [Object "Lamp"], [Object "Camera"]]
присмотримся... все правильно! В текущей сцене содержатся один куб, лампа и камера!
Новый метод получения списка объектов такой:
sce.objects
На экран будет выведено следующее:
[Scene ObjectSeq "Scena1"]
и что это такое - спросите вы? В новом API рекомендуется использовать этот метод, почему - узнаем позже. В результате команды мы получили последовательность объектов сцены Scena1 (помните, мы ведь изменяли имя сцены на Scena1).
Впрочем, ничто не мешает нам новыми методами получить старый результат - список объектов. Для этого введем команду:
list(sce.objects)
и увидим уже знакомый нам список:
[[Object "Cube"], [Object "Lamp"], [Object "Camera"]]
с помощью list мы преобразовали последовательность объектов в их список.
Теперь перейдем к слоям сцены. Работать со слоями несложно.
Для того, чтобы получить текущие отображаемые слои сцены надо использовать функцию getLayers(). Результатом будет список видимых слоев сцены. введем следующую команду в консоли:
sce.getLayers()
результатом будет
[1]
Мы видим, что в данный момент используется только первый слой. Давайте перенесем объект лампу во второй слой вручную. Выделим лампу правой кнопкой мыши и нажмем кнопку M. В появившемся окне слоев выбирем второй в верхнем ряду.
Если мы теперь снова вызовем команду sce.getLayers() то увидим, что ничего не изменилось. Мы видим только первый слой.
Давайте попробуем сделать видимыми первый и второй слой. Для этого надо использовать функцию setLayers(layers), где layers - это список номеров слоев, которые мы хотим сделать видимыми в сцене. Введем:
sce.setLayers([1,2])
и посмотрим на экран. Однако мы не видим наш объект-лампу из второго слоя. Это потому, что надо принудительно заставить Blender перерисовать текущие окна (пока мы перерисовываем все, потом будет перерисовывать только нужные). Итак, введите в консоли:
Blender.Window.RedrawAll()
И.. о чудо! Наша лампа отобразилась! Если теперь мы введем команду sce.getLayers() то результатом будет список:
[1,2]
то есть, в данный момент в сцене отображаются первый и второй слои. Вы также можете увидеть это на индикаторе активных слоев в Blender.
То же самое можно сделать еще проще не функциями а с помощью атрибута layers. Введите в консоли:
sce.layers
и нам на экран будет выведено:
[1,2]
то есть видимы первый и второй слой сцены. Давайте отобразим только первый, а второй скроем. Введите:
sce.layers=[1]
Blender.Window.RedrawAll()

и увидим, что второй слой с лампой исчезнет и станет невидимым!

На этом пока все. Следите за продолжением!
Скрипты в Blender. Субмодули Scene и Object. Автор: Maks Zinchenko дата: 07:43 Оценка: 5

Комментариев нет:

Все права защищены BlenderTech © 2008 - 2015
Поддержка BloggerSweetheme
Автор изображений для темы: friztin. Технологии Blogger.