Index: trunk/src/obj_poly.c =================================================================== --- trunk/src/obj_poly.c (revision 19692) +++ trunk/src/obj_poly.c (revision 19693) @@ -946,7 +946,29 @@ return Polygon; } +void pcb_poly_pre(pcb_poly_t *poly) +{ + pcb_layer_t *ly = pcb_layer_get_real(poly->parent.layer); + if (ly == NULL) + return; + pcb_poly_pprestore(poly); + if (ly->polygon_tree != NULL) + pcb_r_delete_entry(ly->polygon_tree, (pcb_box_t *)poly); +} + +void pcb_poly_post(pcb_poly_t *poly) +{ + pcb_layer_t *ly = pcb_layer_get_real(poly->parent.layer); + if (ly == NULL) + return; + + if (ly->polygon_tree != NULL) + pcb_r_insert_entry(ly->polygon_tree, (pcb_box_t *)poly); + pcb_poly_ppclear(poly); +} + + /*** iteration helpers ***/ void pcb_poly_map_contours(pcb_poly_t *p, void *ctx, pcb_poly_map_cb_t *cb) { Index: trunk/src/obj_poly.h =================================================================== --- trunk/src/obj_poly.h (revision 19692) +++ trunk/src/obj_poly.h (revision 19693) @@ -78,6 +78,9 @@ void pcb_poly_move(pcb_poly_t *Polygon, pcb_coord_t DX, pcb_coord_t DY); pcb_poly_t *pcb_poly_copy(pcb_poly_t *Dest, pcb_poly_t *Src, pcb_coord_t dx, pcb_coord_t dy); +void pcb_poly_pre(pcb_poly_t *poly); +void pcb_poly_post(pcb_poly_t *poly); + /* hash and eq */ int pcb_poly_eq(const pcb_host_trans_t *tr1, const pcb_poly_t *p1, const pcb_host_trans_t *tr2, const pcb_poly_t *p2); unsigned int pcb_poly_hash(const pcb_host_trans_t *tr, const pcb_poly_t *p);