KiCad PCB EDA Suite
Loading...
Searching...
No Matches
mock_pcb_tuning_pattern.cpp
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) 2023 Alex Shvartzkop <[email protected]>
5 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, you may find one here:
19 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20 * or you may search the http://www.gnu.org website for the version 2 license,
21 * or you may write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23 */
24
25#include <pcb_generator.h>
26#include <generators_mgr.h>
27
28#include <functional>
29#include <optional>
30#include <magic_enum.hpp>
31
32#include <wx/debug.h>
33#include <wx/log.h>
34
38#include <kiplatform/ui.h>
40#include <collectors.h>
41#include <scoped_set_reset.h>
42#include <core/mirror.h>
43#include <string_utils.h>
44
45#include <board.h>
47#include <drc/drc_engine.h>
48#include <pcb_track.h>
49#include <pcb_shape.h>
50#include <pcb_group.h>
51
52#include <tool/edit_points.h>
53#include <tool/tool_manager.h>
54#include <tools/drawing_tool.h>
59
62#include <view/view.h>
63#include <view/view_controls.h>
64
67#include <router/pns_meander.h>
69#include <router/pns_segment.h>
70#include <router/pns_arc.h>
71#include <router/pns_solid.h>
72#include <router/pns_topology.h>
74
76
78#include <properties/property.h>
80
81
82
83
84static LENGTH_TUNING_MODE tuningFromString( const std::string& aStr )
85{
86 if( aStr == "single" )
88 else if( aStr == "diff_pair" )
90 else if( aStr == "diff_pair_skew" )
92 else
93 {
94 wxFAIL_MSG( wxS( "Unknown length tuning token" ) );
96 }
97}
98
99
100static std::string tuningToString( const LENGTH_TUNING_MODE aTuning )
101{
102 switch( aTuning )
103 {
104 case LENGTH_TUNING_MODE::SINGLE: return "single";
105 case LENGTH_TUNING_MODE::DIFF_PAIR: return "diff_pair";
106 case LENGTH_TUNING_MODE::DIFF_PAIR_SKEW: return "diff_pair_skew";
107 default: wxFAIL; return "";
108 }
109}
110
111
122
123
124static PNS::MEANDER_SIDE sideFromString( const std::string& aStr )
125{
126 if( aStr == "default" )
128 else if( aStr == "left" )
130 else if( aStr == "right" )
132 else
133 {
134 wxFAIL_MSG( wxS( "Unknown length-tuning side token" ) );
136 }
137}
138
139
141{
142 switch( aStatus )
143 {
144 case PNS::MEANDER_PLACER_BASE::TOO_LONG: return "too_long";
145 case PNS::MEANDER_PLACER_BASE::TOO_SHORT: return "too_short";
146 case PNS::MEANDER_PLACER_BASE::TUNED: return "tuned";
147 default: wxFAIL; return "";
148 }
149}
150
151
153{
154 if( aStr == "too_long" )
156 else if( aStr == "too_short" )
158 else if( aStr == "tuned" )
160 else
161 {
162 wxFAIL_MSG( wxS( "Unknown tuning status token" ) );
164 }
165}
166
167
168static std::string sideToString( const PNS::MEANDER_SIDE aValue )
169{
170 switch( aValue )
171 {
172 case PNS::MEANDER_SIDE_DEFAULT: return "default";
173 case PNS::MEANDER_SIDE_LEFT: return "left";
174 case PNS::MEANDER_SIDE_RIGHT: return "right";
175 default: wxFAIL; return "";
176 }
177}
178
179
180
181
183 LENGTH_TUNING_MODE aMode ) :
184 PCB_GENERATOR( aParent, aLayer ),
185 m_trackWidth( 0 ),
186 m_diffPairGap( 0 ),
187 m_tuningMode( aMode ),
188 m_tuningLength( 0 ),
189 m_tuningStatus( PNS::MEANDER_PLACER_BASE::TUNING_STATUS::TUNED ),
190 m_updateSideFromEnd( false )
191{
192 m_generatorType = GENERATOR_TYPE;
193 m_name = DISPLAY_NAME;
194 m_end = VECTOR2I( pcbIUScale.mmToIU( 10 ), 0 );
195 m_settings.m_initialSide = PNS::MEANDER_SIDE_LEFT;
196}
197
199 PCB_BASE_EDIT_FRAME* aFrame,
200 BOARD_CONNECTED_ITEM* aStartItem,
201 LENGTH_TUNING_MODE aMode )
202{
203 return nullptr;
204}
205
206
208{
209 return false;
210}
211
212
213void PCB_TUNING_PATTERN::EditStart( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit )
214{
215}
216
217
218static PNS::LINKED_ITEM* pickSegment( PNS::ROUTER* aRouter, const VECTOR2I& aWhere, int aLayer,
219 VECTOR2I& aPointOut,
220 const SHAPE_LINE_CHAIN& aBaseline = SHAPE_LINE_CHAIN() )
221{
222 return nullptr;
223}
224
225
226static std::optional<PNS::LINE> getPNSLine( const VECTOR2I& aStart, const VECTOR2I& aEnd,
227 PNS::ROUTER* router, int layer, VECTOR2I& aStartOut,
228 VECTOR2I& aEndOut )
229{
230 return std::nullopt;
231}
232
233
234bool PCB_TUNING_PATTERN::initBaseLine( PNS::ROUTER* aRouter, int aPNSLayer, BOARD* aBoard,
235 VECTOR2I& aStart, VECTOR2I& aEnd, NETINFO_ITEM* aNet,
236 std::optional<SHAPE_LINE_CHAIN>& aBaseLine )
237{
238 return true;
239}
240
241
242bool PCB_TUNING_PATTERN::initBaseLines( PNS::ROUTER* aRouter, int aPNSLayer, BOARD* aBoard )
243{
244 return true;
245}
246
247
248bool PCB_TUNING_PATTERN::removeToBaseline( PNS::ROUTER* aRouter, int aPNSLayer, SHAPE_LINE_CHAIN& aBaseLine )
249{
250
251 return true;
252}
253
254
255void PCB_TUNING_PATTERN::Remove( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit )
256{
257
258}
259
260
262{
263 return true;
264}
265
266
267bool PCB_TUNING_PATTERN::resetToBaseline( GENERATOR_TOOL* aTool, int aPNSLayer, SHAPE_LINE_CHAIN& aBaseLine,
268 bool aPrimary )
269{
270 return true;
271}
272
273
274bool PCB_TUNING_PATTERN::Update( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit )
275{
276 return true;
277}
278
279
280void PCB_TUNING_PATTERN::EditFinish( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit )
281{
282}
283
284
285void PCB_TUNING_PATTERN::EditCancel( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit )
286{
287}
288
289
291{
292 return true;
293}
294
295
297{
298
299 return true;
300}
301
302
304{
305
306 return true;
307}
308
309
311{
312 return SHAPE_LINE_CHAIN();
313}
314
315
316void PCB_TUNING_PATTERN::ViewDraw( int aLayer, KIGFX::VIEW* aView ) const
317{
318}
319
320
322{
323 return STRING_ANY_MAP();
324}
325
326
328{
329
330}
331
332
334{
335}
336
337
338std::vector<EDA_ITEM*> PCB_TUNING_PATTERN::GetPreviewItems( GENERATOR_TOOL* aTool,
339 PCB_BASE_EDIT_FRAME* aFrame,
340 bool aStatusItemsOnly )
341{
342 std::vector<EDA_ITEM*> previewItems;
343
344 return previewItems;
345}
346
347
349 std::vector<MSG_PANEL_ITEM>& aList )
350{
351}
352
353
354const wxString PCB_TUNING_PATTERN::DISPLAY_NAME = _HKI( "Tuning Pattern" );
355const wxString PCB_TUNING_PATTERN::GENERATOR_TYPE = wxS( "tuning_pattern" );
356
357
359
360
361#define HITTEST_THRESHOLD_PIXELS 5
362
363
365{
366 return 0;
367}
368
369
371
372// Also register under the 7.99 name
373template <typename T>
375{
377 {
378 GENERATORS_MGR::Instance().Register( wxS( "meanders" ), T::DISPLAY_NAME,
379 []()
380 {
381 return new T;
382 } );
383 }
384};
385
constexpr EDA_IU_SCALE pcbIUScale
Definition base_units.h:112
A base class derived from BOARD_ITEM for items that can be connected and have a net,...
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition board_item.h:84
Information pertinent to a Pcbnew printed circuit board.
Definition board.h:322
int PlaceTuningPattern(const TOOL_EVENT &aEvent)
The base class for create windows for drawing purpose.
EDIT_POINTS is a VIEW_ITEM that manages EDIT_POINTs and EDIT_LINEs and draws them.
void Register(const wxString &aTypeStr, const wxString &aName, std::function< PCB_GENERATOR *(void)> aCreateFunc)
Associate a type string to display name and create function.
static GENERATORS_MGR & Instance()
Handle actions specific to filling copper zones.
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
Definition view.h:67
Handle the data for a net.
Definition netinfo.h:54
Common, abstract interface for edit frames.
bool initBaseLines(PNS::ROUTER *aRouter, int aPNSLayer, BOARD *aBoard)
const STRING_ANY_MAP GetProperties() const override
static const wxString DISPLAY_NAME
void GetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList) override
Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.
bool initBaseLine(PNS::ROUTER *aRouter, int aPNSLayer, BOARD *aBoard, VECTOR2I &aStart, VECTOR2I &aEnd, NETINFO_ITEM *aNet, std::optional< SHAPE_LINE_CHAIN > &aBaseLine)
PCB_TUNING_PATTERN(BOARD_ITEM *aParent=nullptr, PCB_LAYER_ID aLayer=F_Cu, LENGTH_TUNING_MODE aMode=LENGTH_TUNING_MODE::SINGLE)
bool recoverBaseline(PNS::ROUTER *aRouter)
std::vector< EDA_ITEM * > GetPreviewItems(GENERATOR_TOOL *aTool, PCB_BASE_EDIT_FRAME *aFrame, bool aStatusItemsOnly=false) override
void EditStart(GENERATOR_TOOL *aTool, BOARD *aBoard, BOARD_COMMIT *aCommit) override
static const wxString GENERATOR_TYPE
bool resetToBaseline(GENERATOR_TOOL *aTool, int aPNSLayer, SHAPE_LINE_CHAIN &aBaseLine, bool aPrimary)
bool MakeEditPoints(EDIT_POINTS &points) const override
void SetProperties(const STRING_ANY_MAP &aProps) override
void ViewDraw(int aLayer, KIGFX::VIEW *aView) const override final
Draw the parts of the object belonging to layer aLayer.
void Remove(GENERATOR_TOOL *aTool, BOARD *aBoard, BOARD_COMMIT *aCommit) override
bool UpdateFromEditPoints(EDIT_POINTS &aEditPoints) override
void ShowPropertiesDialog(PCB_BASE_EDIT_FRAME *aEditFrame) override
bool Update(GENERATOR_TOOL *aTool, BOARD *aBoard, BOARD_COMMIT *aCommit) override
bool UpdateEditPoints(EDIT_POINTS &aEditPoints) override
void EditCancel(GENERATOR_TOOL *aTool, BOARD *aBoard, BOARD_COMMIT *aCommit) override
bool removeToBaseline(PNS::ROUTER *aRouter, int aPNSLayer, SHAPE_LINE_CHAIN &aBaseLine)
void EditFinish(GENERATOR_TOOL *aTool, BOARD *aBoard, BOARD_COMMIT *aCommit) override
SHAPE_LINE_CHAIN getOutline() const
static PCB_TUNING_PATTERN * CreateNew(GENERATOR_TOOL *aTool, PCB_BASE_EDIT_FRAME *aFrame, BOARD_CONNECTED_ITEM *aStartItem, LENGTH_TUNING_MODE aMode)
TUNING_STATUS
< Result of the length tuning operation
RAII class that sets an value at construction and resets it to the original value at destruction.
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
A name/value tuple with unique names and wxAny values.
Generic, UI-independent tool event.
Definition tool_event.h:171
a few functions useful in geometry calculations.
PCB_LAYER_ID
A quick note on layer IDs:
Definition layer_ids.h:60
static PNS::MEANDER_SIDE sideFromString(const std::string &aStr)
static LENGTH_TUNING_MODE tuningFromString(const std::string &aStr)
static std::string tuningToString(const LENGTH_TUNING_MODE aTuning)
static LENGTH_TUNING_MODE fromPNSMode(PNS::ROUTER_MODE aRouterMode)
static PNS::MEANDER_PLACER_BASE::TUNING_STATUS statusFromString(const std::string &aStr)
static std::string sideToString(const PNS::MEANDER_SIDE aValue)
static std::string statusToString(const PNS::MEANDER_PLACER_BASE::TUNING_STATUS aStatus)
static PNS::LINKED_ITEM * pickSegment(PNS::ROUTER *aRouter, const VECTOR2I &aWhere, int aLayer, VECTOR2I &aPointOut, const SHAPE_LINE_CHAIN &aBaseline=SHAPE_LINE_CHAIN())
static std::optional< PNS::LINE > getPNSLine(const VECTOR2I &aStart, const VECTOR2I &aEnd, PNS::ROUTER *router, int layer, VECTOR2I &aStartOut, VECTOR2I &aEndOut)
Push and Shove diff pair dimensions (gap) settings dialog.
MEANDER_SIDE
Definition pns_meander.h:60
@ MEANDER_SIDE_RIGHT
Definition pns_meander.h:63
@ MEANDER_SIDE_DEFAULT
Definition pns_meander.h:62
@ MEANDER_SIDE_LEFT
Definition pns_meander.h:61
ROUTER_MODE
Definition pns_router.h:67
@ PNS_MODE_TUNE_DIFF_PAIR
Definition pns_router.h:71
@ PNS_MODE_TUNE_SINGLE
Definition pns_router.h:70
@ PNS_MODE_TUNE_DIFF_PAIR_SKEW
Definition pns_router.h:72
#define _HKI(x)
Definition page_info.cpp:44
Class to handle a set of BOARD_ITEMs.
static GENERATORS_MGR::REGISTER< PCB_TUNING_PATTERN > registerMe
SCOPED_SET_RESET< DRAWING_TOOL::MODE > SCOPED_DRAW_MODE
static REGISTER_LEGACY_TUNING_PATTERN< PCB_TUNING_PATTERN > registerMeToo
LENGTH_TUNING_MODE
@ DIFF_PAIR
@ DIFF_PAIR_SKEW
Static helper to register a generator.
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:695