/* ======================================= 画多边形 ======================================= */ 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); }
/* --------------------------------------- 绘制线段 --------------------------------------- */ 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); }
/* --------------------------------------- 移动坐标 (绘制) --------------------------------------- */ 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); }