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

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


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')

Перейти на страницу:

Похожие книги

Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ

Эта книга представляет собой перевод третьего издания американского бестселлера Effective C++ и является руководством по грамотному использованию языка C++. Она поможет сделать ваши программы более понятными, простыми в сопровождении и эффективными. Помимо материала, описывающего общую стратегию проектирования, книга включает в себя главы по программированию с применением шаблонов и по управлению ресурсами, а также множество советов, которые позволят усовершенствовать ваши программы и сделать работу более интересной и творческой. Книга также включает новый материал по принципам обработки исключений, паттернам проектирования и библиотечным средствам.Издание ориентировано на программистов, знакомых с основами C++ и имеющих навыки его практического применения.

Скотт Майерс , Скотт Мейерс

Программирование, программы, базы данных / Программирование / Книги по IT
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript

Данная книга посвящена программированию игр с помощью ActionScript. Здесь вы найдете подробные указания, необходимые для создания самых разных игр – аркад, головоломок, загадок и даже игровых автоматов. В тексте приведены исходные коды программ и детальные, доступно изложенные инструкции. Базовые принципы программирования ActionScript рассматриваются на примере игр, однако вы без труда сможете применить полученные знания и для разработки неигровых проектов, таких как Web-дизайн и реклама. Рекомендации Гэри Розенцвейга помогут вам не только придумывать занимательные игры и размещать их на Web-сайте, но и оптимизировать скорость их работы, а также защищать свои творения от несанкционированного копирования. Представленный в книге код несложно изменить для использования в других программах.Книга предназначена для широкого круга читателей – создателей анимационных роликов, художников-оформителей, программистов и разработчиков Web-сайтов. Издание может также выступать в качестве практического пособия по изучению ActionScript.

Гэри Розенцвейг

Программирование, программы, базы данных / Программирование / Книги по IT
Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT