Beispiel #1
0
/*
=======================================
    画多边形
=======================================
*/
CR_API void_t
draw_polygon (
  __CR_IO__ const sIMAGE*   dst,
  __CR_IN__ const sPNT2*    pos,
  __CR_IN__ uint_t          count,
  __CR_IN__ leng_t          skip,
  __CR_IN__ cpix_t          color,
  __CR_IN__ pixdraw_t       pixel_draw
    )
{
    sLINE   line;
    sPNT2*  next;
    sPNT2*  start;
    uint_t  index;

    if (count-- <= 2)
        return;
    if (skip == 0)
        skip = sizeof(sPNT2);
    start = (sPNT2*)pos;

    for (index = 0; index < count; index++, pos = next) {
        next = (sPNT2*)((byte_t*)pos + skip);
        line_set_xy(&line, pos->x, pos->y, next->x, next->y);
        draw_line(dst, &line, color, pixel_draw);
    }
    line_set_xy(&line, start->x, start->y, pos->x, pos->y);
    draw_line(dst, &line, color, pixel_draw);
}
Beispiel #2
0
/*
---------------------------------------
    绘制线段
---------------------------------------
*/
static bool_t
qst_crh_line (
  __CR_IN__ void_t*     parm,
  __CR_IN__ uint_t      argc,
  __CR_IN__ ansi_t**    argv
    )
{
    sLINE   line;
    sIMAGE* draw;
    sint_t  sx, sy;
    sint_t  dx, dy;

    /* 参数解析 <X1> <Y1> <X2> <Y2> */
    if (argc < 5)
        return (FALSE);
    draw = ((sQstView2D*)parm)->paint;
    if (draw == NULL)
        return (FALSE);
    sx = (sint_t)str2intxA(argv[1]);
    sy = (sint_t)str2intxA(argv[2]);
    dx = (sint_t)str2intxA(argv[3]);
    dy = (sint_t)str2intxA(argv[4]);
    line_set_xy(&line, sx, sy, dx, dy);
    draw_line(draw, &line, s_color, s_pixdraw);
    return (TRUE);
}
Beispiel #3
0
/*
---------------------------------------
    移动坐标 (绘制)
---------------------------------------
*/
static bool_t
qst_crh_lineto (
  __CR_IN__ void_t*     parm,
  __CR_IN__ uint_t      argc,
  __CR_IN__ ansi_t**    argv
    )
{
    sLINE   line;
    sint_t  newx;
    sint_t  newy;
    sIMAGE* draw;

    /* 参数解析 <X> <Y> */
    if (argc < 3)
        return (FALSE);
    draw = ((sQstView2D*)parm)->paint;
    if (draw == NULL)
        return (FALSE);
    newx = (sint_t)str2intxA(argv[1]);
    newy = (sint_t)str2intxA(argv[2]);
    line_set_xy(&line, s_posx, s_posy, newx, newy);
    draw_line(draw, &line, s_color, s_pixdraw);
    s_posx = newx;
    s_posy = newy;
    return (TRUE);
}