Thomas Larsson - Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода

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

Thomas Larsson - Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода краткое содержание

Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - описание и краткое содержание, автор Thomas Larsson, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Третье издание, расширенное и обновлённое для Blender 2.57

Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - читать онлайн бесплатно полную версию (весь текст целиком)

Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - читать книгу онлайн бесплатно, автор Thomas Larsson
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

#----------------------------------------------------------

# File scene_props.py

#----------------------------------------------------------

import bpy

from bpy.props import *

#

# Сохранение свойств в активной сцене

#

def initSceneProperties(scn):

bpy.types.Scene.MyInt = IntProperty(

name = "Integer",

description = "Enter an integer")

scn['MyInt'] = 17

bpy.types.Scene.MyFloat = FloatProperty(

name = "Float",

description = "Enter a float",

default = 33.33,

min = -100,

max = 100)

bpy.types.Scene.MyBool = BoolProperty(

name = "Boolean",

description = "True or False?")

scn['MyBool'] = True

bpy.types.Scene.MyEnum = EnumProperty(

items = [('Eine', 'Un', 'One'),

('Zwei', 'Deux', 'Two'),

('Drei', 'Trois', 'Three')],

name = "Ziffer")

scn['MyEnum'] = 2

bpy.types.Scene.MyString = StringProperty(

name = "String")

scn['MyString'] = "Lorem ipsum dolor sit amet"

return

initSceneProperties(bpy.context.scene)

#

# Меню в районе UI

#

class UIPanel(bpy.types.Panel):

bl_label = "Property panel"

bl_space_type = "VIEW_3D"

bl_region_type = "UI"

def draw(self, context):

layout = self.layout

scn = context.scene

layout.prop(scn, 'MyInt', icon='BLENDER', toggle=True)

layout.prop(scn, 'MyFloat')

layout.prop(scn, 'MyBool')

layout.prop(scn, 'MyEnum')

layout.prop(scn, 'MyString')

layout.operator("idname_must.be_all_lowercase_and_contain_one_dot")

#

# Кнопка выводит значения свойств в окне консоли.

#

class OBJECT_OT_PrintPropsButton(bpy.types.Operator):

bl_idname = "idname_must.be_all_lowercase_and_contain_one_dot"

bl_label = "Print props"

def execute(self, context):

scn = context.scene printProp("Int: ", 'MyInt', scn)

printProp("Float: ", 'MyFloat', scn)

printProp("Bool: ", 'MyBool', scn)

printProp("Enum: ", 'MyEnum', scn)

printProp("String: ", 'MyString', scn)

return{'FINISHED'}

def printProp(label, key, scn):

try:

val = scn[key]

except:

val = 'Undefined'

print("%s %s" % (key, val))

# Регистрация

bpy.utils.register_module(__name__)

Опрос (Polling)

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

Эта программа добавляет панель, которая модифицирует материал активного объекта. Панель находится в секции интерфейса пользователя (открывается с помощью N ), но она видима, только если активным объектом является меш по крайней мере с одним материалом. Проверка, сколько материалов имеет активный объект, делается через poll(). Это не функция, а скорее метод класса, указанный с помощью команды @classmethodвыше определения. Так в чем же разница между функцией и методом класса? Не спрашивайте меня! Все, что я знаю, что со строкой @classmethodкод работает, а без неё нет.

Ну, с точки зрения программирования на Питоне действие этого декоратора хорошо объяснили здесь python.su/forum, а вот почему объявленный метод класса с именем poll влияет на поведение элементов интерфейса в Блендере, я так и не понял — прим. пер.

File pollpy - фото 23

#----------------------------------------------------------

# File poll.py

#----------------------------------------------------------

import bpy, random

#

# Меню в районе UI

#

class ColorPanel(bpy.types.Panel):

bl_label = "Modify colors"

bl_space_type = "VIEW_3D"

bl_region_type = "UI"

@classmethod

def poll(self, context):

if context.object and context.object.type == 'MESH':

