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
 

Enables layers visibility for a printout

More...
 
void setupGal (KIGFX::GAL *aGal) override
 

Configures GAL object for a printout

More...
 
EDA_RECT getBoundingBox () override
 

Returns bounding box of the printed objects (excluding worksheet frame)

More...
 
std::unique_ptr< KIGFX::PAINTERgetPainter (KIGFX::GAL *aGal) override
 

Returns a PAINTER instance used to draw the items.

More...
 
virtual void setupPainter (KIGFX::PAINTER &aPainter)
 

Configures PAINTER object for a printout

More...
 

Protected Attributes

const KIGFX::VIEWm_view
 

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

More...
 
BOARD_PRINTOUT_SETTINGS m_settings
 

Printout parameters

More...
 

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 40 of file gerbview_printout.cpp.

41  :
42  BOARD_PRINTOUT( aParams, aView, aTitle )
43 {
44  m_layout = aLayout;
45 }
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 prepare print parameters for the function which actually print the draw layers.

Parameters
aLayerName= a text which can be printed as layer name
aPageNum= the number of the current page (only used to print this value)
aPageCount= the number of pages to ptint (only used to print this value)

Definition at line 85 of file board_printout.cpp.

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

References BLACK, BOX2< Vec >::Centre(), KIGFX::VIEW::DataReference(), BOARD_PRINTOUT::getBoundingBox(), BOX2< Vec >::GetHeight(), EDA_RECT::GetOrigin(), BOARD_PRINTOUT::getPainter(), EDA_RECT::GetSize(), PAGE_INFO::GetSizeMils(), BOX2< Vec >::GetWidth(), LAYER_ID_COUNT, LAYER_WORKSHEET, 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(), BOARD_PRINTOUT::setupGal(), BOARD_PRINTOUT::setupPainter(), BOARD_PRINTOUT::setupViewLayers(), VECTOR2< T >::x, and VECTOR2< T >::y.

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

◆ getBoundingBox()

EDA_RECT GERBVIEW_PRINTOUT::getBoundingBox ( )
overrideprotectedvirtual

Returns bounding box of the printed objects (excluding worksheet frame)

Implements BOARD_PRINTOUT.

Definition at line 104 of file gerbview_printout.cpp.

105 {
106  return m_layout->ComputeBoundingBox();
107 }
GBR_LAYOUT * m_layout
EDA_RECT ComputeBoundingBox() const
Function ComputeBoundingBox calculates the bounding box containing all Gerber items.
Definition: gbr_layout.cpp:50

References GBR_LAYOUT::ComputeBoundingBox(), and m_layout.

◆ GetPageInfo()

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

Definition at line 75 of file board_printout.cpp.

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

References PRINTOUT_SETTINGS::m_pageCount, and BOARD_PRINTOUT::m_settings.

◆ getPainter()

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

Returns a PAINTER instance used to draw the items.

Implements BOARD_PRINTOUT.

Definition at line 110 of file gerbview_printout.cpp.

111 {
112  return std::unique_ptr<KIGFX::PAINTER>( new KIGFX::GERBVIEW_PAINTER( aGal ) );
113 }
GERBVIEW_PAINTER Contains methods for drawing GerbView-specific items.

◆ HasPage()

bool BOARD_PRINTOUT::HasPage ( int  aPage)
inlineoverrideinherited

Definition at line 78 of file board_printout.h.

79  {
80  return aPage <= m_settings.m_pageCount;
81  }
BOARD_PRINTOUT_SETTINGS m_settings
Printout parameters
int m_pageCount
Number of pages to print.
Definition: printout.h:54

References PRINTOUT_SETTINGS::m_pageCount, and BOARD_PRINTOUT::m_settings.

◆ milsToIU()

int GERBVIEW_PRINTOUT::milsToIU ( double  aMils) const
overrideprotectedvirtual

Convert mils to internal units

Implements BOARD_PRINTOUT.

Definition at line 82 of file gerbview_printout.cpp.

83 {
84  return KiROUND( IU_PER_MILS * aMils );
85 }
#define IU_PER_MILS
Definition: plotter.cpp:138
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:68

