diff --git a/pcbnew/pad_draw_functions.cpp b/pcbnew/pad_draw_functions.cpp index 5da7113a8c..61881a9fd8 100644 --- a/pcbnew/pad_draw_functions.cpp +++ b/pcbnew/pad_draw_functions.cpp @@ -267,6 +267,22 @@ void D_PAD::Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, GR_DRAWMODE aDraw_mode, else color = DARKDARKGRAY; } + // If use asks for masks to be printed, then print them. + else if( screen->m_IsPrinting ) + { + if( ( IsOnLayer( B_Paste ) && brd->IsLayerVisible( B_Paste ) ) || + ( IsOnLayer( F_Paste ) && brd->IsLayerVisible( F_Paste ) ) ) + { + mask_margin = GetSolderPasteMargin(); + } + + if( ( IsOnLayer( B_Mask ) && brd->IsLayerVisible( B_Mask ) ) || + ( IsOnLayer( F_Mask ) && brd->IsLayerVisible( F_Mask ) ) ) + { + mask_margin.x = std::max( mask_margin.x, GetSolderMaskMargin() ); + mask_margin.y = std::max( mask_margin.y, GetSolderMaskMargin() ); + } + } if( ( aDraw_mode & GR_HIGHLIGHT ) && !( aDraw_mode & GR_AND ) ) color.SetToLegacyHighlightColor(); diff --git a/pcbnew/print_board_functions.cpp b/pcbnew/print_board_functions.cpp index af95e35210..3f87cdea12 100644 --- a/pcbnew/print_board_functions.cpp +++ b/pcbnew/print_board_functions.cpp @@ -139,7 +139,7 @@ void PCB_EDIT_FRAME::PrintPage( wxDC* aDC, // Set all board layers as visible, because the print dialog has itself // a layer selection, that have priority over the layer manager setup LSET save_visible_brd_layers = Pcb->GetVisibleLayers(); - Pcb->SetVisibleLayers( LSET::AllLayersMask() ); + Pcb->SetVisibleLayers( aPrintMask ); int save_visible_brd_elements = Pcb->GetVisibleElements(); Pcb->SetElementVisibility( LAYER_PAD_FR, true ); @@ -147,40 +147,11 @@ void PCB_EDIT_FRAME::PrintPage( wxDC* aDC, Pcb->SetElementVisibility( LAYER_MOD_TEXT_FR, true ); Pcb->SetElementVisibility( LAYER_MOD_TEXT_BK, true ); - if( !( aPrintMask & LSET::AllCuMask() ).any() ) - { - if( onePagePerLayer ) - { - // We can print mask layers (solder mask and solder paste) with the actual - // pad sizes. To do that, we must set ContrastModeDisplay to true and set - // the GetScreen()->m_Active_Layer to the current printed layer - displ_opts->m_ContrastModeDisplay = true; - displ_opts->m_DisplayPadFill = true; + PCB_LAYER_ID layer = aPrintMask.ExtractLayer(); - // Calculate the active layer number to print from its mask layer: - GetScreen()->m_Active_Layer = B_Cu; - - for( LAYER_NUM id = PCB_LAYER_ID_COUNT-1; id >= 0; --id ) - { - if( aPrintMask[id] ) - { - GetScreen()->m_Active_Layer = PCB_LAYER_ID( id ); - break; - } - } - - // pads on Silkscreen layer are usually plot in sketch mode: - if( GetScreen()->m_Active_Layer == B_SilkS || - GetScreen()->m_Active_Layer == F_SilkS ) - { - displ_opts->m_DisplayPadFill = false; - } - } - else - { - displ_opts->m_DisplayPadFill = false; - } - } + // pads on Silkscreen layer are usually printed in sketch mode: + if( layer == B_SilkS || layer == F_SilkS ) + displ_opts->m_DisplayPadFill = false; displ_opts->m_DisplayPadNum = false;