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  galPrint->SetSheetSize( pageSizeIn );
101  const VECTOR2D pageSizeIU( milsToIU( pageSizeIn.x * 1000 ), milsToIU( pageSizeIn.y * 1000 ) );
102 
103  view->SetGAL( gal );
104  view->SetPainter( painter.get() );
105  view->SetScaleLimits( 10e9, 0.0001 );
106  view->SetScale( 1.0 );
107 
108 
109  // Set the color scheme
110  RENDER_SETTINGS* dstSettings = view->GetPainter()->GetSettings();
111  dstSettings->LoadColors( m_settings.m_colorSettings );
112 
114  {
115  for( int i = 0; i < LAYER_ID_COUNT; ++i )
116  dstSettings->SetLayerColor( i, COLOR4D::BLACK );
117  }
118  else // color enabled
119  {
120  for( int i = 0; i < LAYER_ID_COUNT; ++i )
121  {
122  // Cairo does not support translucent colors on PostScript surfaces
123  // see 'Features support by the PostScript surface' on
124  // https://www.cairographics.org/documentation/using_the_postscript_surface/
125  dstSettings->SetLayerColor( i, dstSettings->GetLayerColor( i ).WithAlpha( 1.0 ) );
126  }
127  }
128 
129  dstSettings->SetIsPrinting( true );
130 
131  setupPainter( *painter );
133 
134  auto sheetSizeMils = m_settings.m_pageInfo.GetSizeMils();
135  VECTOR2I sheetSizeIU( milsToIU( sheetSizeMils.GetWidth() ), milsToIU( sheetSizeMils.GetHeight() ) );
136  BOX2I bBox;
137 
138  // Determine printout bounding box
140  {
141  bBox = BOX2I( VECTOR2I( 0, 0 ), VECTOR2I( sheetSizeIU ) );
142  view->SetLayerVisible( LAYER_DRAWINGSHEET, true );
143  }
144  else
145  {
146  EDA_RECT targetBbox = getBoundingBox();
147  bBox = BOX2I( targetBbox.GetOrigin(), targetBbox.GetSize() );
148  view->SetLayerVisible( LAYER_DRAWINGSHEET, false );
149  }
150 
151 
152  // Fit to page
153  if( m_settings.m_scale <= 0.0 )
154  {
155  if( bBox.GetWidth() == 0 || bBox.GetHeight() == 0 )
156  {
157  // Nothing to print
158  m_settings.m_scale = 1.0;
159  }
160  else
161  {
162  double scaleX = (double) pageSizeIU.x / bBox.GetWidth();
163  double scaleY = (double) pageSizeIU.y / bBox.GetHeight();
164  m_settings.m_scale = std::min( scaleX, scaleY );
165  }
166  }
167 
168  view->SetPrintMode( 1 );
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 
183  view->SetPrintMode( 0 );
184 }
BOX2< VECTOR2I > BOX2I
Definition: box2.h:522
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:300
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:106
coord_type GetWidth() const
Definition: box2.h:197
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
#define LAYER_ID_COUNT
Must update this if you add any enums after GerbView!
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:79
void SetIsPrinting(bool isPrinting)
Handle the component boundary box.
Definition: eda_rect.h:42
coord_type GetHeight() const
Definition: box2.h:198
drawingsheet frame and titleblock
virtual void LoadColors(const COLOR_SETTINGS *aSettings)
virtual EDA_RECT getBoundingBox()=0
Returns a PAINTER instance used to draw the items.
const wxSize GetSize() const
Definition: eda_rect.h:96

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(), KIGFX::COLOR4D::WithAlpha(), VECTOR2< T >::x, and VECTOR2< T >::y.

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 206 of file board_printout.cpp.

207 {
208  aGal->SetFlip( m_settings.m_Mirror, false );
209 }
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 199 of file board_printout.cpp.

200 {
201  if( !m_settings.m_background )
203 }
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 187 of file board_printout.cpp.

188 {
189  // Disable all layers by default, let specific implementations enable required layers
190  for( int i = 0; i < KIGFX::VIEW::VIEW_MAX_LAYERS; ++i )
191  {
192  aView.SetLayerVisible( i, false );
193  aView.SetTopLayer( i, false );
195  }
196 }
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:700
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:426
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: