Index: trunk/src/obj_arc.c =================================================================== --- trunk/src/obj_arc.c (revision 9188) +++ trunk/src/obj_arc.c (revision 9189) @@ -228,7 +228,12 @@ return 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 *pcb_arc_dup_at(pcb_layer_t *dst, pcb_arc_t *src, pcb_coord_t dx, pcb_coord_t dy) +{ + return pcb_arc_new(dst, src->X+dx, src->Y+dy, src->Width, src->Height, src->StartAngle, src->Delta, src->Thickness, src->Clearance, src->Flags); +} + void pcb_add_arc_on_layer(pcb_layer_t *Layer, pcb_arc_t *Arc) { pcb_arc_bbox(Arc); Index: trunk/src/obj_arc.h =================================================================== --- trunk/src/obj_arc.h (revision 9188) +++ trunk/src/obj_arc.h (revision 9189) @@ -47,6 +47,7 @@ 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_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); /* Add objects without creating them or making any "sanity modifications" to them */ Index: trunk/src/obj_line.c =================================================================== --- trunk/src/obj_line.c (revision 9188) +++ trunk/src/obj_line.c (revision 9189) @@ -221,6 +221,11 @@ return pcb_line_new(dst, src->Point1.X, src->Point1.Y, src->Point2.X, src->Point2.Y, src->Thickness, src->Clearance, src->Flags); } +pcb_line_t *pcb_line_dup_at(pcb_layer_t *dst, pcb_line_t *src, pcb_coord_t dx, pcb_coord_t dy) +{ + return pcb_line_new(dst, src->Point1.X + dx, src->Point1.Y + dy, src->Point2.X + dx, src->Point2.Y + dy, src->Thickness, src->Clearance, src->Flags); +} + void pcb_add_line_on_layer(pcb_layer_t *Layer, pcb_line_t *Line) { pcb_line_bbox(Line); Index: trunk/src/obj_line.h =================================================================== --- trunk/src/obj_line.h (revision 9188) +++ trunk/src/obj_line.h (revision 9189) @@ -52,6 +52,7 @@ pcb_line_t *pcb_line_new_merge(pcb_layer_t *Layer, pcb_coord_t X1, pcb_coord_t Y1, pcb_coord_t X2, pcb_coord_t Y2, pcb_coord_t Thickness, pcb_coord_t Clearance, pcb_flag_t Flags); pcb_line_t *pcb_line_new(pcb_layer_t *Layer, pcb_coord_t X1, pcb_coord_t Y1, pcb_coord_t X2, pcb_coord_t Y2, pcb_coord_t Thickness, pcb_coord_t Clearance, pcb_flag_t Flags); pcb_line_t *pcb_line_dup(pcb_layer_t *Layer, pcb_line_t *src); +pcb_line_t *pcb_line_dup_at(pcb_layer_t *dst, pcb_line_t *src, pcb_coord_t dx, pcb_coord_t dy); void *pcb_line_destroy(pcb_layer_t *dst, pcb_line_t *src); Index: trunk/src/obj_text.c =================================================================== --- trunk/src/obj_text.c (revision 9188) +++ trunk/src/obj_text.c (revision 9189) @@ -106,6 +106,11 @@ return pcb_text_new(dst, pcb_font(PCB, src->fid, 1), src->X, src->Y, src->Direction, src->Scale, src->TextString, src->Flags); } +pcb_text_t *pcb_text_dup_at(pcb_layer_t *dst, pcb_text_t *src, pcb_coord_t dx, pcb_coord_t dy) +{ + return pcb_text_new(dst, pcb_font(PCB, src->fid, 1), src->X+dx, src->Y+dy, src->Direction, src->Scale, src->TextString, src->Flags); +} + void pcb_add_text_on_layer(pcb_layer_t *Layer, pcb_text_t *text, pcb_font_t *PCBFont) { /* calculate size of the bounding box */ Index: trunk/src/obj_text.h =================================================================== --- trunk/src/obj_text.h (revision 9188) +++ trunk/src/obj_text.h (revision 9189) @@ -48,6 +48,7 @@ void pcb_text_free(pcb_text_t * data); pcb_text_t *pcb_text_new(pcb_layer_t *Layer, pcb_font_t *PCBFont, pcb_coord_t X, pcb_coord_t Y, unsigned Direction, int Scale, const char *TextString, pcb_flag_t Flags); pcb_text_t *pcb_text_dup(pcb_layer_t *dst, pcb_text_t *src); +pcb_text_t *pcb_text_dup_at(pcb_layer_t *dst, pcb_text_t *src, pcb_coord_t dx, pcb_coord_t dy); void *pcb_text_destroy(pcb_layer_t *Layer, pcb_text_t *Text);