KiCad PCB EDA Suite
GERBVIEW_PRINTOUT Class Reference

#include <gerbview_printout.h>

Inheritance diagram for GERBVIEW_PRINTOUT:
BOARD_PRINTOUT

Public Member Functions

 GERBVIEW_PRINTOUT (GBR_LAYOUT *aLayout, const BOARD_PRINTOUT_SETTINGS &aParams, const KIGFX::VIEW *aView, const wxString &aTitle)
 
bool OnPrintPage (int aPage) override
 
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

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

Protected Attributes

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

Private Attributes

GBR_LAYOUTm_layout
 

Detailed Description

Definition at line 27 of file gerbview_printout.h.

Constructor & Destructor Documentation

◆ GERBVIEW_PRINTOUT()

GERBVIEW_PRINTOUT::GERBVIEW_PRINTOUT ( GBR_LAYOUT aLayout,
const BOARD_PRINTOUT_SETTINGS aParams,
const KIGFX::VIEW aView,
const wxString &  aTitle 
)

Definition at line 36 of file gerbview_printout.cpp.

37  :
38  BOARD_PRINTOUT( aParams, aView, aTitle )
39 {
40  m_layout = aLayout;
41 }
GBR_LAYOUT * m_layout
BOARD_PRINTOUT(const BOARD_PRINTOUT_SETTINGS &aParams, const KIGFX::VIEW *aView, const wxString &aTitle)

References m_layout.

Member Function Documentation

◆ DrawPage()

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

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:314
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:213
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:1448
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:424
const wxSize GetSize() const
Definition: eda_rect.h:91

References BLACK, BOX2< Vec >::Centre(), KIGFX::VIEW::DataReference(), KIGFX::RENDER_SETTINGS::GetBackgroundColor(), BOARD_PRINTOUT::getBoundingBox(), BOX2< Vec >::GetHeight(), KIGFX::RENDER_SETTINGS::GetLayerColor(), EDA_RECT::GetOrigin(), BOARD_PRINTOUT::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, BOARD_PRINTOUT::m_settings, BOARD_PRINTOUT::m_view, BOARD_PRINTOUT::milsToIU(), PRINTOUT_SETTINGS::PrintBorderAndTitleBlock(), KIGFX::RENDER_SETTINGS::SetIsPrinting(), KIGFX::RENDER_SETTINGS::SetLayerColor(), BOARD_PRINTOUT::setupGal(), BOARD_PRINTOUT::setupPainter(), BOARD_PRINTOUT::setupViewLayers(), and KIGFX::COLOR4D::WithAlpha().

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

◆ getBoundingBox()

EDA_RECT GERBVIEW_PRINTOUT::getBoundingBox ( )
overrideprotectedvirtual

Returns a PAINTER instance used to draw the items.

Implements BOARD_PRINTOUT.

Definition at line 97 of file gerbview_printout.cpp.

98 {
99  return m_layout->ComputeBoundingBox();
100 }
GBR_LAYOUT * m_layout
EDA_RECT ComputeBoundingBox() const
Calculate the bounding box containing all Gerber items.
Definition: gbr_layout.cpp:47

References GBR_LAYOUT::ComputeBoundingBox(), and m_layout.

◆ GetPageInfo()

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

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 BOARD_PRINTOUT::m_settings.

◆ getPainter()

std::unique_ptr< KIGFX::PAINTER > GERBVIEW_PRINTOUT::getPainter ( KIGFX::GAL aGal)
overrideprotectedvirtual

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

Implements BOARD_PRINTOUT.

Definition at line 103 of file gerbview_printout.cpp.

104 {
105  return std::make_unique<KIGFX::GERBVIEW_PAINTER>( aGal );
106 }

◆ HasPage()

bool BOARD_PRINTOUT::HasPage ( int  aPage)
inlineoverrideinherited

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 BOARD_PRINTOUT::m_settings.

◆ milsToIU()

int GERBVIEW_PRINTOUT::milsToIU ( double  aMils) const
overrideprotectedvirtual

< Convert mils to internal units

Enables layers visibility for a printout

Implements BOARD_PRINTOUT.

Definition at line 75 of file gerbview_printout.cpp.

76 {
77  return KiROUND( IU_PER_MILS * aMils );
78 }
#define IU_PER_MILS
Definition: plotter.cpp:136
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:73

References IU_PER_MILS, and KiROUND().

◆ OnPrintPage()

bool GERBVIEW_PRINTOUT::OnPrintPage ( int  aPage)
override

Definition at line 44 of file gerbview_printout.cpp.

