LibrePCB Developers Documentation
Loading...
Searching...
No Matches
boarddesignrulecheckdata.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_BOARDDESIGNRULECHECKDATA_H
21#define LIBREPCB_CORE_BOARDDESIGNRULECHECKDATA_H
22
23/*******************************************************************************
24 * Includes
25 ******************************************************************************/
26#include "../../../geometry/padgeometry.h"
27#include "../../../geometry/zone.h"
28#include "../../../types/uuid.h"
30
31#include <QtCore>
32
33/*******************************************************************************
34 * Namespace / Forward Declarations
35 ******************************************************************************/
36namespace librepcb {
37
38class Board;
39class Layer;
40
41/*******************************************************************************
42 * Class BoardDesignRuleCheckData
43 ******************************************************************************/
44
54 struct Junction {
57 qsizetype traces;
58 };
66 struct Via {
71 // Only filled with the layers of traces directly connected to the via.
72 QSet<const Layer*> connectedLayers;
75 std::optional<std::pair<const Layer*, const Layer*>> drillLayerSpan;
77 bool isBlind;
78 std::optional<PositiveLength> stopMaskDiameterTop;
79 std::optional<PositiveLength> stopMaskDiameterBot;
80 };
87 struct Pad {
89 QString libPkgPadName; // Empty if not connected to a package pad.
90 Point position; // Absolute transform.
91 Angle rotation; // Absolute transform.
92 bool mirror; // Absolute transform.
93 QList<Hole> holes;
94 QHash<const Layer*, QList<PadGeometry>> geometries;
95 QSet<const Layer*> layersWithTraces; // Layers where traces are connected.
97 std::optional<Uuid> net;
98 QString netName; // Empty if no net.
99 std::optional<Uuid> netClass;
100 };
101 struct Segment {
103 std::optional<Uuid> net;
104 QString netName; // Empty if no net.
105 std::optional<Uuid> netClass;
106 QHash<Uuid, Junction> junctions;
107 QList<Trace> traces;
108 QHash<Uuid, Via> vias;
109 QHash<Uuid, Pad> pads;
110 };
113 std::optional<Uuid> device; // If it's a footprint pad.
114 std::optional<Uuid> pad; // If it's a pad.
115 std::optional<Uuid> segment; // If it's a junction or via or board pad.
116 std::optional<Uuid> junction; // If it's a junction.
117 std::optional<Uuid> via; // If it's a via.
118 };
119 struct AirWire {
122 QString netName; // Always valid.
123 };
124 struct Plane {
126 std::optional<Uuid> net;
127 QString netName; // Empty if no net.
128 std::optional<Uuid> netClass;
129 const Layer* layer;
133 QVector<Path> fragments;
134 };
160 struct Zone {
162 QSet<const Layer*> boardLayers; // Only set for board zones!
163 librepcb::Zone::Layers footprintLayers; // Only set for device zones!
164 librepcb::Zone::Rules rules;
166 };
172 struct Device {
177 bool mirror;
178 QHash<Uuid, Pad> pads; // With absolute transform.
179 QList<Polygon> polygons; // From library footprint.
180 QList<Circle> circles; // From library footprint.
181 QList<StrokeText> strokeTexts; // With absolute transform.
182 QList<Hole> holes; // From library footprint.
183 QList<Zone> zones; // From library footprint.
184 QList<ImpossibleConnection> impossibleSignalConnections;
185 };
186
187 // NOTE: We create a `const` copy of this structure for each thread to
188 // ensure thread-safety. For the implicitly shared Qt containers this is
189 // a lightweight operation.
191 bool quick = false;
192 QSet<const Layer*> copperLayers; // All board copper layers.
193 QVector<const Layer*> silkscreenLayersTop;
194 QVector<const Layer*> silkscreenLayersBot;
195 QHash<Uuid, NetClass> netClasses;
196 QHash<Uuid, Segment> segments;
197 QList<Plane> planes;
198 QList<Polygon> polygons;
199 QList<StrokeText> strokeTexts;
200 QList<Hole> holes;
201 QList<Zone> zones;
202 QHash<Uuid, Device> devices;
203 QList<AirWire> airWires;
204 QMap<Uuid, QString> unplacedComponents; // UUID and name.
205
206 // Constructors / Destructor
207 BoardDesignRuleCheckData(const Board& board,
208 const BoardDesignRuleCheckSettings& drcSettings,
209 bool quickCheck) noexcept;
210
211 // Helper Methods
213 const std::optional<Uuid> netClass) const noexcept {
214 if (netClass) {
215 auto it = netClasses.find(*netClass);
216 if (it != netClasses.end()) {
217 return std::max(settings.getMinCopperCopperClearance(),
218 it->minCopperCopperClearance);
219 }
220 }
222 }
224 const std::optional<Uuid> netClass) const noexcept {
225 if (netClass) {
226 auto it = netClasses.find(*netClass);
227 if (it != netClasses.end()) {
228 return std::max(settings.getMinCopperWidth(), it->minCopperWidth);
229 }
230 }
232 }
234 const std::optional<Uuid> netClass) const noexcept {
235 if (netClass) {
236 auto it = netClasses.find(*netClass);
237 if (it != netClasses.end()) {
238 return std::max(settings.getMinPthDrillDiameter(),
239 it->minViaDrillDiameter);
240 }
241 }
243 }
244};
245
246/*******************************************************************************
247 * End of File
248 ******************************************************************************/
249
250} // namespace librepcb
251
252#endif
The Angle class is used to represent an angle (for example 12.75 degrees)
Definition angle.h:76
The BoardDesignRuleCheckSettings class.
Definition boarddesignrulechecksettings.h:50
const UnsignedLength & getMinCopperWidth() const noexcept
Definition boarddesignrulechecksettings.h:130
const UnsignedLength & getMinPthDrillDiameter() const noexcept
Definition boarddesignrulechecksettings.h:139
const UnsignedLength & getMinCopperCopperClearance() const noexcept
Definition boarddesignrulechecksettings.h:112
The Board class represents a PCB of a project and is always part of a circuit.
Definition board.h:74
The Layer class provides all supported geometry layers.
Definition layer.h:42
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
Definition occmodel.cpp:77
type_safe::constrained_type< Length, PositiveLengthConstraint, PositiveLengthVerifier > PositiveLength
Definition length.h:810
type_safe::constrained_type< Path, NonEmptyPathConstraint, NonEmptyPathVerifier > NonEmptyPath
Definition path.h:238
type_safe::constrained_type< Length, UnsignedLengthConstraint, UnsignedLengthVerifier > UnsignedLength
Definition length.h:694
Definition boarddesignrulecheckdata.h:111
std::optional< Uuid > segment
Definition boarddesignrulecheckdata.h:115
std::optional< Uuid > device
Definition boarddesignrulecheckdata.h:113
std::optional< Uuid > via
Definition boarddesignrulecheckdata.h:117
std::optional< Uuid > junction
Definition boarddesignrulecheckdata.h:116
Point position
Definition boarddesignrulecheckdata.h:112
std::optional< Uuid > pad
Definition boarddesignrulecheckdata.h:114
Definition boarddesignrulecheckdata.h:119
QString netName
Definition boarddesignrulecheckdata.h:122
AirWireAnchor p1
Definition boarddesignrulecheckdata.h:120
AirWireAnchor p2
Definition boarddesignrulecheckdata.h:121
Definition boarddesignrulecheckdata.h:142
UnsignedLength lineWidth
Definition boarddesignrulecheckdata.h:147
Point center
Definition boarddesignrulecheckdata.h:144
bool filled
Definition boarddesignrulecheckdata.h:148
Uuid uuid
Definition boarddesignrulecheckdata.h:143
PositiveLength diameter
Definition boarddesignrulecheckdata.h:145
const Layer * layer
Definition boarddesignrulecheckdata.h:146
Definition boarddesignrulecheckdata.h:172
bool mirror
Definition boarddesignrulecheckdata.h:177
QList< Zone > zones
Definition boarddesignrulecheckdata.h:183
Uuid uuid
Definition boarddesignrulecheckdata.h:173
Angle rotation
Definition boarddesignrulecheckdata.h:176
QList< Polygon > polygons
Definition boarddesignrulecheckdata.h:179
QString cmpInstanceName
Definition boarddesignrulecheckdata.h:174
QList< Circle > circles
Definition boarddesignrulecheckdata.h:180
QList< Hole > holes
Definition boarddesignrulecheckdata.h:182
QList< ImpossibleConnection > impossibleSignalConnections
Definition boarddesignrulecheckdata.h:184
Point position
Definition boarddesignrulecheckdata.h:175
QList< StrokeText > strokeTexts
Definition boarddesignrulecheckdata.h:181
QHash< Uuid, Pad > pads
Definition boarddesignrulecheckdata.h:178
Definition boarddesignrulecheckdata.h:81
Uuid uuid
Definition boarddesignrulecheckdata.h:82
PositiveLength diameter
Definition boarddesignrulecheckdata.h:83
std::optional< Length > stopMaskOffset
Definition boarddesignrulecheckdata.h:85
NonEmptyPath path
Definition boarddesignrulecheckdata.h:84
Definition boarddesignrulecheckdata.h:167
QString netName
Definition boarddesignrulecheckdata.h:170
Uuid signalUuid
Definition boarddesignrulecheckdata.h:168
QString signalName
Definition boarddesignrulecheckdata.h:169
Definition boarddesignrulecheckdata.h:54
Uuid uuid
Definition boarddesignrulecheckdata.h:55
qsizetype traces
Definition boarddesignrulecheckdata.h:57
Point position
Definition boarddesignrulecheckdata.h:56
Definition boarddesignrulecheckdata.h:49
UnsignedLength minViaDrillDiameter
Definition boarddesignrulecheckdata.h:52
UnsignedLength minCopperCopperClearance
Definition boarddesignrulecheckdata.h:50
UnsignedLength minCopperWidth
Definition boarddesignrulecheckdata.h:51
Definition boarddesignrulecheckdata.h:87
UnsignedLength copperClearance
Definition boarddesignrulecheckdata.h:96
bool mirror
Definition boarddesignrulecheckdata.h:92
QString libPkgPadName
Definition boarddesignrulecheckdata.h:89
std::optional< Uuid > net
Definition boarddesignrulecheckdata.h:97
QString netName
Definition boarddesignrulecheckdata.h:98
Uuid uuid
Definition boarddesignrulecheckdata.h:88
Angle rotation
Definition boarddesignrulecheckdata.h:91
QHash< const Layer *, QList< PadGeometry > > geometries
Definition boarddesignrulecheckdata.h:94
QList< Hole > holes
Definition boarddesignrulecheckdata.h:93
Point position
Definition boarddesignrulecheckdata.h:90
QSet< const Layer * > layersWithTraces
Definition boarddesignrulecheckdata.h:95
std::optional< Uuid > netClass
Definition boarddesignrulecheckdata.h:99
Definition boarddesignrulecheckdata.h:124
std::optional< Uuid > net
Definition boarddesignrulecheckdata.h:126
QString netName
Definition boarddesignrulecheckdata.h:127
Uuid uuid
Definition boarddesignrulecheckdata.h:125
QVector< Path > fragments
Definition boarddesignrulecheckdata.h:133
Path outline
Definition boarddesignrulecheckdata.h:132
UnsignedLength minWidth
Definition boarddesignrulecheckdata.h:130
PositiveLength thermalSpokeWidth
Definition boarddesignrulecheckdata.h:131
std::optional< Uuid > netClass
Definition boarddesignrulecheckdata.h:128
const Layer * layer
Definition boarddesignrulecheckdata.h:129
Definition boarddesignrulecheckdata.h:135
UnsignedLength lineWidth
Definition boarddesignrulecheckdata.h:138
bool filled
Definition boarddesignrulecheckdata.h:139
Uuid uuid
Definition boarddesignrulecheckdata.h:136
Path path
Definition boarddesignrulecheckdata.h:140
const Layer * layer
Definition boarddesignrulecheckdata.h:137
Definition boarddesignrulecheckdata.h:101
QHash< Uuid, Via > vias
Definition boarddesignrulecheckdata.h:108
std::optional< Uuid > net
Definition boarddesignrulecheckdata.h:103
QString netName
Definition boarddesignrulecheckdata.h:104
Uuid uuid
Definition boarddesignrulecheckdata.h:102
QList< Trace > traces
Definition boarddesignrulecheckdata.h:107
QHash< Uuid, Junction > junctions
Definition boarddesignrulecheckdata.h:106
std::optional< Uuid > netClass
Definition boarddesignrulecheckdata.h:105
QHash< Uuid, Pad > pads
Definition boarddesignrulecheckdata.h:109
Definition boarddesignrulecheckdata.h:150
bool mirror
Definition boarddesignrulecheckdata.h:154
Uuid uuid
Definition boarddesignrulecheckdata.h:151
Angle rotation
Definition boarddesignrulecheckdata.h:153
QVector< Path > paths
Definition boarddesignrulecheckdata.h:158
UnsignedLength strokeWidth
Definition boarddesignrulecheckdata.h:156
Point position
Definition boarddesignrulecheckdata.h:152
PositiveLength height
Definition boarddesignrulecheckdata.h:157
const Layer * layer
Definition boarddesignrulecheckdata.h:155
Definition boarddesignrulecheckdata.h:59
Point p2
Definition boarddesignrulecheckdata.h:62
Uuid uuid
Definition boarddesignrulecheckdata.h:60
Point p1
Definition boarddesignrulecheckdata.h:61
const Layer * layer
Definition boarddesignrulecheckdata.h:64
PositiveLength width
Definition boarddesignrulecheckdata.h:63
Definition boarddesignrulecheckdata.h:66
PositiveLength size
Definition boarddesignrulecheckdata.h:70
Uuid uuid
Definition boarddesignrulecheckdata.h:67
bool isBlind
Definition boarddesignrulecheckdata.h:77
const Layer * endLayer
Definition boarddesignrulecheckdata.h:74
std::optional< PositiveLength > stopMaskDiameterTop
Definition boarddesignrulecheckdata.h:78
std::optional< std::pair< const Layer *, const Layer * > > drillLayerSpan
Definition boarddesignrulecheckdata.h:75
bool isBuried
Definition boarddesignrulecheckdata.h:76
QSet< const Layer * > connectedLayers
Definition boarddesignrulecheckdata.h:72
const Layer * startLayer
Definition boarddesignrulecheckdata.h:73
Point position
Definition boarddesignrulecheckdata.h:68
std::optional< PositiveLength > stopMaskDiameterBot
Definition boarddesignrulecheckdata.h:79
PositiveLength drillDiameter
Definition boarddesignrulecheckdata.h:69
Definition boarddesignrulecheckdata.h:160
QSet< const Layer * > boardLayers
Definition boarddesignrulecheckdata.h:162
librepcb::Zone::Layers footprintLayers
Definition boarddesignrulecheckdata.h:163
Uuid uuid
Definition boarddesignrulecheckdata.h:161
Path outline
Definition boarddesignrulecheckdata.h:165
librepcb::Zone::Rules rules
Definition boarddesignrulecheckdata.h:164
Input data structure for librepcb::BoardDesignRuleCheck.
Definition boarddesignrulecheckdata.h:48
QVector< const Layer * > silkscreenLayersTop
Definition boarddesignrulecheckdata.h:193
QVector< const Layer * > silkscreenLayersBot
Definition boarddesignrulecheckdata.h:194
UnsignedLength getMinCopperCopperClearance(const std::optional< Uuid > netClass) const noexcept
Definition boarddesignrulecheckdata.h:212
QList< Zone > zones
Definition boarddesignrulecheckdata.h:201
QMap< Uuid, QString > unplacedComponents
Definition boarddesignrulecheckdata.h:204
QHash< Uuid, Segment > segments
Definition boarddesignrulecheckdata.h:196
QList< Plane > planes
Definition boarddesignrulecheckdata.h:197
QSet< const Layer * > copperLayers
Definition boarddesignrulecheckdata.h:192
QList< Polygon > polygons
Definition boarddesignrulecheckdata.h:198
QList< AirWire > airWires
Definition boarddesignrulecheckdata.h:203
QHash< Uuid, NetClass > netClasses
Definition boarddesignrulecheckdata.h:195
UnsignedLength getMinViaDrillDiameter(const std::optional< Uuid > netClass) const noexcept
Definition boarddesignrulecheckdata.h:233
QList< Hole > holes
Definition boarddesignrulecheckdata.h:200
QHash< Uuid, Device > devices
Definition boarddesignrulecheckdata.h:202
QList< StrokeText > strokeTexts
Definition boarddesignrulecheckdata.h:199
bool quick
Definition boarddesignrulecheckdata.h:191
BoardDesignRuleCheckSettings settings
Definition boarddesignrulecheckdata.h:190
UnsignedLength getMinCopperWidth(const std::optional< Uuid > netClass) const noexcept
Definition boarddesignrulecheckdata.h:223