aa_template

Übersicht: Python & Blender


Lernziele

Einzelne Befehle im Interpreter, bzw. an der Konsole einzugeben, ist mühselig und fehleranfällig. Besser ist es deshalb, die Anweisungen in einer Datei zu speichern und diese Datei dann mit dem Interpreter zur Ausführung zu bringen. Der grundsätzliche Inhalt einer solchen Datei und die Bedeutung von Kommentaren wird hier gezeigt und diskutiert.

Handlungsanweisungen

Aufgaben:
  1. Starte Blender mit einer neuen Datei.
  2. Navigiere zum »Text Editor«.
  3. Füge eine neue Text-Datei hinzu.
  4. Ersetze den Standard-Namen »Text« durch einen sinnvolleren Namen. Der Name sollte auch die Endung »py« erhalten.
  5. Kopiere den Inhalte der Vorlage in die neue Text-Datei ein.
  6. Lösche die Kommentare am Ende des Skripts und überlege, was passieren wird, wenn Du das Script ausführst?
  7. Sichere Deine Blenderdatei.

Die Vorlage für die ersten Übungen

Wir zeigen hier das Skript als Ganzes. Für den Fall, das eine weitere Kopie benötigt wird, ist die Vorlage auch im Anhang zu finden: Code-Schnipsel.

blender-basics/a-scripts/template.py (Source)

#!bpy
"""
Name: 'Template'
Blender: 2.7x
Group: 'Sample'
Tooltip: 'Template for new scripts, copy it and start coding...'
"""
import bpy


def function_1():
    """ One line describing the task of this function  """
    pass


def function_2():
    """ One line describing the task of this function  """
    print(__name__)
    print(50 * '*')


def function_3():
    """ One line describing the task of this function  """
    bpy.ops.mesh.primitive_cone_add(location=(1, 2, 1))


if __name__ == '__main__':
    # call the function for testing
    function_1()
    #function_2()
    #function_3()
/all/label-blender.png/all/label-python.png

Kommentare und Dokumentation

Wenn Du die Zeilen im Skript zählst (31) und den Kommentarzeilen gegenüber stellst (10), wird klar, wie wichtig Dokumentation ist. Es gilt die Regel: Wenn Dein Code nicht dokumentiert ist, ist er fehlerhaft und unvollständig!

  • Jeder Quelltext sollte sich eindeutig zuordnen lassen, verwende Dateinamen, die sich gut zuordnen lassen, ohne die Datei öffnen zu müssen.
  • Kommentare erlauben das automatische Generieren der technischen Dokumentation.
  • Kommentare erlauben das schnelle Einarbeiten in Quelltexte anderer Autoren.
  • Kommentare enthalten schon wesentliche Teile der Benutzerhilfe.
  • Über Kommentare lassen sich die Grundideen eines Algorithmus festhalten.

Es gibt zwei Varianten von Kommentaren:

'''
This one liner says all about a module (file) in one sentence.

After an empty line, more text as documentation is possible.
Instead triples of »'«, also »"« can be used.
'''

In dem Template sind die Zeilen 2-7, 12, 17 und 23 Kommentare. In größeren Projekten könnte ein “Style-Guide” auch andere Regeln vorschreiben. Wichtige allgemeine Style-Guide-Regeln findet man im PEP-0257 und PEP-0008.

http://www.python.org/peps/pep-0008.html

http://www.python.org/peps/pep-0257.html

