Index: trunk/src/obj_arc.c =================================================================== --- trunk/src/obj_arc.c (revision 20887) +++ trunk/src/obj_arc.c (revision 20888) @@ -74,12 +74,12 @@ PCB_CLEAR_PARENT(arc); } -pcb_arc_t *pcb_arc_alloc(pcb_layer_t * layer) +pcb_arc_t *pcb_arc_alloc_id(pcb_layer_t *layer, long int id) { pcb_arc_t *new_obj; new_obj = calloc(sizeof(pcb_arc_t), 1); - new_obj->ID = pcb_create_ID_get(); + new_obj->ID = id; new_obj->type = PCB_OBJ_ARC; new_obj->Attributes.post_change = pcb_obj_attrib_post_change; @@ -88,6 +88,11 @@ return new_obj; } +pcb_arc_t *pcb_arc_alloc(pcb_layer_t *layer) +{ + return pcb_arc_alloc_id(layer, pcb_create_ID_get()); +} + /* computes the bounding box of an arc */ static pcb_box_t pcb_arc_bbox_(const pcb_arc_t *Arc, int mini) { Index: trunk/src/obj_arc.h =================================================================== --- trunk/src/obj_arc.h (revision 20887) +++ trunk/src/obj_arc.h (revision 20888) @@ -45,6 +45,7 @@ /*** Memory ***/ pcb_arc_t *pcb_arc_alloc(pcb_layer_t *); +pcb_arc_t *pcb_arc_alloc_id(pcb_layer_t *layer, long int id); 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_bool prevent_dups); Index: trunk/src/obj_line.c =================================================================== --- trunk/src/obj_line.c (revision 20887) +++ trunk/src/obj_line.c (revision 20888) @@ -79,12 +79,12 @@ PCB_CLEAR_PARENT(line); } -pcb_line_t *pcb_line_alloc(pcb_layer_t * layer) +pcb_line_t *pcb_line_alloc_id(pcb_layer_t *layer, long int id) { pcb_line_t *new_obj; new_obj = calloc(sizeof(pcb_line_t), 1); - new_obj->ID = pcb_create_ID_get(); + new_obj->ID = id; new_obj->type = PCB_OBJ_LINE; new_obj->Attributes.post_change = pcb_obj_attrib_post_change; @@ -93,6 +93,11 @@ return new_obj; } +pcb_line_t *pcb_line_alloc(pcb_layer_t *layer) +{ + return pcb_line_alloc_id(layer, pcb_create_ID_get()); +} + void pcb_line_free(pcb_line_t *line) { pcb_line_unreg(line); Index: trunk/src/obj_line.h =================================================================== --- trunk/src/obj_line.h (revision 20887) +++ trunk/src/obj_line.h (revision 20888) @@ -49,6 +49,7 @@ pcb_line_t *pcb_line_alloc(pcb_layer_t * layer); +pcb_line_t *pcb_line_alloc_id(pcb_layer_t *layer, long int id); void pcb_line_free(pcb_line_t * data); 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); Index: trunk/src/obj_poly.c =================================================================== --- trunk/src/obj_poly.c (revision 20887) +++ trunk/src/obj_poly.c (revision 20888) @@ -77,12 +77,12 @@ PCB_SET_PARENT(poly, layer, NULL); } -pcb_poly_t *pcb_poly_alloc(pcb_layer_t * layer) +pcb_poly_t *pcb_poly_alloc_id(pcb_layer_t *layer, long int id) { pcb_poly_t *new_obj; new_obj = calloc(sizeof(pcb_poly_t), 1); - new_obj->ID = pcb_create_ID_get(); + new_obj->ID = id; new_obj->type = PCB_OBJ_POLY; new_obj->Attributes.post_change = pcb_obj_attrib_post_change; @@ -91,6 +91,12 @@ return new_obj; } +pcb_poly_t *pcb_poly_alloc(pcb_layer_t *layer) +{ + return pcb_poly_alloc_id(layer, pcb_create_ID_get()); +} + + void pcb_poly_free(pcb_poly_t *poly) { pcb_poly_unreg(poly); Index: trunk/src/obj_poly.h =================================================================== --- trunk/src/obj_poly.h (revision 20887) +++ trunk/src/obj_poly.h (revision 20888) @@ -55,6 +55,7 @@ pcb_poly_t *pcb_poly_alloc(pcb_layer_t * layer); +pcb_poly_t *pcb_poly_alloc_id(pcb_layer_t *layer, long int id); void pcb_poly_free(pcb_poly_t * data); pcb_point_t *pcb_poly_point_alloc(pcb_poly_t *Polygon); pcb_cardinal_t *pcb_poly_holeidx_new(pcb_poly_t *Polygon); Index: trunk/src/obj_pstk.c =================================================================== --- trunk/src/obj_pstk.c (revision 20887) +++ trunk/src/obj_pstk.c (revision 20888) @@ -82,12 +82,12 @@ PCB_CLEAR_PARENT(pstk); } -pcb_pstk_t *pcb_pstk_alloc(pcb_data_t *data) +pcb_pstk_t *pcb_pstk_alloc_id(pcb_data_t *data, long int id) { pcb_pstk_t *ps; ps = calloc(sizeof(pcb_pstk_t), 1); - ps->ID = pcb_create_ID_get(); + ps->ID = id; ps->protoi = -1; ps->type = PCB_OBJ_PSTK; ps->Attributes.post_change = pcb_obj_attrib_post_change; @@ -97,6 +97,12 @@ return ps; } +pcb_pstk_t *pcb_pstk_alloc(pcb_data_t *data) +{ + return pcb_pstk_alloc_id(data, pcb_create_ID_get()); +} + + void pcb_pstk_free(pcb_pstk_t *ps) { pcb_pstk_unreg(ps); Index: trunk/src/obj_pstk.h =================================================================== --- trunk/src/obj_pstk.h (revision 20887) +++ trunk/src/obj_pstk.h (revision 20888) @@ -88,6 +88,7 @@ pcb_pstk_t *pcb_pstk_alloc(pcb_data_t *data); +pcb_pstk_t *pcb_pstk_alloc_id(pcb_data_t *data, long int id); void pcb_pstk_free(pcb_pstk_t *ps); pcb_pstk_t *pcb_pstk_new(pcb_data_t *data, pcb_cardinal_t proto, pcb_coord_t x, pcb_coord_t y, pcb_coord_t clearance, pcb_flag_t Flags); pcb_pstk_t *pcb_pstk_new_tr(pcb_data_t *data, pcb_cardinal_t proto, pcb_coord_t x, pcb_coord_t y, pcb_coord_t clearance, pcb_flag_t Flags, double rot, int xmirror, int smirror); Index: trunk/src/obj_rat.c =================================================================== --- trunk/src/obj_rat.c (revision 20887) +++ trunk/src/obj_rat.c (revision 20888) @@ -67,12 +67,12 @@ PCB_CLEAR_PARENT(rat); } -pcb_rat_t *pcb_rat_alloc(pcb_data_t *data) +pcb_rat_t *pcb_rat_alloc_id(pcb_data_t *data, long int id) { pcb_rat_t *new_obj; new_obj = calloc(sizeof(pcb_rat_t), 1); - new_obj->ID = pcb_create_ID_get(); + new_obj->ID = id; new_obj->type = PCB_OBJ_RAT; pcb_rat_reg(data, new_obj); @@ -80,6 +80,11 @@ return new_obj; } +pcb_rat_t *pcb_rat_alloc(pcb_data_t *data) +{ + return pcb_rat_alloc_id(data, pcb_create_ID_get()); +} + void pcb_rat_free(pcb_rat_t *rat) { pcb_rat_unreg(rat); Index: trunk/src/obj_rat.h =================================================================== --- trunk/src/obj_rat.h (revision 20887) +++ trunk/src/obj_rat.h (revision 20888) @@ -42,6 +42,7 @@ pcb_rat_t *pcb_rat_alloc(pcb_data_t *data); +pcb_rat_t *pcb_rat_alloc_id(pcb_data_t *data, long int id); void pcb_rat_free(pcb_rat_t *data); void pcb_rat_reg(pcb_data_t *data, pcb_rat_t *rat); void pcb_rat_unreg(pcb_rat_t *rat); Index: trunk/src/obj_subc.c =================================================================== --- trunk/src/obj_subc.c (revision 20887) +++ trunk/src/obj_subc.c (revision 20888) @@ -98,11 +98,11 @@ pcb_text_dyn_bbox_update(sc->data); } -pcb_subc_t *pcb_subc_alloc(void) +pcb_subc_t *pcb_subc_alloc_id(long int id) { pcb_subc_t *sc; sc = calloc(sizeof(pcb_subc_t), 1); - sc->ID = pcb_create_ID_get(); + sc->ID = id; sc->Attributes.post_change = pcb_subc_attrib_post_change; sc->data = pcb_data_new(NULL); sc->type = PCB_OBJ_SUBC; @@ -112,6 +112,13 @@ return sc; } +pcb_subc_t *pcb_subc_alloc(void) +{ + return pcb_subc_alloc_id(pcb_create_ID_get()); + +} + + pcb_subc_t *pcb_subc_new(void) { return pcb_subc_alloc(); Index: trunk/src/obj_subc.h =================================================================== --- trunk/src/obj_subc.h (revision 20887) +++ trunk/src/obj_subc.h (revision 20888) @@ -54,6 +54,7 @@ }; pcb_subc_t *pcb_subc_alloc(void); +pcb_subc_t *pcb_subc_alloc_id(long int id); pcb_subc_t *pcb_subc_new(void); void pcb_subc_free(pcb_subc_t *sc); Index: trunk/src/obj_text.c =================================================================== --- trunk/src/obj_text.c (revision 20887) +++ trunk/src/obj_text.c (revision 20888) @@ -78,12 +78,12 @@ PCB_CLEAR_PARENT(text); } -pcb_text_t *pcb_text_alloc(pcb_layer_t * layer) +pcb_text_t *pcb_text_alloc_id(pcb_layer_t *layer, long int id) { pcb_text_t *new_obj; new_obj = calloc(sizeof(pcb_text_t), 1); - new_obj->ID = pcb_create_ID_get(); + new_obj->ID = id; new_obj->type = PCB_OBJ_TEXT; new_obj->Attributes.post_change = pcb_obj_attrib_post_change; @@ -92,6 +92,11 @@ return new_obj; } +pcb_text_t *pcb_text_alloc(pcb_layer_t *layer) +{ + return pcb_text_alloc_id(layer, pcb_create_ID_get()); +} + void pcb_text_free(pcb_text_t *text) { pcb_text_unreg(text); Index: trunk/src/obj_text.h =================================================================== --- trunk/src/obj_text.h (revision 20887) +++ trunk/src/obj_text.h (revision 20888) @@ -52,6 +52,7 @@ #define PCB_UNPCB_SCALE_TEXT(COORD,TEXTSCALE) ((pcb_coord_t)pcb_round((COORD) * (100.0 / (double)(TEXTSCALE)))) pcb_text_t *pcb_text_alloc(pcb_layer_t * layer); +pcb_text_t *pcb_text_alloc_id(pcb_layer_t *layer, long int id); 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, double rot, int Scale, pcb_coord_t thickness, const char *TextString, pcb_flag_t Flags); pcb_text_t *pcb_text_dup(pcb_layer_t *dst, pcb_text_t *src);