Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода
Шрифт:
Существует аналогичный класс ExportHelper, который ограничивает имеющийся выбор файлов экспорта.
#----------------------------------------------------------
# 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
Поделиться:
Популярные книги
Калибр Личности 1
1. Калибр Личности
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Третий. Том 3
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Действуй, дядя Доктор!
Любовные романы:
короткие любовные романы
6.83
рейтинг книги
Дарующая счастье
Любовные романы:
любовно-фантастические романы
6.96
рейтинг книги
Охота на эмиссара
1. Федерация Объединённых Миров
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Боги, пиво и дурак. Том 3
3. Боги, пиво и дурак
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Кровь и Пламя
7. Изгой
Фантастика:
фэнтези
8.95
рейтинг книги
Идущий в тени 4
4. Идущий в тени
Фантастика:
боевая фантастика
6.58
рейтинг книги
Сумеречный стрелок 7
7. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Титан империи 5
5. Титан Империи
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Подаренная чёрному дракону
Любовные романы:
любовно-фантастические романы
7.07
рейтинг книги
Бальмануг. (Не) Любовница 2
4. Мир Десяти
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Восход. Солнцев. Книга IV
4. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Измена. Мой непрощённый
2. Самойловы
Любовные романы:
современные любовные романы
5.00