My-library.info
Все категории

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

На электронном книжном портале my-library.info можно читать бесплатно книги онлайн без регистрации, в том числе Thomas Larsson - Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода. Жанр: Программирование издательство неизвестно, год 2004. В онлайн доступе вы получите полную версию книги с кратким содержанием для ознакомления, сможете читать аннотацию к книге (предисловие), увидеть рецензии тех, кто произведение уже прочитал и их экспертное мнение о прочитанном.
Кроме того, в библиотеке онлайн my-library.info вы найдете много новинок, которые заслуживают вашего внимания.

Название:
Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода
Автор
Издательство:
неизвестно
ISBN:
нет данных
Год:
неизвестен
Дата добавления:
17 сентябрь 2019
Количество просмотров:
202
Читать онлайн
Thomas Larsson - Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода

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

Thomas Larsson - Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - описание и краткое содержание, автор Thomas Larsson, читайте бесплатно онлайн на сайте электронной библиотеки My-Library.Info
Третье издание, расширенное и обновлённое для Blender 2.57

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

Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - читать книгу онлайн бесплатно, автор Thomas Larsson

                        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_LoadBvhButton(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 часто содержит пользовательский интерфейс и информацию аддона, в то время как реальная работа делается в других файлах.

В отличие от других скриптов в этой книге, многофайловый пакет не может быть выполнен из текстового редактора. Он должен быть скопирован в место, которое входит в путь поиска в Блендере, например, addons или addons-contrib, см. раздел аддоны Блендера. К счастью, вам не нужно перезагружать весь Блендер для перезагрузки файлов после каждой модификации. Нажатие F8 на клавиатуре перезагружает все активированные аддоны в Блендере.


Простой пример

Этот пакет разнесён на четыре файла. Три из них создают меши: куб, цилиндр и сферу, соответственно. Это файлы автономных скриптов, которые можно выполнять в окне текстового редактора для отладочных целей. Условие (__name__ == "__main__") истинно, если файл был запущен в автономном режиме.

mycube.py

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

# File mycube.py

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

import bpy 


def makeMesh(z):

    bpy.ops.mesh.primitive_cube_add(location=(0,0,z))

    return bpy.context.object  


if __name__ == "__main__":

    ob = makeMesh(1)

    print(ob, "created")


mycylinder.py

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

# File mycylinder.py

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

import bpy 


def makeMesh(z):

    bpy.ops.mesh.primitive_cylinder_add(location=(0,0,z))

    return bpy.context.object  


if __name__ == "__main__":

    ob = makeMesh(5)

    print(ob, "created")


mysphere.py

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

# File mysphere.py

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

import bpy 


def makeMesh(z):

    bpy.ops.mesh.primitive_ico_sphere_add(location=(0,0,z))

    return bpy.context.object  


if __name__ == "__main__":

    ob = makeMesh(3)

    print(ob, "created")


__init__.py

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


# Для поддержки правильной перезагрузки, пробуем обратиться

# к переменной пакета, если она есть, перезагрузить всё

if "bpy" in locals():

    import imp imp.reload(mycube)

    imp.reload(mysphere)

    imp.reload(mycylinder)

    print("Reloaded multifiles")

else:

    from . import mycube, mysphere, mycylinder

    print("Imported multifiles")


Этот код работает следующим образом.

• Если __init__.py() запускается в первый раз, т.е. при запуске Блендера с включенным аддоном в вашем файле default.blend, "bpy" in locals() возвращает Ложь. Другие файлы в пакете импортируются и в терминале выводится "Imported multifiles".

• Если __init__.py() запускается в первый раз после запуска Блендера с выключенным аддоном в вашем файле default.blend, и вы нажали включение аддона, "bpy" in locals() возвращает Ложь. Другие файлы в пакете импортируются и в терминале выводится "Imported multifiles".

• После того, как дополнения включены, в любое время вы нажимаете F8, чтобы перезагрузить аддоны, "bpy" in locals() возвращает Истину. Другие файлы в пакете перезагружаются, а в терминал выводится "Reloaded multifiles".


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

# File __init__.py

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


# Addon info

bl_info = {

    "name": "Multifile",

    'author': 'Thomas Larsson',

    "location": "View3D > UI panel > Add meshes",

    "category": "3D View"

    } 


# Для поддержки правильной перезагрузки, пробуем обратиться

# к переменной пакета, если она есть, перезагрузить всё

if "bpy" in locals():

    import imp imp.reload(mycube)

    imp.reload(mysphere)

    imp.reload(mycylinder)

    print("Reloaded multifiles")

else:

    from . import mycube, mysphere, mycylinder

    print("Imported multifiles")  


import bpy

from bpy.props import *  


#

# class AddMeshPanel(bpy.types.Panel):

#

class AddMeshPanel(bpy.types.Panel):

    bl_label = "Add meshes"

    bl_space_type = "VIEW_3D"

    bl_region_type = "UI" 


    def draw(self, context):

    self.layout.operator("multifile.add",

        text="Add cube").mesh = "cube"

    self.layout.operator("multifile.add",

        text="Add cylinder").mesh = "cylinder"

    self.layout.operator("multifile.add",


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

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


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

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

Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*
Все материалы на сайте размещаются его пользователями.
Администратор сайта не несёт ответственности за действия пользователей сайта..
Вы можете направить вашу жалобу на почту librarybook.ru@gmail.com или заполнить форму обратной связи.