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

Здесь есть возможность читать онлайн «Thomas Larsson - Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

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

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

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

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

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

После выполнения скрипта или включения его в качестве аддона, простой импортер 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]))

if rot90:

node.offset = scale*Vector((x,-z,y))

else:

node.offset = scale*Vector((x,y,z))

elif key == 'END':

node = CNode(words, node)

elif key == 'CHANNELS':

oldmode = None

for word in words[2:]:

if rot90:

(index, mode, sign) = channelZup(word)

else:

(index, mode, sign) = channelYup(word)

if mode != oldmode:

indices = []

node.channels.append((mode, indices))

oldmode = mode

indices.append((index, sign))

elif key == '{':

level += 1

elif key == '}':

level -= 1

node = node.parent

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

Интервал:

Закладка:

Сделать

Похожие книги на «Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода»

Представляем Вашему вниманию похожие книги на «Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


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

Обсуждение, отзывы о книге «Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x