File: pcbnew_printout.h

package info (click to toggle)
kicad 9.0.3%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 770,320 kB
  • sloc: cpp: 961,692; ansic: 121,001; xml: 66,428; python: 18,387; sh: 1,010; awk: 301; asm: 292; makefile: 227; javascript: 167; perl: 10
file content (114 lines) | stat: -rw-r--r-- 3,327 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/*
 * Copyright (C) 2018 CERN
 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
 *
 * @author Maciej Suminski <maciej.suminski@cern.ch>
 *
 * This program is free software: you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation, either version 3 of the License, or (at your
 * option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef PCBNEW_PRINTOUT_H
#define PCBNEW_PRINTOUT_H

#include <board_printout.h>
#include <lset.h>
#include <pcb_painter.h>
#include <plotprint_opts.h>

class BOARD;

struct PCBNEW_PRINTOUT_SETTINGS : BOARD_PRINTOUT_SETTINGS
{
    PCBNEW_PRINTOUT_SETTINGS( const PAGE_INFO& aPageInfo );

    enum DRILL_MARKS m_DrillMarks;

    enum PAGINATION_T {
        LAYER_PER_PAGE,
        ALL_LAYERS
    } m_Pagination;

    bool m_PrintEdgeCutsOnAllPages;  ///< Print board outline on each page
    bool m_AsItemCheckboxes;         ///< Honor checkboxes in the Items tab of the Layers Manager

    void Load( APP_SETTINGS_BASE* aConfig ) override;
    void Save( APP_SETTINGS_BASE* aConfig ) override;
};


class PCBNEW_PRINTOUT : public BOARD_PRINTOUT
{
public:
    PCBNEW_PRINTOUT( BOARD* aBoard, const PCBNEW_PRINTOUT_SETTINGS& aParams,
                     const KIGFX::VIEW* aView, const wxString& aTitle );

    bool OnPrintPage( int aPage ) override;

protected:
    int milsToIU( double aMils ) const override;

    void setupViewLayers( KIGFX::VIEW& aView, const LSET& aLayerSet ) override;

    void setupPainter( KIGFX::PAINTER& aPainter ) override;

    void setupGal( KIGFX::GAL* aGal ) override;

    BOX2I getBoundingBox() override;

    std::unique_ptr<KIGFX::PAINTER> getPainter( KIGFX::GAL* aGal ) override;

private:
    BOARD*                   m_board;
    PCBNEW_PRINTOUT_SETTINGS m_pcbnewSettings;
};


namespace KIGFX {

/**
 * Special flavor of PCB_PAINTER that contains modifications to handle printing options.
 */
class PCB_PRINT_PAINTER : public PCB_PAINTER
{
public:
    PCB_PRINT_PAINTER( GAL* aGal );

    /**
     * Set drill marks visibility and options.
     *
     * @param aRealSize when enabled, drill marks represent actual holes. Otherwise aSize
     *                  parameter is used.
     * @param aSize is drill mark size (internal units), valid only when aRealSize == false.
     */
    void SetDrillMarks( bool aRealSize, unsigned int aSize = 0 )
    {
        m_drillMarkReal = aRealSize;
        m_drillMarkSize = aSize;
    }

protected:
    PAD_DRILL_SHAPE getDrillShape( const PAD* aPad ) const override;

    SHAPE_SEGMENT getPadHoleShape( const PAD* aPad ) const override;

    int getViaDrillSize( const PCB_VIA* aVia ) const override;

protected:
    bool m_drillMarkReal;    ///< Actual hole size or user-specified size for drill marks
    int  m_drillMarkSize;    ///< User-specified size (in internal units)
};

}; // namespace KIGFX

#endif /* PCBNEW_PRINTOUT_H */