Differences between revisions 3 and 6 (spanning 3 versions)
Revision 3 as of 2008-07-17 01:17:32
Size: 1001
Comment:
Revision 6 as of 2008-07-17 01:24:12
Size: 1601
Comment:
Deletions are marked like this. Additions are marked like this.
Line 16: Line 16:
Note that the EMFTGL has default values for all of its parameters, so you don't necessary have to call any of the setter functions to render text. Note that in general you want to limit the number of times you call the setter functions, because they cause FTGL to regenerate a FTFont class and this is not a trivial expense. Note that the EMFTGL has default values for all of its parameters and that in general you want to limit the number of times you call the setter functions, because they cause FTGL to regenerate a FTFont class and this is not a trivial expense.
Line 21: Line 21:
glPushMatrix() # FTGL does transformations - must push
Line 22: Line 23:
glPopMatrix()
Line 23: Line 25:

To get the bounding box of the string use:
{{{
bbox = self.font_renderer.bounding_box("Important Information")
}}}

As an example, if you want to rotate the font as though it is centered on the origin you might use

{{{
message = "Important Information"
rotation = 45
rot_axis = [1,0,0]
bbox = self.font_renderer.bounding_box(message)

glPushMatrix()
glTranslate(-(bbox[0]-bbox[3])/2,-(bbox[1]-bbox[4])/2,-(bbox[2]-bbox[5])/2)
glRotate(rotation,*rot_axis)
glTranslate((bbox[0]-bbox[3])/2,(bbox[1]-bbox[4])/2,(bbox[2]-bbox[5])/2)
self.font_renderer.render_string(message)
glPopMatrix()
}}}

Using FTGL in python in EMAN2

Programmers have to create an instance of an EMFTGL object, for instance as a member variable:

self.font_renderer = EMFTGL()
self.font_renderer.set_face_size(16)
self.font_renderer.set_using_display_lists(True)
self.font_renderer.set_depth(32) # only applicable if font mode is EXTRUDE
self.font_renderer.set_font_mode(FTGLFontMode.TEXTURE) # or EXTRUDE, or PIMAP
#self.font_renderer.set_font_file_name("/usr/share/fonts/dejavu/DejaVuSerif-Bold.ttf")

Note that the EMFTGL has default values for all of its parameters and that in general you want to limit the number of times you call the setter functions, because they cause FTGL to regenerate a FTFont class and this is not a trivial expense.

Then to render text use a command similar to the following in your paint function:

glPushMatrix() # FTGL does transformations - must push
self.font_renderer.render_string("Important Information")
glPopMatrix()

To get the bounding box of the string use:

bbox = self.font_renderer.bounding_box("Important Information")

As an example, if you want to rotate the font as though it is centered on the origin you might use

message = "Important Information"
rotation = 45
rot_axis = [1,0,0]
bbox = self.font_renderer.bounding_box(message)

glPushMatrix()
glTranslate(-(bbox[0]-bbox[3])/2,-(bbox[1]-bbox[4])/2,-(bbox[2]-bbox[5])/2)
glRotate(rotation,*rot_axis)
glTranslate((bbox[0]-bbox[3])/2,(bbox[1]-bbox[4])/2,(bbox[2]-bbox[5])/2)
self.font_renderer.render_string(message)
glPopMatrix()

Eman2UsingFTGL (last edited 2022-02-18 00:29:09 by TunayDurmaz)