Чтение онлайн

ЖАНРЫ

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

Larsson Thomas

Шрифт:

# 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

Поделиться с друзьями: