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

стр.

>


>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",

>        text="Add sphere").mesh = "sphere"  


>#

># class OBJECT_OT_AddButton(bpy.types.Operator):

>#

>class OBJECT_OT_AddButton(bpy.types.Operator):

>    bl_idname = "multifile.add"

>    bl_label = "Add"

>    mesh = bpy.props.StringProperty()  


>def execute(self, context):

>    if self.mesh == "cube":

>        mycube.makeMesh(-8)

>    elif self.mesh == "cylinder":

>        mycylinder.makeMesh(-5)

>    elif self.mesh == "sphere":

>        mysphere.makeMesh(-2)

>    return{'FINISHED'}  


>#

># Регистрация

># 


>def register():

>    bpy.utils.register_module(__name__)  


>def unregister():

>    bpy.utils.unregister_module(__name__)  


>if __name__ == "__main__":

>    register()


Простой импортёр и экспортёр obj-файлов

Формат OBJ часто используется для обмена данными меша между различными приложениями. Первоначально изобретеный для Wavefront Maya, он стал отраслевым стандартом. Это простой ASCII-формат, который содержит строки следующего вида:

>v x y z

   Координаты вершин как >(x, y, z)

>vt u v

   Текстурные координаты как >(u, v)

>f v>1 v>2 ... v>n

   Грань с n углами, в вершинах >v>1, v>2, ... v>n. Для мешей без координат UV.

>f v>1/vt>1 v>2/vt>2 ... v>n/vt>n

   Грани с n углами. Углы — это вершины >v>1, v>2, ... v>n в 3D-пространстве и >vt>1, vt>2, ... vt>n в текстурном пространстве.