Index: trunk/src_plugins/act_draw/act_draw.c =================================================================== --- trunk/src_plugins/act_draw/act_draw.c (revision 20235) +++ trunk/src_plugins/act_draw/act_draw.c (revision 20236) @@ -31,6 +31,9 @@ #include "conf_core.h" #include "actions.h" +#include "board.h" +#include "flag_str.h" +#include "obj_line.h" #include "plugins.h" static const char pcb_acts_GetValue[] = "GetValue(input, units, relative, default_unit)"; @@ -59,9 +62,50 @@ return 0; } +static int flg_error(const char *msg) +{ + pcb_message(PCB_MSG_ERROR, "act_draw flag conversion error: %s\n", msg); +} +static const char pcb_acts_LineNew[] = "LineNew(data, layer, X1, Y1, X2, Y2, Thickness, Clearance, Flags)"; +static const char pcb_acth_LineNew[] = "Create a pcb line 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_LineNew(fgw_arg_t *res, int argc, fgw_arg_t *argv) +{ + const char *sflg; + pcb_line_t *line; + pcb_data_t *data; + pcb_layer_t *layer; + pcb_coord_t x1, y1, x2, y2, th, cl; + 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, x1 = fgw_coord(&argv[3])); + PCB_ACT_CONVARG(4, FGW_COORD, LineNew, y1 = fgw_coord(&argv[4])); + PCB_ACT_CONVARG(5, FGW_COORD, LineNew, x2 = fgw_coord(&argv[5])); + PCB_ACT_CONVARG(6, FGW_COORD, LineNew, y2 = fgw_coord(&argv[6])); + PCB_ACT_CONVARG(7, FGW_COORD, LineNew, th = fgw_coord(&argv[7])); + PCB_ACT_CONVARG(8, FGW_COORD, LineNew, cl = fgw_coord(&argv[8])); + PCB_ACT_CONVARG(9, FGW_STR, LineNew, sflg = argv[9].val.str); + + if ((data != PCB->Data) || (layer == NULL)) + return 0; + + flags = pcb_strflg_s2f(sflg, flg_error, NULL, 0); + line = pcb_line_new(layer, x1, y1, x2, y2, th, cl*2, flags); + + if (line != NULL) { + res->type = FGW_LONG; + res->val.nat_long = line->ID; + } + return 0; +} + + pcb_action_t act_draw_action_list[] = { - {"GetValue", pcb_act_GetValue, pcb_acth_GetValue, pcb_acts_GetValue} + {"GetValue", pcb_act_GetValue, pcb_acth_GetValue, pcb_acts_GetValue}, + {"LineNew", pcb_act_LineNew, pcb_acth_LineNew, pcb_acts_LineNew} }; static const char *act_draw_cookie = "act_draw";