From: Maxim S. <mc...@an...> - 2004-07-13 17:08:41
|
> Is there anyway to calculate the size of text rendered using gsv_text? I > want to draw some text and then put a box around it. Yes, you need to calculate the bounding box: agg::gsv_text txt; . . . double x; double y; double min_x = 1e100; double max_x = -1e100; unsigned cmd; txt.rewind(id); while(!agg::is_stop(cmd = txt.vertex(&x, &y))) { if(agg::is_vertex(cmd)) { if(x < min_x) min_x = x; if(x > max_x) max_x = x; } } Don't worry about the performance, it will work much faster than rendering. It makes sense to calculate only min_x and max_x and take min_y and max_y according to the text size you have set. If you calculate min_y and max_y as bounding box too, you will have different boxes for strings "AAA" and ''aaa". You may want it, but most probably you want to have the same height for any string. There is agg_bounding_rect.h but it requires an array of IDs for all paths. I'll probably add another, simpler function like code above. You also may have to dilate your box considering the stroke width. Also see http://antigrain.com/tips/win_glyph/win_glyph.agdoc.html McSeem |