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

стр.

>

>                texfaces.append(tf)

>        else:

>            pass

>    print('%s successfully imported' % realpath)

>    fp.close()


>    me = bpy.data.meshes.new(name)

>    me.from_pydata(verts, [], faces)

>    me.update()


>    if texverts:

>        uvtex = me.uv_textures.new()

>        uvtex.name = name

>        data = uvtex.data

>        for n in range(len(texfaces)):

>            tf = texfaces[n]

>            data[n].uv1 = texverts[tf[0]]

>            data[n].uv2 = texverts[tf[1]]

>            data[n].uv3 = texverts[tf[2]]

>            if len(tf) == 4:

>                data[n].uv4 = texverts[tf[3]]


>    scn = bpy.context.scene

>    ob = bpy.data.objects.new(name, me)

>    scn.objects.link(ob)

>    scn.objects.active = ob


>    return 


>def parseFace(words):

>    face = []

>    texface = []

>    for n in range(1, len(words)):

>        li = words[n].split('/')

>        face.append( int(li[0])-1 )

>        try:

>            texface.append( int(li[1])-1 )

>        except:

>            pass

>    return (face, texface)


__init__.py

Этот файл содержит пользовательский интерфейс, то есть два класса, которые создают пункты меню для экспортёра и импортёра. Простой экспортёр вызывается из меню File » Export. Есть две опции: логический выбор, чтобы повернуть меш на 90 градусов (для преобразования между осями Y и Z для направления вверх), и масштаб. Простой импортёр вызывается из меню File » Import. Есть две опции: логический выбор, чтобы повернуть меш на 90 градусов (чтобы ось Z указывала вверх), и масштаб.

>__init__.py также содержит словарь >bl_info , который преобразует пакет в аддон Блендера, код регистрации, и код для импорта/перезагрузки двух других файлов.


>#----------------------------------------------------------

># File __init__.py

>#----------------------------------------------------------  


># Информация аддона

>bl_info = {

>    "name": "Simple OBJ format",

>    "author": "Thomas Larsson",

>    "location": "File > Import-Export",

>    "description": "Simple Wavefront obj import/export. Does meshes and UV coordinates",

>    "category": "Import-Export"}  


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

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

>if "bpy" in locals():

>    import imp

>    if 'simple_obj_import' in locals():

>        imp.reload(simple_obj_import)

>    if 'simple_obj_export' in locals():

>        imp.reload(simple_obj_export)  


>import bpy

>from bpy.props import *

>from io_utils import ExportHelper, ImportHelper  


>#

># Меню Import

># 

>class IMPORT_OT_simple_obj(bpy.types.Operator, ImportHelper):

>    bl_idname = "io_import_scene.simple_obj"

>    bl_description = 'Import from simple OBJ file format (.obj)'

>    bl_label = "Import simple OBJ" bl_space_type = "PROPERTIES"

>    bl_region_type = "WINDOW"


>    filename_ext = ".obj"

>    filter_glob = StringProperty(default="*.obj;*.mtl", options={'HIDDEN'})


>    filepath = bpy.props.StringProperty(

>        name="File Path",

>        description="File path used for importing the simple OBJ file",

>        maxlen= 1024, default= "")


>    rot90 = bpy.props.BoolProperty(

>        name = "Rotate 90 degrees",

>        description="Rotate mesh to Z up",

>        default = True)


>    scale = bpy.props.FloatProperty(

>        name = "Scale",

>        description="Scale mesh",

>        default = 0.1, min = 0.001, max = 1000.0)  


>    def execute(self, context):

>        from . import simple_obj_import

>        print("Load", self.properties.filepath)

>        simple_obj_import.import_simple_obj(

>            self.properties.filepath,

>            self.rot90,

>            self.scale)

>        return {'FINISHED'}  


>    def invoke(self, context, event):

>        context.window_manager.fileselect_add(self)

>        return {'RUNNING_MODAL'}  


>#

># Меню Export

># 


>class EXPORT_OT_simple_obj(bpy.types.Operator, ExportHelper):

>    bl_idname = "io_export_scene.simple_obj"

>    bl_description = 'Export from simple OBJ file format (.obj)'

>    bl_label = "Export simple OBJ"

>    bl_space_type = "PROPERTIES"

>    bl_region_type = "WINDOW" 


>    # Из ExportHelper. Фильтрация имён файлов.

>    filename_ext = ".obj"

>    filter_glob = StringProperty(default="*.obj", options={'HIDDEN'})