45 {
46  // Store the layerset, as it is going to be modified below and the original settings are needed
47  LSET lset = m_settings.m_LayerSet;
48 
49  LSEQ seq = lset.UIOrder();
50  wxCHECK( unsigned( aPage - 1 ) < seq.size(), false );
51  auto layerId = seq[aPage - 1];
52 
53  // In gerbview, draw layers are always printed on separate pages because handling negative
54  // objects when using only one page is tricky
55 
56  // Enable only one layer to create a printout
57  m_settings.m_LayerSet = LSET( layerId );
58 
60  GERBER_FILE_IMAGE* gbrImage = gbrImgList.GetGbrImage( layerId );
61  wxString gbr_filename;
62 
63  if( gbrImage )
64  gbr_filename = gbrImage->m_FileName;
65 
66  DrawPage( gbr_filename, aPage, m_settings.m_pageCount );
67 
68  // Restore the original layer set, so the next page can be printed
69  m_settings.m_LayerSet = lset;
70 
71  return true;
72 }
Hold the image data and parameters for one gerber file and layer parameters.
LSET m_LayerSet
Layers to print.
virtual void DrawPage(const wxString &aLayerName=wxEmptyString, int aPageNum=1, int aPageCount=1)
Print a page (or a set of pages).
GERBER_FILE_IMAGE_LIST is a helper class to handle a list of GERBER_FILE_IMAGE files which are loaded...
BOARD_PRINTOUT_SETTINGS m_settings
LSET is a set of PCB_LAYER_IDs.
Definition: layer_ids.h:504
GERBER_FILE_IMAGE * GetGbrImage(int aIdx)
static GERBER_FILE_IMAGE_LIST & GetImagesList()
LSEQ is a sequence (and therefore also a set) of PCB_LAYER_IDs.
Definition: layer_ids.h:465
int m_pageCount
Number of pages to print.
Definition: printout.h:61
LSEQ UIOrder() const
Definition: lset.cpp:895

References BOARD_PRINTOUT::DrawPage(), GERBER_FILE_IMAGE_LIST::GetGbrImage(), GERBER_FILE_IMAGE_LIST::GetImagesList(), GERBER_FILE_IMAGE::m_FileName, BOARD_PRINTOUT_SETTINGS::m_LayerSet, PRINTOUT_SETTINGS::m_pageCount, BOARD_PRINTOUT::m_settings, and LSET::UIOrder().

◆ setupGal()

void GERBVIEW_PRINTOUT::setupGal ( KIGFX::GAL aGal)
overrideprotectedvirtual

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

Reimplemented from BOARD_PRINTOUT.

Definition at line 90 of file gerbview_printout.cpp.

91 {
93  aGal->SetWorldUnitLength( 1.0/IU_PER_MM /* 10 nm */ / 25.4 /* 1 inch in mm */ );
94 }
static constexpr double IU_PER_MM
Mock up a conversion function.
virtual void setupGal(KIGFX::GAL *aGal)
Returns bounding box of the printed objects (excluding drawing-sheet frame)
void SetWorldUnitLength(double aWorldUnitLength)
Set the unit length.

References IU_PER_MM, BOARD_PRINTOUT::setupGal(), and KIGFX::GAL::SetWorldUnitLength().

◆ setupPainter()

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

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, BOARD_PRINTOUT::m_settings, KIGFX::RENDER_SETTINGS::SetBackgroundColor(), and WHITE.

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

◆ setupViewLayers()

void GERBVIEW_PRINTOUT::setupViewLayers ( KIGFX::VIEW aView,
const LSET aLayerSet 
)
overrideprotectedvirtual

Configures PAINTER object for a printout.

Reimplemented from BOARD_PRINTOUT.

Definition at line 81 of file gerbview_printout.cpp.

82 {
83  BOARD_PRINTOUT::setupViewLayers( aView, aLayerSet );
84 
85  for( LSEQ layerSeq = m_settings.m_LayerSet.Seq(); layerSeq; ++layerSeq )
86  aView.SetLayerVisible( GERBVIEW_LAYER_ID_START + *layerSeq, true );
87 }
LSET m_LayerSet
Layers to print.
LSEQ Seq(const PCB_LAYER_ID *aWishListSequence, unsigned aCount) const
Return an LSEQ from the union of this LSET and a desired sequence.
Definition: lset.cpp:411
BOARD_PRINTOUT_SETTINGS m_settings
void SetLayerVisible(int aLayer, bool aVisible=true)
Control the visibility of a particular layer.
Definition: view.h:388
LSEQ is a sequence (and therefore also a set) of PCB_LAYER_IDs.
Definition: layer_ids.h:465
virtual void setupViewLayers(KIGFX::VIEW &aView, const LSET &aLayerSet)
Configures PAINTER object for a printout.

References GERBVIEW_LAYER_ID_START, BOARD_PRINTOUT_SETTINGS::m_LayerSet, BOARD_PRINTOUT::m_settings, LSET::Seq(), KIGFX::VIEW::SetLayerVisible(), and BOARD_PRINTOUT::setupViewLayers().

Member Data Documentation

◆ m_layout

GBR_LAYOUT* GERBVIEW_PRINTOUT::m_layout
private

Definition at line 47 of file gerbview_printout.h.

Referenced by GERBVIEW_PRINTOUT(), and getBoundingBox().

◆ m_settings

◆ m_view

const KIGFX::VIEW* BOARD_PRINTOUT::m_view
protectedinherited

Printout parameters.

Definition at line 118 of file board_printout.h.

Referenced by BOARD_PRINTOUT::BOARD_PRINTOUT(), and BOARD_PRINTOUT::DrawPage().


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