References IU_PER_MILS, and KiROUND().

◆ OnPrintPage()

bool GERBVIEW_PRINTOUT::OnPrintPage ( int  aPage)
override

Definition at line 48 of file gerbview_printout.cpp.

49 {
50  // Store the layerset, as it is going to be modified below and the original settings are needed
51  LSET lset = m_settings.m_layerSet;
52 
53  // The gerber filename of the page to print will be printed to the worksheet.
54  // Find this filename:
55  // Find the graphic layer number for the page to print
56  LSEQ seq = lset.UIOrder();
57  wxCHECK( unsigned( aPage - 1 ) < seq.size(), false );
58  auto layerId = seq[aPage - 1];
59 
60  // In gerbview, draw layers are always printed on separate pages
61  // because handling negative objects when using only one page is tricky
62 
63  // Enable only one layer to create a printout
64  m_settings.m_layerSet = LSET( layerId );
65 
67  GERBER_FILE_IMAGE* gbrImage = gbrImgList.GetGbrImage( layerId );
68  wxString gbr_filename;
69 
70  if( gbrImage )
71  gbr_filename = gbrImage->m_FileName;
72 
73  DrawPage( gbr_filename, aPage, m_settings.m_pageCount );
74 
75  // Restore the original layer set, so the next page can be printed
76  m_settings.m_layerSet = lset;
77 
78  return true;
79 }
GERBER_FILE_IMAGE holds the Image data and parameters for one gerber file and layer parameters (TODO:...
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
Printout parameters
LSET is a set of PCB_LAYER_IDs.
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.
int m_pageCount
Number of pages to print.
Definition: printout.h:54
LSEQ UIOrder() const
Definition: lset.cpp:839
LSET m_layerSet
Layers to print.

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

Configures GAL object for a printout

Reimplemented from BOARD_PRINTOUT.

Definition at line 97 of file gerbview_printout.cpp.

98 {
100  aGal->SetWorldUnitLength( 1.0/IU_PER_MM /* 10 nm */ / 25.4 /* 1 inch in mm */ );
101 }
static constexpr double IU_PER_MM
Mock up a conversion function.
virtual void setupGal(KIGFX::GAL *aGal)
Configures GAL object for a printout
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 PAINTER object for a printout

Reimplemented in PCBNEW_PRINTOUT.

Definition at line 196 of file board_printout.cpp.

197 {
198  if( !m_settings.m_background )
200 }
bool m_background
Print background color.
Definition: printout.h:55
BOARD_PRINTOUT_SETTINGS m_settings
Printout parameters
Definition: color4d.h:48
virtual RENDER_SETTINGS * GetSettings()=0
Function GetAdapter Returns pointer to current settings that are going to be used when drawing items.
virtual void SetBackgroundColor(const COLOR4D &aColor)=0
Sets 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

Enables layers visibility for a printout

Reimplemented from BOARD_PRINTOUT.

Definition at line 88 of file gerbview_printout.cpp.

89 {
90  BOARD_PRINTOUT::setupViewLayers( aView, aLayerSet );
91 
92  for( LSEQ layerSeq = m_settings.m_layerSet.Seq(); layerSeq; ++layerSeq )
93  aView.SetLayerVisible( GERBVIEW_LAYER_ID_START + *layerSeq, true );
94 }
LSEQ Seq(const PCB_LAYER_ID *aWishListSequence, unsigned aCount) const
Function Seq returns an LSEQ from the union of this LSET and a desired sequence.
Definition: lset.cpp:377
BOARD_PRINTOUT_SETTINGS m_settings
Printout parameters
void SetLayerVisible(int aLayer, bool aVisible=true)
Function SetLayerVisible() Controls the visibility of a particular layer.
Definition: view.h:399
LSEQ is a sequence (and therefore also a set) of PCB_LAYER_IDs.
virtual void setupViewLayers(KIGFX::VIEW &aView, const LSET &aLayerSet)
Enables layers visibility for a printout
LSET m_layerSet
Layers to print.

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

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

Definition at line 114 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: