Index: trunk/src/obj_arc.c =================================================================== --- trunk/src/obj_arc.c (revision 18634) +++ trunk/src/obj_arc.c (revision 18635) @@ -190,10 +190,11 @@ /* creates a new arc on a layer */ -pcb_arc_t *pcb_arc_new(pcb_layer_t *Layer, pcb_coord_t X1, pcb_coord_t Y1, pcb_coord_t width, pcb_coord_t height, pcb_angle_t sa, pcb_angle_t dir, pcb_coord_t Thickness, pcb_coord_t Clearance, pcb_flag_t Flags) +pcb_arc_t *pcb_arc_new(pcb_layer_t *Layer, pcb_coord_t X1, pcb_coord_t Y1, pcb_coord_t width, pcb_coord_t height, pcb_angle_t sa, pcb_angle_t dir, pcb_coord_t Thickness, pcb_coord_t Clearance, pcb_flag_t Flags, pcb_bool prevent_dups) { pcb_arc_t *Arc; + if (prevent_dups) { PCB_ARC_LOOP(Layer); { if (arc->X == X1 && arc->Y == Y1 && arc->Width == width && @@ -201,6 +202,7 @@ return NULL; /* prevent stacked arcs */ } PCB_END_LOOP; + } Arc = pcb_arc_alloc(Layer); if (!Arc) return Arc; @@ -230,7 +232,7 @@ pcb_arc_t *pcb_arc_dup(pcb_layer_t *dst, pcb_arc_t *src) { - pcb_arc_t *a = pcb_arc_new(dst, src->X, src->Y, src->Width, src->Height, src->StartAngle, src->Delta, src->Thickness, src->Clearance, src->Flags); + pcb_arc_t *a = pcb_arc_new(dst, src->X, src->Y, src->Width, src->Height, src->StartAngle, src->Delta, src->Thickness, src->Clearance, src->Flags, pcb_false); pcb_arc_copy_meta(a, src); return a; } @@ -237,7 +239,7 @@ pcb_arc_t *pcb_arc_dup_at(pcb_layer_t *dst, pcb_arc_t *src, pcb_coord_t dx, pcb_coord_t dy) { - pcb_arc_t *a = pcb_arc_new(dst, src->X+dx, src->Y+dy, src->Width, src->Height, src->StartAngle, src->Delta, src->Thickness, src->Clearance, src->Flags); + pcb_arc_t *a = pcb_arc_new(dst, src->X+dx, src->Y+dy, src->Width, src->Height, src->StartAngle, src->Delta, src->Thickness, src->Clearance, src->Flags, pcb_false); pcb_arc_copy_meta(a, src); return a; } @@ -348,7 +350,7 @@ pcb_layer_t *layer = &ctx->buffer.dst->Layer[pcb_layer_id(ctx->buffer.src, Layer)]; pcb_arc_t *a = pcb_arc_new(layer, Arc->X, Arc->Y, Arc->Width, Arc->Height, Arc->StartAngle, Arc->Delta, - Arc->Thickness, Arc->Clearance, pcb_flag_mask(Arc->Flags, PCB_FLAG_FOUND | ctx->buffer.extraflg)); + Arc->Thickness, Arc->Clearance, pcb_flag_mask(Arc->Flags, PCB_FLAG_FOUND | ctx->buffer.extraflg), pcb_false); pcb_arc_copy_meta(a, Arc); return a; @@ -551,7 +553,7 @@ arc = pcb_arc_new(Layer, Arc->X + ctx->copy.DeltaX, Arc->Y + ctx->copy.DeltaY, Arc->Width, Arc->Height, Arc->StartAngle, - Arc->Delta, Arc->Thickness, Arc->Clearance, pcb_flag_mask(Arc->Flags, PCB_FLAG_FOUND)); + Arc->Delta, Arc->Thickness, Arc->Clearance, pcb_flag_mask(Arc->Flags, PCB_FLAG_FOUND), pcb_true); if (!arc) return arc; pcb_arc_copy_meta(arc, Arc); @@ -770,13 +772,12 @@ end_ang += 360.0; if ((arc->Delta < 0) || (arc->Delta > 180)) - new_arc = pcb_arc_new(Layer, arc->X, arc->Y, arc->Width, arc->Height, angle, end_ang - angle + 360.0, arc->Thickness, arc->Clearance, arc->Flags); + new_arc = pcb_arc_new(Layer, arc->X, arc->Y, arc->Width, arc->Height, angle, end_ang - angle + 360.0, arc->Thickness, arc->Clearance, arc->Flags, pcb_true); else - new_arc = pcb_arc_new(Layer, arc->X, arc->Y, arc->Width, arc->Height, angle, end_ang - angle, arc->Thickness, arc->Clearance, arc->Flags); + new_arc = pcb_arc_new(Layer, arc->X, arc->Y, arc->Width, arc->Height, angle, end_ang - angle, arc->Thickness, arc->Clearance, arc->Flags, pcb_true); - pcb_arc_copy_meta(new_arc, arc); - if (new_arc != NULL) { + pcb_arc_copy_meta(new_arc, arc); PCB_FLAG_CHANGE(PCB_CHGFLG_SET, PCB_FLAG_FOUND, new_arc); if (arc->Delta < 0) pcb_arc_set_angles(Layer, arc, arc->StartAngle, angle - arc->StartAngle - 360.0); Index: trunk/src/obj_arc.h =================================================================== --- trunk/src/obj_arc.h (revision 18634) +++ trunk/src/obj_arc.h (revision 18635) @@ -47,7 +47,7 @@ pcb_arc_t *pcb_arc_alloc(pcb_layer_t *); void pcb_arc_free(pcb_arc_t *data); -pcb_arc_t *pcb_arc_new(pcb_layer_t *Layer, pcb_coord_t center_x, pcb_coord_t center_y, pcb_coord_t width_r, pcb_coord_t height_r, pcb_angle_t start_angle, pcb_angle_t delta_angle, pcb_coord_t Thickness, pcb_coord_t Clearance, pcb_flag_t Flags); +pcb_arc_t *pcb_arc_new(pcb_layer_t *Layer, pcb_coord_t center_x, pcb_coord_t center_y, pcb_coord_t width_r, pcb_coord_t height_r, pcb_angle_t start_angle, pcb_angle_t delta_angle, pcb_coord_t Thickness, pcb_coord_t Clearance, pcb_flag_t Flags, pcb_bool prevent_dups); pcb_arc_t *pcb_arc_dup(pcb_layer_t *dst, pcb_arc_t *src); pcb_arc_t *pcb_arc_dup_at(pcb_layer_t *dst, pcb_arc_t *src, pcb_coord_t dx, pcb_coord_t dy); void *pcb_arc_destroy(pcb_layer_t *Layer, pcb_arc_t *Arc); Index: trunk/src/route.c =================================================================== --- trunk/src/route.c (revision 18634) +++ trunk/src/route.c (revision 18635) @@ -470,7 +470,7 @@ p_obj->delta_angle, p_route->thickness, p_route->clearance, - p_route->flags); + p_route->flags, pcb_true); if (arc) { pcb_added_lines++; pcb_obj_add_attribs(arc, PCB->pen_attr); Index: trunk/src/tool_arc.c =================================================================== --- trunk/src/tool_arc.c (revision 18634) +++ trunk/src/tool_arc.c (revision 18635) @@ -110,7 +110,7 @@ dir, conf_core.design.line_thickness, 2 * conf_core.design.clearance, - pcb_flag_make(conf_core.editor.clear_line ? PCB_FLAG_CLEARLINE : 0)))) { + pcb_flag_make(conf_core.editor.clear_line ? PCB_FLAG_CLEARLINE : 0), pcb_true))) { pcb_obj_add_attribs(arc, PCB->pen_attr); pcb_arc_get_end(arc, 1, &pcb_crosshair.AttachedBox.Point2.X, &pcb_crosshair.AttachedBox.Point2.Y); pcb_crosshair.AttachedBox.Point1.X = pcb_crosshair.AttachedBox.Point2.X; Index: trunk/src_plugins/fontmode/fontmode.c =================================================================== --- trunk/src_plugins/fontmode/fontmode.c (revision 18634) +++ trunk/src_plugins/fontmode/fontmode.c (revision 18635) @@ -192,8 +192,8 @@ for(arc = arclist_first(&symbol->arcs); arc != NULL; arc = arclist_next(arc)) { - pcb_arc_new(lfont, arc->X + ox, arc->Y + oy, arc->Width, arc->Height, arc->StartAngle, arc->Delta, arc->Thickness, 0, pcb_no_flags()); - newarc = pcb_arc_new(lorig, arc->X + ox, arc->Y + oy, arc->Width, arc->Height, arc->StartAngle, arc->Delta, arc->Thickness, 0, pcb_no_flags()); + pcb_arc_new(lfont, arc->X + ox, arc->Y + oy, arc->Width, arc->Height, arc->StartAngle, arc->Delta, arc->Thickness, 0, pcb_no_flags(), pcb_true); + newarc = pcb_arc_new(lorig, arc->X + ox, arc->Y + oy, arc->Width, arc->Height, arc->StartAngle, arc->Delta, arc->Thickness, 0, pcb_no_flags(), pcb_true); if (newarc != NULL) { if (maxx < newarc->BoundingBox.X2 - ox) maxx = newarc->BoundingBox.X2 - ox; Index: trunk/src_plugins/gpmi/pcb-gpmi/gpmi_plugin/gpmi_pkg/layout/create.c =================================================================== --- trunk/src_plugins/gpmi/pcb-gpmi/gpmi_plugin/gpmi_pkg/layout/create.c (revision 18634) +++ trunk/src_plugins/gpmi/pcb-gpmi/gpmi_plugin/gpmi_pkg/layout/create.c (revision 18635) @@ -111,7 +111,7 @@ static void *layout_create_arc_(pcb_layer_t *layer, int x, int y, int width, int height, int sa, int dir, int thickness, int clearance, multiple layout_flag_t flags) { void *arc; - arc = pcb_arc_new(layer, x, y, width, height, sa, dir, thickness, clearance, get_flags(flags)); + arc = pcb_arc_new(layer, x, y, width, height, sa, dir, thickness, clearance, get_flags(flags), pcb_true); if (arc != NULL) { pcb_undo_add_obj_to_create(PCB_OBJ_ARC, layer, arc, arc); return 0; Index: trunk/src_plugins/import_hpgl/hpgl.c =================================================================== --- trunk/src_plugins/import_hpgl/hpgl.c (revision 18634) +++ trunk/src_plugins/import_hpgl/hpgl.c (revision 18635) @@ -97,7 +97,7 @@ HPGL2CRD_D(arc->r), HPGL2CRD_D(arc->r), arc->starta+180, arc->deltaa, conf_core.design.line_thickness, 2 * conf_core.design.clearance, - pcb_flag_make((conf_core.editor.clear_line ? PCB_FLAG_CLEARLINE : 0))); + pcb_flag_make((conf_core.editor.clear_line ? PCB_FLAG_CLEARLINE : 0)), pcb_true); return 0; } Index: trunk/src_plugins/io_autotrax/read.c =================================================================== --- trunk/src_plugins/io_autotrax/read.c (revision 18634) +++ trunk/src_plugins/io_autotrax/read.c (revision 18635) @@ -361,13 +361,13 @@ if (segments == 10) { /* LU + RL quadrants */ start_angle = 180.0; delta = 90.0; - pcb_arc_new(&st->pcb->Data->Layer[PCB_layer], centreX, centreY, width, height, start_angle, delta, Thickness, Clearance, Flags); + pcb_arc_new(&st->pcb->Data->Layer[PCB_layer], centreX, centreY, width, height, start_angle, delta, Thickness, Clearance, Flags, pcb_true); start_angle = 0.0; } else if (segments == 5) { /* RU + LL quadrants */ start_angle = 270.0; delta = 90.0; - pcb_arc_new(&st->pcb->Data->Layer[PCB_layer], centreX, centreY, width, height, start_angle, delta, Thickness, Clearance, Flags); + pcb_arc_new(&st->pcb->Data->Layer[PCB_layer], centreX, centreY, width, height, start_angle, delta, Thickness, Clearance, Flags, pcb_true); start_angle = 90.0; } else if (segments >= 15) { /* whole circle */ @@ -427,7 +427,7 @@ if (ly == NULL) return 0; - if (pcb_arc_new(ly, centreX, centreY, width, height, start_angle, delta, Thickness, Clearance, Flags) != 0) + if (pcb_arc_new(ly, centreX, centreY, width, height, start_angle, delta, Thickness, Clearance, Flags, pcb_true) != 0) return 1; return -1; } Index: trunk/src_plugins/io_hyp/parser.c =================================================================== --- trunk/src_plugins/io_hyp/parser.c (revision 18634) +++ trunk/src_plugins/io_hyp/parser.c (revision 18635) @@ -974,7 +974,7 @@ delta = end_angle - start_angle; - new_arc = pcb_arc_new(Layer, XC, YC, Width, Height, start_angle, delta, Thickness, Clearance, Flags); + new_arc = pcb_arc_new(Layer, XC, YC, Width, Height, start_angle, delta, Thickness, Clearance, Flags, pcb_true); return new_arc; } Index: trunk/src_plugins/io_kicad/read.c =================================================================== --- trunk/src_plugins/io_kicad/read.c (revision 18634) +++ trunk/src_plugins/io_kicad/read.c (revision 18635) @@ -772,7 +772,7 @@ startAngle += 360.0; } } - pcb_arc_new(&st->pcb->Data->Layer[PCBLayer], centreX, centreY, width, height, startAngle, delta, Thickness, Clearance, Flags); + pcb_arc_new(&st->pcb->Data->Layer[PCBLayer], centreX, centreY, width, height, startAngle, delta, Thickness, Clearance, Flags, pcb_true); return 0; } return kicad_error(subtree, "unexpected empty/NULL node in gr_arc."); @@ -2337,7 +2337,7 @@ startAngle += 360.0; } } - pcb_arc_new(subc_layer, moduleX + centreX, moduleY + centreY, width, height, startAngle, delta, Thickness, 0, pcb_no_flags()); + pcb_arc_new(subc_layer, moduleX + centreX, moduleY + centreY, width, height, startAngle, delta, Thickness, 0, pcb_no_flags(), pcb_true); } /* ********************************************************** */ Index: trunk/src_plugins/io_pcb/file.c =================================================================== --- trunk/src_plugins/io_pcb/file.c (revision 18634) +++ trunk/src_plugins/io_pcb/file.c (revision 18635) @@ -1037,7 +1037,7 @@ pcb_coord_t Width, pcb_coord_t Height, pcb_angle_t angle, pcb_angle_t delta, pcb_coord_t Thickness) { pcb_layer_t *ly = subc_silk_layer(subc); - return pcb_arc_new(ly, X, Y, Width, Height, angle, delta, Thickness, 0, pcb_no_flags()); + return pcb_arc_new(ly, X, Y, Width, Height, angle, delta, Thickness, 0, pcb_no_flags(), pcb_true); } pcb_pstk_t *io_pcb_element_pin_new(pcb_subc_t *subc, pcb_coord_t X, pcb_coord_t Y, pcb_coord_t Thickness, pcb_coord_t Clearance, pcb_coord_t Mask, pcb_coord_t DrillingHole, const char *Name, const char *Number, pcb_flag_t Flags) Index: trunk/src_plugins/io_pcb/parse_y.c =================================================================== --- trunk/src_plugins/io_pcb/parse_y.c (revision 18634) +++ trunk/src_plugins/io_pcb/parse_y.c (revision 18635) @@ -2316,7 +2316,7 @@ #line 1048 "parse_y.y" /* yacc.c:1646 */ { pcb_arc_new(Layer, NU ((yyvsp[-9].measure)), NU ((yyvsp[-8].measure)), NU ((yyvsp[-7].measure)), NU ((yyvsp[-6].measure)), (yyvsp[-3].number), (yyvsp[-2].number), - NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), (yyvsp[-1].flagtype)); + NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), (yyvsp[-1].flagtype), pcb_true); } #line 2322 "parse_y.c" /* yacc.c:1646 */ break; @@ -2325,7 +2325,7 @@ #line 1057 "parse_y.y" /* yacc.c:1646 */ { pcb_arc_new(Layer, OU ((yyvsp[-9].measure)), OU ((yyvsp[-8].measure)), OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), (yyvsp[-3].number), (yyvsp[-2].number), - OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), pcb_flag_old((yyvsp[-1].integer))); + OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), pcb_flag_old((yyvsp[-1].integer)), pcb_true); } #line 2331 "parse_y.c" /* yacc.c:1646 */ break; @@ -2334,7 +2334,7 @@ #line 1066 "parse_y.y" /* yacc.c:1646 */ { pcb_arc_new(Layer, OU ((yyvsp[-8].measure)), OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), OU ((yyvsp[-6].measure)), IV ((yyvsp[-3].measure)), (yyvsp[-2].number), - OU ((yyvsp[-4].measure)), 200*PCB_GROUNDPLANEFRAME, pcb_flag_old((yyvsp[-1].integer))); + OU ((yyvsp[-4].measure)), 200*PCB_GROUNDPLANEFRAME, pcb_flag_old((yyvsp[-1].integer)), pcb_true); } #line 2340 "parse_y.c" /* yacc.c:1646 */ break; Index: trunk/src_plugins/io_pcb/parse_y.y =================================================================== --- trunk/src_plugins/io_pcb/parse_y.y (revision 18634) +++ trunk/src_plugins/io_pcb/parse_y.y (revision 18635) @@ -1047,7 +1047,7 @@ : T_ARC '[' measure measure measure measure measure measure number number flags ']' { pcb_arc_new(Layer, NU ($3), NU ($4), NU ($5), NU ($6), $9, $10, - NU ($7), NU ($8), $11); + NU ($7), NU ($8), $11, pcb_true); } ; @@ -1056,7 +1056,7 @@ : T_ARC '(' measure measure measure measure measure measure number number INTEGER ')' { pcb_arc_new(Layer, OU ($3), OU ($4), OU ($5), OU ($6), $9, $10, - OU ($7), OU ($8), pcb_flag_old($11)); + OU ($7), OU ($8), pcb_flag_old($11), pcb_true); } ; @@ -1065,7 +1065,7 @@ : T_ARC '(' measure measure measure measure measure measure number INTEGER ')' { pcb_arc_new(Layer, OU ($3), OU ($4), OU ($5), OU ($5), IV ($8), $9, - OU ($7), 200*PCB_GROUNDPLANEFRAME, pcb_flag_old($10)); + OU ($7), 200*PCB_GROUNDPLANEFRAME, pcb_flag_old($10), pcb_true); } ; Index: trunk/src_plugins/io_tedax/footprint.c =================================================================== --- trunk/src_plugins/io_tedax/footprint.c (revision 18634) +++ trunk/src_plugins/io_tedax/footprint.c (revision 18635) @@ -521,7 +521,7 @@ load_val(w, argv[9], "invalid arc width"); for(; *ly != NULL; ly++) { - a = pcb_arc_new(*ly, cx, cy, r, r, sa, da, w, clr, pcb_flag_make(PCB_FLAG_CLEARLINE)); + a = pcb_arc_new(*ly, cx, cy, r, r, sa, da, w, clr, pcb_flag_make(PCB_FLAG_CLEARLINE), pcb_true); load_term(a, argv[3], "invalid term ID for arc: '%s', skipping footprint\n"); } } Index: trunk/src_plugins/lib_gtk_common/dlg_propedit.c =================================================================== --- trunk/src_plugins/lib_gtk_common/dlg_propedit.c (revision 18634) +++ trunk/src_plugins/lib_gtk_common/dlg_propedit.c (revision 18635) @@ -349,7 +349,7 @@ pcb_arc_new(preview_pcb.Data->Layer + 0, PCB_MIL_TO_COORD(1000), PCB_MIL_TO_COORD(1000), PCB_MIL_TO_COORD(100), PCB_MIL_TO_COORD(100), - 0.0, 90.0, PCB_MIL_TO_COORD(20), PCB_MIL_TO_COORD(40), pcb_flag_make(PCB_FLAG_CLEARLINE)); + 0.0, 90.0, PCB_MIL_TO_COORD(20), PCB_MIL_TO_COORD(40), pcb_flag_make(PCB_FLAG_CLEARLINE), pcb_false); pcb_text_new(preview_pcb.Data->Layer + 0, pcb_font(PCB, 0, 1), PCB_MIL_TO_COORD(850), PCB_MIL_TO_COORD(1150), 0, 100, "Text", pcb_flag_make(PCB_FLAG_CLEARLINE)); Index: trunk/src_plugins/puller/puller.c =================================================================== --- trunk/src_plugins/puller/puller.c (revision 18634) +++ trunk/src_plugins/puller/puller.c (revision 18635) @@ -1473,9 +1473,9 @@ #if TRACE1 pcb_printf("create_arc at %#mD r %#mS sa %d delta %d\n", x, y, r, sa, da); #endif - arc = pcb_arc_new(CURRENT, x, y, r, r, sa, da, sample->Thickness, sample->Clearance, sample->Flags); + arc = pcb_arc_new(CURRENT, x, y, r, r, sa, da, sample->Thickness, sample->Clearance, sample->Flags, pcb_true); if (arc == 0) { - arc = pcb_arc_new(CURRENT, x, y, r, r, sa, da * 2, sample->Thickness, sample->Clearance, sample->Flags); + arc = pcb_arc_new(CURRENT, x, y, r, r, sa, da * 2, sample->Thickness, sample->Clearance, sample->Flags, pcb_true); } pcb_undo_add_obj_to_create(PCB_OBJ_ARC, CURRENT, arc, arc); Index: trunk/src_plugins/teardrops/teardrops.c =================================================================== --- trunk/src_plugins/teardrops/teardrops.c (revision 18634) +++ trunk/src_plugins/teardrops/teardrops.c (revision 18635) @@ -159,7 +159,7 @@ ay = ly + dx * adist; arc = pcb_arc_new(lay, (int) ax, (int) ay, (int) radius, - (int) radius, (int) theta + 90 + aoffset, delta - aoffset, l->Thickness, l->Clearance, l->Flags); + (int) radius, (int) theta + 90 + aoffset, delta - aoffset, l->Thickness, l->Clearance, l->Flags, pcb_true); if (arc) pcb_undo_add_obj_to_create(PCB_OBJ_ARC, lay, arc, arc); @@ -167,7 +167,7 @@ ay = ly - dx * (x + t); arc = pcb_arc_new(lay, (int) ax, (int) ay, (int) radius, - (int) radius, (int) theta - 90 - aoffset, -delta + aoffset, l->Thickness, l->Clearance, l->Flags); + (int) radius, (int) theta - 90 - aoffset, -delta + aoffset, l->Thickness, l->Clearance, l->Flags, pcb_true); if (arc) pcb_undo_add_obj_to_create(PCB_OBJ_ARC, lay, arc, arc);