[Blender] Utilisez le module de dessin de texte à partir du script

Les caractères peuvent être affichés en créant une image de police avec uniquement la fonction OpenGL expliquée dans Utilisation d'OpenGL depuis le script [Blender]. .. Cependant, si vous souhaitez afficher un peu les caractères, par exemple pour le débogage, la préparation de l'image de police prendra un certain temps. Pour un tel cas, Blender fournit une API de dessin de texte pour dessiner facilement du texte à partir d'un script. Par exemple, le module complémentaire officiel Screencast Keys de Blender utilise cette fonction pour afficher les touches enfoncées au cours des dernières secondes.

Dans cet article, j'expliquerai comment utiliser l'API de dessin de texte de Blender avec des exemples.

échantillon

Voici un exemple pour afficher une chaîne de caractères dans "View 3D".

render_text.py


import bpy
import blf    #Module de dessin de texte


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):
    """Dessinez une chaîne"""

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

    __handle = None    #Fonction de dessin

    #Enregistrer la fonction de dessin de la zone "View3D"
    @staticmethod
    def handle_add():
        TextRenderer.__handle = bpy.types.SpaceView3D.draw_handler_add(
            TextRenderer.render_text,
            (), 'WINDOW', 'POST_PIXEL')

    #Désenregistrer la fonction de dessin dans la zone "View3D"
    @staticmethod
    def handle_remove():
        if TextRenderer.__handle is not None:
            bpy.types.SpaceView3D.draw_handler_remove(
                TextRenderer.__handle, 'WINDOW')
            TextRenderer.__handle = None

    #Dessin du corps de la fonction dans la zone "View3D"
    @staticmethod
    def render_text():
        #Dessiner la chaîne "Suzanne sur votre région View3D"
        blf.size(0, 20, 72)            #Spécifiez la taille de la police
        blf.position(0, 20, 150, 0)    #Spécifier la position du dessin
        blf.draw(0, "Suzanne on your View3D region")    #Dessiner une chaîne


#Traitement au moment de l'installation du script
def register():
    bpy.utils.register_module(__name__)
    TextRenderer.handle_add()


#Traitement lors de la désinstallation du script
def unregister():
    bpy.utils.unregister_module(__name__)
    TextRenderer.handle_remove()


if __name__ == "__main__":
    register()

Comment utiliser

  1. Installez le script en vous référant à la Page Wiki de Blender.
  2. Confirmez que la chaîne «Suzanne sur votre région View3D» est affichée dans View3D.

20150730.png

Exemple d'explication

L'explication de base du script Blender est présentée dans l'article suivant, nous nous concentrerons donc ici sur l'explication des éléments nouvellement ajoutés. [\ Blender ] Comment créer un plug-in Blender

Importer le module blf

Pour utiliser l'API de dessin de texte fournie par Blender, vous devez importer le module blf```.

import blf

Enregistrement / désenregistrement de la fonction de dessin "View3D"

L'article suivant explique comment enregistrer / désinscrire une fonction pour le dessin dans la zone "View3D", veuillez donc vous y référer. Utilisez OpenGL depuis le script [Blender]

Corps de la fonction de dessin "View3D"

Dans le corps de la fonction qui dessine dans "View3D", la chaîne de caractères est dessinée à l'aide du module blf```.

Tout d'abord, la fonction blf.size () '' est appelée pour spécifier la taille de police à dessiner. Spécifiez ** taille de police ** dans le deuxième argument et ** dpi ** dans le troisième argument. Le premier argument est utilisé lorsque vous chargez votre propre police en utilisant le module `` blf```, mais spécifiez 0 lorsque vous utilisez la police standard de Blender.

Appelez ensuite la fonction blf.position () '' pour spécifier où dessiner la chaîne. Le premier argument est le même que le premier argument de la fonction `` blf.size () ''. Dans le 2ème au 4ème arguments, spécifiez ** la position pour dessiner la chaîne de caractères ** (dans l'ordre coordonnée x, coordonnée y, coordonnée z).

Enfin, la fonction blf.draw () '' est utilisée pour dessiner la chaîne de caractères. Spécifiez ** la chaîne de caractères que vous souhaitez dessiner ** dans le deuxième argument. Le premier argument est le même que le premier argument de la fonction `` blf.size () ''.

    #Dessin du corps de la fonction dans la zone "View3D"
    @staticmethod
    def render_text():
        #Dessiner la chaîne "Suzanne sur votre région View3D"
        blf.size(0, 20, 72)            #Spécifiez la taille de la police
        blf.position(0, 20, 150, 0)    #Spécifier la position du dessin
        blf.draw(0, "Suzanne on your View3D region")    #Dessiner une chaîne

blfLe module fournit également diverses API utiles. blfVous pouvez consulter le document api fourni par le module à partir de l'url suivante. Si vous souhaitez connaître d'autres API, veuillez vous y référer. http://www.blender.org/api/blender_python_api_2_60_6/blf.html

Recommended Posts

[Blender] Utilisez le module de dessin de texte à partir du script
[Blender] Utilisez OpenGL depuis l'intérieur du script
Utilisez le module Python nghttp2 de Homebrew de Python de pyenv
Comment utiliser le module optparse
Utilisez Blender comme module Python
Utilisez l'API Flickr de Python
Comment utiliser le module ConfigParser
Utiliser Django à partir d'un script Python local
Récupérez uniquement le texte du formulaire Django.
Télécharger des images à partir d'un fichier texte contenant l'URL
Comment utiliser la bibliothèque de dessins graphiques Bokeh
Utilisez le module de papier électronique comme liste de tâches
Accédez aux variables définies dans le script depuis REPL
Comment passer des arguments lors de l'appel d'un script python depuis Blender sur la ligne de commande