Skip to content

Commit ba2553f

Browse files
imp board: add via definitions
changelog: New Features/Board Editor: add via definitions
1 parent 5ed71d5 commit ba2553f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+1457
-74
lines changed

3rd_party/router/router/pns_diff_pair_placer.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ const VIA DIFF_PAIR_PLACER::makeVia( const VECTOR2I& aP, int aNet )
7474

7575
VIA v( aP, layers, m_sizes.ViaDiameter(), m_sizes.ViaDrill(), -1, m_sizes.ViaType() );
7676
v.SetNet( aNet );
77+
v.SetDefinition( m_sizes.ViaDefinition() );
7778

7879
return v;
7980
}

3rd_party/router/router/pns_line_placer.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,9 @@ const VIA LINE_PLACER::makeVia( const VECTOR2I& aP )
7575
const LAYER_RANGE layers( m_sizes.ViaType() == VIATYPE::THROUGH ? F_Cu : m_sizes.GetLayerTop(),
7676
m_sizes.ViaType() == VIATYPE::THROUGH ? B_Cu : m_sizes.GetLayerBottom() );
7777

78-
return VIA( aP, layers, m_sizes.ViaDiameter(), m_sizes.ViaDrill(), -1, m_sizes.ViaType() );
78+
auto via = VIA( aP, layers, m_sizes.ViaDiameter(), m_sizes.ViaDrill(), -1, m_sizes.ViaType() );
79+
via.SetDefinition( m_sizes.ViaDefinition() );
80+
return via;
7981
}
8082

8183

3rd_party/router/router/pns_sizes_settings.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class SIZES_SETTINGS
4848
m_viaType( VIATYPE::THROUGH ),
4949
m_viaDiameter( 600000 ),
5050
m_viaDrill( 250000 ),
51+
m_viaDefinition( -1 ),
5152
m_diffPairWidth( 125000 ),
5253
m_diffPairGap( 180000 ),
5354
m_diffPairViaGap( 180000 ),
@@ -90,6 +91,9 @@ class SIZES_SETTINGS
9091

9192
int ViaDrill() const { return m_viaDrill; }
9293
void SetViaDrill( int aDrill ) { m_viaDrill = aDrill; }
94+
95+
int ViaDefinition() const { return m_viaDefinition; }
96+
void SetViaDefinition( int aDef ) { m_viaDefinition = aDef; }
9397

9498
std::optional<int> PairedLayer( int aLayerId )
9599
{
@@ -119,6 +123,7 @@ class SIZES_SETTINGS
119123
VIATYPE m_viaType;
120124
int m_viaDiameter;
121125
int m_viaDrill;
126+
int m_viaDefinition;
122127

123128
int m_diffPairWidth;
124129
int m_diffPairGap;

3rd_party/router/router/pns_via.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ VIA* VIA::Clone() const
103103
v->m_parent = m_parent;
104104
v->m_isFree = m_isFree;
105105
v->m_isVirtual = m_isVirtual;
106+
v->m_definition = m_definition;
106107

107108
return v;
108109
}

3rd_party/router/router/pns_via.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ class VIA : public ITEM
5656
m_viaType = VIATYPE::THROUGH;
5757
m_isFree = false;
5858
m_isVirtual = false;
59+
m_definition = -1;
5960
}
6061

6162
VIA( const VECTOR2I& aPos, const LAYER_RANGE& aLayers, int aDiameter, int aDrill,
@@ -72,6 +73,7 @@ class VIA : public ITEM
7273
m_viaType = aViaType;
7374
m_isFree = false;
7475
m_isVirtual = false;
76+
m_definition = -1;
7577
}
7678

7779
VIA( const VIA& aB ) :
@@ -89,6 +91,7 @@ class VIA : public ITEM
8991
m_viaType = aB.m_viaType;
9092
m_isFree = aB.m_isFree;
9193
m_isVirtual = aB.m_isVirtual;
94+
m_definition = aB.m_definition;
9295
}
9396

9497
static inline bool ClassOf( const ITEM* aItem )
@@ -149,6 +152,9 @@ class VIA : public ITEM
149152
{
150153
return 1;
151154
}
155+
156+
int Definition() const { return m_definition; }
157+
void SetDefinition( int aDef ) { m_definition = aDef; }
152158

153159
OPT_BOX2I ChangedArea( const VIA* aOther ) const;
154160

@@ -162,6 +168,7 @@ class VIA : public ITEM
162168
SHAPE_CIRCLE m_hole;
163169
VIATYPE m_viaType;
164170
bool m_isFree;
171+
int m_definition;
165172

166173
};
167174

Makefile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,8 @@ SRC_COMMON = \
8181
src/board/rule_layer_pair.cpp\
8282
src/board/rule_clearance_same_net.cpp\
8383
src/board/rule_board_connectivity.cpp\
84+
src/board/rule_via_definitions.cpp\
85+
src/board/via_definition.cpp\
8486
3rd_party/delaunator/delaunator.cpp\
8587
src/board/airwires.cpp\
8688
src/board/gerber_output_settings.cpp\
@@ -443,6 +445,7 @@ SRC_IMP = \
443445
src/dialogs/edit_text_window.cpp\
444446
src/dialogs/plane_update.cpp\
445447
src/dialogs/map_net_tie.cpp\
448+
src/dialogs/select_via_definition.cpp\
446449
src/util/sort_controller.cpp\
447450
src/core/core_symbol.cpp\
448451
src/core/core_schematic.cpp\
@@ -519,6 +522,7 @@ SRC_IMP = \
519522
src/imp/rules/rule_editor_clearance_same_net.cpp\
520523
src/imp/rules/rule_editor_shorted_pads.cpp\
521524
src/imp/rules/rule_editor_thermals.cpp\
525+
src/imp/rules/rule_editor_via_definitions.cpp\
522526
src/imp/rules/import.cpp\
523527
src/imp/rules/export.cpp\
524528
src/widgets/location_entry.cpp\
@@ -613,6 +617,7 @@ SRC_IMP = \
613617
src/util/done_revealer_controller.cpp\
614618
src/widgets/reflow_box.cpp\
615619
src/util/pasted_package.cpp\
620+
src/widgets/layer_range_editor.cpp\
616621

