3.9复杂图形函数

复杂的画图函数利用2-D线性转换能让你画出任意图形。这个功能与Adobe? PostScript 语言实现的功能很相似,在X和Win32上,在画线段之前所有的转换顶点都是用整数表示,这就限制了画图的精确性。如果要画比较精确的图形,最好用OpenGL来画。

void fl_push_matrix()
void fl_pop_matrix()

保存和恢复当前的转换,堆栈的最大深度为4

void fl_scale(float x, float y)
void fl_scale(float x)
void fl_translate(float x, float y)
void fl_rotate(float d)
void fl_mult_matrix(float a, float b, float c, float d, float x, float y)

在当前的转换基础上连接另外一个转换。旋转角度是度数不是弧度,逆时针旋转。

void fl_begin_line()
void fl_end_line()

开始和结束画线

void fl_begin_loop()
void fl_end_loop()

开始和结束画一系列封闭的线

void fl_begin_polygon()
void fl_end_polygon()

开始和结束画多边形并填充

void fl_begin_complex_polygon()
void fl_gap()
void fl_end_complex_polygon()

开始和结束画一个复杂的多边形并填充。这个多边形可以是凹凸不同的,不连贯的,甚至中间有空心的。调用fl_gap()分开路径。不必也是有害的如果在第一个顶点之前或最后一个顶点之后调用fl_gap()函数,在一行中多次调用也是不行的。

Fl_gap()只能用在fl_begin_complex_polygon()和fl_end_complex_polygon()之间。画多边形的轮廓,使用fl_begin_loop并用fl_end_loop和fl_begin_loop代替fl_gap();

void fl_vertex(float x, float y)

在当前路径中增加一个顶点

void fl_curve(float x, float y, float x1, float y1, float x2, float y2, float x3, float y3)

在路径中增加一系列的点画Bezier 曲线。该曲线的末端是x,y和x3,y3。

void fl_arc(float x, float y, float r, float start, float end)

增加一系列的点在当前圆环的弧线上。在调用fl_arc()之前应用scale和rotate 可以得到椭圆的路径。X,y是圆的中心,r是半径。Fl_arc()从start角度画弧直到end,按逆时针旋转。如果end大于start则它是按照顺时针转

void fl_circle(float x, float y, float r)

fl_circle等于fl_arc(…,0,360),但是更快,如果你在画多边形的时候用到 圆,则必须用fl_arc(). 文本的画法

所有的文本都字体都是适用当前字体。现在还不明确在转换情况下,位置或字符是否会改变

void fl_draw(const char *, int x, int y)
void fl_draw(const char *, int n, int x, int y)

在窗口中画出字符串,位置是靠左,接近底线

void fl_draw(const char *, int x, int y, int w, int h, Fl_Align align, Fl_Image *img = 0, int draw_symbols = 1)
void fl_measure(const char *, int &w, int &h, int draw_symbols = 1)
int fl_height()

得到当前字体的高度

int fl_descent()
float fl_width(const char*)
float fl_width(const char*,int n)
float fl_width(uchar)
const char *fl_shortcut_label(ulong)

返回按钮或菜单的快捷键字符串