I know that I can use the blf module to draw 2d text, but is there a method to draw text at certain positions in 3d space?

I want to add a text right to a specific point in 3d.

  • $\begingroup$ Do you mean on the 2D projection of a 3D location, as in, for example, the MeasureIt addon, or in full perspective? Or.. in perspective, but always facing the viewpoint? $\endgroup$
    – Robin Betts
    Apr 23, 2019 at 7:49
  • $\begingroup$ Thx, I found an example in the MeasureIt addon $\endgroup$
    – Jayanam
    Apr 25, 2019 at 8:56
  • $\begingroup$ @RobinBetts can set blf.rotation(..) (and aspect) to rotate text on screen. I remember fiddling with this and accidentally rotated all the GUI text too. (oops meant to comment under answer comment) $\endgroup$
    – batFINGER
    Apr 25, 2019 at 11:48

2 Answers 2


Thx, I found an example in the MeasureIt addon and here is some code from my Fast Carve addon to draw 2d text:

rv3d = self._view_context.region_3d
region = self._view_context.region
pos_text = location_3d_to_region_2d(region, rv3d, self._center)

blf.position(2, pos_text[0], pos_text[1], 0)
blf.draw(2, "r: {0:.3f}".format(self._radius))
  • 4
    $\begingroup$ I was hoping you would ;) ... perhaps, if there's a short enough chunk of code to clue other readers in, you could paste it into your answer, to make it 'BSE complete' $\endgroup$
    – Robin Betts
    Apr 25, 2019 at 9:04
  • 1
    $\begingroup$ @RobinBetts: I added the Python snippet from my addon $\endgroup$
    – Jayanam
    May 8, 2019 at 5:09
  • $\begingroup$ Hi @Jayanam can you share full script because I have the same question $\endgroup$ Sep 4, 2020 at 4:50
  • $\begingroup$ The full script is here: github.com/jayanam/jmesh-tools/blob/master/types/… $\endgroup$
    – Jayanam
    Sep 5, 2020 at 9:13

This is a script that adds text at position x,y,z and the text says "my text"

import bpy
ob.data.body = "my text"

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .