Font Drawing (blf)#

This module provides access to Blender’s text drawing functions.

Hello World Text Example#

Example of using the blf module. For this module to work we need to use the OpenGL wrapper bgl as well.

# import stand alone modules
import blf
import bpy

font_info = {
    "font_id": 0,
    "handler": None,
}


def init():
    """init function - runs once"""
    import os
    # Create a new font object, use external ttf file.
    font_path = bpy.path.abspath('//Zeyada.ttf')
    # Store the font indice - to use later.
    if os.path.exists(font_path):
        font_info["font_id"] = blf.load(font_path)
    else:
        # Default font.
        font_info["font_id"] = 0

    # set the font drawing routine to run every frame
    font_info["handler"] = bpy.types.SpaceView3D.draw_handler_add(
        draw_callback_px, (None, None), 'WINDOW', 'POST_PIXEL')


def draw_callback_px(self, context):
    """Draw on the viewports"""
    # BLF drawing routine
    font_id = font_info["font_id"]
    blf.position(font_id, 2, 80, 0)
    blf.size(font_id, 50.0)
    blf.draw(font_id, "Hello World")


if __name__ == '__main__':
    init()
blf.aspect(fontid, aspect)#

Set the aspect for drawing text.

Parameters:
  • fontid (int) – The id of the typeface as returned by blf.load(), for default font use 0.

  • aspect (float) – The aspect ratio for text drawing to use.

blf.clipping(fontid, xmin, ymin, xmax, ymax)#

Set the clipping, enable/disable using CLIPPING.

Parameters:
  • fontid (int) – The id of the typeface as returned by blf.load(), for default font use 0.

  • xmin (float) – Clip the drawing area by these bounds.

  • ymin (float) – Clip the drawing area by these bounds.

  • xmax (float) – Clip the drawing area by these bounds.

  • ymax (float) – Clip the drawing area by these bounds.

blf.color(fontid, r, g, b, a)#

Set the color for drawing text.

Parameters:
  • fontid (int) – The id of the typeface as returned by blf.load(), for default font use 0.

  • r (float) – red channel 0.0 - 1.0.

  • g (float) – green channel 0.0 - 1.0.

  • b (float) – blue channel 0.0 - 1.0.

  • a (float) – alpha channel 0.0 - 1.0.

blf.dimensions(fontid, text)#

Return the width and height of the text.

Parameters:
  • fontid (int) – The id of the typeface as returned by blf.load(), for default font use 0.

  • text (string) – the text to draw.

Returns:

the width and height of the text.

Return type:

tuple of 2 floats

blf.disable(fontid, option)#

Disable option.

Parameters:
  • fontid (int) – The id of the typeface as returned by blf.load(), for default font use 0.

  • option (int) – One of ROTATION, CLIPPING, SHADOW or KERNING_DEFAULT.

blf.draw(fontid, text)#

Draw text in the current context.

Parameters:
  • fontid (int) – The id of the typeface as returned by blf.load(), for default font use 0.

  • text (string) – the text to draw.

blf.enable(fontid, option)#

Enable option.

Parameters:
  • fontid (int) – The id of the typeface as returned by blf.load(), for default font use 0.

  • option (int) – One of ROTATION, CLIPPING, SHADOW or KERNING_DEFAULT.

blf.load(filepath)#

Load a new font.

Parameters:

filepath (string or bytes) – the filepath of the font.

Returns:

the new font’s fontid or -1 if there was an error.

Return type:

integer

blf.position(fontid, x, y, z)#

Set the position for drawing text.

Parameters:
  • fontid (int) – The id of the typeface as returned by blf.load(), for default font use 0.

  • x (float) – X axis position to draw the text.

  • y (float) – Y axis position to draw the text.

  • z (float) – Z axis position to draw the text.

blf.rotation(fontid, angle)#

Set the text rotation angle, enable/disable using ROTATION.

Parameters:
  • fontid (int) – The id of the typeface as returned by blf.load(), for default font use 0.

  • angle (float) – The angle for text drawing to use.

blf.shadow(fontid, level, r, g, b, a)#

Shadow options, enable/disable using SHADOW .

Parameters:
  • fontid (int) – The id of the typeface as returned by blf.load(), for default font use 0.

  • level (int) – The blur level, can be 3, 5 or 0.

  • r (float) – Shadow color (red channel 0.0 - 1.0).

  • g (float) – Shadow color (green channel 0.0 - 1.0).

  • b (float) – Shadow color (blue channel 0.0 - 1.0).

  • a (float) – Shadow color (alpha channel 0.0 - 1.0).

blf.shadow_offset(fontid, x, y)#

Set the offset for shadow text.

Parameters:
  • fontid (int) – The id of the typeface as returned by blf.load(), for default font use 0.

  • x (float) – Vertical shadow offset value in pixels.

  • y (float) – Horizontal shadow offset value in pixels.

blf.size(fontid, size)#

Set the size for drawing text.

Parameters:
  • fontid (int) – The id of the typeface as returned by blf.load(), for default font use 0.

  • size (float) – Point size of the font.

blf.unload(filepath)#

Unload an existing font.

Parameters:

filepath (string or bytes) – the filepath of the font.

blf.word_wrap(fontid, wrap_width)#

Set the wrap width, enable/disable using WORD_WRAP.

Parameters:
  • fontid (int) – The id of the typeface as returned by blf.load(), for default font use 0.

  • wrap_width (int) – The width (in pixels) to wrap words at.

blf.CLIPPING#

Constant value 2

blf.MONOCHROME#

Constant value 128

blf.ROTATION#

Constant value 1

blf.SHADOW#

Constant value 4

blf.WORD_WRAP#

Constant value 64