KiCad PCB EDA Suite
BOARD_PRINTOUT Class Referenceabstract

An object derived from wxPrintout to handle the necessary information to control a printer when printing a board. More...

#include <board_printout.h>

Inheritance diagram for BOARD_PRINTOUT:
GERBVIEW_PRINTOUT PCBNEW_PRINTOUT

Public Member Functions

 BOARD_PRINTOUT (const BOARD_PRINTOUT_SETTINGS &aParams, const KIGFX::VIEW *aView, const wxString &aTitle)
 
virtual ~BOARD_PRINTOUT ()
 
void GetPageInfo (int *minPage, int *maxPage, int *selPageFrom, int *selPageTo) override
 
bool HasPage (int aPage) override
 
virtual void DrawPage (const wxString &aLayerName=wxEmptyString, int aPageNum=1, int aPageCount=1)
 Print a page (or a set of pages). More...
 

Protected Member Functions

virtual int milsToIU (double aMils) const =0
 < Convert mils to internal units More...
 
virtual void setupViewLayers (KIGFX::VIEW &aView, const LSET &aLayerSet)
 Configures PAINTER object for a printout. More...
 
virtual void setupPainter (KIGFX::PAINTER &aPainter)
 Configures GAL object for a printout. More...
 
virtual void setupGal (KIGFX::GAL *aGal)
 Returns bounding box of the printed objects (excluding drawing-sheet frame) More...
 
virtual EDA_RECT getBoundingBox ()=0
 Returns a PAINTER instance used to draw the items. More...
 
virtual std::unique_ptr< KIGFX::PAINTERgetPainter (KIGFX::GAL *aGal)=0
 Source VIEW object (note that actual printing only refers to this object) More...
 

Protected Attributes

const KIGFX::VIEWm_view
 Printout parameters. More...
 
BOARD_PRINTOUT_SETTINGS m_settings
 

Detailed Description

An object derived from wxPrintout to handle the necessary information to control a printer when printing a board.

Definition at line 70 of file board_printout.h.

Constructor & Destructor Documentation

◆ BOARD_PRINTOUT()

BOARD_PRINTOUT::BOARD_PRINTOUT ( const BOARD_PRINTOUT_SETTINGS aParams,
const KIGFX::VIEW aView,
const wxString &  aTitle 
)

Definition at line 67 of file board_printout.cpp.

68  :
69  wxPrintout( aTitle ),
70  m_settings( aParams )
71 {
72  m_view = aView;
73 }
const KIGFX::VIEW * m_view
Printout parameters.
BOARD_PRINTOUT_SETTINGS m_settings

References m_view.

◆ ~BOARD_PRINTOUT()

virtual BOARD_PRINTOUT::~BOARD_PRINTOUT ( )
inlinevirtual

Definition at line 76 of file board_printout.h.

76 {}

Member Function Documentation

◆ DrawPage()

void BOARD_PRINTOUT::DrawPage ( const wxString &  aLayerName = wxEmptyString,
int  aPageNum = 1,
int  aPageCount = 1 
)
virtual

Print a page (or a set of pages).

Note
This function prepares the print parameters for the function which actually prints the draw layers.
Parameters
aLayerNamea text which can be printed as layer name.
aPageNumthe number of the current page (only used to print this value).
aPageCountthe number of pages to print (only used to print this value).

Definition at line 86 of file board_printout.cpp.

