← Back to CoursesBlendercursus
Blendercursus
108. Python
schoolium · Blendercursus
Blendercursus
108. Python
LDeel L · Werkstroom en verdieping

Hoofdstuk 108Python

De console, scripting-basis, de operator-geschiedenis in de Info-editor, bpy.data tegenover bpy.context

Elke knop in Blender roept uiteindelijk Python-code aan. Dat maakt Blender volledig scriptbaar: van kleine automatiseringen tot complete add-ons. Dit hoofdstuk behandelt de instapkennis — genoeg om zelf iets te bouwen en om te begrijpen wat een add-on doet.

4× uitleg1× zelf doen1 oefenbestand4 beelden
Een doorzichtige laag code die als een net over een 3D-scène ligt — de beeldspraak dat elke handeling in Blender ook als script bestaat.RECCONCEPT00:00:00:00schoolium
beeld-l-python-lintEen doorzichtige laag code die als een net over een 3D-scène ligt — de beeldspraak dat elke handeling in Blender ook als script bestaat.
Uitleg · 108.1

De Python Console — direct uitproberen

1/5

De Python Console (hoofdstuk 46 behandelt de editor zelf) is een live Python-interpreter met de bpy-module al ingeladen. Typ bpy.data.objects en je krijgt de lijst van alle objecten in het bestand; typ bpy.data.objects['Cube'].location.x = 2 en de kubus springt meteen naar die positie in de viewport — er is geen los “uitvoeren”-commando nodig, elke regel werkt meteen door.

Tab-completion (Tab-toets) toont welke attributen en methodes beschikbaar zijn op een object — de snelste manier om de API te verkennen zonder de documentatie erbij te houden.

Een Python Console-sessie als schema: object opvragen, locatie aanpassen, en het resultaat dat rechtstreeks wordt teruggegeven.RECRENDER · EEVEE00:00:00:001280×800
render-l-python-console-voorbeeldEen Python Console-sessie als schema: object opvragen, locatie aanpassen, en het resultaat dat rechtstreeks wordt teruggegeven.
Uitleg · 108.2

bpy.data tegenover bpy.context

2/5

bpy.data is de volledige, ondubbelzinnige inhoud van het .blend-bestand: alle objecten, materialen, scènes, meshes — ongeacht wat er nu op het scherm staat of geselecteerd is. bpy.data.objects['Cube'] verwijst altijd naar precies dat ene object, wat er ook actief of zichtbaar is. Dit is de juiste ingang voor een script dat betrouwbaar met specifieke data moet werken.

bpy.context is de huidige situatie: wat is actief (context.object), wat is geselecteerd (context.selected_objects), welke modus is actief (context.mode), welke editor heeft de muis erboven. Veel bpy.ops-operators (de functies achter knoppen, zoals bpy.ops.mesh.bevel()) werken via de context — ze doen iets met “het huidige object” of “de huidige selectie”, en falen soms stil of met een foutmelding als de context niet klopt (bijvoorbeeld een mesh-operator aanroepen terwijl je niet in Edit Mode zit).

Vuistregel: voor **data opvragen of wijzigen met een vast doel**, gebruik bpy.data. Voor **een operator uitvoeren zoals een gebruiker een knop zou indrukken**, gebruik bpy.ops, met de context correct gezet.

Een schema met twee kolommen naast elkaar: bpy.data (een vaste boomstructuur van objecten/materialen/scenes) en bpy.context (een los label dat wijst naar wat nu actief/geselecteerd is) — een concept-illustratie, geen interface.RECCONCEPT00:00:00:00schoolium
beeld-l-bpy-data-context-schemaEen schema met twee kolommen naast elkaar: bpy.data (een vaste boomstructuur van objecten/materialen/scenes) en bpy.context (een los label dat wijst naar wat nu actief/geselecteerd is) — een concept-illustratie, geen interface.
Uitleg · 108.3

De Info-editor: de operator-geschiedenis lezen

3/5

De Info-editor (hoofdstuk 47) houdt een log bij van elke uitgevoerde operator, in de vorm van de echte Python-aanroep die erachter zit. Voer je een handeling uit via de muis — bijvoorbeeld een bevel met Ctrl+B — dan verschijnt in de Info-editor een regel als bpy.ops.mesh.bevel(offset=0.05, segments=3, ...). Dat is de snelste manier om te ontdekken hoe een operator heet en welke argumenten hij verwacht: de handeling zelf uitvoeren en aflezen wat Blender daarvan noteerde, in plaats van de documentatie door te zoeken.

Regels uit de Info-editor kan je selecteren en kopiëren, rechtstreeks in een script plakken — dat is precies hoe de meeste kleine automatiseringsscripts ontstaan: een handeling met de hand doen, de gegenereerde regel oppikken, en die vervolgens in een lus over meerdere objecten laten lopen.

Een reeks gelogde operatoraanroepen zoals de Info-editor ze toont, waaronder een bpy.ops.mesh.bevel()-regel met zichtbare argumenten.RECRENDER · EEVEE00:00:00:001280×800
render-l-info-editor-voorbeeldEen reeks gelogde operatoraanroepen zoals de Info-editor ze toont, waaronder een bpy.ops.mesh.bevel()-regel met zichtbare argumenten.
Uitleg · 108.4

Een script uitvoeren: Text Editor, Run Script, en de Scripting-workspace

4/5

Voor iets langer dan een paar regels open je de Text Editor (hoofdstuk 45, meteen beschikbaar in de Scripting-workspace), typ of plak je Python-code, en druk je op Run Script (of Alt+P met de cursor in de tekst). Fouten verschijnen in de Info-editor en op de systeemconsole (Window → Toggle System Console op Windows) — hou die open tijdens het testen, want de foutmelding in de UI zelf is vaak maar één regel.

Voor iets dat blijvend beschikbaar moet zijn (een eigen operator, paneel of menu-item) verpak je de code als add-on: een los .py-bestand met een bl_info-dictionary bovenaan en register()/unregister()-functies — hetzelfde patroon dat elke bestaande add-on gebruikt.

Dezelfde soort commando's als in de Python Console, maar dan als regels in een Text Editor-script dat je met Run Script in één keer uitvoert.RECRENDER · EEVEE00:00:00:001280×800
render-l-python-console-voorbeeldDezelfde soort commando's als in de Python Console, maar dan als regels in een Text Editor-script dat je met Run Script in één keer uitvoert.
Zelf doen · 108.5

Zelf proberen: alle kubussen in de scène hernoemen via Python

5/5

Open start_python_scripting.blend: een scène met een dozijn kubussen met standaardnamen. Schrijf in de Text Editor een script dat ze allemaal hernoemt naar Kubus_01, Kubus_02, ... in volgorde van hun X-positie.

  1. 1Open de Scripting-workspace, maak een nieuwe tekst aan.
  2. 2Haal alle objecten van type MESH op via bpy.data.objects, filter op naam of type.
  3. 3Sorteer de lijst op object.location.x.
  4. 4Loop erover met enumerate() en zet object.name = 'Kubus_%02d' % (i+1).
  5. 5Run Script, controleer het resultaat in de Outliner.
Gelukt als…Alle kubussen hernoemd in volgorde van links naar rechts, zonder ze één voor één met de hand aan te klikken.
Sleep om rond te draaien
001
start_python_scripting.blend
ScriptObject1 materialen8 vertices