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

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

# 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 v1 v2 ... vn

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

f v1/vt1 v2/vt2 ... vn/vtn

   Грани с n углами. Углы — это вершины v1, v2, ... vn в 3D-пространстве и vt1, vt2, ... vtn в текстурном пространстве.


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

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

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


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

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


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

# File export_simple_obj.py

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

Перейти на страницу:

Похожие книги