LibrePCB Developers Documentation
Loading...
Searching...
No Matches
gerbergenerator.h
Go to the documentation of this file.
1/*
2 * LibrePCB - Professional EDA for everyone!
3 * Copyright (C) 2013 LibrePCB Developers, see AUTHORS.md for contributors.
4 * https://librepcb.org/
5 *
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef LIBREPCB_CORE_GERBERGENERATOR_H
21#define LIBREPCB_CORE_GERBERGENERATOR_H
22
23/*******************************************************************************
24 * Includes
25 ******************************************************************************/
26#include "../fileio/filepath.h"
27#include "../types/length.h"
28#include "../types/uuid.h"
29#include "gerberaperturelist.h"
30#include "gerberattribute.h"
31
32#include <QtCore>
33
34/*******************************************************************************
35 * Namespace / Forward Declarations
36 ******************************************************************************/
37namespace librepcb {
38
39class Angle;
40class GerberAttributeWriter;
41class Path;
42class Point;
43
44/*******************************************************************************
45 * Class GerberGenerator
46 ******************************************************************************/
47
51class GerberGenerator final {
52 Q_DECLARE_TR_FUNCTIONS(GerberGenerator)
53
54public:
55 // Public Types
61
62 // Constructors / Destructor
63 GerberGenerator() = delete;
64 GerberGenerator(const GerberGenerator& other) = delete;
65 GerberGenerator(const QDateTime& creationDate, const QString& projName,
66 const Uuid& projUuid, const QString& projRevision) noexcept;
67 ~GerberGenerator() noexcept;
68
69 // Getters
70 const QString& toStr() const noexcept { return mOutput; }
71
72 // Plot Methods
73 void setFileFunctionOutlines(bool plated) noexcept;
74 void setFileFunctionCopper(int layer, CopperSide side,
75 Polarity polarity) noexcept;
76 void setFileFunctionSolderMask(BoardSide side, Polarity polarity) noexcept;
77 void setFileFunctionLegend(BoardSide side, Polarity polarity) noexcept;
78 void setFileFunctionPaste(BoardSide side, Polarity polarity) noexcept;
79 void setFileFunctionGlue(BoardSide side, Polarity polarity) noexcept;
80 void setFileFunctionComponent(int layer, BoardSide side) noexcept;
81 void setLayerPolarity(Polarity p) noexcept;
82 void drawLine(const Point& start, const Point& end,
83 const UnsignedLength& width, Function function,
84 const std::optional<QString>& net,
85 const QString& component) noexcept;
86 void drawPathOutline(const Path& path, const UnsignedLength& lineWidth,
87 Function function, const std::optional<QString>& net,
88 const QString& component) noexcept;
89 void drawPathArea(const Path& path, Function function,
90 const std::optional<QString>& net,
91 const QString& component) noexcept;
92 void drawComponentOutline(const Path& path, const Angle& rot,
93 const QString& designator, const QString& value,
94 MountType mountType, const QString& manufacturer,
95 const QString& mpn, const QString& footprintName,
96 Function function) noexcept;
97 void flashCircle(const Point& pos, const PositiveLength& dia,
98 Function function, const std::optional<QString>& net,
99 const QString& component, const QString& pin,
100 const QString& signal) noexcept;
101 void flashRect(const Point& pos, const PositiveLength& w,
102 const PositiveLength& h, const UnsignedLength& radius,
103 const Angle& rot, Function function,
104 const std::optional<QString>& net, const QString& component,
105 const QString& pin, const QString& signal) noexcept;
106 void flashObround(const Point& pos, const PositiveLength& w,
107 const PositiveLength& h, const Angle& rot,
108 Function function, const std::optional<QString>& net,
109 const QString& component, const QString& pin,
110 const QString& signal) noexcept;
111 void flashOctagon(const Point& pos, const PositiveLength& w,
112 const PositiveLength& h, const UnsignedLength& radius,
113 const Angle& rot, Function function,
114 const std::optional<QString>& net, const QString& component,
115 const QString& pin, const QString& signal) noexcept;
116 void flashOutline(const Point& pos, const StraightAreaPath& path,
117 const Angle& rot, Function function,
118 const std::optional<QString>& net, const QString& component,
119 const QString& pin, const QString& signal) noexcept;
120 void flashComponent(const Point& pos, const Angle& rot,
121 const QString& designator, const QString& value,
122 MountType mountType, const QString& manufacturer,
123 const QString& mpn,
124 const QString& footprintName) noexcept;
125 void flashComponentPin(const Point& pos, const Angle& rot,
126 const QString& designator, const QString& value,
127 MountType mountType, const QString& manufacturer,
128 const QString& mpn, const QString& footprintName,
129 const QString& pin, const QString& signal,
130 bool isPin1) noexcept;
131
132 // General Methods
133 void generate();
134 void saveToFile(const FilePath& filepath) const;
135
136 // Operator Overloadings
138
139private:
140 // Private Methods
142 Function apertureFunction, const std::optional<QString>& netName,
143 const QString& componentDesignator, const QString& pinName,
144 const QString& pinSignal, const QString& componentValue,
145 const std::optional<MountType>& componentMountType,
146 const QString& componentManufacturer, const QString& componentMpn,
147 const QString& componentFootprint,
148 const std::optional<Angle>& componentRotation) noexcept;
149 void setCurrentAperture(int number) noexcept;
150 void setRegionModeOn() noexcept;
151 void setRegionModeOff() noexcept;
155 void moveToPosition(const Point& pos) noexcept;
156 void linearInterpolateToPosition(const Point& pos) noexcept;
157 void circularInterpolateToPosition(const Point& start, const Point& center,
158 const Point& end) noexcept;
159 void interpolateBetween(const Vertex& from, const Vertex& to) noexcept;
160 void flashAtPosition(const Point& pos) noexcept;
161 void printHeader() noexcept;
162 void printApertureList() noexcept;
163 void printContent() noexcept;
164 void printFooter() noexcept;
165 QString calcOutputMd5Checksum() const noexcept;
166
167 // Metadata
169
170 // Gerber Data
171 QString mOutput;
172 QString mContent;
176};
177
178/*******************************************************************************
179 * End of File
180 ******************************************************************************/
181
182} // namespace librepcb
183
184#endif
The Angle class is used to represent an angle (for example 12.75 degrees)
Definition angle.h:76
This class represents absolute, well-formatted paths to files or directories.
Definition filepath.h:127
A helper class to generate the aperture definitions for a Gerber file.
Definition gerberaperturelist.h:68
std::optional< GerberAttribute::ApertureFunction > Function
Definition gerberaperturelist.h:73
A Gerber X2 attribute.
Definition gerberattribute.h:43
MountType
Definition gerberattribute.h:52
BoardSide
Definition gerberattribute.h:50
Polarity
Definition gerberattribute.h:49
CopperSide
Definition gerberattribute.h:51
A helper class to generate Gerber X2 attributes.
Definition gerberattributewriter.h:45
The GerberGenerator class.
Definition gerbergenerator.h:51
void setFileFunctionCopper(int layer, CopperSide side, Polarity polarity) noexcept
Definition gerbergenerator.cpp:73
void saveToFile(const FilePath &filepath) const
Definition gerbergenerator.cpp:409
GerberAttribute::CopperSide CopperSide
Definition gerbergenerator.h:58
void switchToLinearInterpolationModeG01() noexcept
Definition gerbergenerator.cpp:479
void drawLine(const Point &start, const Point &end, const UnsignedLength &width, Function function, const std::optional< QString > &net, const QString &component) noexcept
Definition gerbergenerator.cpp:124
void printApertureList() noexcept
Definition gerbergenerator.cpp:562
const QString & toStr() const noexcept
Definition gerbergenerator.h:70
GerberApertureList::Function Function
Definition gerbergenerator.h:59
int mCurrentApertureNumber
Definition gerbergenerator.h:175
~GerberGenerator() noexcept
Definition gerbergenerator.cpp:62
void generate()
Definition gerbergenerator.cpp:401
void setCurrentAttributes(Function apertureFunction, const std::optional< QString > &netName, const QString &componentDesignator, const QString &pinName, const QString &pinSignal, const QString &componentValue, const std::optional< MountType > &componentMountType, const QString &componentManufacturer, const QString &componentMpn, const QString &componentFootprint, const std::optional< Angle > &componentRotation) noexcept
Definition gerbergenerator.cpp:420
GerberGenerator(const GerberGenerator &other)=delete
void linearInterpolateToPosition(const Point &pos) noexcept
Definition gerbergenerator.cpp:496
void setFileFunctionGlue(BoardSide side, Polarity polarity) noexcept
Definition gerbergenerator.cpp:97
void interpolateBetween(const Vertex &from, const Vertex &to) noexcept
Definition gerbergenerator.cpp:510
GerberAttribute::MountType MountType
Definition gerbergenerator.h:60
void moveToPosition(const Point &pos) noexcept
Definition gerbergenerator.cpp:491
void switchToCircularCcwInterpolationModeG03() noexcept
Definition gerbergenerator.cpp:487
void setLayerPolarity(Polarity p) noexcept
Definition gerbergenerator.cpp:108
void setFileFunctionSolderMask(BoardSide side, Polarity polarity) noexcept
Definition gerbergenerator.cpp:79
void setFileFunctionComponent(int layer, BoardSide side) noexcept
Definition gerbergenerator.cpp:103
void setCurrentAperture(int number) noexcept
Definition gerbergenerator.cpp:464
void printContent() noexcept
Definition gerbergenerator.cpp:568
GerberGenerator & operator=(const GerberGenerator &rhs)=delete
void flashComponent(const Point &pos, const Angle &rot, const QString &designator, const QString &value, MountType mountType, const QString &manufacturer, const QString &mpn, const QString &footprintName) noexcept
Definition gerbergenerator.cpp:354
void flashRect(const Point &pos, const PositiveLength &w, const PositiveLength &h, const UnsignedLength &radius, const Angle &rot, Function function, const std::optional< QString > &net, const QString &component, const QString &pin, const QString &signal) noexcept
Definition gerbergenerator.cpp:264
GerberAttribute::BoardSide BoardSide
Definition gerbergenerator.h:57
QString mContent
Definition gerbergenerator.h:172
void printFooter() noexcept
Definition gerbergenerator.cpp:574
QString calcOutputMd5Checksum() const noexcept
Definition gerbergenerator.cpp:583
void setFileFunctionLegend(BoardSide side, Polarity polarity) noexcept
Definition gerbergenerator.cpp:85
void setRegionModeOn() noexcept
Definition gerbergenerator.cpp:471
void flashAtPosition(const Point &pos) noexcept
Definition gerbergenerator.cpp:528
void drawPathArea(const Path &path, Function function, const std::optional< QString > &net, const QString &component) noexcept
Definition gerbergenerator.cpp:175
void printHeader() noexcept
Definition gerbergenerator.cpp:533
void flashOctagon(const Point &pos, const PositiveLength &w, const PositiveLength &h, const UnsignedLength &radius, const Angle &rot, Function function, const std::optional< QString > &net, const QString &component, const QString &pin, const QString &signal) noexcept
Definition gerbergenerator.cpp:309
void drawPathOutline(const Path &path, const UnsignedLength &lineWidth, Function function, const std::optional< QString > &net, const QString &component) noexcept
Definition gerbergenerator.cpp:145
void setFileFunctionOutlines(bool plated) noexcept
Definition gerbergenerator.cpp:69
void setRegionModeOff() noexcept
Definition gerbergenerator.cpp:475
void flashCircle(const Point &pos, const PositiveLength &dia, Function function, const std::optional< QString > &net, const QString &component, const QString &pin, const QString &signal) noexcept
Definition gerbergenerator.cpp:242
void flashComponentPin(const Point &pos, const Angle &rot, const QString &designator, const QString &value, MountType mountType, const QString &manufacturer, const QString &mpn, const QString &footprintName, const QString &pin, const QString &signal, bool isPin1) noexcept
Definition gerbergenerator.cpp:376
void circularInterpolateToPosition(const Point &start, const Point &center, const Point &end) noexcept
Definition gerbergenerator.cpp:501
void setFileFunctionPaste(BoardSide side, Polarity polarity) noexcept
Definition gerbergenerator.cpp:91
void flashOutline(const Point &pos, const StraightAreaPath &path, const Angle &rot, Function function, const std::optional< QString > &net, const QString &component, const QString &pin, const QString &signal) noexcept
Definition gerbergenerator.cpp:332
QString mOutput
Definition gerbergenerator.h:171
void drawComponentOutline(const Path &path, const Angle &rot, const QString &designator, const QString &value, MountType mountType, const QString &manufacturer, const QString &mpn, const QString &footprintName, Function function) noexcept
Definition gerbergenerator.cpp:211
void flashObround(const Point &pos, const PositiveLength &w, const PositiveLength &h, const Angle &rot, Function function, const std::optional< QString > &net, const QString &component, const QString &pin, const QString &signal) noexcept
Definition gerbergenerator.cpp:287
QScopedPointer< GerberApertureList > mApertureList
Definition gerbergenerator.h:174
QVector< GerberAttribute > mFileAttributes
Definition gerbergenerator.h:168
QScopedPointer< GerberAttributeWriter > mAttributeWriter
Definition gerbergenerator.h:173
GerberAttribute::Polarity Polarity
Definition gerbergenerator.h:56
void switchToCircularCwInterpolationModeG02() noexcept
Definition gerbergenerator.cpp:483
The Path class represents a list of vertices connected by straight lines or circular arc segments.
Definition path.h:59
The Point class is used to represent a point/coordinate/vector, for example (1.2mm; 5....
Definition point.h:78
The Uuid class is a replacement for QUuid to get UUID strings without {} braces.
Definition uuid.h:56
The Vertex class.
Definition vertex.h:43
Definition occmodel.cpp:77
type_safe::constrained_type< Length, PositiveLengthConstraint, PositiveLengthVerifier > PositiveLength
Definition length.h:810
type_safe::constrained_type< Length, UnsignedLengthConstraint, UnsignedLengthVerifier > UnsignedLength
Definition length.h:694
type_safe::constrained_type< Path, StraightAreaPathConstraint, StraightAreaPathVerifier > StraightAreaPath
Definition path.h:281