|

楼主 |
发表于 2017-1-7 16:34:17
|
显示全部楼层
14.2 绘制多边形
当前emWin支持的多边形函数主要有以下5个:
下面我们通过如下三个实例来讲解这几个API函数的用法。
14.2.1 例子一
这个例子主要涉及到以下三个函数:
(1)void GUI_DrawPolygon(constGUI_POINT * pPoint, int NumPoints, int x, int y)
根据用户设置的坐标点(x,y)位置,将点列表pPoint中的NumPoints个坐标点连接,最终绘制出一个闭合的多边形。
(2)voidGUI_EnlargePolygon(GUI_POINT * pDest, const GUI_POINT * pSrc, int NumPoints,int Len)
将点列表pSrc中的NumPoints个坐标点按指定的像素个数Len全方位扩展,并将最终结果赋值给新的点列表pDest,这个新的点列表就是扩展后的多边形坐标点。
(3)voidGUI_FillPolygon(const GUI_POINT * pPoint, int NumPoints, int x, int y)
根据用户设置的坐标点(x,y)位置,将点列表pPoint中的NumPoints个坐标点连接,最终绘制出一个填充的多边形。
下面是在模拟器上实际运行的例子:
- #include "GUI.h"
-
-
- /* 图形的原始坐标点 */
- const GUI_POINT aPoints[] = {
- { 40, 20},
- { 0, 20},
- { 20, 0}
- };
-
- /* 用于存储放大后的坐标点 */
- GUI_POINT aEnlargedPoints[GUI_COUNTOF(aPoints)];
-
- void Sample(void) {
- int i;
-
- /* 清屏 */
- GUI_Clear();
-
- /* 设置绘图模式 */
- GUI_SetDrawMode(GUI_DM_XOR);
-
- /* 绘制多边形 */
- GUI_FillPolygon(aPoints, /* 指向要显示和填充的多边形 */
- GUI_COUNTOF(aPoints), /* 点列表中指定的点数量 */
- 140, /* 原点的X位置 */
- 110); /* 原点的Y位置 */
-
- for (i = 1; i < 10; i++) {
- GUI_EnlargePolygon(aEnlargedPoints, /* 指向目标多边形 */
- aPoints, /* 指向源多边形 */
- GUI_COUNTOF(aPoints), /* 点列表中指定的点数量 */
- i * 5); /* 扩展多边形的长度 (像素) */
-
- /* 绘制放大后的多边形 */
- GUI_FillPolygon(aEnlargedPoints, GUI_COUNTOF(aPoints), 140, 110);
- }
- }
-
- /*********************************************************************
- *
- * MainTask
- */
- void MainTask(void) {
-
- /* emWin初始化 */
- GUI_Init();
-
- /* 调用测试函数 */
- Sample();
-
- while (1)
- {
- GUI_Delay(10);
- }
- }
复制代码 显示效果如下:
14.2.2 例子二
voidGUI_MagnifyPolygon(GUI_POINT * pDest, const GUI_POINT * pSrc, int NumPoints,int Mag); 此函数可以按照用户设置的放大系数Mag放大多边形。另外请注意,扩展和放大多边形之间的区别,比如调用函数GUI_EnlargePolygon()(参数Len= 1)是将多边形的所有边扩展1像素,而调用GUI_MagnifyPolygon()(参数Mag= 1)则没有效果。
下面是在模拟器上面实际运行的例子:
- #include "GUI.h"
-
-
- /* 图形的原始坐标点 */
- const GUI_POINT aPoints[] = {
- { 0, 20},
- { 40, 20},
- { 20, 0}
- };
-
- /* 用于存储放大后的坐标点 */
- GUI_POINT aMagnifiedPoints[GUI_COUNTOF(aPoints)];
-
- void Sample(void) {
- int Mag, y = 0, Count = 4;
-
- /* 清屏 */
- GUI_Clear();
-
- /* 设置前景色,即所绘制图形的颜色 */
- GUI_SetColor(GUI_GREEN);
-
- for (Mag = 1; Mag <= 4; Mag *= 2, Count /= 2) {
- int i, x = 0;
-
- /* 放大多边形 */
- GUI_MagnifyPolygon(aMagnifiedPoints, aPoints, GUI_COUNTOF(aPoints), Mag);
-
- /* 绘制填充的多边形 */
- for (i = Count; i > 0; i--, x += 40 * Mag) {
- GUI_FillPolygon(aMagnifiedPoints, GUI_COUNTOF(aPoints), x, y);
- }
-
- y += 20 * Mag;
- }
- }
-
-
- /*********************************************************************
- *
- * MainTask
- */
- void MainTask(void) {
-
- /* emWin初始化 */
- GUI_Init();
-
- /* 调用测试函数 */
- Sample();
-
- while (1)
- {
- GUI_Delay(10);
- }
- }
复制代码 实际显示效果如下:
14.2.3 例子三
这个多边形的例子是官方提供的,例子所在的位置如下:
显示效果如下:
指出官方例子的所在位置和演示现象是为了方便用户以后做项目来参考。 |
|