mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[python] Add some useful functions in kandinsky
This commit is contained in:
@@ -373,8 +373,12 @@ Q(KEY_EXE)
|
||||
// Kandinsky QSTRs
|
||||
Q(kandinsky)
|
||||
Q(color)
|
||||
Q(draw_line)
|
||||
Q(draw_string)
|
||||
Q(draw_circle)
|
||||
Q(fill_rect)
|
||||
Q(fill_circle)
|
||||
Q(fill_polygon)
|
||||
Q(get_pixel)
|
||||
Q(set_pixel)
|
||||
|
||||
|
||||
@@ -65,6 +65,34 @@ mp_obj_t modkandinsky_draw_string(size_t n_args, const mp_obj_t * args) {
|
||||
return mp_const_none;
|
||||
}
|
||||
|
||||
mp_obj_t modkandinsky_draw_line(size_t n_args, const mp_obj_t * args) {
|
||||
mp_int_t x1 = mp_obj_get_int(args[0]);
|
||||
mp_int_t y1 = mp_obj_get_int(args[1]);
|
||||
mp_int_t x2 = mp_obj_get_int(args[2]);
|
||||
mp_int_t y2 = mp_obj_get_int(args[3]);
|
||||
KDPoint p1 = KDPoint(x1, y1);
|
||||
KDPoint p2 = KDPoint(x2, y2);
|
||||
KDColor color = MicroPython::Color::Parse(args[4]);
|
||||
MicroPython::ExecutionEnvironment::currentExecutionEnvironment()->displaySandbox();
|
||||
KDIonContext::sharedContext()->drawLine(p1, p2, color);
|
||||
return mp_const_none;
|
||||
}
|
||||
|
||||
mp_obj_t modkandinsky_draw_circle(size_t n_args, const mp_obj_t * args) {
|
||||
mp_int_t cx = mp_obj_get_int(args[0]);
|
||||
mp_int_t cy = mp_obj_get_int(args[1]);
|
||||
mp_int_t r = mp_obj_get_int(args[2]);
|
||||
if(r<0)
|
||||
{
|
||||
r = -r;
|
||||
}
|
||||
KDPoint center = KDPoint(cx, cy);
|
||||
KDColor color = MicroPython::Color::Parse(args[3]);
|
||||
MicroPython::ExecutionEnvironment::currentExecutionEnvironment()->displaySandbox();
|
||||
KDIonContext::sharedContext()->drawCircle(center, r, color);
|
||||
return mp_const_none;
|
||||
}
|
||||
|
||||
mp_obj_t modkandinsky_fill_rect(size_t n_args, const mp_obj_t * args) {
|
||||
mp_int_t x = mp_obj_get_int(args[0]);
|
||||
mp_int_t y = mp_obj_get_int(args[1]);
|
||||
@@ -84,3 +112,49 @@ mp_obj_t modkandinsky_fill_rect(size_t n_args, const mp_obj_t * args) {
|
||||
KDIonContext::sharedContext()->fillRect(rect, color);
|
||||
return mp_const_none;
|
||||
}
|
||||
|
||||
mp_obj_t modkandinsky_fill_circle(size_t n_args, const mp_obj_t * args) {
|
||||
mp_int_t cx = mp_obj_get_int(args[0]);
|
||||
mp_int_t cy = mp_obj_get_int(args[1]);
|
||||
mp_int_t r = mp_obj_get_int(args[2]);
|
||||
if(r<0)
|
||||
{
|
||||
r = -r;
|
||||
}
|
||||
KDPoint center = KDPoint(cx, cy);
|
||||
KDColor color = MicroPython::Color::Parse(args[3]);
|
||||
MicroPython::ExecutionEnvironment::currentExecutionEnvironment()->displaySandbox();
|
||||
KDIonContext::sharedContext()->fillCircle(center, r, color);
|
||||
return mp_const_none;
|
||||
}
|
||||
|
||||
mp_obj_t modkandinsky_fill_polygon(size_t n_args, const mp_obj_t * args) {
|
||||
KDCoordinate pointsX[KDContext::k_polygonMaxNumberOfPoints];
|
||||
KDCoordinate pointsY[KDContext::k_polygonMaxNumberOfPoints];
|
||||
|
||||
size_t itemLength;
|
||||
mp_obj_t * items;
|
||||
|
||||
mp_obj_get_array(args[0], &itemLength, &items);
|
||||
|
||||
if (itemLength < 3) {
|
||||
mp_raise_ValueError("polygon must have at least 3 points");
|
||||
}
|
||||
else if (itemLength > KDContext::k_polygonMaxNumberOfPoints) {
|
||||
mp_raise_ValueError("polygon is defined by too many points");
|
||||
}
|
||||
|
||||
for(unsigned int i=0; i<itemLength; i++)
|
||||
{
|
||||
mp_obj_t * coordinates;
|
||||
mp_obj_get_array_fixed_n(items[i], 2, &coordinates);
|
||||
|
||||
pointsX[i] = mp_obj_get_int(coordinates[0]);
|
||||
pointsY[i] = mp_obj_get_int(coordinates[1]);
|
||||
}
|
||||
|
||||
KDColor color = MicroPython::Color::Parse(args[1]);
|
||||
MicroPython::ExecutionEnvironment::currentExecutionEnvironment()->displaySandbox();
|
||||
KDIonContext::sharedContext()->fillPolygon(pointsX, pointsY, itemLength, color);
|
||||
return mp_const_none;
|
||||
}
|
||||
@@ -4,4 +4,8 @@ mp_obj_t modkandinsky_color(size_t n_args, const mp_obj_t *args);
|
||||
mp_obj_t modkandinsky_get_pixel(mp_obj_t x, mp_obj_t y);
|
||||
mp_obj_t modkandinsky_set_pixel(mp_obj_t x, mp_obj_t y, mp_obj_t color);
|
||||
mp_obj_t modkandinsky_draw_string(size_t n_args, const mp_obj_t *args);
|
||||
mp_obj_t modkandinsky_draw_line(size_t n_args, const mp_obj_t *args);
|
||||
mp_obj_t modkandinsky_draw_circle(size_t n_args, const mp_obj_t *args);
|
||||
mp_obj_t modkandinsky_fill_rect(size_t n_args, const mp_obj_t *args);
|
||||
mp_obj_t modkandinsky_fill_circle(size_t n_args, const mp_obj_t *args);
|
||||
mp_obj_t modkandinsky_fill_polygon(size_t n_args, const mp_obj_t *args);
|
||||
@@ -4,7 +4,11 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(modkandinsky_color_obj, 1, 3, modkand
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(modkandinsky_get_pixel_obj, modkandinsky_get_pixel);
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_3(modkandinsky_set_pixel_obj, modkandinsky_set_pixel);
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(modkandinsky_draw_string_obj, 3, 5, modkandinsky_draw_string);
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(modkandinsky_draw_line_obj, 5, 5, modkandinsky_draw_line);
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(modkandinsky_draw_circle_obj, 4, 4, modkandinsky_draw_circle);
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(modkandinsky_fill_rect_obj, 5, 5, modkandinsky_fill_rect);
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(modkandinsky_fill_circle_obj, 4, 4, modkandinsky_fill_circle);
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(modkandinsky_fill_polygon_obj, 2, 2, modkandinsky_fill_polygon);
|
||||
|
||||
STATIC const mp_rom_map_elem_t modkandinsky_module_globals_table[] = {
|
||||
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_kandinsky) },
|
||||
@@ -12,7 +16,11 @@ STATIC const mp_rom_map_elem_t modkandinsky_module_globals_table[] = {
|
||||
{ MP_ROM_QSTR(MP_QSTR_get_pixel), (mp_obj_t)&modkandinsky_get_pixel_obj },
|
||||
{ MP_ROM_QSTR(MP_QSTR_set_pixel), (mp_obj_t)&modkandinsky_set_pixel_obj },
|
||||
{ MP_ROM_QSTR(MP_QSTR_draw_string), (mp_obj_t)&modkandinsky_draw_string_obj },
|
||||
{ MP_ROM_QSTR(MP_QSTR_draw_line), (mp_obj_t)&modkandinsky_draw_line_obj },
|
||||
{ MP_ROM_QSTR(MP_QSTR_draw_circle), (mp_obj_t)&modkandinsky_draw_circle_obj },
|
||||
{ MP_ROM_QSTR(MP_QSTR_fill_rect), (mp_obj_t)&modkandinsky_fill_rect_obj },
|
||||
{ MP_ROM_QSTR(MP_QSTR_fill_circle), (mp_obj_t)&modkandinsky_fill_circle_obj },
|
||||
{ MP_ROM_QSTR(MP_QSTR_fill_polygon), (mp_obj_t)&modkandinsky_fill_polygon_obj },
|
||||
};
|
||||
|
||||
STATIC MP_DEFINE_CONST_DICT(modkandinsky_module_globals, modkandinsky_module_globals_table);
|
||||
|
||||
Reference in New Issue
Block a user