[PYTHON] [Blender] Verwenden Sie das Textzeichnungsmodul aus dem Skript heraus

Zeichen können angezeigt werden, indem ein Schriftbild nur mit der OpenGL-Funktion erstellt wird, die unter Verwenden von OpenGL im Skript [Blender] erläutert wird. .. Wenn Sie jedoch Zeichen für ein wenig anzeigen möchten, z. B. zum Debuggen, dauert es einige Zeit, bis das Schriftbild vorbereitet ist. In einem solchen Fall bietet Blender eine API zum Zeichnen von Text, mit der Sie problemlos Text aus einem Skript zeichnen können. Beispielsweise verwenden die offiziellen Screencast-Schlüsseltasten von Blender diese Funktion, um die in den letzten Sekunden gedrückten Tasten anzuzeigen.

In diesem Artikel werde ich erklären, wie die Textzeichnungs-API von Blender mit Beispielen verwendet wird.

Stichprobe

Dies ist ein Beispiel für die Anzeige einer Zeichenfolge in "View 3D".

render_text.py


import bpy
import blf    #Textzeichnungsmodul


bl_info = {
    "name": "Tutorial: Render text",
    "author": "Nutti",
    "version": (1, 0),
    "blender": (2, 74, 0),
    "location": "View3D > Tutorial: Render text with blf module",
    "description": "Tutorial: Render text with blf module.",
    "warning": "",
    "support": "COMMUNITY",
    "wiki_url": "",
    "tracker_url": "",
    "category": "3D View"
}


class TextRenderer(bpy.types.Operator):
    """Zeichne eine Schnur"""

    bl_idname = "view3d.text_renderer"
    bl_label = "Text renderer"

    __handle = None    #Zeichenfunktion

    #Registrieren Sie die Zeichenfunktion des Bereichs "View3D"
    @staticmethod
    def handle_add():
        TextRenderer.__handle = bpy.types.SpaceView3D.draw_handler_add(
            TextRenderer.render_text,
            (), 'WINDOW', 'POST_PIXEL')

    #Heben Sie die Registrierung der Zeichenfunktion im Bereich "View3D" auf
    @staticmethod
    def handle_remove():
        if TextRenderer.__handle is not None:
            bpy.types.SpaceView3D.draw_handler_remove(
                TextRenderer.__handle, 'WINDOW')
            TextRenderer.__handle = None

    #Zeichnungsfunktionskörper im Bereich "View3D"
    @staticmethod
    def render_text():
        #Zeichnen der Zeichenfolge "Suzanne in Ihrer View3D-Region"
        blf.size(0, 20, 72)            #Geben Sie die Schriftgröße an
        blf.position(0, 20, 150, 0)    #Zeichnungsposition angeben
        blf.draw(0, "Suzanne on your View3D region")    #Eine Schnur zeichnen


#Verarbeitung zum Zeitpunkt der Skriptinstallation
def register():
    bpy.utils.register_module(__name__)
    TextRenderer.handle_add()


#Verarbeitung bei der Deinstallation des Skripts
def unregister():
    bpy.utils.unregister_module(__name__)
    TextRenderer.handle_remove()


if __name__ == "__main__":
    register()

Wie benutzt man

  1. Installieren Sie das Skript unter Bezugnahme auf die Blender-Wiki-Seite.
  2. Vergewissern Sie sich, dass die Zeichenfolge "Suzanne in Ihrer View3D-Region" in View3D angezeigt wird.

20150730.png

Beispielerklärung

Die grundlegende Erklärung des Blender-Skripts wird im folgenden Artikel vorgestellt. Daher konzentrieren wir uns hier auf die Erklärung der neu hinzugefügten Elemente. [\ Blender ] So erstellen Sie ein Blender-Plug-In

BLF-Modul importieren

Um die von Blender bereitgestellte Textzeichnungs-API verwenden zu können, müssen Sie das Modul `` `blf``` importieren.

import blf

Registrierung / Abmeldung der Zeichenfunktion "View3D"

Im folgenden Artikel wird erläutert, wie Sie eine Funktion zum Zeichnen im Bereich "View3D" registrieren / die Registrierung aufheben. Verwenden Sie OpenGL aus dem [Blender] -Skript heraus

Zeichnungsfunktionskörper "View3D"

In dem Funktionskörper, der in "View3D" zeichnet, wird die Zeichenkette mit dem Modul `` `blf``` gezeichnet.

Zunächst wird die Funktion `blf.size ()` `aufgerufen, um die zu zeichnende Schriftgröße anzugeben. Geben Sie im zweiten Argument ** Schriftgröße ** und im dritten Argument ** dpi ** an. Das erste Argument wird verwendet, wenn Sie Ihre eigene Schriftart mit dem Modul `blf``` laden, bei Verwendung der Standard-Blender-Schriftart jedoch 0 angeben.

Rufen Sie dann die Funktion `blf.position ()` auf, um anzugeben, wo die Zeichenfolge gezeichnet werden soll. Das erste Argument ist dasselbe wie das erste Argument der Funktion `blf.size ()`. Geben Sie im 2. bis 4. Argument ** die Position zum Zeichnen der Zeichenfolge ** an (in der Reihenfolge der x-Koordinaten, y-Koordinaten, z-Koordinaten).

Schließlich wird die Funktion `blf.draw ()` verwendet, um die Zeichenfolge zu zeichnen. Geben Sie im zweiten Argument ** die Zeichenfolge an, die Sie zeichnen möchten **. Das erste Argument ist dasselbe wie das erste Argument der Funktion `blf.size ()`.

    #Zeichnungsfunktionskörper im Bereich "View3D"
    @staticmethod
    def render_text():
        #Zeichnen der Zeichenfolge "Suzanne in Ihrer View3D-Region"
        blf.size(0, 20, 72)            #Geben Sie die Schriftgröße an
        blf.position(0, 20, 150, 0)    #Zeichnungsposition angeben
        blf.draw(0, "Suzanne on your View3D region")    #Eine Schnur zeichnen

blfDas Modul bietet auch verschiedene nützliche APIs. blfSie können das vom Modul bereitgestellte API-Dokument unter der folgenden URL überprüfen. Wenn Sie andere APIs kennenlernen möchten, lesen Sie diese bitte. http://www.blender.org/api/blender_python_api_2_60_6/blf.html

Recommended Posts

[Blender] Verwenden Sie das Textzeichnungsmodul aus dem Skript heraus
[Blender] Verwenden Sie OpenGL aus dem Skript heraus
Verwenden Sie das nghttp2 Python-Modul von Homebrew aus pyenvs Python
Verwendung des optparse-Moduls
Verwenden Sie Blender als Python-Modul
Verwenden Sie die Flickr-API von Python
Verwendung des ConfigParser-Moduls
Verwenden Sie Django aus einem lokalen Python-Skript
Holen Sie sich nur den Text aus dem Django-Formular.
Laden Sie Bilder aus einer Textdatei herunter, die die URL enthält
Verwendung der Grafikzeichnungsbibliothek Bokeh
Verwenden Sie das elektronische Papiermodul als Aufgabenliste
Greifen Sie über REPL auf die im Skript definierten Variablen zu
Übergeben von Argumenten beim Aufrufen von Python-Skripten über Blender in der Befehlszeile