## 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)
```
返回按钮或菜单的快捷键字符串
- 第一章:FLTK编程模型
- 1.1FLTK功能简介
- 1.2搭建FLTK开发环境
- 1.3FLTK构件简介
- 1.4FLTK事件处理
- 1.5FLTK消息处理
- 1.6OpenGL编程
- 第二章:常用的控件和属性
- 2.1按钮
- 2.2文本
- 2.3颜色
- 2.4Box类型
- 第三章:FLTK的画图函数
- 3.1何时可以画图
- 3.2 FLTK的画图函数
- 3.3剪切
- 3.4颜色
- 3.5设置线条的属性
- 3.6画一般的图形函数
- 3.7画封闭的线,一次连接个顶点
- 3.8画三边形或四边形,并填充内部
- 3.9复杂图形函数
- 3.10字体
- 3.11覆盖画图函数
- 第四章:在FLTK中自定义控件
- 4.1定制图形控件说明
- 4.2如何开发一个控件的子类
- 4.3处理事件
- 4.4画控件