LibrePCB Developers Documentation
boarddesignrulecheck.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_BOARDDESIGNRULECHECK_H
21#define LIBREPCB_CORE_BOARDDESIGNRULECHECK_H
22
23/*******************************************************************************
24 * Includes
25 ******************************************************************************/
26#include "../../../utils/transform.h"
29
30#include <polyclipping/clipper.hpp>
31
32#include <QtCore>
33
34/*******************************************************************************
35 * Namespace / Forward Declarations
36 ******************************************************************************/
37namespace librepcb {
38
39class BI_Device;
40class Board;
41class Hole;
42class NetSignal;
43
44/*******************************************************************************
45 * Class BoardDesignRuleCheck
46 ******************************************************************************/
47
52class BoardDesignRuleCheck final : public QObject {
53 Q_OBJECT
54
55public:
56 // Constructors / Destructor
57 explicit BoardDesignRuleCheck(Board& board,
58 const BoardDesignRuleCheckSettings& settings,
59 QObject* parent = nullptr) noexcept;
60 ~BoardDesignRuleCheck() noexcept;
61
62 // Getters
63 const QStringList& getProgressStatus() const noexcept {
64 return mProgressStatus;
65 }
66 const RuleCheckMessageList& getMessages() const noexcept { return mMessages; }
67
68 // General Methods
69 void execute(bool quick);
70
71signals:
72 void started();
73 void progressPercent(int percent);
74 void progressStatus(const QString& msg);
75 void progressMessage(const QString& msg);
76 void finished();
77
78private: // Methods
79 void rebuildPlanes(int progressEnd);
80 void checkCopperCopperClearances(int progressEnd);
81 void checkCopperBoardClearances(int progressEnd);
82 void checkCopperHoleClearances(int progressEnd);
83 void checkDrillDrillClearances(int progressEnd);
84 void checkDrillBoardClearances(int progressEnd);
85 void checkSilkscreenStopmaskClearances(int progressEnd);
86 void checkMinimumCopperWidth(int progressEnd);
87 void checkMinimumPthAnnularRing(int progressEnd);
88 void checkMinimumNpthDrillDiameter(int progressEnd);
89 void checkMinimumNpthSlotWidth(int progressEnd);
90 void checkMinimumPthDrillDiameter(int progressEnd);
91 void checkMinimumPthSlotWidth(int progressEnd);
92 void checkMinimumSilkscreenWidth(int progressEnd);
93 void checkMinimumSilkscreenTextHeight(int progressEnd);
94 void checkZones(int progressEnd);
95 void checkVias(int progressEnd);
96 void checkAllowedNpthSlots(int progressEnd);
97 void checkAllowedPthSlots(int progressEnd);
98 void checkInvalidPadConnections(int progressEnd);
99 void checkDeviceClearances(int progressEnd);
100 void checkBoardOutline(int progressEnd);
101 void checkUsedLayers(int progressEnd);
102 void checkForUnplacedComponents(int progressEnd);
103 void checkForMissingConnections(int progressEnd);
104 void checkForStaleObjects(int progressEnd);
105 void checkMinimumWidth(const UnsignedLength& minWidth,
106 std::function<bool(const Layer&)> layerFilter);
107 template <typename THole>
109 const THole& hole, BoardDesignRuleCheckSettings::AllowedSlots allowed);
110 ClipperLib::Paths getBoardClearanceArea(
111 const UnsignedLength& clearance) const;
112 QVector<Path> getBoardOutlines(
113 const QSet<const Layer*>& layers) const noexcept;
114 const ClipperLib::Paths& getCopperPaths(
115 const Layer& layer, const QSet<const NetSignal*>& netsignals);
116 ClipperLib::Paths getDeviceOutlinePaths(const BI_Device& device,
117 const Layer& layer);
118 QVector<Path> getDeviceLocation(const BI_Device& device) const;
119 QVector<Path> getViaLocation(const BI_Via& via) const noexcept;
120 template <typename THole>
121 QVector<Path> getHoleLocation(
122 const THole& hole,
123 const Transform& transform = Transform()) const noexcept;
124 void emitProgress(int percent) noexcept;
125 void emitStatus(const QString& status) noexcept;
126 void emitMessage(const std::shared_ptr<const RuleCheckMessage>& msg) noexcept;
127 QString formatLength(const Length& length) const noexcept;
128
132 static PositiveLength maxArcTolerance() noexcept {
133 return PositiveLength(5000);
134 }
135
136private: // Data
141 QStringList mProgressStatus;
143 QHash<QPair<const Layer*, QSet<const NetSignal*>>, ClipperLib::Paths>
145};
146
147/*******************************************************************************
148 * End of File
149 ******************************************************************************/
150
151} // namespace librepcb
152
153#endif
The BI_Device class.
Definition: bi_device.h:57
The BI_Via class.
Definition: bi_via.h:44
The BoardDesignRuleCheck class checks a librepcb::Board for design rule violations.
Definition: boarddesignrulecheck.h:52
void checkBoardOutline(int progressEnd)
Definition: boarddesignrulecheck.cpp:1558
void checkForStaleObjects(int progressEnd)
Definition: boarddesignrulecheck.cpp:1725
void checkSilkscreenStopmaskClearances(int progressEnd)
Definition: boarddesignrulecheck.cpp:794
const RuleCheckMessageList & getMessages() const noexcept
Definition: boarddesignrulecheck.h:66
RuleCheckMessageList mMessages
Definition: boarddesignrulecheck.h:142
void checkDrillDrillClearances(int progressEnd)
Definition: boarddesignrulecheck.cpp:632
ClipperLib::Paths getDeviceOutlinePaths(const BI_Device &device, const Layer &layer)
Definition: boarddesignrulecheck.cpp:1953
void checkZones(int progressEnd)
Definition: boarddesignrulecheck.cpp:1128
void emitProgress(int percent) noexcept
Definition: boarddesignrulecheck.cpp:2049
QVector< Path > getHoleLocation(const THole &hole, const Transform &transform=Transform()) const noexcept
Definition: boarddesignrulecheck.cpp:2044
void checkCopperCopperClearances(int progressEnd)
Definition: boarddesignrulecheck.cpp:144
void checkMinimumPthDrillDiameter(int progressEnd)
Definition: boarddesignrulecheck.cpp:1024
QStringList mProgressStatus
Definition: boarddesignrulecheck.h:141
QVector< Path > getViaLocation(const BI_Via &via) const noexcept
Definition: boarddesignrulecheck.cpp:2038
bool requiresHoleSlotWarning(const THole &hole, BoardDesignRuleCheckSettings::AllowedSlots allowed)
Definition: boarddesignrulecheck.cpp:1878
QVector< Path > getDeviceLocation(const BI_Device &device) const
Definition: boarddesignrulecheck.cpp:1983
void checkAllowedNpthSlots(int progressEnd)
Definition: boarddesignrulecheck.cpp:1412
void checkForMissingConnections(int progressEnd)
Definition: boarddesignrulecheck.cpp:1707
void checkDeviceClearances(int progressEnd)
Definition: boarddesignrulecheck.cpp:1502
void checkInvalidPadConnections(int progressEnd)
Definition: boarddesignrulecheck.cpp:1468
void checkAllowedPthSlots(int progressEnd)
Definition: boarddesignrulecheck.cpp:1443
QVector< Path > getBoardOutlines(const QSet< const Layer * > &layers) const noexcept
Definition: boarddesignrulecheck.cpp:1915
void checkMinimumSilkscreenTextHeight(int progressEnd)
Definition: boarddesignrulecheck.cpp:1101
void emitStatus(const QString &status) noexcept
Definition: boarddesignrulecheck.cpp:2054
void checkUsedLayers(int progressEnd)
Definition: boarddesignrulecheck.cpp:1633
void progressStatus(const QString &msg)
static PositiveLength maxArcTolerance() noexcept
Definition: boarddesignrulecheck.h:132
bool mIgnorePlanes
Definition: boarddesignrulecheck.h:139
void emitMessage(const std::shared_ptr< const RuleCheckMessage > &msg) noexcept
Definition: boarddesignrulecheck.cpp:2060
Board & mBoard
Definition: boarddesignrulecheck.h:137
void checkCopperHoleClearances(int progressEnd)
Definition: boarddesignrulecheck.cpp:577
void progressPercent(int percent)
void checkMinimumSilkscreenWidth(int progressEnd)
Definition: boarddesignrulecheck.cpp:1086
void checkMinimumNpthDrillDiameter(int progressEnd)
Definition: boarddesignrulecheck.cpp:962
QString formatLength(const Length &length) const noexcept
Definition: boarddesignrulecheck.cpp:2066
void progressMessage(const QString &msg)
void checkMinimumNpthSlotWidth(int progressEnd)
Definition: boarddesignrulecheck.cpp:993
const QStringList & getProgressStatus() const noexcept
Definition: boarddesignrulecheck.h:63
void checkDrillBoardClearances(int progressEnd)
Definition: boarddesignrulecheck.cpp:720
~BoardDesignRuleCheck() noexcept
Definition: boarddesignrulecheck.cpp:78
const BoardDesignRuleCheckSettings & mSettings
Definition: boarddesignrulecheck.h:138
void checkMinimumWidth(const UnsignedLength &minWidth, std::function< bool(const Layer &)> layerFilter)
Definition: boarddesignrulecheck.cpp:1748
void checkForUnplacedComponents(int progressEnd)
Definition: boarddesignrulecheck.cpp:1692
int mProgressPercent
Definition: boarddesignrulecheck.h:140
QHash< QPair< const Layer *, QSet< const NetSignal * > >, ClipperLib::Paths > mCachedPaths
Definition: boarddesignrulecheck.h:144
void checkMinimumPthSlotWidth(int progressEnd)
Definition: boarddesignrulecheck.cpp:1062
void execute(bool quick)
Definition: boarddesignrulecheck.cpp:85
void rebuildPlanes(int progressEnd)
Definition: boarddesignrulecheck.cpp:137
void checkMinimumCopperWidth(int progressEnd)
Definition: boarddesignrulecheck.cpp:882
BoardDesignRuleCheck(Board &board, const BoardDesignRuleCheckSettings &settings, QObject *parent=nullptr) noexcept
Definition: boarddesignrulecheck.cpp:66
ClipperLib::Paths getBoardClearanceArea(const UnsignedLength &clearance) const
Definition: boarddesignrulecheck.cpp:1896
void checkVias(int progressEnd)
Definition: boarddesignrulecheck.cpp:1391
void checkCopperBoardClearances(int progressEnd)
Definition: boarddesignrulecheck.cpp:429
void checkMinimumPthAnnularRing(int progressEnd)
Definition: boarddesignrulecheck.cpp:895
const ClipperLib::Paths & getCopperPaths(const Layer &layer, const QSet< const NetSignal * > &netsignals)
Definition: boarddesignrulecheck.cpp:1942
The BoardDesignRuleCheckSettings class.
Definition: boarddesignrulechecksettings.h:44
AllowedSlots
Definition: boarddesignrulechecksettings.h:47
The Board class represents a PCB of a project and is always part of a circuit.
Definition: board.h:73
The Layer class provides all supported geometry layers.
Definition: layer.h:40
The Length class is used to represent a length (for example 12.75 millimeters)
Definition: length.h:83
The RuleCheckMessage class.
Definition: rulecheckmessage.h:45
Helper class to perform coordinate transformation with various types.
Definition: transform.h:59
Definition: occmodel.cpp:77
type_safe::constrained_type< Length, PositiveLengthConstraint, PositiveLengthVerifier > PositiveLength
Definition: length.h:812
type_safe::constrained_type< Length, UnsignedLengthConstraint, UnsignedLengthVerifier > UnsignedLength
Definition: length.h:696
QVector< std::shared_ptr< const RuleCheckMessage > > RuleCheckMessageList
Definition: rulecheckmessage.h:104