Index: act_draw.c =================================================================== --- act_draw.c (revision 20236) +++ act_draw.c (revision 20237) @@ -33,6 +33,7 @@ #include "actions.h" #include "board.h" #include "flag_str.h" +#include "obj_arc.h" #include "obj_line.h" #include "plugins.h" @@ -102,10 +103,49 @@ return 0; } +static const char pcb_acts_ArcNew[] = "ArcNew(data, layer, centx, centy, radiusx, radiusy, start_ang, delta_ang, thickness, clearance, flags)"; +static const char pcb_acth_ArcNew[] = "Create a pcb arc segment on a layer. For now data must be \"pcb\". Returns the ID of the new object or 0 on error."; +static fgw_error_t pcb_act_ArcNew(fgw_arg_t *res, int argc, fgw_arg_t *argv) +{ + const char *sflg; + pcb_arc_t *arc; + pcb_data_t *data; + pcb_layer_t *layer; + pcb_coord_t cx, cy, hr, wr, th, cl; + double sa, da; + pcb_flag_t flags; + PCB_ACT_IRES(0); + PCB_ACT_CONVARG(1, FGW_DATA, LineNew, data = fgw_data(&argv[1])); + PCB_ACT_CONVARG(2, FGW_LAYER, LineNew, layer = fgw_layer(&argv[2])); + PCB_ACT_CONVARG(3, FGW_COORD, LineNew, cx = fgw_coord(&argv[3])); + PCB_ACT_CONVARG(4, FGW_COORD, LineNew, cy = fgw_coord(&argv[4])); + PCB_ACT_CONVARG(5, FGW_COORD, LineNew, wr = fgw_coord(&argv[5])); + PCB_ACT_CONVARG(6, FGW_COORD, LineNew, hr = fgw_coord(&argv[6])); + PCB_ACT_CONVARG(7, FGW_DOUBLE, LineNew, sa = argv[7].val.nat_double); + PCB_ACT_CONVARG(8, FGW_DOUBLE, LineNew, da = argv[8].val.nat_double); + PCB_ACT_CONVARG(9, FGW_COORD, LineNew, th = fgw_coord(&argv[9])); + PCB_ACT_CONVARG(10, FGW_COORD, LineNew, cl = fgw_coord(&argv[10])); + PCB_ACT_CONVARG(11, FGW_STR, LineNew, sflg = argv[11].val.str); + + if ((data != PCB->Data) || (layer == NULL)) + return 0; + + flags = pcb_strflg_s2f(sflg, flg_error, NULL, 0); + arc = pcb_arc_new(layer, cx, cy, wr, hr, sa, da, th, cl*2, flags, 0); + + if (arc != NULL) { + res->type = FGW_LONG; + res->val.nat_long = arc->ID; + } + return 0; +} + + pcb_action_t act_draw_action_list[] = { {"GetValue", pcb_act_GetValue, pcb_acth_GetValue, pcb_acts_GetValue}, - {"LineNew", pcb_act_LineNew, pcb_acth_LineNew, pcb_acts_LineNew} + {"LineNew", pcb_act_LineNew, pcb_acth_LineNew, pcb_acts_LineNew}, + {"ArcNew", pcb_act_ArcNew, pcb_acth_ArcNew, pcb_acts_ArcNew} }; static const char *act_draw_cookie = "act_draw";