Index: trunk/src/buffer.c =================================================================== --- trunk/src/buffer.c (revision 28892) +++ trunk/src/buffer.c (revision 28893) @@ -77,6 +77,7 @@ NULL, pcb_subcop_add_to_buffer, pcb_pstkop_add_to_buffer, + 0 /* extobj_inhibit_regen */ }; static pcb_opfunc_t MoveBufferFunctions = { @@ -92,6 +93,7 @@ NULL, pcb_subcop_move_buffer, pcb_pstkop_move_buffer, + 0 /* extobj_inhibit_regen */ }; static int move_buffer_pre(pcb_opctx_t *ctx, pcb_any_obj_t *obj, void *ptr3) Index: trunk/src/change.c =================================================================== --- trunk/src/change.c (revision 28892) +++ trunk/src/change.c (revision 28893) @@ -67,7 +67,8 @@ NULL, NULL, pcb_subcop_change_size, - pcb_pstkop_change_size + pcb_pstkop_change_size, + 0 /* extobj_inhibit_regen */ }; pcb_opfunc_t Change1stSizeFunctions = { @@ -82,7 +83,8 @@ NULL, NULL, pcb_subcop_change_1st_size, - NULL /* padstack */ + NULL, /* padstack */ + 0 /* extobj_inhibit_regen */ }; pcb_opfunc_t Change2ndSizeFunctions = { @@ -97,7 +99,8 @@ NULL, NULL, pcb_subcop_change_2nd_size, - pcb_pstkop_change_2nd_size + pcb_pstkop_change_2nd_size, + 0 /* extobj_inhibit_regen */ }; pcb_opfunc_t ChangeRotFunctions = { @@ -112,7 +115,8 @@ NULL, NULL, NULL, - pcb_pstkop_rotate + pcb_pstkop_rotate, + 0 /* extobj_inhibit_regen */ }; static pcb_opfunc_t ChangeThermalFunctions = { @@ -127,7 +131,8 @@ NULL, NULL, NULL, /* subc */ - pcb_pstkop_change_thermal + pcb_pstkop_change_thermal, + 0 /* extobj_inhibit_regen */ }; pcb_opfunc_t ChangeClearSizeFunctions = { @@ -142,7 +147,8 @@ NULL, NULL, pcb_subcop_change_clear_size, - pcb_pstkop_change_clear_size + pcb_pstkop_change_clear_size, + 0 /* extobj_inhibit_regen */ }; static pcb_opfunc_t ChangeNameFunctions = { @@ -157,7 +163,8 @@ NULL, NULL, pcb_subcop_change_name, - NULL /* padstack */ + NULL, /* padstack */ + 0 /* extobj_inhibit_regen */ }; static pcb_opfunc_t ChangeNonetlistFunctions = { @@ -172,7 +179,8 @@ NULL, NULL, pcb_subcop_change_nonetlist, - NULL /* padstack */ + NULL, /* padstack */ + 0 /* extobj_inhibit_regen */ }; static pcb_opfunc_t ChangeJoinFunctions = { @@ -187,7 +195,8 @@ NULL, NULL, NULL, /* subc */ - NULL /* padstack */ + NULL, /* padstack */ + 0 /* extobj_inhibit_regen */ }; static pcb_opfunc_t SetJoinFunctions = { @@ -202,7 +211,8 @@ NULL, NULL, NULL, /* subc */ - NULL /* padstack */ + NULL, /* padstack */ + 0 /* extobj_inhibit_regen */ }; static pcb_opfunc_t ClrJoinFunctions = { @@ -217,7 +227,8 @@ NULL, NULL, NULL, /* subc */ - NULL /* padstack */ + NULL, /* padstack */ + 0 /* extobj_inhibit_regen */ }; static pcb_opfunc_t ChangeRadiusFunctions = { @@ -232,7 +243,8 @@ NULL, NULL, NULL, /* subc */ - NULL /* padstack */ + NULL, /* padstack */ + 0 /* extobj_inhibit_regen */ }; static pcb_opfunc_t ChangeAngleFunctions = { @@ -247,7 +259,8 @@ NULL, NULL, NULL, /* subc */ - NULL /* padstack */ + NULL, /* padstack */ + 0 /* extobj_inhibit_regen */ }; pcb_opfunc_t ChgFlagFunctions = { @@ -262,7 +275,8 @@ NULL, NULL, pcb_subcop_change_flag, - pcb_pstkop_change_flag + pcb_pstkop_change_flag, + 0 /* extobj_inhibit_regen */ }; static pcb_opfunc_t InvalLabelFunctions = { @@ -277,7 +291,8 @@ NULL, NULL, /*pcb_subcop_invalidate_flag*/ NULL, - NULL /* padstack */ + NULL, /* padstack */ + 0 /* extobj_inhibit_regen */ }; Index: trunk/src/insert.c =================================================================== --- trunk/src/insert.c (revision 28892) +++ trunk/src/insert.c (revision 28893) @@ -55,7 +55,8 @@ pcb_ratop_insert_point, NULL, NULL, /* subc */ - NULL /* padstack */ + NULL, /* padstack */ + 0 /* extobj_inhibit_regen */ }; void *pcb_insert_point_in_object(int Type, void *Ptr1, void *Ptr2, pcb_cardinal_t * Ptr3, pcb_coord_t DX, pcb_coord_t DY, pcb_bool Force, pcb_bool insert_last) Index: trunk/src/move.c =================================================================== --- trunk/src/move.c (revision 28892) +++ trunk/src/move.c (revision 28893) @@ -61,7 +61,8 @@ NULL, NULL, pcb_subcop_move, - pcb_pstkop_move + pcb_pstkop_move, + 0 /* extobj_inhibit_regen */ }; pcb_opfunc_t MoveFunctions_noclip = { @@ -76,7 +77,8 @@ NULL, NULL, NULL, /* subc */ - pcb_pstkop_move_noclip + pcb_pstkop_move_noclip, + 0 /* extobj_inhibit_regen */ }; pcb_opfunc_t ClipFunctions = { @@ -91,7 +93,8 @@ NULL, NULL, NULL, /* subc */ - pcb_pstkop_clip + pcb_pstkop_clip, + 1 /* extobj_inhibit_regen */ }; static pcb_opfunc_t MoveToLayerFunctions = { @@ -106,7 +109,8 @@ pcb_ratop_move_to_layer, NULL, NULL, /* subc */ - NULL /* padstack */ + NULL, /* padstack */ + 0 /* extobj_inhibit_regen */ }; static pcb_opfunc_t CopyFunctions = { @@ -121,7 +125,8 @@ NULL, NULL, pcb_subcop_copy, - pcb_pstkop_copy + pcb_pstkop_copy, + 0 /* extobj_inhibit_regen */ }; Index: trunk/src/operation.c =================================================================== --- trunk/src/operation.c (revision 28892) +++ trunk/src/operation.c (revision 28893) @@ -42,7 +42,7 @@ */ void *pcb_object_operation(pcb_opfunc_t *F, pcb_opctx_t *ctx, int Type, void *Ptr1, void *Ptr2, void *Ptr3) { - pcb_any_obj_t *res = NULL, *exto; + pcb_any_obj_t *res = NULL, *exto = NULL; if (F->common_pre != NULL) { if (F->common_pre(ctx, Ptr2, Ptr3) == 1) @@ -49,7 +49,8 @@ return NULL; } - exto = pcb_extobj_float_pre(Ptr2); + if (!F->extobj_inhibit_regen) + exto = pcb_extobj_float_pre(Ptr2); switch (Type) { case PCB_OBJ_LINE: @@ -141,7 +142,10 @@ } if (F->common_pre != NULL) if (F->common_pre(ctx, (pcb_any_obj_t *)line, NULL) == 1) continue; - exto = pcb_extobj_float_pre((pcb_any_obj_t *)line); + if (F->extobj_inhibit_regen) + exto = NULL; + else + exto = pcb_extobj_float_pre((pcb_any_obj_t *)line); F->Line(ctx, layer, line); if (exto != NULL) pcb_extobj_float_geo(exto); if (F->common_post != NULL) F->common_post(ctx, (pcb_any_obj_t *)line, NULL); @@ -164,7 +168,10 @@ } if (F->common_pre != NULL) if (F->common_pre(ctx, (pcb_any_obj_t *)arc, NULL) == 1) continue; - exto = pcb_extobj_float_pre((pcb_any_obj_t *)arc); + if (F->extobj_inhibit_regen) + exto = NULL; + else + exto = pcb_extobj_float_pre((pcb_any_obj_t *)arc); F->Arc(ctx, layer, arc); if (exto != NULL) pcb_extobj_float_geo(exto); if (F->common_post != NULL) F->common_post(ctx, (pcb_any_obj_t *)arc, NULL); @@ -187,7 +194,10 @@ } if (F->common_pre != NULL) if (F->common_pre(ctx, (pcb_any_obj_t *)text, NULL) == 1) continue; - exto = pcb_extobj_float_pre((pcb_any_obj_t *)text); + if (F->extobj_inhibit_regen) + exto = NULL; + else + exto = pcb_extobj_float_pre((pcb_any_obj_t *)text); F->Text(ctx, layer, text); if (exto != NULL) pcb_extobj_float_geo(exto); if (F->common_post != NULL) F->common_post(ctx, (pcb_any_obj_t *)text, NULL); @@ -210,7 +220,10 @@ } if (F->common_pre != NULL) if (F->common_pre(ctx, (pcb_any_obj_t *)polygon, NULL) == 1) continue; - exto = pcb_extobj_float_pre((pcb_any_obj_t *)polygon); + if (F->extobj_inhibit_regen) + exto = NULL; + else + exto = pcb_extobj_float_pre((pcb_any_obj_t *)polygon); F->Polygon(ctx, layer, polygon); if (exto != NULL) pcb_extobj_float_geo(exto); if (F->common_post != NULL) F->common_post(ctx, (pcb_any_obj_t *)polygon, NULL); @@ -231,7 +244,10 @@ } if (F->common_pre != NULL) if (F->common_pre(ctx, (pcb_any_obj_t *)subc, NULL) == 1) continue; - exto = pcb_extobj_float_pre((pcb_any_obj_t *)subc); + if (F->extobj_inhibit_regen) + exto = NULL; + else + exto = pcb_extobj_float_pre((pcb_any_obj_t *)subc); F->subc(ctx, subc); if (exto != NULL) pcb_extobj_float_geo(exto); if (F->common_post != NULL) F->common_post(ctx, (pcb_any_obj_t *)subc, NULL); @@ -259,7 +275,10 @@ } if (F->common_pre != NULL) if (F->common_pre(ctx, (pcb_any_obj_t *)padstack, NULL) == 1) continue; - exto = pcb_extobj_float_pre((pcb_any_obj_t *)padstack); + if (F->extobj_inhibit_regen) + exto = NULL; + else + exto = pcb_extobj_float_pre((pcb_any_obj_t *)padstack); F->padstack(ctx, padstack); if (exto != NULL) pcb_extobj_float_geo(exto); if (F->common_post != NULL) F->common_post(ctx, (pcb_any_obj_t *)padstack, NULL); Index: trunk/src/operation.h =================================================================== --- trunk/src/operation.h (revision 28892) +++ trunk/src/operation.h (revision 28893) @@ -153,6 +153,8 @@ void *(*ArcPoint)(pcb_opctx_t *ctx, pcb_layer_t *, pcb_arc_t *, int *end_id); void *(*subc)(pcb_opctx_t *ctx, pcb_subc_t *); void *(*padstack)(pcb_opctx_t *ctx, pcb_pstk_t *); + + unsigned int extobj_inhibit_regen:1; } pcb_opfunc_t; void *pcb_object_operation(pcb_opfunc_t *F, pcb_opctx_t *ctx, int Type, void *Ptr1, void *Ptr2, void *Ptr3); Index: trunk/src/remove.c =================================================================== --- trunk/src/remove.c (revision 28892) +++ trunk/src/remove.c (revision 28893) @@ -56,7 +56,8 @@ pcb_ratop_remove, pcb_arcop_remove_point, pcb_subcop_remove, - pcb_pstkop_remove + pcb_pstkop_remove, + 0 /* extobj_inhibit_regen */ }; static pcb_opfunc_t DestroyFunctions = { @@ -72,6 +73,7 @@ NULL, pcb_subcop_destroy, pcb_pstkop_destroy, + 0 /* extobj_inhibit_regen */ }; static int remove_pre(pcb_opctx_t *ctx, pcb_any_obj_t *obj, void *ptr3) Index: trunk/src/rotate.c =================================================================== --- trunk/src/rotate.c (revision 28892) +++ trunk/src/rotate.c (revision 28893) @@ -63,7 +63,8 @@ NULL, NULL, pcb_subcop_rotate90, - pcb_pstkop_rotate90 + pcb_pstkop_rotate90, + 0 /* extobj_inhibit_regen */ }; pcb_opfunc_t RotateFunctions = { @@ -78,7 +79,8 @@ NULL, NULL, pcb_subcop_rotate, - pcb_pstkop_rotate + pcb_pstkop_rotate, + 0 /* extobj_inhibit_regen */ }; /* ---------------------------------------------------------------------------