BI-PGA Programování grafických aplikací
Jdi na navigaci předmětu

8. Zásuvné moduly pro Blender I

Cíl cvičení

Cílem cvičení je se seznámit s vývojovým prostředím pro aplikace Blender s využitím jazyka Python v rámci jednoduchého pluginu se základním GUI

Osnova

  • Prezentace zadání semestrálních prácí (sekce BLENDER)
  • Instalace vývojového prostředí a nástrojů
  • Zdroje a příklady
  • Samostatná úloha - modul 3D Transformace

Zadání semestrální práce

Zadání semestrální práce

Vývojové prostředí

OS Linux a OS Windows

  • v principu je potřeba jen textový editor
  • není potřeba kompilovat
  • integrovaná konzole
python blender04

Zdroje a příklady

Blender 2.65.5 - API documentation

Blender Addons with Plugin

Blender 3D: Noob to Pro/Advanced Tutorials/Blender Scripting/A Separately Installable Addon

Zadání

Vytvořte modul, který vytvoří model domečku, parametry bude šířka, výška, hloubka a výška střechy

gui3
house
Implementace

Následují zajímavé části kódu

  • Vlastnosti modulu **
bl_info = {
    "name": "House",
    "description": "Klasický domecek.",
    "author": "Jirí Chludil",
    "version": (1, 0, 0),
    "blender": (2, 77, 0),
    "location": "View3D > Add > Mesh > House",
    "warning": "",
    "wiki_url": "http://edux.fit.cvut.cz/courses/BI-PGA",
    "category": "Add Mesh"
}
  • GUI **
  roof : bpy.props.FloatProperty(
        name = 'Roof',
        description = 'House roof height',
        default = 1, min = 0.0, max=2.0, step=0.1
    )

    size : bpy.props.FloatVectorProperty(
        name = 'Size',
        description = 'Size',
        subtype = 'XYZ',
        default=(1.0, 1.0, 1.0),
    )
  • Definice meshe **
def add_house(size = (1. ,1. ,1.), roof = 1):
    verts = []
    edges = []
    faces = []
    size_x = size[0] / 2.0
    size_y = size[1] / 2.0
    size_z = size[2] / 2.0
    verts.append((-size_x, -size_y, -size_z))
    verts.append(( size_x, -size_y, -size_z))
    verts.append(( size_x, size_y, -size_z))
    verts.append((-size_x, size_y, -size_z))
    verts.append((-size_x, -size_y, size_z))
    verts.append(( size_x, -size_y, size_z))
    verts.append(( size_x, size_y, size_z))
    verts.append((-size_x, size_y, size_z))
    verts.append((-size_x, 0, size_z+roof))
    verts.append(( size_x, 0, size_z+roof))
    faces.append([0,1,2,3])
    faces.append([0,1,5,4])
    faces.append([1,2,6,5])
    faces.append([2,3,7,6])
    faces.append([3,0,4,7])
    faces.append([4,5,9,8])
    faces.append([6,7,8,9])
    faces.append([5,6,9])
    faces.append([4,7,8])
    return verts, edges, faces
  • Registrace **
def register():
    bpy.utils.register_module(__name__)
    bpy.types.INFO_MT_mesh_add.append(menu_func)
  • Vytvoření meshe **
def create_mesh_object(context, verts, edges, faces, name):
    # Vytvorení nové a prázdné mesh
    mesh = bpy.data.meshes.new(name)
    # konfigurace meshe prostrednictvím verts/edges/faces.
    mesh.from_pydata(verts, edges, faces)
    # Aktualizace mesh.
    mesh.update()

    from bpy_extras import object_utils
    return object_utils.object_data_add(context, mesh, operator=None)
  • Provedení modulu **
def register():
 def execute(self, context):
        # vytvorení geometrie
        verts, edges, faces = add_house(self.size,self.roof)
        # vytvorení objektu (meshe)
        obj = create_mesh_object(context, verts, edges, faces, "House")

        return {'FINISHED'}

Řešení

v2.79.x

v2.90.x

v2.93.5

Samostatná úloha - 3D Transformace

Zadání

Naprogramujte plugin do Blenderu, který do kubické mřížky zkopíruje vybraný objekt. Parametry jsou počet opakování v jednotlivých mřížkách a posunutí v jednotlivých osách

Řešení