87 {
88  auto dc = GetDC();
90  auto galPrint = KIGFX::GAL_PRINT::Create( options, dc );
91  auto gal = galPrint->GetGAL();
92  auto printCtx = galPrint->GetPrintCtx();
93  auto painter = getPainter( gal );
94  std::unique_ptr<KIGFX::VIEW> view( m_view->DataReference() );
95 
96  // Target paper size
97  wxRect pageSizePx = GetLogicalPageRect();
98  const VECTOR2D pageSizeIn( (double) pageSizePx.width / dc->GetPPI().x,
99  (double) pageSizePx.height / dc->GetPPI().y );
100  const VECTOR2D pageSizeIU( milsToIU( pageSizeIn.x * 1000 ), milsToIU( pageSizeIn.y * 1000 ) );
101 
102  galPrint->SetSheetSize( pageSizeIn );
103 
104  view->SetGAL( gal );
105  view->SetPainter( painter.get() );
106  view->SetScaleLimits( 10e9, 0.0001 );
107  view->SetScale( 1.0 );
108 
109 
110  // Set the color scheme
111  RENDER_SETTINGS* dstSettings = view->GetPainter()->GetSettings();
112  dstSettings->LoadColors( m_settings.m_colorSettings );
113 
115  {
116  for( int i = 0; i < LAYER_ID_COUNT; ++i )
117  dstSettings->SetLayerColor( i, COLOR4D::BLACK );
118  }
119  else // color enabled
120  {
121  for( int i = 0; i < LAYER_ID_COUNT; ++i )
122  {
123  // Cairo does not support translucent colors on PostScript surfaces
124  // see 'Features support by the PostScript surface' on
125  // https://www.cairographics.org/documentation/using_the_postscript_surface/
126  dstSettings->SetLayerColor( i, dstSettings->GetLayerColor( i ).WithAlpha( 1.0 ) );
127  }
128  }
129 
130  dstSettings->SetIsPrinting( true );
131 
132  setupPainter( *painter );
134 
135  wxSize sheetSizeMils = m_settings.m_pageInfo.GetSizeMils();
136  VECTOR2I sheetSizeIU( milsToIU( sheetSizeMils.GetWidth() ),
137  milsToIU( sheetSizeMils.GetHeight() ) );
138  BOX2I bBox;
139 
140  // Determine printout bounding box
142  {
143  bBox = BOX2I( VECTOR2I( 0, 0 ), VECTOR2I( sheetSizeIU ) );
144  view->SetLayerVisible( LAYER_DRAWINGSHEET, true );
145  }
146  else
147  {
148  EDA_RECT targetBbox = getBoundingBox();
149  bBox = BOX2I( targetBbox.GetOrigin(), targetBbox.GetSize() );
150  view->SetLayerVisible( LAYER_DRAWINGSHEET, false );
151  }
152 
153 
154  // Fit to page
155  if( m_settings.m_scale <= 0.0 )
156  {
157  if( bBox.GetWidth() == 0 || bBox.GetHeight() == 0 )
158  {
159  // Nothing to print
160  m_settings.m_scale = 1.0;
161  }
162  else
163  {
164  double scaleX = (double) pageSizeIU.x / bBox.GetWidth();
165  double scaleY = (double) pageSizeIU.y / bBox.GetHeight();
166  m_settings.m_scale = std::min( scaleX, scaleY );
167  }
168  }
169 
170  setupGal( gal );
171  galPrint->SetNativePaperSize( pageSizeIn, printCtx->HasNativeLandscapeRotation() );
172  gal->SetLookAtPoint( bBox.Centre() );
173  gal->SetZoomFactor( m_settings.m_scale );
174 
175  gal->SetClearColor( dstSettings->GetBackgroundColor() );
176  gal->ClearScreen();
177 
178  {
179  KIGFX::GAL_DRAWING_CONTEXT ctx( gal );
180  view->Redraw();
181  }
182 }
BOX2< VECTOR2I > BOX2I
Definition: box2.h:506
const PAGE_INFO & m_pageInfo
Definition: printout.h:63
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
virtual std::unique_ptr< KIGFX::PAINTER > getPainter(KIGFX::GAL *aGal)=0
Source VIEW object (note that actual printing only refers to this object)
virtual const COLOR4D & GetBackgroundColor()=0
Return current background color settings.
const KIGFX::VIEW * m_view
Printout parameters.
const COLOR4D & GetLayerColor(int aLayer) const
Return the color used to draw a layer.
COLOR4D WithAlpha(double aAlpha) const
Return a color with the same color, but the given alpha.
Definition: color4d.h:305
LSET m_LayerSet
Layers to print.
Definition: color4d.h:44
VECTOR2< int > VECTOR2I
Definition: vector2d.h:623
BOARD_PRINTOUT_SETTINGS m_settings
double m_scale
Printing scale.
Definition: printout.h:58
COLOR_SETTINGS * m_colorSettings
The color settings to be used for printing.
Definition: printout.h:66
virtual int milsToIU(double aMils) const =0
< Convert mils to internal units
virtual void setupPainter(KIGFX::PAINTER &aPainter)
Configures GAL object for a printout.
const wxPoint GetOrigin() const
Definition: eda_rect.h:101
coord_type GetWidth() const
Definition: box2.h:180
virtual void setupGal(KIGFX::GAL *aGal)
Returns bounding box of the printed objects (excluding drawing-sheet frame)
void SetLayerColor(int aLayer, const COLOR4D &aColor)
Change the color used to draw a layer.
bool PrintBorderAndTitleBlock() const
Returns true if the drawing border and title block should be printed.
Definition: printout.h:55
const wxSize & GetSizeMils() const
Definition: page_info.h:135
drawingsheet frame and titleblock
Definition: layer_ids.h:212
virtual void setupViewLayers(KIGFX::VIEW &aView, const LSET &aLayerSet)
Configures PAINTER object for a printout.
bool m_blackWhite
Print in B&W or Color.
Definition: printout.h:60
std::unique_ptr< VIEW > DataReference() const
Return a new VIEW object that shares the same set of VIEW_ITEMs and LAYERs.
Definition: view.cpp:1439
Vec Centre() const
Definition: box2.h:63
void SetIsPrinting(bool isPrinting)
Handle the component boundary box.
Definition: eda_rect.h:42
coord_type GetHeight() const
Definition: box2.h:181
virtual void LoadColors(const COLOR_SETTINGS *aSettings)
virtual EDA_RECT getBoundingBox()=0
Returns a PAINTER instance used to draw the items.
#define LAYER_ID_COUNT
Must update this if you add any enums after GerbView!
Definition: layer_ids.h:422
const wxSize GetSize() const
Definition: eda_rect.h:91