return len(context.object.data.materials)

def draw(self, context):

layout = self.layout

scn = context.scene

layout.operator("random.button")

layout.operator("darken_random.button")

layout.operator("invert.button")

#

# Три кнопки

#

class RandomButton(bpy.types.Operator):

bl_idname = "random.button"

bl_label = "Randomize"

def execute(self, context):

mat = context.object.data.materials[0]

for i in range(3):

mat.diffuse_color[i] = random.random()

return{'FINISHED'}

class DarkenRandomButton(bpy.types.Operator):

bl_idname = "darken_random.button"

bl_label = "Darken Randomly"

def execute(self, context):

mat = context.object.data.materials[0]

for i in range(3):

mat.diffuse_color[i] *= random.random()

return{'FINISHED'}

class InvertButton(bpy.types.Operator):

bl_idname = "invert.button"

bl_label = "Invert"

def execute(self, context):

mat = context.object.data.materials[0]

for i in range(3):

mat.diffuse_color[i] = 1 - mat.diffuse_color[i]

return{'FINISHED'}

# Регистрация

bpy.utils.register_module(__name__)

Динамическое выпадающее меню

Эта программа добавляет панель с выпадающим меню на панели интерфейса пользователя. В начале меню содержит три пункта: красный, зеленый и синий. Есть две кнопки, помеченные Set color (Задать цвет). Верхняя изменяет цвет активного объекта на цвет, выбранный в выпадающем меню, а нижняя устанавливает цвет, определенный тремя движками. Цвета можно добавлять в выпадающее меню и удалять их из него.

Также заметьте, что с тем же успехом работает опрос для кнопок; кнопка Set colorстановится серой, если активный объект не является мешем с по крайней мере одним материалом.

File - фото 24

#----------------------------------------------------------

# File swatches.py

#----------------------------------------------------------

import bpy

from bpy.props import *

theSwatches = [

("1 0 0" , "Red" , "1 0 0"),

("0 1 0" , "Green" , "0 1 0"),

("0 0 1" , "Blue" , "0 0 1")]

def setSwatches():

global theSwatches

bpy.types.Object.my_swatch = EnumProperty(

items = theSwatches,

name = "Swatch")

setSwatches()

bpy.types.Object.my_red = FloatProperty(

name = "Red", default = 0.5,

min = 0, max = 1)

bpy.types.Object.my_green = FloatProperty(

name = "Green", default = 0.5,

min = 0, max = 1)

bpy.types.Object.my_blue = FloatProperty(

name = "Blue", default = 0.5,

min = 0, max = 1)

def findSwatch(key):

for n,swatch in enumerate(theSwatches):

(key1, name, colors) = swatch

if key == key1:

return n

raise NameError("Unrecognized key %s" % key)

# Панель образцов

class SwatchPanel(bpy.types.Panel):

bl_label = "Swatches"

#bl_idname = "myPanelID"

bl_space_type = "PROPERTIES"

bl_region_type = "WINDOW"

bl_context = "material"

def draw(self , context):

layout = self.layout

ob = context.active_object

layout.prop_menu_enum(ob, "my_swatch")

layout.operator("swatches.set").swatch=True

layout.separator()

layout.prop(ob, "my_red")

layout.prop(ob, "my_green")

layout.prop(ob, "my_blue")

layout.operator("swatches.set").swatch=False

layout.operator("swatches.add")

layout.operator("swatches.delete")

# Установка кнопки

class OBJECT_OT_SetButton(bpy.types.Operator):

bl_idname = "swatches.set"

bl_label = "Set color"

swatch = bpy.props.BoolProperty()

@classmethod

def poll(self, context):

if context.object and context.object.type == 'MESH':

return len(context.object.data.materials)

def execute(self, context):

global theSwatches

ob = context.object

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

Интервал:

Закладка:

Сделать


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

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




Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода отзывы


Отзывы читателей о книге Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода, автор: Thomas Larsson. Читайте комментарии и мнения людей о произведении.


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

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