硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4400|回复: 17
收起左侧

[ThreadX全家桶] 通过一个完整的例子来了解ThreadX GUIX中2D函数在窗口任意位置绘图的套路

  [复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115433
QQ
发表于 2020-9-14 11:53:55 | 显示全部楼层 |阅读模式

就这么些个函数,研究溜,也要花些时间多做测试分析:

2.png

gx_window_draw
作为窗口的 Draw Function 绘图回调函数,此函数用于窗口默认效果的绘制。

gx_utility_rectangle_define
定义一个矩形框,后续的 2D 绘制函数都是在这个矩形范围内绘制的,此函数的后四个参数是左上角
位置和右下角位置。

gx_widget_canvas_get
返回窗口对应的 canvas 画布。

gx_canvas_drawing_initiate
在指定的画布上启动绘图。此功能在 GUIX 内部被延迟绘图算法调用,在需要画布时自动执行更新。
但是允许应用程序绕过延期绘图算法并立即执行。首先调用 gx_canvas_drawing_inititate 在画布上
绘画。 然后调用所需的绘图函数,最后调用 gx_canvas_drawing_complete 即可。

gx_context_raw_line_color_set
设置笔刷画线的颜色值,比如直线,圆圈的轮廓,椭圆的轮廓,矩形的轮廓,多边形的轮廓等都是采
用的这个值。 注意这个颜色值是 32bit 的 ARGB 格式,每个 bit 代表的含义如下:

4.png

gx_context_raw_fill_color_set
设置笔刷填充的颜色值,比如圆圈填充,椭圆填充,矩形填充,多边形填充等都是采用的这个值。

gx_context_brush_style_set
用于设置笔刷的样式,我们这里设置了 GX_BRUSH_SOLID_FILL,表示圆圈,矩形,多边形等绘制为
填充效果。 如果不设置此样式,表示仅显示一个轮廓。这里特别注意一点,各种样式参数可以通过或
操作全部执行,比如 GX_BRUSH_SOLID_FILL | GX_BRUSH_ALIAS。

gx_context_brush_width_set
用于设置笔刷线宽,此线宽对直线,圆圈的轮廓,椭圆的轮廓,矩形的轮廓,多边形的轮廓等都起作
用。 注意,对于这些 2D 绘制,必须要设置线宽才可以正常显示。

gx_canvas_line_draw
直线绘制,注意坐标位置是相对于代码中的窗口,而不是相对于 gx_utility_rectangle_define 定义的
矩形区域。

gx_canvas_circle_draw
圆圈绘制,坐标含义同上。

gx_canvas_ellipse_draw
椭圆绘制,坐标含义同上

gx_canvas_polygon_draw
多边形绘制,坐标含义同上。 多边形的绘制是把用户设置的几个坐标点依次连接到一起。

gx_canvas_rectangle_draw
矩形框绘制,坐标点含义同上。

gx_canvas_drawing_complete
用于强制立即绘制,注意,务必和 gx_canvas_drawing_initiate 成对调用。

评分

参与人数 1金币 +10 收起 理由
kirito + 10 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115433
QQ
 楼主| 发表于 2020-9-14 11:56:45 | 显示全部楼层
教程第13章节已经加入这些知识点了:

http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429&extra=page%3D1
回复

使用道具 举报

677

主题

3458

回帖

5514

积分

论坛元老

积分
5514
发表于 2020-9-15 08:55:49 | 显示全部楼层
本帖最后由 hpdell 于 2020-9-16 09:12 编辑

大神你好,请教下,
33.png

是不是每个 控件 都必须 设置 widget id 啊 ??

我目前移植的,在主界面有很多个 图标按钮,都没有配 widget id ,重绘 2d 图形 没有显示出来,是否与这个 widget id 有关啦 ?



回复

使用道具 举报

0

主题

48

回帖

48

积分

新手上路

积分
48
发表于 2020-9-16 12:36:46 | 显示全部楼层
hpdell 发表于 2020-9-15 08:55
大神你好,请教下,

不是每个控件都需要设置ID.
如果希望接收来自某个控件的事件,则需要为该控件设置ID。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115433
QQ
 楼主| 发表于 2020-9-16 14:50:02 | 显示全部楼层
hpdell 发表于 2020-9-15 08:55
大神你好,请教下,

养成好习惯,每个控件都配置上,方便事件配置。

你的2D绘制没有显示出来与这个没有关系。
回复

使用道具 举报

677

主题

3458

回帖

5514

积分

论坛元老

积分
5514
发表于 2020-9-16 16:16:49 | 显示全部楼层
eric2013 发表于 2020-9-16 14:50
养成好习惯,每个控件都配置上,方便事件配置。

你的2D绘制没有显示出来与这个没有关系。

有空还得继续捣鼓捣鼓啊
回复

使用道具 举报

0

主题

24

回帖

24

积分

新手上路

积分
24
发表于 2020-9-16 20:36:06 | 显示全部楼层
硬汉 怎样才能获得显示上 控件的枸柄,可以移动 这个控件。

截图20年09月16日2035_1.png
回复

使用道具 举报

677

主题

3458

回帖

5514

积分

论坛元老

积分
5514
发表于 2020-9-17 09:21:32 | 显示全部楼层
eric2013 发表于 2020-9-16 14:50
养成好习惯,每个控件都配置上,方便事件配置。

你的2D绘制没有显示出来与这个没有关系。

我的 2d 终于显示出来了,是我的 坐标 没有搞对造成的

现在显示的是 实心图形,那显示空心的 2d 图形 貌似没有找到相关的函数啊 ?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115433
QQ
 楼主| 发表于 2020-9-17 10:43:26 | 显示全部楼层
hpdell 发表于 2020-9-17 09:21
我的 2d 终于显示出来了,是我的 坐标 没有搞对造成的

现在显示的是 实心图形,那显示空心的 2d 图形  ...

实心和空心的关键就在这个函数上
QQ截图20200917104313.png
回复

使用道具 举报

677

主题

3458

回帖

5514

积分

论坛元老

积分
5514
发表于 2020-9-17 11:06:24 | 显示全部楼层
本帖最后由 hpdell 于 2020-9-17 11:39 编辑
eric2013 发表于 2020-9-17 10:43
实心和空心的关键就在这个函数上

原来如此呀,我试试看,多谢多谢啊
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115433
QQ
 楼主| 发表于 2020-9-18 02:29:51 | 显示全部楼层
hpdell 发表于 2020-9-17 11:06
原来如此呀,我试试看,多谢多谢啊

回复

使用道具 举报

677

主题

3458

回帖

5514

积分

论坛元老

积分
5514
发表于 2020-9-18 09:09:52 | 显示全部楼层
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
发表于 2024-11-11 10:39:27 | 显示全部楼层
gx_widget_canvas_get 获取到的是widget父窗口的canvas,并不是它自己的canvas。我想知道怎么获取widget本身的canvas呢?
回复

使用道具 举报

1

主题

15

回帖

18

积分

新手上路

积分
18
发表于 2024-11-28 17:53:30 | 显示全部楼层
请问博主,我的这边给窗口设置了绘图函数,想要实时绘制指针的角度,角度更新的流程如下:
1. 首届面切换到指针角度更新的界面
2. 对角度值变量进行赋值
3. 调用gx_system_dirty_partial_add函数
4. 调用draw function
现象是:角度值并没有进行更新
debug调试后发现,gx_system_dirty_partial_add函数调用成功,返回值也是succes,但是后续并没有调用draw function

请问硬汉哥之前有遇到这种情况吗
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115433
QQ
 楼主| 发表于 2024-11-29 08:32:00 | 显示全部楼层
zorna 发表于 2024-11-28 17:53
请问博主,我的这边给窗口设置了绘图函数,想要实时绘制指针的角度,角度更新的流程如下:
1. 首届面切换 ...

这个我专门做了一期教程,你试试。

ThreadX GUIX教程发布炫酷时钟设计章节,结合硬件RTC,实现贼简单,图片抗锯齿做的很好(2022-04-04)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=111748
回复

使用道具 举报

1

主题

15

回帖

18

积分

新手上路

积分
18
发表于 2025-1-26 13:01:59 | 显示全部楼层
eric2013 发表于 2024-11-29 08:32
这个我专门做了一期教程,你试试。

ThreadX GUIX教程发布炫酷时钟设计章节,结合硬件RTC,实现贼简单 ...

这个问题后面发现,是GUIX线程接收到更新角度值的事件通知了,但是并没有处理,我手动加上了强制窗口立刻重绘的函数就解决了这个问题
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
发表于 2025-4-16 04:04:04 来自手机 | 显示全部楼层
请问无窗口可以绘图吗?比如只是在内存画布里面绘图,然后保存成图片,不用在界面上显示出来
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115433
QQ
 楼主| 发表于 2025-4-16 12:24:38 | 显示全部楼层
huhao0716 发表于 2025-4-16 04:04
请问无窗口可以绘图吗?比如只是在内存画布里面绘图,然后保存成图片,不用在界面上显示出来

好像可以的,可以参考GUIX教程里面2D章节。需要开个区域,在这个区域里面绘制。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-4-25 14:53 , Processed in 0.349784 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表