KiCad PCB EDA Suite
Loading...
Searching...
No Matches
drc_re_abs_length_two_constraint_data.h
Go to the documentation of this file.
1
/*
2
* This program source code file is part of KiCad, a free EDA CAD application.
3
*
4
* Copyright (C) 2024 KiCad Developers, see AUTHORS.txt for contributors.
5
*
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version 2
9
* of the License, or (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, you may find one here:
18
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
19
* or you may search the http://www.gnu.org website for the version 2 license,
20
* or you may write to the Free Software Foundation, Inc.,
21
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
22
*/
23
24
#ifndef DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA_H_
25
#define DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA_H_
26
27
#include "
drc_re_base_constraint_data.h
"
28
29
30
class
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA
:
public
DRC_RE_BASE_CONSTRAINT_DATA
31
{
32
public
:
33
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA
() =
default
;
34
35
explicit
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA
(
36
const
DRC_RE_BASE_CONSTRAINT_DATA
& aBaseData ) :
37
DRC_RE_BASE_CONSTRAINT_DATA
( aBaseData )
38
{
39
}
40
41
explicit
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA
(
int
aId,
int
aParentId,
42
double
aMinLength,
43
double
aOptLength,
44
double
aMaxLength,
45
wxString aRuleName ) :
46
DRC_RE_BASE_CONSTRAINT_DATA
( aId, aParentId, aRuleName ),
47
m_minLength
( aMinLength ),
48
m_optLength
( aOptLength ),
49
m_maxLength
( aMaxLength )
50
{
51
}
52
53
virtual
~DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA
() =
default
;
54
55
double
GetMinimumLength
()
const
{
return
m_minLength
; }
56
57
void
SetMinimumLength
(
double
aLength ) {
m_minLength
= aLength; }
58
59
double
GetOptimumLength
()
const
{
return
m_optLength
; }
60
61
void
SetOptimumLength
(
double
aLength ) {
m_optLength
= aLength; }
62
63
double
GetMaximumLength
()
const
{
return
m_maxLength
; }
64
65
void
SetMaximumLength
(
double
aLength ) {
m_maxLength
= aLength; }
66
67
VALIDATION_RESULT
Validate
()
const override
68
{
69
VALIDATION_RESULT
result
;
70
71
// Validate length values are positive
72
if
(
m_minLength
<= 0 )
73
result
.AddError(
"Minimum Length must be greater than 0"
);
74
75
if
(
m_optLength
<= 0 )
76
result
.AddError(
"Optimum Length must be greater than 0"
);
77
78
if
(
m_maxLength
<= 0 )
79
result
.AddError(
"Maximum Length must be greater than 0"
);
80
81
// Validate min <= opt <= max
82
if
(
m_minLength
>
m_optLength
)
83
result
.AddError(
"Minimum Length cannot be greater than Optimum Length"
);
84
85
if
(
m_optLength
>
m_maxLength
)
86
result
.AddError(
"Optimum Length cannot be greater than Maximum Length"
);
87
88
if
(
m_minLength
>
m_maxLength
)
89
result
.AddError(
"Minimum Length cannot be greater than Maximum Length"
);
90
91
return
result
;
92
}
93
94
wxString
GenerateRule
(
const
RULE_GENERATION_CONTEXT
& aContext )
override
95
{
96
auto
formatDistance = [&](
double
aValue )
97
{
98
return
formatDouble
( aValue ) + wxS(
"mm"
);
99
};
100
101
wxString code =
GetConstraintCode
();
102
103
if
( code.IsEmpty() )
104
code = wxS(
"length"
);
105
106
wxString clause = wxString::Format(
107
wxS(
"(constraint %s (min %s) (opt %s) (max %s))"
),
108
code,
109
formatDistance(
m_minLength
),
110
formatDistance(
m_optLength
),
111
formatDistance(
m_maxLength
) );
112
113
return
buildRule
( aContext, { clause } );
114
}
115
116
void
CopyFrom
(
const
ICopyable
& aSource )
override
117
{
118
const
auto
& source =
119
dynamic_cast<
const
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA
&
>
( aSource );
120
121
DRC_RE_BASE_CONSTRAINT_DATA::CopyFrom
( source );
122
123
m_minLength
= source.m_minLength;
124
m_optLength
= source.m_optLength;
125
m_maxLength
= source.m_maxLength;
126
}
127
128
private
:
129
double
m_minLength
{ 0 };
130
double
m_optLength
{ 0 };
131
double
m_maxLength
{ 0 };
132
};
133
134
#endif
// DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA_H_
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA::Validate
VALIDATION_RESULT Validate() const override
Validates the constraint data.
Definition
drc_re_abs_length_two_constraint_data.h:67
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA::DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA()=default
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA::GetMaximumLength
double GetMaximumLength() const
Definition
drc_re_abs_length_two_constraint_data.h:63
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA::m_optLength
double m_optLength
Definition
drc_re_abs_length_two_constraint_data.h:130
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA::DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA(int aId, int aParentId, double aMinLength, double aOptLength, double aMaxLength, wxString aRuleName)
Definition
drc_re_abs_length_two_constraint_data.h:41
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA::SetMinimumLength
void SetMinimumLength(double aLength)
Definition
drc_re_abs_length_two_constraint_data.h:57
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA::GetOptimumLength
double GetOptimumLength() const
Definition
drc_re_abs_length_two_constraint_data.h:59
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA::m_minLength
double m_minLength
Definition
drc_re_abs_length_two_constraint_data.h:129
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA::SetOptimumLength
void SetOptimumLength(double aLength)
Definition
drc_re_abs_length_two_constraint_data.h:61
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA::GenerateRule
wxString GenerateRule(const RULE_GENERATION_CONTEXT &aContext) override
Definition
drc_re_abs_length_two_constraint_data.h:94
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA::CopyFrom
void CopyFrom(const ICopyable &aSource) override
Definition
drc_re_abs_length_two_constraint_data.h:116
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA::GetMinimumLength
double GetMinimumLength() const
Definition
drc_re_abs_length_two_constraint_data.h:55
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA::m_maxLength
double m_maxLength
Definition
drc_re_abs_length_two_constraint_data.h:131
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA::DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA(const DRC_RE_BASE_CONSTRAINT_DATA &aBaseData)
Definition
drc_re_abs_length_two_constraint_data.h:35
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA::~DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA
virtual ~DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA()=default
DRC_RE_ABSOLUTE_LENGTH_TWO_CONSTRAINT_DATA::SetMaximumLength
void SetMaximumLength(double aLength)
Definition
drc_re_abs_length_two_constraint_data.h:65
DRC_RE_BASE_CONSTRAINT_DATA::formatDouble
static wxString formatDouble(double aValue, int aPrecision=6)
Definition
drc_re_base_constraint_data.h:145
DRC_RE_BASE_CONSTRAINT_DATA::GetConstraintCode
wxString GetConstraintCode()
Definition
drc_re_base_constraint_data.h:63
DRC_RE_BASE_CONSTRAINT_DATA::buildRule
wxString buildRule(const RULE_GENERATION_CONTEXT &aContext, const std::vector< wxString > &aConstraintClauses) const
Definition
drc_re_base_constraint_data.h:151
DRC_RE_BASE_CONSTRAINT_DATA::CopyFrom
void CopyFrom(const ICopyable &aSource) override
Definition
drc_re_base_constraint_data.h:79
DRC_RE_BASE_CONSTRAINT_DATA::DRC_RE_BASE_CONSTRAINT_DATA
DRC_RE_BASE_CONSTRAINT_DATA()=default
ICopyable
Abstract interface class to enable polymorphic copying between objects.
Definition
rule_editor_data_base.h:35
drc_re_base_constraint_data.h
RULE_GENERATION_CONTEXT
Definition
drc_rule_editor_enums.h:59
VALIDATION_RESULT
Result of a validation operation.
Definition
drc_rule_editor_enums.h:37
result
wxString result
Test unit parsing edge cases and error handling.
Definition
test_text_eval_numeric_compat.cpp:602
src
pcbnew
drc
rule_editor
drc_re_abs_length_two_constraint_data.h
Generated on Sun Feb 1 2026 00:08:31 for KiCad PCB EDA Suite by
1.13.2