2. 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
Vývojové prostředí
OS Linux a OS Windows
- v principu je potřeba jen textový editor
- není potřeba kompilovat
- integrovaná konzole
Zdroje a příklady
Blender 2.65.5 - API documentation
Blender 3D: Noob to Pro/Advanced Tutorials/Blender Scripting/A Separately Installable Addon
Blender 3D: Aktuální verze API === Zadání
Vytvořte modul, který vytvoří model domečku, parametry bude šířka, výška, hloubka a výška střechy
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í
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