Index: trunk/src/change.c =================================================================== --- trunk/src/change.c (revision 12460) +++ trunk/src/change.c (revision 12461) @@ -452,7 +452,7 @@ * changes the thermals on all selected and visible pins * and/or vias. Returns pcb_true if anything has changed */ -pcb_bool pcb_chg_selected_thermals(int types, int therm_style) +pcb_bool pcb_chg_selected_thermals(int types, int therm_style, unsigned long lid) { pcb_bool change = pcb_false; pcb_opctx_t ctx; @@ -459,6 +459,7 @@ ctx.chgtherm.pcb = PCB; ctx.chgtherm.style = therm_style; + ctx.chgtherm.lid = lid; change = pcb_selected_operation(PCB, &ChangeThermalFunctions, &ctx, pcb_false, types); if (change) { @@ -975,7 +976,7 @@ * Returns pcb_true if anything is changed * */ -pcb_bool pcb_chg_obj_thermal(int Type, void *Ptr1, void *Ptr2, void *Ptr3, int therm_type) +pcb_bool pcb_chg_obj_thermal(int Type, void *Ptr1, void *Ptr2, void *Ptr3, int therm_type, unsigned long lid) { pcb_bool change; pcb_opctx_t ctx; @@ -982,6 +983,7 @@ ctx.chgtherm.pcb = PCB; ctx.chgtherm.style = therm_type; + ctx.chgtherm.lid = lid; change = (pcb_object_operation(&ChangeThermalFunctions, &ctx, Type, Ptr1, Ptr2, Ptr3) != NULL); if (change) { Index: trunk/src/change.h =================================================================== --- trunk/src/change.h (revision 12460) +++ trunk/src/change.h (revision 12461) @@ -81,7 +81,7 @@ pcb_bool pcb_chg_selected_square(int); pcb_bool pcb_set_selected_square(int); pcb_bool pcb_clr_selected_square(int); -pcb_bool pcb_chg_selected_thermals(int, int); +pcb_bool pcb_chg_selected_thermals(int types, int therm_style, unsigned long lid); pcb_bool pcb_chg_selected_hole(void); pcb_bool pcb_chg_selected_paste(void); pcb_bool pcb_chg_selected_octagon(int); @@ -89,7 +89,7 @@ pcb_bool pcb_clr_selected_octagon(int); pcb_bool pcb_chg_obj_size(int, void *, void *, void *, pcb_coord_t, pcb_bool); pcb_bool pcb_chg_obj_1st_size(int, void *, void *, void *, pcb_coord_t, pcb_bool); -pcb_bool pcb_chg_obj_thermal(int, void *, void *, void *, int); +pcb_bool pcb_chg_obj_thermal(int Type, void *Ptr1, void *Ptr2, void *Ptr3, int therm_type, unsigned long lid); pcb_bool pcb_chg_obj_clear_size(int, void *, void *, void *, pcb_coord_t, pcb_bool); pcb_bool pcb_chg_obj_2nd_size(int, void *, void *, void *, pcb_coord_t, pcb_bool, pcb_bool); pcb_bool pcb_chg_obj_mask_size(int, void *, void *, void *, pcb_coord_t, pcb_bool); Index: trunk/src/change_act.c =================================================================== --- trunk/src/change_act.c (revision 12460) +++ trunk/src/change_act.c (revision 12461) @@ -1185,20 +1185,20 @@ case F_Object: pcb_gui->get_coords("Click on object for SetThermal", &gx, &gy); if ((type = pcb_search_screen(gx, gy, PCB_CHANGETHERMAL_TYPES, &ptr1, &ptr2, &ptr3)) != PCB_TYPE_NONE) { - pcb_chg_obj_thermal(type, ptr1, ptr2, ptr3, kind); + pcb_chg_obj_thermal(type, ptr1, ptr2, ptr3, kind, INDEXOFCURRENT); pcb_undo_inc_serial(); pcb_draw(); } break; case F_SelectedPins: - pcb_chg_selected_thermals(PCB_TYPE_PIN, kind); + pcb_chg_selected_thermals(PCB_TYPE_PIN, kind, INDEXOFCURRENT); break; case F_SelectedVias: - pcb_chg_selected_thermals(PCB_TYPE_VIA, kind); + pcb_chg_selected_thermals(PCB_TYPE_VIA, kind, INDEXOFCURRENT); break; case F_Selected: case F_SelectedElements: - pcb_chg_selected_thermals(PCB_CHANGETHERMAL_TYPES, kind); + pcb_chg_selected_thermals(PCB_CHANGETHERMAL_TYPES, kind, INDEXOFCURRENT); break; default: err = 1; Index: trunk/src/obj_padstack_op.c =================================================================== --- trunk/src/obj_padstack_op.c (revision 12460) +++ trunk/src/obj_padstack_op.c (revision 12461) @@ -139,14 +139,15 @@ void *pcb_padstackop_change_thermal(pcb_opctx_t *ctx, pcb_padstack_t *ps) { + pcb_board_t *pcb = ctx->chgtherm.pcb; pcb_undo_add_obj_to_clear_poly(PCB_TYPE_PADSTACK, ps, ps, ps, pcb_false); - pcb_poly_restore_to_poly(PCB->Data, PCB_TYPE_PADSTACK, CURRENT, ps); + pcb_poly_restore_to_poly(pcb->Data, PCB_TYPE_PADSTACK, CURRENT, ps); -#warning TODO: undo + get PCB in ctx + get INDEXOFCURRENT/CURRENT in ctx - pcb_padstack_set_thermal(ps, INDEXOFCURRENT, ctx->chgtherm.style); +#warning TODO: undo + pcb_padstack_set_thermal(ps, ctx->chgtherm.lid, ctx->chgtherm.style); pcb_undo_add_obj_to_clear_poly(PCB_TYPE_PADSTACK, ps, ps, ps, pcb_true); - pcb_poly_clear_from_poly(PCB->Data, PCB_TYPE_PADSTACK, CURRENT, ps); + pcb_poly_clear_from_poly(pcb->Data, PCB_TYPE_PADSTACK, CURRENT, ps); pcb_via_invalidate_draw(ps); return ps; } Index: trunk/src/operation.h =================================================================== --- trunk/src/operation.h (revision 12460) +++ trunk/src/operation.h (revision 12461) @@ -61,7 +61,8 @@ typedef struct { pcb_board_t *pcb; - int style; + int style; /* the new bits */ + unsigned long lid; /* the layer to operate on */ } pcb_opctx_chgtherm_t; typedef struct { Index: trunk/src/tool_thermal.c =================================================================== --- trunk/src/tool_thermal.c (revision 12460) +++ trunk/src/tool_thermal.c (revision 12461) @@ -45,12 +45,12 @@ tstyle++; if (tstyle > 5) tstyle = 1; - pcb_chg_obj_thermal(type, ptr1, ptr2, ptr3, tstyle); + pcb_chg_obj_thermal(type, ptr1, ptr2, ptr3, tstyle, INDEXOFCURRENT); } else if (PCB_FLAG_THERM_GET(INDEXOFCURRENT, (pcb_pin_t *) ptr3)) - pcb_chg_obj_thermal(type, ptr1, ptr2, ptr3, 0); + pcb_chg_obj_thermal(type, ptr1, ptr2, ptr3, 0, INDEXOFCURRENT); else - pcb_chg_obj_thermal(type, ptr1, ptr2, ptr3, PCB->ThermStyle); + pcb_chg_obj_thermal(type, ptr1, ptr2, ptr3, PCB->ThermStyle, INDEXOFCURRENT); } static void tool_thermal_on_padstack(pcb_padstack_t *ps, unsigned long lid) Index: trunk/src/tool_via.c =================================================================== --- trunk/src/tool_via.c (revision 12460) +++ trunk/src/tool_via.c (revision 12461) @@ -55,7 +55,7 @@ pcb_obj_add_attribs(via, PCB->pen_attr); pcb_undo_add_obj_to_create(PCB_TYPE_VIA, via, via, via); if (pcb_gui->shift_is_pressed()) - pcb_chg_obj_thermal(PCB_TYPE_VIA, via, via, via, PCB->ThermStyle); + pcb_chg_obj_thermal(PCB_TYPE_VIA, via, via, via, PCB->ThermStyle, INDEXOFCURRENT); pcb_undo_inc_serial(); pcb_via_invalidate_draw(via); pcb_draw();