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 - фото 30

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

# File shapekey_pin.py

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

bl_info = {

'name': 'Shapekey pinning',

'author': 'Thomas Larsson',

'version': '(0, 1, 2)',

'blender': (2, 5, 7),

"location": "View3D > UI panel > Shapekey pinning",

'description': 'Pin and key the shapekeys of a mesh',

'warning': '',

'wiki_url': 'http://blenderartists.org/forum/showthread.php?193908',

'tracker_url': '',

"support": 'COMMUNITY',

"category": "3D View"}

import bpy

from bpy.props import *

#

# class VIEW3D_OT_ResetExpressionsButton(bpy.types.Operator):

#

class VIEW3D_OT_ResetExpressionsButton(bpy.types.Operator):

bl_idname = "shapepin.reset_expressions"

bl_label = "Reset expressions"

def execute(self, context):

keys = context.object.data.shape_keys

if keys:

for shape in keys.keys:

shape.value = 0.0

return{'FINISHED'}

#

# class VIEW3D_OT_PinExpressionButton(bpy.types.Operator):

#

class VIEW3D_OT_PinExpressionButton(bpy.types.Operator):

bl_idname = "shapepin.pin_expression"

bl_label = "Pin"

expression = bpy.props.StringProperty()

def execute(self, context):

skeys = context.object.data.shape_keys

if skeys:

frame = context.scene.frame_current

for block in skeys.key_blocks:

oldvalue = block.value

block.value = 1.0 if block.name == self.expression else 0.0

if (context.tool_settings.use_keyframe_insert_auto and

(context.scene.key_all or

(block.value > 0.01) or

(abs(block.value-oldvalue) > 0.01))):

block.keyframe_insert("value", index=-1, frame=frame)

return{'FINISHED'}

#

# class ExpressionsPanel(bpy.types.Panel):

#

class ExpressionsPanel(bpy.types.Panel):

bl_label = "Pin shapekeys"

bl_space_type = "VIEW_3D"

bl_region_type = "UI"

@classmethod

def poll(cls, context):

return context.object and (context.object.type == 'MESH')

def draw(self, context):

layout = self.layout

layout.operator("shapepin.reset_expressions")

layout.prop(context.scene, "key_all")

skeys = context.object.data.shape_keys

if skeys:

for block in skeys.key_blocks:

row = layout.split(0.75)

row.prop(block, 'value', text=block.name)

row.operator("shapepin.pin_expression",

text="Pin").expression = block.name

return

#

# инициализация и регистрация

#

def initialize():

bpy.types.Scene.key_all = BoolProperty(

name="Key all",

description="Set keys for all shapes",

default=False)

def register():

initialize()

bpy.utils.register_module(__name__)

def unregister():

bpy.utils.unregister_module(__name__)

if __name__ == "__main__":

register()

Простой импорт BVH-файлов

BVH формат обычно используется для передачи анимации персонажей, например, от данных захвата движения (mocap). Эта программа простого импортера BVH, которая строит скелет с действием (action), описанный в файле BVH. Он реализован в виде аддона Блендера со словарём bl_infoв верхней части файла и кодом регистрации в конце.

После выполнения скрипта или включения его в качестве аддона, простой импортер BVH может быть вызван из панели пользовательского интерфейса ( Ctrl+N ). Есть две опции: логическая переменная с информацией о том, повернуть ли меш на 90 градусов (чтобы направить Z вверх), и масштаб.

Эта программа также показывает, как вызвать диалог выбора файлов, нажав кнопку на панели. Класс кнопки Load BVH наследуется от двух базовых классов bpy.types.Operatorи ImportHelper.

class OBJECT_OT_LoadBvhButton(bpy.types.Operator, ImportHelper):

Класс ImportHelper(возможно, недокументированный) определяет некоторые атрибуты, которые используются для фильтрации файлов, отображающихся в диалоге выбора файлов.

filename_ext = ".bvh"

filter_glob = bpy.props.StringProperty(default="*.bvh", options={'HIDDEN'})

filepath = bpy.props.StringProperty(name="File Path",

maxlen=1024, default="")

Существует аналогичный класс ExportHelper, который ограничивает имеющийся выбор файлов экспорта.

File - фото 31

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

# File simple_bvh_import.py

# Simple bvh importer

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

bl_info = {

'name': 'Simple BVH importer (.bvh)',

'author': 'Thomas Larsson',

'version': (1, 0, 0),

'blender': (2, 5, 7),

'api': 34786,

'location': "File > Import",

'description': 'Simple import of Biovision bvh',

'category': 'Import-Export'}

import bpy, os, math, mathutils, time

from mathutils import Vector, Matrix

from io_utils import ImportHelper

#

# class CNode:

#

class CNode:

def __init__(self, words, parent):

name = words[1]

for word in words[2:]:

name += ' '+word

self.name = name

self.parent = parent

self.children = []

self.head = Vector((0,0,0))

self.offset = Vector((0,0,0))

if parent:

parent.children.append(self)

self.channels = []

self.matrix = None

self.inverse = None

return

def __repr__(self):

return "CNode %s" % (self.name)

def display(self, pad):

vec = self.offset

if vec.length < Epsilon:

c = '*'

else: c = ' '

print("%s%s%10s (%8.3f %8.3f %8.3f)" %

(c, pad, self.name, vec[0], vec[1], vec[2]))

for child in self.children:

child.display(pad+" ")

return

def build(self, amt, orig, parent):

self.head = orig + self.offset

if not self.children:

return self.head

zero = (self.offset.length < Epsilon)

eb = amt.edit_bones.new(self.name)

if parent:

eb.parent = parent

eb.head = self.head

tails = Vector((0,0,0))

for child in self.children:

tails += child.build(amt, self.head, eb)

n = len(self.children)

eb.tail = tails/n

(trans,quat,scale) = eb.matrix.decompose()

self.matrix = quat.to_matrix()

self.inverse = self.matrix.copy()

self.inverse.invert()

if zero:

return eb.tail

else:

return eb.head

#

# readBvhFile(context, filepath, rot90, scale):

#

Location = 1

Rotation = 2

Hierarchy = 1

Motion = 2

Frames = 3

Deg2Rad = math.pi/180

Epsilon = 1e-5

def readBvhFile(context, filepath, rot90, scale):

fileName = os.path.realpath(os.path.expanduser(filepath))

(shortName, ext) = os.path.splitext(fileName)

if ext.lower() != ".bvh":

raise NameError("Not a bvh file: " + fileName)

print( "Loading BVH file "+ fileName )

time1 = time.clock()

level = 0

nErrors = 0

scn = context.scene

fp = open(fileName, "rU")

print( "Reading skeleton" )

lineNo = 0

for line in fp:

words= line.split()

lineNo += 1

if len(words) == 0:

continue

key = words[0].upper()

if key == 'HIERARCHY':

status = Hierarchy

elif key == 'MOTION':

if level != 0:

raise NameError("Tokenizer out of kilter %d" % level)

amt = bpy.data.armatures.new("BvhAmt")

rig = bpy.data.objects.new("BvhRig", amt)

scn.objects.link(rig)

scn.objects.active = rig

bpy.ops.object.mode_set(mode='EDIT')

root.build(amt, Vector((0,0,0)), None)

#root.display('')

bpy.ops.object.mode_set(mode='OBJECT')

status = Motion

elif status == Hierarchy:

if key == 'ROOT':

node = CNode(words, None)

root = node

nodes = [root]

elif key == 'JOINT':

node = CNode(words, node)

nodes.append(node)

elif key == 'OFFSET':

(x,y,z) = (float(words[1]), float(words[2]), float(words[3]))

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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