References BLACK, BOX2< Vec >::Centre(), KIGFX::VIEW::DataReference(), KIGFX::RENDER_SETTINGS::GetBackgroundColor(), getBoundingBox(), BOX2< Vec >::GetHeight(), KIGFX::RENDER_SETTINGS::GetLayerColor(), EDA_RECT::GetOrigin(), getPainter(), EDA_RECT::GetSize(), PAGE_INFO::GetSizeMils(), BOX2< Vec >::GetWidth(), LAYER_DRAWINGSHEET, LAYER_ID_COUNT, KIGFX::RENDER_SETTINGS::LoadColors(), PRINTOUT_SETTINGS::m_blackWhite, PRINTOUT_SETTINGS::m_colorSettings, BOARD_PRINTOUT_SETTINGS::m_LayerSet, PRINTOUT_SETTINGS::m_pageInfo, PRINTOUT_SETTINGS::m_scale, m_settings, m_view, milsToIU(), PRINTOUT_SETTINGS::PrintBorderAndTitleBlock(), KIGFX::RENDER_SETTINGS::SetIsPrinting(), KIGFX::RENDER_SETTINGS::SetLayerColor(), setupGal(), setupPainter(), setupViewLayers(), and KIGFX::COLOR4D::WithAlpha().

Referenced by GERBVIEW_PRINTOUT::OnPrintPage(), and PCBNEW_PRINTOUT::OnPrintPage().

◆ getBoundingBox()

virtual EDA_RECT BOARD_PRINTOUT::getBoundingBox ( )
protectedpure virtual

Returns a PAINTER instance used to draw the items.

Implemented in PCBNEW_PRINTOUT, and GERBVIEW_PRINTOUT.

Referenced by DrawPage().

◆ GetPageInfo()

void BOARD_PRINTOUT::GetPageInfo ( int *  minPage,
int *  maxPage,
int *  selPageFrom,
int *  selPageTo 
)
override

Definition at line 76 of file board_printout.cpp.

77 {
78  *minPage = 1;
79  *selPageFrom = 1;
80 
81  *maxPage = m_settings.m_pageCount;
82  *selPageTo = m_settings.m_pageCount;
83 }
BOARD_PRINTOUT_SETTINGS m_settings
int m_pageCount
Number of pages to print.
Definition: printout.h:61

References PRINTOUT_SETTINGS::m_pageCount, and m_settings.

◆ getPainter()

virtual std::unique_ptr<KIGFX::PAINTER> BOARD_PRINTOUT::getPainter ( KIGFX::GAL aGal)
protectedpure virtual

Source VIEW object (note that actual printing only refers to this object)

Implemented in PCBNEW_PRINTOUT, and GERBVIEW_PRINTOUT.

Referenced by DrawPage().

◆ HasPage()

bool BOARD_PRINTOUT::HasPage ( int  aPage)
inlineoverride

Definition at line 80 of file board_printout.h.

81  {
82  return aPage <= m_settings.m_pageCount;
83  }
BOARD_PRINTOUT_SETTINGS m_settings
int m_pageCount
Number of pages to print.
Definition: printout.h:61

