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

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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

else:

raise NameError("Did not expect %s" % words[0])

elif status == Motion:

if key == 'FRAMES:':

nFrames = int(words[1])

elif key == 'FRAME' and words[1].upper() == 'TIME:':

frameTime = float(words[2])

frameTime = 1

status = Frames

frame = 0

t = 0

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

pbones = rig.pose.bones

for pb in pbones:

pb.rotation_mode = 'QUATERNION'

elif status == Frames:

addFrame(words, frame, nodes, pbones, scale)

t += frameTime

frame += 1

fp.close()

time2 = time.clock()

print("Bvh file loaded in %.3f s" % (time2-time1))

return rig

#

# channelYup(word):

# channelZup(word):

#

def channelYup(word):

if word == 'Xrotation':

return ('X', Rotation, +1)

elif word == 'Yrotation':

return ('Y', Rotation, +1)

elif word == 'Zrotation':

return ('Z', Rotation, +1)

elif word == 'Xposition':

return (0, Location, +1)

elif word == 'Yposition':

return (1, Location, +1)

elif word == 'Zposition':

return (2, Location, +1)

def channelZup(word):

if word == 'Xrotation':

return ('X', Rotation, +1)

elif word == 'Yrotation':

return ('Z', Rotation, +1)

elif word == 'Zrotation':

return ('Y', Rotation, -1)

elif word == 'Xposition':

return (0, Location, +1)

elif word == 'Yposition':

return (2, Location, +1)

elif word == 'Zposition':

return (1, Location, -1)

#

# addFrame(words, frame, nodes, pbones, scale):

#

def addFrame(words, frame, nodes, pbones, scale):

m = 0

for node in nodes:

name = node.name

try:

pb = pbones[name]

except:

pb = None

if pb:

for (mode, indices) in node.channels:

if mode == Location:

vec = Vector((0,0,0))

for (index, sign) in indices:

vec[index] = sign*float(words[m])

m += 1

pb.location = (scale * vec - node.head) * node.inverse

for n in range(3):

pb.keyframe_insert('location', index=n, frame=frame, group=name)

elif mode == Rotation:

mats = []

for (axis, sign) in indices:

angle = sign*float(words[m])*Deg2Rad

mats.append(Matrix.Rotation(angle, 3, axis))

m += 1

mat = node.inverse * mats[0] * mats[1] * mats[2] * node.matrix

pb.rotation_quaternion = mat.to_quaternion()

for n in range(4):

pb.keyframe_insert('rotation_quaternion',

index=n, frame=frame, group=name)

return

#

# initSceneProperties(scn):

#

def initSceneProperties(scn):

bpy.types.Scene.MyBvhRot90 = bpy.props.BoolProperty(

name="Rotate 90 degrees",

description="Rotate the armature to make Z point up")

scn['MyBvhRot90'] = True

bpy.types.Scene.MyBvhScale = bpy.props.FloatProperty(

name="Scale",

default = 1.0,

min = 0.01,

max = 100)

scn['MyBvhScale'] = 1.0

initSceneProperties(bpy.context.scene)

#

# class BvhImportPanel(bpy.types.Panel):

#

class BvhImportPanel(bpy.types.Panel):

bl_label = "BVH import"

bl_space_type = "VIEW_3D"

bl_region_type = "UI"

def draw(self, context):

self.layout.prop(context.scene, "MyBvhRot90")

self.layout.prop(context.scene, "MyBvhScale")

self.layout.operator("simple_bvh.load")

#

# class OBJECT_OT_LoadBvhButt on(bpy.types.Operator, ImportHelper):

#

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

bl_idname = "simple_bvh.load"

bl_label = "Load BVH file (.bvh)"

# From ImportHelper. Filter filenames.

filename_ext = ".bvh"

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

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

maxlen=1024, default="")

def execute(self, context):

import bpy, os

readBvhFile(context, self.properties.filepath,

context.scene.MyBvhRot90, context.scene.MyBvhScale)

return{'FINISHED'}

def invoke(self, context, event):

context.window_manager.fileselect_add(self)

return {'RUNNING_MODAL'}

#

# Registration

#

def menu_func(self, context):

self.layout.operator("simple_bvh.load", text="Simple BVH (.bvh)...")

def register():

bpy.utils.register_module(__name__)

bpy.types.INFO_MT_file_import.append(menu_func)

def unregister():

bpy.utils.unregister_module(__name__)

bpy.types.INFO_MT_file_import.remove(menu_func)

if __name__ == "__main__":

try:

unregister()

except:

pass

register()

Многофайловые пакеты

Пакеты — это способ структурирования пространства имен модулей Питона, используя "точечную нотацию имен модулей". Например, имя модуля A.Bопределяет подмодуль с именем Bв пакете с именем A. Точно так же как использование модулей спасает авторов различных модулей от необходимости беспокоиться о существовании совпадающих глобальных имен переменных, использование точечной нотации имен модулей спасает авторов многомодульных пакетов от необходимости волноваться о совпадающих именах модулей. За дополнительной информацией о пакетах Питона, пожалуйста, обратитесь к документации на пакеты Питона

Каждый пакет должен содержать файл __init__.py. Этот файл необходим, чтобы заставить Питон относиться к каталогу, как к содержащему пакет, это сделано для предотвращения у каталогов с частоиспользуемым названием, например, string, непреднамеренного сокрытия действительного модуля, которое происходит в дальнейшем пути поиска модулей. В простейшем случае, __init__.pyможет быть просто пустым файлом, но он также может выполнять код инициализации пакета. В Блендере __init__.pyчасто содержит пользовательский интерфейс и информацию аддона, в то время как реальная работа делается в других файлах.

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

Интервал:

Закладка:

Сделать

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

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


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

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

x