Mit der Hash-Marke (#) läßt sich eine zweite Möglichkeit zum kommentieren nutzen. In der Vorlage sind die Zeilen 28, 30 und 31 Andwendungbeispiele für diese Art von Kommentar. Zeile 28 ist ein echter Kommentar. Die Zeilen 30 und 31 werden verwendet, um die Ausführung von Anweisungen zu verhindern.

Funktionen

Nicht jedes Teilproblem kann in einer Zeile gelöst werden. Deshalb werden Gruppen von Anweisungen zusammengefasst. Der Fachbegriff dafür heisst Funktion oder Methode.

Regeln für Funktionen:

  • Sie werden mit dem Schlüsselwort def eingeleitet.
  • Sie bilden einen Block, der mindestens eine Anweisung enthalten muss!!
  • Man kann sie beliebig oft aufrufen.
  • Es können Argumente übergeben werden... (werden in runden Klammern definiert bzw. übergeben).
  • Sollten mit return einen Wert zurückgeben.

Die Vorlage enthält drei Funktionen, jeder Funktionsname wird mit def eingeleitet, gefolgt vom Funktionsnamen.

Nach dem Funktionsnamen kann in runden Klammern eine Liste von Parametern übergeben werden. Wenn es keine Parameter gibt, wie in unserem Beispiel, endet die die erste Zeile der Funktion mit einem leeren Klammerpaar. Ein Doppelpunkt am Ende der Zeile startet einen neuen Codeblock - diese Regel gilt nicht nur für Funktionen, jeder Doppelpunkt startet einen Codeblock.

Alle nachfolgenden Zeilen, aber mindestens eine Zeile, werden durch vier (4) Leerzeichen eingerückt. Das Blockende wird durch einen negativen Zeileneinzug wieder beendet.

Mit diesem genialen Einrückungs-Trick sind die Klammern und das Kennzeichnen eines Zeilenende anderer Programmiersprachen überflüssig.

Wenn wir uns die Zeilen 10 bis 13 ansehen:

blender-basics/a-scripts/template.py (Source)

def function_1():
    """ One line describing the task of this function  """
    pass

Diese Funktion besteht aus zwei Zeilen. Die erste Zeile ist der so genannte »docstring«, gefolgt von der Anweisung pass. Damit genügen wir der Regel, dass jeder Block mindestens eine Anweisung enthalten muss. Die Anweisung pass macht genau das, was der Name suggeriert, es macht nichts, aber die Regel der Blockbildung ist damit erfüllt!

Funktionen aufrufen

Eine Funktion wird aufgerufen bzw. ausgeführt, indem der Name, gefolgt vom Klammerpaar geschrieben wird, wie in den Zeilen 29-31 zu sehen ist. Die letzten beiden Zeilen sind als Kommentar gekennzeichnet und werden deshalb nicht ausgeführt. Wenn die Hashmarke entfernt wird, werden die Funktionen ebenfalls ausgeführt.

blender-basics/a-scripts/template.py (Source)

    #function_2()
    #function_3()

Die Funktion: print

In der Funktion »function_2« rufen wir die Funktion print. Das Ergebis wird in der Konsole sichtbar.

blender-basics/a-scripts/template.py (Source)

    print(__name__)
    print(50 * '*')

Die erste Zeile gibt den Namen des Skripts aus, die zweite erzeugt 50 Sterne.

Ein Skript und zwei Arten der Verwendung

Zeile 27 enthält ein wenig Magie! Mit der if-Anweisung prüft man den Inhalt einer Variablen mit dem Namen »__name__«. Diese Variable erhält ihren Wert automatisch und kann abhängig von der Art des Aufrufes zwei verschiedene Werte enthalten.

  1. den Namen der Datei

oder

  1. den Namen »__main__«

Wenn der Vergleich mit dem Namen »__main__« überein stimmt, werden alle weiteren Anweisungen nach dem Doppelpunkt ausgeführt. Wenn sich der Dateiname in der Variablen befindet, werden die folgenden Zeilen ignoriert. Mit diesem Trick ist es möglich, das Skript direkt auszuführen oder mit einer »import«-Answeisung, Funktionen aus anderen Dateien aufzurufen. Damit ist eine Wiederverwendung von Code möglich.

Spezielle Blender-Funktionen

In der Funktion »function_3« wir eine Blender-Funktion aufgerufen. Der Name »primitive_cone_add« ist Teil einer Objekthierarchie. Der Pfad zur Funktion wird durch Punkte markiert. Funktionen die Teil einer solchen Objekthierarchie sind, werden Methode genannt. Die Methode »primitive_cone_add« benötigt einen Parameter. Das Ergebnis des Methodenaufrufs wird in der 3D-Welt ausgegeben. Schau im 3D-Fenster nach.

blender-basics/a-scripts/template.py (Source)

    bpy.ops.mesh.primitive_cone_add(location=(1, 2, 1))

Module importieren

Funktionen lasse sich aus anderen Dateien importieren. Damit lässt sich der Quellcode über verschiedene Dateien verteilen, organisieren und wiederverwenden. Damit können wir auch eine Vielzahl von Methoden aus Blender-Modulen importieren:

blender-basics/a-scripts/template.py (Source)

import bpy

Kommentare