Скрипты в 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()
и увидим, что второй слой с лампой исчезнет и станет невидимым!
На этом пока все. Следите за продолжением!
Трудно рассматривать возможности этого модуля без другого модуля 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
Оценка:
Комментариев нет: