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

Тут можно читать онлайн Thomas Larsson - Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

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

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

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

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

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

Интервал:

Закладка:

Сделать

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

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

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 1v 2... v n

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

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

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

Больше конструкций, например, для настройки материала или групп граней, имеются в полноценном экспортёре-импортёре OBJ-формата.

Есть две вещи, которые надо принять во внимание. Во-первых, большинство приложений (насколько мне известно, все, кроме Блендера) используют соглашение, что ось Yуказывает вверх, в то время как Блендер использует ось Zдля направления вверх. Во-вторых, Майя начинает подсчет вершин с 1, тогда как Блендер начинает отсчет от 0. Это означает, что углы граней на самом деле расположены в вершинах v 1-1, v 2-1, ... v n-1 в 3D-пространстве и в vt 1-1, vt 2-1, ... vt n-1 в пространстве текстур.

Простой экспортёр-импортёр OBJ-файлов — это пакет Питона, который состоит из трех файлов: два файла, которые фактически выполняют работу экспорта/импорта, и __init__.py, который делает каталог пакетом.

Простой экспорт OBJ-файлов

Этот скрипт экспортирует выбранный меш как OBJ-файл.

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

# File export_simple_obj.py

# Простой OBJ-экспортёр, который записывает только вершины, грани и текстурные вершины

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

import bpy, os

def export_simple_obj(filepath, ob, rot90, scale):

name = os.path.basename(filepath)

realpath = os.path.realpath(os.path.expanduser(filepath))

fp = open(realpath, 'w')

print('Exporting %s' % realpath)

if not ob or ob.type != 'MESH':

raise NameError('Cannot export: active object %s is not a mesh.' % ob)

me = ob.data

for v in me.vertices:

x = scale*v.co

if rot90:

fp.write("v %.5f %.5f %.5f\n" % (x[0], x[2], -x[1]))

else:

fp.write("v %.5f %.5f %.5f\n" % (x[0], x[1], x[2]))

if len(me.uv_textures) > 0:

uvtex = me.uv_textures[0]

for f in me.faces:

data = uvtex.data[f.index]

fp.write("vt %.5f %.5f\n" % (data.uv1[0], data.uv1[1]))

fp.write("vt %.5f %.5f\n" % (data.uv2[0], data.uv2[1]))

fp.write("vt %.5f %.5f\n" % (data.uv3[0], data.uv3[1]))

if len(f.vertices) == 4:

fp.write("vt %.5f %.5f\n" % (data.uv4[0], data.uv4[1]))

vt = 1

for f in me.faces:

vs = f.vertices

fp.write("f %d/%d %d/%d %d/%d" % (vs[0]+1, vt, vs[1]+1, vt+1, vs[2]+1, vt+2))

vt += 3

if len(f.vertices) == 4:

fp.write(" %d/%d\n" % (vs[3]+1, vt))

vt += 1

else:

fp.write("\n")

else:

for f in me.faces:

vs = f.vertices

fp.write("f %d %d %d" % (vs[0]+1, vs[1]+1, vs[2]+1))

if len(f.vertices) == 4:

fp.write(" %d\n" % (vs[3]+1))

else:

fp.write("\n")

print('%s successfully exported' % realpath)

fp.close()

return

Простой импорт OBJ-файлов

Этот скрипт импорта — компаньон предыдущего. Он, конечно, также может использоваться для импорта OBJ-файлов из других приложений.

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

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

Интервал:

Закладка:

Сделать


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

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




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


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


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x