Opbouw van de API

Doelen

objImage Objecten maken vanuit het view-menu met “Add » Mesh » …” is makkelijk. Hetzelfde kan worden bereikt met een Python script. De API is belangrijk om de benodigde informatie te krijgen.

Instructies / Taken

  1. Maak een nieuw Python script.

  2. Maak een functie die alle methodes opsomt die beschikbaar zijn om een mesh object (primitief) te maken in Blender.

  3. Maak één instantie van elk object uit je scène aan. De objecten mogen elkaar niet raken.

  4. Probeer de showcase onderaan deze tutorial.

  5. Maak een figuur bestaande uit een compositie van een kegel (cone) en een bol (UV_Sphere). Er zijn twee oplossingen mogelijk, maar misschien vind je zelf een derde.

Opbouw van de API

Alle beschikbare functies zijn gegroepeerd in verschillende modules. Voor nu heb je alleen de eerste twee nodig.

Applicatiemodules

  • Data Access (bpy.data)

  • Operators (bpy.ops)

  • Types (bpy.types)

  • Utilities (bpy.utils)

  • Path Utilities (bpy.path)

  • Application Data (bpy.app)

  • Property Definitions (bpy.props)

Standalone Modules

  • Math Types & Utilities (mathutils)

  • Font Drawing (blf)

  • Audio System (aud)

Game Engine Modules

  • Game Engine bge.types Module

  • Game Engine bge.logic Module

  • Game Engine bge.render Module

  • Game Engine bge.events module

Welke “primitieven” zijn beschikbaar?

Als je een scène gaat maken in Blender is het vaak goed om te beginnen met het maken van simpele objecten. Laten we de beschikbare mesh objecten maken. Maar welke zijn er beschikbaar?

  1. Eerste en makkelijkste oplossing: kijk naar het menu:

    1. Add » Mesh » … en kijk naar de gereedschapstips.

  2. Lees de handleiding:

    1. Er is een online documentatie, zoals de Blender Wiki. Zoek hier naar “mesh primitive”.

  1. Als je bekent bent met de structuren in Blender dan is de interactieve Python console een goed beginpunt om de API te ontdekken.

  2. Als je niet vindt wat je zoekt kun je de gemeenschap om hulp vragen.

Notitie

Let op: het is essentieel om te werken met de API, niemand kan alle mogelijkheden onthouden!

Het vinden van de juiste methode(s)

Hieronder zie je hoe je een mesh object toevoegt met behulp van Python in plaats van gebruik te maken van het menu. In dit voorbeeld is de interactieve Python console gebruikt. Om mesh objecten toe te voegen heb je de bpy.ops.mesh submodule nodig. Dit is foutgevoelig, dus het is een goed idee om een script te gebruiken.

../../_images/blender-for-loop.jpg

Maak de objecten

Nu dat we weten hoe we nieuwe objecten maken kunnen we een script voor deze taak gaan maken. Waar een nieuw object geplaatst wordt, wordt bepaald door de parameter locatie, een meervoudige verzameling/tuple (waarden in ronde haakjes) met drie waarden: de x-, y- en z-as.

Hieronder zie je een fragment.

bpy.ops.mesh.primitive_cube_add(location=(2, 2, 0))
bpy.ops.mesh.primitive_cylinder_add(location=(-2, -2, 0))

En de uiteindelijke oplossing ziet eruit als:

../../_images/blender-objects-api.jpg

Showcase

Probeer om de volgende scène na te maken door alleen gebruik te maken van kubussen! Dit is een abstracte boom. Je hoeft alleen de top van de boom, de bladeren, te maken. Na de volgende tutorials ben je in staat om een kubus toe te voegen voor de boomstam en de afmetingen van de kubussen te veranderen.

../../_images/blender-tree-11.jpg
#!bpy
"""
Name: 'simpletree.py'
Blender: 2.7x Group:
'Experiment' Tooltip: 'Create an abstract tree'
"""
import bpy


def new_cube(coord=(0,0,0)):
    "Places a cube at a given location "
    bpy.ops.mesh.primitive_cube_add(location=coord,
                                    rotation=(0, 0, 0))


if __name__ == '__main__':
    # Stop edit mode
    if bpy.ops.object.mode_set.poll():
        bpy.ops.object.mode_set(mode='OBJECT')

    # delete all mesh objects from a scene
    bpy.ops.object.select_by_type(type='MESH')
    bpy.ops.object.delete()

    # call the new function
    new_cube(coord=(0,0,0))
    new_cube(coord=(-.6,-0.6,0.5))
    new_cube(coord=(0.6,0.6,0.7))