05. 线条部件

一、线条部件

  线条部件能够在一组坐标点之间依次 绘制直线。线条部件只有一个组成部分:主体LV_PART_MAIN)。

  LVGL 官方提供了一些与线条部件相关 API。

lv_obj_t * lv_line_create(lv_obj_t * parent);                                   // 创建线条部件

void lv_line_set_points(lv_obj_t * obj, const lv_point_precise_t points[], uint32_t point_num); // 设置一个点数组,线条对象将这些点连接起来

void lv_line_set_y_invert(lv_obj_t * obj, bool en);                             // 启用或禁用Y坐标反转
bool lv_line_get_y_invert(const lv_obj_t * obj);                                // 获取Y坐标反转属性

  我们可以使用 lv_line_create() 函数 创建线条部件

/**
 * @brief 创建线条部件
 * 
 * @param parent 指向父部件的指针
 * @return lv_obj_t* 指向线条部件的指针
 */
lv_obj_t * lv_line_create(lv_obj_t * parent);

  线条是由多个点连接而成的对象,用户可以使用 lv_point_t 类型的数组存储这些坐标点,并调用 lv_line_set_points() 函数,把这些坐标点传递给线条部件,它将会把这些点连接起来,最终绘制成线条。

/**
 * @brief 设置一个点数组,线条对象将这些点连接起来
 * 
 * @param obj 指向线条部件的指针
 * @param points 存放点数据的数组
 * @param point_num 点的数量
 */
void lv_line_set_points(lv_obj_t * obj, const lv_point_precise_t points[], uint32_t point_num);

  默认情况下,线条部件的宽度和高度都是 LV_SIZE_CONTENT,这意味着它将自动设置自身的大小,以适应所有的点。如果用户设置了线条部件的大小,则超出的部分可能不可见。

  Y 坐标反转指的是将线条部件的参考原点设置到左下角,其最终效果相当于将线条沿 Y 轴方向镜像翻转。用户需要进行倒 Y 操作,可调用 lv_line_set_y_invert() 函数。

/**
 * @brief 启用或禁用Y坐标反转
 * 
 * @param obj 指向线条部件的指针
 * @param en true: 开启; false: 关闭
 */
void lv_line_set_y_invert(lv_obj_t * obj, bool en);

二、实验例程

#include "lvgl.h"
#include "lv_port_disp_template.h"
#include "lv_port_indev_template.h"

int main(void)
{
    static lv_point_precise_t line_points[] = {{150, 50}, {250, 200}, {50, 200}, {150, 50}};

    HAL_Init();
    System_Clock_Init(8, 336, 2, 7);
    Delay_Init(168);

    SPI_Simulate_Init();
    // SRAM_Init();
    TIM_Base_Init(&g_tim6_handle, TIM6, 83, 999);
    __HAL_TIM_CLEAR_IT(&g_tim6_handle, TIM_IT_UPDATE);                          // 清除更新中断标志位
    HAL_TIM_Base_Start_IT(&g_tim6_handle);                                      // 使能更新中断,并启动计数器

    lv_init();
    lv_port_disp_init();
    lv_port_indev_init();

    lv_obj_t *line = lv_line_create(lv_scr_act());                              // 创建线条部件

    lv_obj_set_style_line_width(line, 8, LV_PART_MAIN);                         // 设置线条宽度
    lv_obj_set_style_line_rounded(line, true, LV_PART_MAIN);                    // 设置线条端点为圆角

    lv_line_set_points(line, line_points, sizeof(line_points) / sizeof(line_points[0]));    // 设置线条部件的点坐标
    lv_line_set_y_invert(line, true);                                                       // 设置线条垂直反转

    while (1)
    {
        lv_timer_handler();
        Delay_ms(5);
    }
  
    return 0;
}
posted @ 2024-05-05 18:55  星光映梦  阅读(68)  评论(0编辑  收藏  举报