617622
SRC_IMPC = \
618623
3rd_party/footag/wiz.c\

imp.gresource.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@
109109
<file>imp/rules/rule_editor_hole_size.ui</file>
110110
<file>imp/rules/rule_editor_track_width.ui</file>
111111
<file>imp/rules/rule_editor_clearance_copper.ui</file>
112+
<file>imp/rules/rule_editor_via_definitions.ui</file>
112113
<file>imp/rules/rule_export.ui</file>
113114
<file>imp/fab_output.ui</file>
114115
<file>imp/bom_export.ui</file>

scripts/app_versions.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ versions:
1919
17: save plane fragements to a separate file
2020
18: increase maximum number of inner layers to 8
2121
19: add blind and buried vias
22+
20: add via definitions
2223
schematic:
2324
1: add custom values on symbols
2425
2: add hierarchy

src/board/board.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ const LutEnumStr<Board::OutputFormat> Board::output_format_lut = {
4343
{"odb", Board::OutputFormat::ODB},
4444
};
4545

46-
static const unsigned int app_version = 19;
46+
static const unsigned int app_version = 20;
4747

4848
unsigned int Board::get_app_version()
4949
{

src/board/board_rules.cpp

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ BoardRules::BoardRules(const BoardRules &other)
2121
rule_shorted_pads(other.rule_shorted_pads), rule_thermals(other.rule_thermals),
2222
rule_clearance_silkscreen_exposed_copper(other.rule_clearance_silkscreen_exposed_copper),
2323
rule_parameters(other.rule_parameters), rule_preflight_checks(other.rule_preflight_checks),
24-
rule_net_ties(other.rule_net_ties), rule_board_connectivity(other.rule_board_connectivity)
24+
rule_net_ties(other.rule_net_ties), rule_board_connectivity(other.rule_board_connectivity),
25+
rule_via_definitions(other.rule_via_definitions)
2526
{
2627
update_sorted();
2728
}
@@ -45,6 +46,7 @@ void BoardRules::operator=(const BoardRules &other)
4546
rule_preflight_checks = other.rule_preflight_checks;
4647
rule_net_ties = other.rule_net_ties;
4748
rule_board_connectivity = other.rule_board_connectivity;
49+
rule_via_definitions = other.rule_via_definitions;
4850

4951
update_sorted();
5052
}
@@ -179,6 +181,10 @@ void BoardRules::import_rules(const json &j, const RuleImportMap &import_map)
179181
const json &o = j["parameters"];
180182
rule_parameters = RuleParameters(o, import_map);
181183
}
184+
if (j.count("via_definitions")) {
185+
const json &o = j["via_definitions"];
186+
rule_via_definitions = RuleViaDefinitions(o, import_map);
187+
}
182188
}
183189

184190
void BoardRules::cleanup(const Block *block)
@@ -274,6 +280,19 @@ void BoardRules::apply(RuleID id, Board &brd, IPool &pool) const
274280
}
275281
}
276282
}
283+
else if (id == RuleID::VIA_DEFINITIONS) {
284+
for (auto &[uu, via] : brd.vias) {
285+
if (via.source == Via::Source::DEFINITION) {
286+
if (rule_via_definitions.via_definitions.count(via.definition)) {
287+
auto &def = rule_via_definitions.via_definitions.at(via.definition);
288+
via.pool_padstack = pool.get_padstack(def.padstack);
289+
via.span = def.span;
290+
via.parameter_set = def.parameters;
291+
via.expand(brd);
292+
}
293+
}
294+
}
295+
}
277296
else if (id == RuleID::PLANE) {
278297
for (auto &it : brd.planes) {
279298
auto &plane = it.second;
@@ -318,6 +337,7 @@ json BoardRules::serialize_or_export(Rule::SerializeMode mode) const
318337

319338
j["clearance_silkscreen_exposed_copper"] = rule_clearance_silkscreen_exposed_copper.serialize();
320339
j["parameters"] = rule_parameters.serialize();
340+
j["via_definitions"] = rule_via_definitions.serialize();
321341
return j;
322342
}
323343

@@ -339,6 +359,7 @@ std::vector<RuleID> BoardRules::get_rule_ids() const
339359
RuleID::HOLE_SIZE,
340360

341361
RuleID::VIA,
362+
RuleID::VIA_DEFINITIONS,
342363
RuleID::PLANE,
343364
RuleID::THERMALS,
344365
RuleID::DIFFPAIR,
@@ -369,6 +390,9 @@ const Rule &BoardRules::get_rule(RuleID id) const
369390
else if (id == RuleID::BOARD_CONNECTIVITY) {
370391
return rule_board_connectivity;
371392
}
393+
else if (id == RuleID::VIA_DEFINITIONS) {
394+
return rule_via_definitions;
395+
}
372396
throw std::runtime_error("rule does not exist");
373397
}
374398

@@ -722,6 +746,11 @@ const RuleParameters &BoardRules::get_parameters() const
722746
return rule_parameters;
723747
}
724748

749+
const RuleViaDefinitions &BoardRules::get_via_definitions() const
750+
{
751+
return rule_via_definitions;
752+
}
753+
725754
UUID BoardRules::get_via_padstack_uuid(const Net *net) const
726755
{
727756
auto rules = get_rules_sorted<RuleVia>();

0 commit comments

Comments
 (0)