void FOOTPRINT_EDIT_FRAME::PrintPage( wxDC* aDC, LSET aPrintMaskLayer, bool aPrintMirrorMode, void * aData) { const GR_DRAWMODE drawmode = (GR_DRAWMODE) 0; int defaultPenSize = Millimeter2iu( 0.2 ); DISPLAY_OPTIONS* displ_opts = (DISPLAY_OPTIONS*)GetDisplayOptions(); DISPLAY_OPTIONS save_opt; PRINT_PARAMETERS * printParameters = (PRINT_PARAMETERS*) aData; // can be null PRINT_PARAMETERS::DrillShapeOptT drillShapeOpt = PRINT_PARAMETERS::FULL_DRILL_SHAPE; if( printParameters ) defaultPenSize = printParameters->m_PenDefaultSize; save_opt = *displ_opts; displ_opts->m_ContrastModeDisplay = false; displ_opts->m_DisplayPadFill = true; displ_opts->m_DisplayViaFill = true; displ_opts->m_DisplayPadNum = false; bool nctmp = GetBoard()->IsElementVisible(NO_CONNECTS_VISIBLE); GetBoard()->SetElementVisibility(NO_CONNECTS_VISIBLE, false); displ_opts->m_DisplayPadIsol = false; displ_opts->m_DisplayModEdgeFill = FILLED; displ_opts->m_DisplayModTextFill = FILLED; displ_opts->m_DisplayPcbTrackFill = true; displ_opts->m_ShowTrackClearanceMode = DO_NOT_SHOW_CLEARANCE; displ_opts->m_DisplayDrawItemsFill = FILLED; displ_opts->m_DisplayZonesMode = 0; displ_opts->m_DisplayNetNamesMode = 0; m_canvas->SetPrintMirrored( aPrintMirrorMode ); // Draw footprints, this is done at last in order to print the pad holes in // white after the tracks and zones int tmp = D_PAD::m_PadSketchModePenSize; D_PAD::m_PadSketchModePenSize = defaultPenSize; wxSize pageSizeIU = GetPageSizeIU() / 2; wxPoint offset( pageSizeIU.x, pageSizeIU.y ); for( MODULE* module = GetBoard()->m_Modules; module; module = module->Next() ) { module->Move( offset ); Print_Module( m_canvas, aDC, module, drawmode, aPrintMaskLayer, drillShapeOpt ); module->Move( -offset ); } D_PAD::m_PadSketchModePenSize = tmp; m_canvas->SetPrintMirrored( false ); *displ_opts = save_opt; GetBoard()->SetElementVisibility( NO_CONNECTS_VISIBLE, nctmp ); }
void moveFootprintsInArea( CRectPlacement& aPlacementArea, std::vector <MODULE*>& aModuleList, EDA_RECT& aFreeArea, bool aFindAreaOnly ) { CSubRectArray vecSubRects; fillRectList( vecSubRects, aModuleList ); spreadRectangles( aPlacementArea, vecSubRects, aFreeArea.GetWidth(), aFreeArea.GetHeight() ); if( aFindAreaOnly ) return; for( unsigned it = 0; it < vecSubRects.size(); ++it ) { wxPoint pos( vecSubRects[it].x, vecSubRects[it].y ); pos.x *= scale; pos.y *= scale; MODULE * module = aModuleList[vecSubRects[it].n]; EDA_RECT fpBBox = module->GetFootprintRect(); wxPoint mod_pos = pos + ( module->GetPosition() - fpBBox.GetOrigin() ) + aFreeArea.GetOrigin(); module->Move( mod_pos - module->GetPosition() ); } }
void FOOTPRINT_EDIT_FRAME::PrintPage( wxDC* aDC, LSET aPrintMaskLayer, bool aPrintMirrorMode, void * aData) { GR_DRAWMODE drawmode = GR_COPY; int defaultPenSize = Millimeter2iu( 0.2 ); DISPLAY_OPTIONS* displ_opts = (DISPLAY_OPTIONS*)GetDisplayOptions(); DISPLAY_OPTIONS save_opt; PRINT_PARAMETERS * printParameters = (PRINT_PARAMETERS*) aData; // can be null PRINT_PARAMETERS::DrillShapeOptT drillShapeOpt = PRINT_PARAMETERS::FULL_DRILL_SHAPE; if( printParameters ) defaultPenSize = printParameters->m_PenDefaultSize; save_opt = *displ_opts; displ_opts->m_ContrastModeDisplay = false; displ_opts->m_DisplayPadFill = true; displ_opts->m_DisplayViaFill = true; displ_opts->m_DisplayPadNum = false; bool nctmp = GetBoard()->IsElementVisible(NO_CONNECTS_VISIBLE); GetBoard()->SetElementVisibility(NO_CONNECTS_VISIBLE, false); displ_opts->m_DisplayPadIsol = false; displ_opts->m_DisplayModEdgeFill = FILLED; displ_opts->m_DisplayModTextFill = FILLED; displ_opts->m_DisplayPcbTrackFill = true; displ_opts->m_ShowTrackClearanceMode = DO_NOT_SHOW_CLEARANCE; displ_opts->m_DisplayDrawItemsFill = FILLED; displ_opts->m_DisplayZonesMode = 0; displ_opts->m_DisplayNetNamesMode = 0; m_canvas->SetPrintMirrored( aPrintMirrorMode ); // The OR mode is used in color mode, but be aware the background *must be // BLACK. In the print page dialog, we first print in BLACK, and after // reprint in color, on the black "local" background, in OR mode the black // print is not made before, only a white page is printed if( GetGRForceBlackPenState() == false ) drawmode = GR_OR; // Draw footprints, this is done at last in order to print the pad holes in // white after the tracks and zones int tmp = D_PAD::m_PadSketchModePenSize; D_PAD::m_PadSketchModePenSize = defaultPenSize; wxSize pageSizeIU = GetPageSizeIU() / 2; wxPoint offset( pageSizeIU.x, pageSizeIU.y ); for( MODULE* module = GetBoard()->m_Modules; module; module = module->Next() ) { module->Move( offset ); Print_Module( m_canvas, aDC, module, drawmode, aPrintMaskLayer, drillShapeOpt ); module->Move( -offset ); } D_PAD::m_PadSketchModePenSize = tmp; m_canvas->SetPrintMirrored( false ); *displ_opts = save_opt; GetBoard()->SetElementVisibility( NO_CONNECTS_VISIBLE, nctmp ); }