LibrePCB Developers Documentation
Loading...
Searching...
No Matches
graphicsoutputjob.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_GRAPHICSOUTPUTJOB_H
21#define LIBREPCB_CORE_GRAPHICSOUTPUTJOB_H
22
23/*******************************************************************************
24 * Includes
25 ******************************************************************************/
26#include "../export/graphicsexportsettings.h"
27#include "../types/simplestring.h"
28#include "../workspace/theme.h"
29#include "outputjob.h"
30
31#include <QtCore>
32#include <QtGui>
33
34#include <memory>
35#include <optional>
36
37/*******************************************************************************
38 * Namespace / Forward Declarations
39 ******************************************************************************/
40namespace librepcb {
41
42/*******************************************************************************
43 * Class GraphicsOutputJob
44 ******************************************************************************/
45
49class GraphicsOutputJob final : public OutputJob {
50 Q_DECLARE_TR_FUNCTIONS(GraphicsOutputJob)
51
52public:
55
56 struct Content {
57 // Types
67 enum class Type {
69 Board,
71 AssemblyGuide, // Reserved for future use.
72 };
73
74 // Common options.
76 QString title;
77 std::optional<QString> pageSizeKey; // nullopt = auto
83 bool rotate;
84 bool mirror;
85 std::optional<UnsignedRatio> scale;
90 QMap<QString, QColor> layers;
93
94 // Arbitrary options for forward compatibility in case we really need to
95 // add new settings in a minor release. Supported options:
96 // - none
97 QMap<QString, QList<SExpression>> options;
98
99 Content(Preset preset) noexcept
101 title(),
102 pageSizeKey(std::nullopt),
104 marginLeft(10000000), // 10mm
105 marginTop(10000000), // 10mm
106 marginRight(10000000), // 10mm
107 marginBottom(10000000), // 10mm
108 rotate(false),
109 mirror(false),
110 scale(std::nullopt), // Fit in page
111 pixmapDpi(600),
112 monochrome(false),
113 backgroundColor(Qt::transparent),
114 minLineWidth(100000),
115 layers(),
116 boards(BoardSet::set({std::nullopt})),
117 assemblyVariants(AssemblyVariantSet::set({std::nullopt})),
118 options() {
119 QSet<QString> enabledLayers;
120 if (preset == Preset::Schematic) {
122 title = tr("Schematic");
123 boards = BoardSet::set({std::nullopt});
124 assemblyVariants = AssemblyVariantSet::set({std::nullopt});
125 enabledLayers = {
142 };
143 } else if (preset != Preset::None) {
144 if (preset == Preset::BoardAssemblyTop) {
146 title = tr("Assembly Top");
147 mirror = false;
148 } else if (preset == Preset::BoardAssemblyBottom) {
150 title = tr("Assembly Bottom");
151 mirror = true;
152 } else if (preset == Preset::BoardRenderingTop) {
154 title = tr("Rendering Top");
155 mirror = false;
156 } else if (preset == Preset::BoardRenderingBottom) {
158 title = tr("Rendering Bottom");
159 mirror = true;
160 } else {
162 title = tr("Board");
163 mirror = false;
164 }
165 boards = BoardSet::onlyDefault();
166 assemblyVariants = AssemblyVariantSet::set({std::nullopt});
167 if (preset == Preset::BoardRenderingTop) {
168 enabledLayers = {
173 };
174 } else if (preset == Preset::BoardRenderingBottom) {
175 enabledLayers = {
180 };
181 } else {
182 enabledLayers = {
192 };
193 if (preset != Preset::BoardAssemblyBottom) {
194 enabledLayers += {
200 };
201 }
202 if (preset != Preset::BoardAssemblyTop) {
203 enabledLayers += {
209 };
210 }
211 if (preset == Preset::BoardImage) {
212 enabledLayers += {
216 };
217 }
218 }
219 }
220 GraphicsExportSettings defaultSettings;
221 if ((preset == Preset::BoardRenderingTop) ||
222 (preset == Preset::BoardRenderingBottom)) {
223 defaultSettings.loadBoardRenderingColors(0);
224 }
225 foreach (const auto& pair, defaultSettings.getColors()) {
226 if (enabledLayers.contains(pair.first)) {
227 layers.insert(pair.first, pair.second);
228 }
229 }
230 }
231 Content(const Content& other) = default;
232 Content& operator=(const Content& rhs) = default;
233 bool operator==(const Content& rhs) const noexcept {
234 return (type == rhs.type) //
235 && (title == rhs.title) //
236 && (pageSizeKey == rhs.pageSizeKey) // break
237 && (orientation == rhs.orientation) // break
238 && (marginLeft == rhs.marginLeft) // break
239 && (marginTop == rhs.marginTop) // break
240 && (marginRight == rhs.marginRight) // break
241 && (marginBottom == rhs.marginBottom) // break
242 && (rotate == rhs.rotate) // break
243 && (mirror == rhs.mirror) // break
244 && (scale == rhs.scale) // break
245 && (pixmapDpi == rhs.pixmapDpi) // break
246 && (monochrome == rhs.monochrome) // break
247 && (backgroundColor == rhs.backgroundColor) // break
248 && (minLineWidth == rhs.minLineWidth) // break
249 && (layers == rhs.layers) // break
250 && (boards == rhs.boards) // break
251 && (assemblyVariants == rhs.assemblyVariants) // break
252 && (options == rhs.options) // break
253 ;
254 }
255 bool operator!=(const Content& rhs) const noexcept {
256 return !(*this == rhs);
257 }
258 };
259
260 // Constructors / Destructor
261 GraphicsOutputJob(const GraphicsOutputJob& other) noexcept;
262 explicit GraphicsOutputJob(const SExpression& node);
263 virtual ~GraphicsOutputJob() noexcept;
264
265 // Getters
266 virtual QString getTypeTr() const noexcept override;
267 virtual QIcon getTypeIcon() const noexcept override;
268 const SimpleString& getDocumentTitle() const noexcept {
269 return mDocumentTitle;
270 }
271 const QList<Content> getContent() const noexcept { return mContent; }
272 const QString& getOutputPath() const noexcept { return mOutputPath; }
273
274 // Setters
275 void setDocumentTitle(const SimpleString& title) noexcept;
276 void setContent(const QList<Content>& content) noexcept;
277 void setOutputPath(const QString& path) noexcept;
278
279 // General Methods
280 static QString getTypeName() noexcept { return "graphics"; }
281 static QString getTypeTrStatic() noexcept { return tr("PDF/Image"); }
282 virtual std::shared_ptr<OutputJob> cloneShared() const noexcept override;
283
284 // Operator Overloadings
285 GraphicsOutputJob& operator=(const GraphicsOutputJob& rhs) = delete;
286
287 // Static Methods
288 static std::shared_ptr<GraphicsOutputJob> schematicPdf() noexcept;
289 static std::shared_ptr<GraphicsOutputJob> boardAssemblyPdf() noexcept;
290 static std::shared_ptr<GraphicsOutputJob> boardRenderingPdf() noexcept;
291
292private: // Methods
293 GraphicsOutputJob() noexcept;
294 virtual void serializeDerived(SExpression& root) const override;
295 virtual bool equals(const OutputJob& rhs) const noexcept override;
296
297private: // Data
300 QString mOutputPath;
301};
302
303/*******************************************************************************
304 * End of File
305 ******************************************************************************/
306
307} // namespace librepcb
308
309#endif
Orientation
Definition graphicsexportsettings.h:54
PDF/Image output job.
Definition graphicsoutputjob.h:49
QList< Content > mContent
Definition graphicsoutputjob.h:299
SimpleString mDocumentTitle
Definition graphicsoutputjob.h:298
virtual QString getTypeTr() const noexcept override
Definition graphicsoutputjob.cpp:141
void setOutputPath(const QString &path) noexcept
Definition graphicsoutputjob.cpp:173
ObjectSet< std::optional< Uuid > > BoardSet
Definition graphicsoutputjob.h:53
virtual bool equals(const OutputJob &rhs) const noexcept override
Definition graphicsoutputjob.cpp:276
void setContent(const QList< Content > &content) noexcept
Definition graphicsoutputjob.cpp:166
static QString getTypeName() noexcept
Definition graphicsoutputjob.h:280
const SimpleString & getDocumentTitle() const noexcept
Definition graphicsoutputjob.h:268
static std::shared_ptr< GraphicsOutputJob > boardRenderingPdf() noexcept
Definition graphicsoutputjob.cpp:213
static std::shared_ptr< GraphicsOutputJob > boardAssemblyPdf() noexcept
Definition graphicsoutputjob.cpp:202
virtual ~GraphicsOutputJob() noexcept
Definition graphicsoutputjob.cpp:134
static QString getTypeTrStatic() noexcept
Definition graphicsoutputjob.h:281
QString mOutputPath
Definition graphicsoutputjob.h:300
virtual QIcon getTypeIcon() const noexcept override
Definition graphicsoutputjob.cpp:145
virtual void serializeDerived(SExpression &root) const override
Definition graphicsoutputjob.cpp:227
const QString & getOutputPath() const noexcept
Definition graphicsoutputjob.h:272
ObjectSet< std::optional< Uuid > > AssemblyVariantSet
Definition graphicsoutputjob.h:54
virtual std::shared_ptr< OutputJob > cloneShared() const noexcept override
Definition graphicsoutputjob.cpp:184
GraphicsOutputJob() noexcept
Definition graphicsoutputjob.cpp:74
void setDocumentTitle(const SimpleString &title) noexcept
Definition graphicsoutputjob.cpp:159
const QList< Content > getContent() const noexcept
Definition graphicsoutputjob.h:271
static std::shared_ptr< GraphicsOutputJob > schematicPdf() noexcept
Definition graphicsoutputjob.cpp:192
Base class for all output job types.
Definition outputjob.h:50
The SExpression class.
Definition sexpression.h:69
Definition occmodel.cpp:77
type_safe::constrained_type< Length, UnsignedLengthConstraint, UnsignedLengthVerifier > UnsignedLength
Definition length.h:694
type_safe::constrained_type< QString, SimpleStringConstraint, SimpleStringVerifier > SimpleString
Definition simplestring.h:79
Definition uuid.h:186
Definition graphicsoutputjob.h:56
bool mirror
Definition graphicsoutputjob.h:84
Type
Definition graphicsoutputjob.h:67
QMap< QString, QList< SExpression > > options
Definition graphicsoutputjob.h:97
bool rotate
Definition graphicsoutputjob.h:83
UnsignedLength marginBottom
Definition graphicsoutputjob.h:82
bool monochrome
Definition graphicsoutputjob.h:87
std::optional< QString > pageSizeKey
Definition graphicsoutputjob.h:77
QColor backgroundColor
Definition graphicsoutputjob.h:88
UnsignedLength minLineWidth
Definition graphicsoutputjob.h:89
std::optional< UnsignedRatio > scale
Definition graphicsoutputjob.h:85
AssemblyVariantSet assemblyVariants
Definition graphicsoutputjob.h:92
Content(Preset preset) noexcept
Definition graphicsoutputjob.h:99
Content(const Content &other)=default
uint pixmapDpi
Definition graphicsoutputjob.h:86
bool operator==(const Content &rhs) const noexcept
Definition graphicsoutputjob.h:233
UnsignedLength marginTop
Definition graphicsoutputjob.h:80
Content & operator=(const Content &rhs)=default
UnsignedLength marginLeft
Definition graphicsoutputjob.h:79
QString title
Definition graphicsoutputjob.h:76
bool operator!=(const Content &rhs) const noexcept
Definition graphicsoutputjob.h:255
Type type
Definition graphicsoutputjob.h:75
GraphicsExportSettings::Orientation orientation
Definition graphicsoutputjob.h:78
QMap< QString, QColor > layers
Definition graphicsoutputjob.h:90
Preset
Definition graphicsoutputjob.h:58
BoardSet boards
Definition graphicsoutputjob.h:91
UnsignedLength marginRight
Definition graphicsoutputjob.h:81
Definition outputjob.h:65
static constexpr const char * sSchematicImageBorders
Definition theme.h:67
static constexpr const char * sBoardPlatedCutouts
Definition theme.h:88
static constexpr const char * sSchematicPinNumbers
Definition theme.h:80
static constexpr const char * sSchematicBusLabels
Definition theme.h:66
static constexpr const char * sBoardCopperTop
Definition theme.h:125
static constexpr const char * sSchematicComments
Definition theme.h:69
static constexpr const char * sBoardGrabAreasTop
Definition theme.h:111
static constexpr const char * sSchematicGrabAreas
Definition theme.h:72
static constexpr const char * sBoardDocumentationBot
Definition theme.h:106
static constexpr const char * sBoardValuesTop
Definition theme.h:101
static constexpr const char * sSchematicDocumentation
Definition theme.h:68
static constexpr const char * sBoardDocumentationTop
Definition theme.h:105
static constexpr const char * sSchematicPinNames
Definition theme.h:79
static constexpr const char * sSchematicPinLines
Definition theme.h:78
static constexpr const char * sBoardDocumentation
Definition theme.h:96
static constexpr const char * sBoardValuesBot
Definition theme.h:102
static constexpr const char * sSchematicNames
Definition theme.h:74
static constexpr const char * sBoardNamesTop
Definition theme.h:99
static constexpr const char * sBoardMeasures
Definition theme.h:94
static constexpr const char * sBoardGrabAreasBot
Definition theme.h:112
static constexpr const char * sBoardNamesBot
Definition theme.h:100
static constexpr const char * sBoardPads
Definition theme.h:90
static constexpr const char * sBoardStopMaskTop
Definition theme.h:117
static constexpr const char * sSchematicBuses
Definition theme.h:65
static constexpr const char * sSchematicNetLabels
Definition theme.h:64
static constexpr const char * sBoardVias
Definition theme.h:91
static constexpr const char * sSchematicGuide
Definition theme.h:70
static constexpr const char * sBoardFrames
Definition theme.h:86
static constexpr const char * sBoardComments
Definition theme.h:97
static constexpr const char * sBoardGuide
Definition theme.h:98
static constexpr const char * sBoardLegendTop
Definition theme.h:103
static constexpr const char * sBoardOutlines
Definition theme.h:87
static constexpr const char * sBoardStopMaskBot
Definition theme.h:118
static constexpr const char * sBoardLegendBot
Definition theme.h:104
static constexpr const char * sSchematicOutlines
Definition theme.h:71
static constexpr const char * sSchematicFrames
Definition theme.h:62
static constexpr const char * sSchematicValues
Definition theme.h:75
static constexpr const char * sBoardCopperBot
Definition theme.h:127
static constexpr const char * sBoardHoles
Definition theme.h:89
static constexpr const char * sSchematicWires
Definition theme.h:63