硬汉嵌入式论坛

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

[emWin] emwin绘画2D图怎么在有背景表格的情况下动态显示曲线

[复制链接]

9

主题

11

回帖

38

积分

新手上路

积分
38
发表于 2024-10-16 11:05:57 | 显示全部楼层 |阅读模式

怎么在不影响背景的情况下去动态波形呢
比如我这里

怎么变成,不让底层消失

附上代码

···

GUI_SetColor(GUI_GREEN);
GUI_MoveTo(210,420);
for (i = 0; i < GUI_COUNTOF(aY); i++) {
        if (i > 540)
        {
                i = 0;
                GUI_MoveTo(210, y);
                H1 /= 2;
        }
        double a = H1*sin(pi * i / 50)+H1;
        y = y1-5 - (a * ySpacing / Diy);
        GUI_Delay(5);
       
        GUI_DrawLineTo(x0 + 30+i, y);
}

···

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-10-16 11:21:08 | 显示全部楼层
这种的,表格每次都要重新绘制的。可以考虑使用专门的Graph控件。
回复

使用道具 举报

9

主题

11

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 2024-10-16 18:33:48 | 显示全部楼层
谢谢硬汉哥,我这个表格每次重绘之后可以了。但是我看了你的二代示波器在使用过程中不用重绘,二代示波器的表格背景画完之后为什么不用重绘的?我这个表格也是固定的
然后实验了Graph发现没有2D方便,我这里还想做刻度的,但是Graph刻度两个刻度线间隔和两个刻度值好像是绑定的,Graph有什么方法让刻度线宽度是刻度线宽度,刻度值是刻度值差值的
···
GRAPH_DrawChart = GRAPH_CreateEx(180, 115, 570, 305, 0, WM_CF_SHOW, 0, GUI_ID_GRAPH0);
//设置边框宽度
GRAPH_SetBorder(GRAPH_DrawChart, 30, 10, 10, 15);
//设置控件各部分的背景颜色
GRAPH_SetColor(GRAPH_DrawChart, GUI_DARKGRAY, GRAPH_CI_BK);
GRAPH_SetColor(GRAPH_DrawChart, GUI_DARKGRAY, GRAPH_CI_BORDER);
GRAPH_SetColor(GRAPH_DrawChart, GUI_WHITE, GRAPH_CI_FRAME);
GRAPH_SetColor(GRAPH_DrawChart, GUI_WHITE, GRAPH_CI_GRID);
//是否显示网格线,1显示,0不显示                           
GRAPH_SetGridVis(GRAPH_DrawChart, 1);
//设置横向网格线宽度为25
GRAPH_SetGridDistX(GRAPH_DrawChart, 1000);
//设置纵网格线宽度为10
GRAPH_SetGridDistY(GRAPH_DrawChart, Spacing_y);
//设置网格线显示的类型
GRAPH_SetLineStyleH(GRAPH_DrawChart, GUI_LS_SOLID);
GRAPH_SetLineStyleV(GRAPH_DrawChart, GUI_LS_DOT);
//创建横轴刻度对象,两个刻度间隔25个像素
{
    //hScaleHandle = GRAPH_SCALE_Create(295, GUI_TA_HCENTER, GRAPH_SCALE_CF_HORIZONTAL, 25);
    ////GRAPH_SCALE_SetFont(hScaleHandle, &GUI_Font8x16);
    //GRAPH_SCALE_SetTextColor(hScaleHandle, GUI_WHITE);
    //GRAPH_AttachScale(GRAPH_DrawChart, hScaleHandle);
    //设置横向刻度比例因子,两个刻度值相差0.04*25,两个刻度间隔25个像素
    //GRAPH_SCALE_SetFactor(hScaleHandle, 0.04);
}   
//创建纵轴刻度对象,两个刻度间隔17个像素
{
    vScaleHandle = GRAPH_SCALE_Create(25, GUI_TA_VCENTER| GUI_TA_RIGHT, GRAPH_SCALE_CF_VERTICAL, Spacing_y);
    vScaleHandle1 = GRAPH_SCALE_Create(25, GUI_TA_VCENTER | GUI_TA_RIGHT, GRAPH_SCALE_CF_VERTICAL, 1);
    GRAPH_SCALE_SetTickDist(vScaleHandle1, Spacing_y);
    //GRAPH_SCALE_SetFont(vScaleHandle, &GUI_Font8x8);
    GRAPH_SCALE_SetTextColor(vScaleHandle1, GUI_WHITE);
    GRAPH_SCALE_SetNumDecs(vScaleHandle1, 0);
    GRAPH_AttachScale(GRAPH_DrawChart, vScaleHandle1);
    //设置纵向刻度比例因子,两个刻度值相差0.2*10,两个刻度间隔10个像素
    GRAPH_SCALE_SetFactor(vScaleHandle1, Diy);//10*0.01
   
}
{
    //曲线1                           
    dGraphDat1Handle = GRAPH_DATA_XY_Create(GUI_BLUE, 15, 0, 0);    //创建GRAPH_DATA_XY对象        
    GRAPH_AttachData(GRAPH_DrawChart, dGraphDat1Handle);    //将数据对象附加到现有图形小工具。
    //曲线2            
    dGraphDat2Handle = GRAPH_DATA_XY_Create(GUI_GREEN, 15, 0, 0);    //创建GRAPH_DATA_XY对象        
    GRAPH_AttachData(GRAPH_DrawChart, dGraphDat2Handle);            //将数据对象附加到现有图形小工具。
    //赋值
    int i;

    for (i = 1; i <= 15; i++)
    {
        point.x = i * 25;
        //2个刻度对应10个像素,总的像素值放到刻度的什么地方
        point.y = buf[i - 1] * 10 / (0.2 * 10);
        //GUI_Delay(5);//延时
        GRAPH_DATA_XY_AddPoint(dGraphDat1Handle, &point);
        point.y = buf2[i - 1];
        GRAPH_DATA_XY_AddPoint(dGraphDat2Handle, &point);
    }
}
···
我这里Diy是数值差值,Spacing_y是刻度线宽度,但是宽度17的时候数值最低也是17了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-10-17 10:10:34 | 显示全部楼层
blzgods 发表于 2024-10-16 18:33
谢谢硬汉哥,我这个表格每次重绘之后可以了。但是我看了你的二代示波器在使用过程中不用重绘,二代示波器的 ...

1、二代示波器这个重绘了,我是将表格绘制到了存储设备里面,然后调用存储设备的API整体绘制的,这样效率高,速度快。
2、这个好像调节不了。
回复

使用道具 举报

9

主题

11

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 2024-10-17 17:41:40 | 显示全部楼层
谢谢硬汉哥,我刚才想到一个,还没有实验
一个父窗口一个子,然后子窗口置顶并透明之后画表格,父窗口画动态曲线。
按道理说不影响,但会不会父窗口改变同时把重叠的透明窗口也无效化
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-10-18 10:20:27 | 显示全部楼层
blzgods 发表于 2024-10-17 17:41
谢谢硬汉哥,我刚才想到一个,还没有实验
一个父窗口一个子,然后子窗口置顶并透明之后画表格,父窗口画动 ...

用存储设备绘制就行,效率最高,透明非常慢。
回复

使用道具 举报

9

主题

11

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 2024-10-18 14:49:17 | 显示全部楼层
eric2013 发表于 2024-10-18 10:20
用存储设备绘制就行,效率最高,透明非常慢。

好的,谢谢硬汉哥
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-25 21:28 , Processed in 0.329337 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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