References PRINTOUT_SETTINGS::m_pageCount, and m_settings.

◆ milsToIU()

virtual int BOARD_PRINTOUT::milsToIU ( double  aMils) const
protectedpure virtual

< Convert mils to internal units

Enables layers visibility for a printout

Implemented in PCBNEW_PRINTOUT, and GERBVIEW_PRINTOUT.

Referenced by DrawPage().

◆ setupGal()

void BOARD_PRINTOUT::setupGal ( KIGFX::GAL aGal)
protectedvirtual

Returns bounding box of the printed objects (excluding drawing-sheet frame)

Reimplemented in PCBNEW_PRINTOUT, and GERBVIEW_PRINTOUT.

Definition at line 204 of file board_printout.cpp.

205 {
206  aGal->SetFlip( m_settings.m_Mirror, false );
207 }
void SetFlip(bool xAxis, bool yAxis)
Sets flipping of the screen.
BOARD_PRINTOUT_SETTINGS m_settings
bool m_Mirror
Print mirrored.

References BOARD_PRINTOUT_SETTINGS::m_Mirror, m_settings, and KIGFX::GAL::SetFlip().

Referenced by DrawPage(), GERBVIEW_PRINTOUT::setupGal(), and PCBNEW_PRINTOUT::setupGal().

◆ setupPainter()

void BOARD_PRINTOUT::setupPainter ( KIGFX::PAINTER aPainter)
protectedvirtual

Configures GAL object for a printout.

Reimplemented in PCBNEW_PRINTOUT.

Definition at line 197 of file board_printout.cpp.

198 {
199  if( !m_settings.m_background )
201 }
bool m_background
Print background color.
Definition: printout.h:62
BOARD_PRINTOUT_SETTINGS m_settings
Definition: color4d.h:48
virtual RENDER_SETTINGS * GetSettings()=0
Return a pointer to current settings that are going to be used when drawing items.
virtual void SetBackgroundColor(const COLOR4D &aColor)=0
Set the background color.

References KIGFX::PAINTER::GetSettings(), PRINTOUT_SETTINGS::m_background, m_settings, KIGFX::RENDER_SETTINGS::SetBackgroundColor(), and WHITE.

Referenced by DrawPage(), and PCBNEW_PRINTOUT::setupPainter().

◆ setupViewLayers()

void BOARD_PRINTOUT::setupViewLayers ( KIGFX::VIEW aView,
const LSET aLayerSet 
)
protectedvirtual

Configures PAINTER object for a printout.

Reimplemented in PCBNEW_PRINTOUT, and GERBVIEW_PRINTOUT.

Definition at line 185 of file board_printout.cpp.

186 {
187  // Disable all layers by default, let specific implementations enable required layers
188  for( int i = 0; i < KIGFX::VIEW::VIEW_MAX_LAYERS; ++i )
189  {
190  aView.SetLayerVisible( i, false );
191  aView.SetTopLayer( i, false );
193  }
194 }
virtual void SetTopLayer(int aLayer, bool aEnabled=true)
Set given layer to be displayed on the top or sets back the default order of layers.
Definition: view.cpp:837
static constexpr int VIEW_MAX_LAYERS
maximum number of layers that may be shown
Definition: view.h:680
Auxiliary rendering target (noncached)
Definition: definitions.h:49
void SetLayerTarget(int aLayer, RENDER_TARGET aTarget)
Change the rendering target for a particular layer.
Definition: view.h:424
void SetLayerVisible(int aLayer, bool aVisible=true)
Control the visibility of a particular layer.
Definition: view.h:387

References KIGFX::VIEW::SetLayerTarget(), KIGFX::VIEW::SetLayerVisible(), KIGFX::VIEW::SetTopLayer(), KIGFX::TARGET_NONCACHED, and KIGFX::VIEW::VIEW_MAX_LAYERS.

Referenced by DrawPage(), GERBVIEW_PRINTOUT::setupViewLayers(), and PCBNEW_PRINTOUT::setupViewLayers().

Member Data Documentation

◆ m_settings

◆ m_view

const KIGFX::VIEW* BOARD_PRINTOUT::m_view
protected

Printout parameters.

Definition at line 118 of file board_printout.h.

Referenced by BOARD_PRINTOUT(), and DrawPage().


The documentation for this class was generated from the following files: