Characters can be displayed by creating a font image with only the OpenGL function explained in Using OpenGL from inside the [Blender] script. .. However, if you want to display characters for a little bit such as debugging, it will take some time to prepare the font image. For such a case, Blender provides a text drawing API to easily draw text from a script. For example, Blender's Official add-on, Screencast Keys, uses this feature to display the keys pressed in the last few seconds.
In this article, I will explain how to use Blender's text drawing API easily with samples.
This is a sample to display a character string in "View 3D".
render_text.py
import bpy
import blf #Text drawing module
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):
"""Draw a string"""
bl_idname = "view3d.text_renderer"
bl_label = "Text renderer"
__handle = None #Drawing function
#Register the drawing function in the "View3D" area
@staticmethod
def handle_add():
TextRenderer.__handle = bpy.types.SpaceView3D.draw_handler_add(
TextRenderer.render_text,
(), 'WINDOW', 'POST_PIXEL')
#Unregister the drawing function in the "View3D" area
@staticmethod
def handle_remove():
if TextRenderer.__handle is not None:
bpy.types.SpaceView3D.draw_handler_remove(
TextRenderer.__handle, 'WINDOW')
TextRenderer.__handle = None
#Drawing function body in the "View3D" area
@staticmethod
def render_text():
#Drawing the string "Suzanne on your View3D region"
blf.size(0, 20, 72) #Specify font size
blf.position(0, 20, 150, 0) #Specify drawing position
blf.draw(0, "Suzanne on your View3D region") #Drawing a string
#Processing when installing a script
def register():
bpy.utils.register_module(__name__)
TextRenderer.handle_add()
#Processing when uninstalling a script
def unregister():
bpy.utils.unregister_module(__name__)
TextRenderer.handle_remove()
if __name__ == "__main__":
register()
The basic explanation of the Blender script is introduced in the following article, so here we will focus on the explanation of the newly added elements. [\ Blender ] How to make a Blender plugin
In order to use the text drawing API provided by Blender, you need to import the blf
module.
import blf
The following article explains how to register / unregister the function for drawing in the "View3D" area, so please refer to it. Use OpenGL from inside [Blender] script
In the function body that draws in "View3D", the character string is drawn using the blf
module.
First, the `` blf.size ()
`function is called to specify the font size to draw.
Specify ** font size ** in the second argument and ** dpi ** in the third argument.
The first argument is used when the original font is loaded using the blf
module, but specify 0 when using the Blender standard font.
Then call the `blf.position ()`
function to specify where to draw the string.
The first argument is the same as the first argument of the `blf.size ()`
function.
In the 2nd to 4th arguments, specify ** the position to draw the character string ** (in the order of x coordinate, y coordinate, z coordinate).
Finally, the ``` blf.draw ()`` function draws the string. Specify ** the character string you want to draw ** in the second argument. The first argument is the same as the first argument of the ``
blf.size ()` `` function.
#Drawing function body in the "View3D" area
@staticmethod
def render_text():
#Drawing the string "Suzanne on your View3D region"
blf.size(0, 20, 72) #Specify font size
blf.position(0, 20, 150, 0) #Specify drawing position
blf.draw(0, "Suzanne on your View3D region") #Drawing a string
blf
The module also provides various other useful apis.
blf
You can check the api document provided by the module from the following url.
If you want to know other APIs, please refer to it.
http://www.blender.org/api/blender_python_api_2_60_6/blf.html
Recommended Posts