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, see <https://www.gnu.org/licenses/>.
19 */
20
21#include <pcb_generator.h>
22#include <generators_mgr.h>
23
24#include <functional>
25#include <optional>
26#include <magic_enum.hpp>
27
28#include <wx/debug.h>
29#include <wx/log.h>
30
34#include <kiplatform/ui.h>
36#include <collectors.h>
37#include <scoped_set_reset.h>
38#include <core/mirror.h>
39#include <string_utils.h>
40
41#include <board.h>
43#include <drc/drc_engine.h>
44#include <pcb_track.h>
45#include <pcb_shape.h>
46#include <pcb_group.h>
47
48#include <tool/edit_points.h>
49#include <tool/tool_manager.h>
50#include <tools/drawing_tool.h>
55
58#include <view/view.h>
59#include <view/view_controls.h>
60
63#include <router/pns_meander.h>
65#include <router/pns_segment.h>
66#include <router/pns_arc.h>
67#include <router/pns_solid.h>
68#include <router/pns_topology.h>
70
72
74#include <properties/property.h>
76
77
78
79
80static LENGTH_TUNING_MODE tuningFromString( const std::string& aStr )
81{
82 if( aStr == "single" )
84 else if( aStr == "diff_pair" )
86 else if( aStr == "diff_pair_skew" )
88 else
89 {
90 wxFAIL_MSG( wxS( "Unknown length tuning token" ) );
92 }
93}
94
95
96static std::string tuningToString( const LENGTH_TUNING_MODE aTuning )
97{
98 switch( aTuning )
99 {
100 case LENGTH_TUNING_MODE::SINGLE: return "single";
101 case LENGTH_TUNING_MODE::DIFF_PAIR: return "diff_pair";
102 case LENGTH_TUNING_MODE::DIFF_PAIR_SKEW: return "diff_pair_skew";
103 default: wxFAIL; return "";
104 }
105}
106
107
118
119
120static PNS::MEANDER_SIDE sideFromString( const std::string& aStr )
121{
122 if( aStr == "default" )
124 else if( aStr == "left" )
126 else if( aStr == "right" )
128 else
129 {
130 wxFAIL_MSG( wxS( "Unknown length-tuning side token" ) );
132 }
133}
134
135
137{
138 switch( aStatus )
139 {
140 case PNS::MEANDER_PLACER_BASE::TOO_LONG: return "too_long";
141 case PNS::MEANDER_PLACER_BASE::TOO_SHORT: return "too_short";
142 case PNS::MEANDER_PLACER_BASE::TUNED: return "tuned";
143 default: wxFAIL; return "";
144 }
145}
146
147
149{
150 if( aStr == "too_long" )
152 else if( aStr == "too_short" )
154 else if( aStr == "tuned" )
156 else
157 {
158 wxFAIL_MSG( wxS( "Unknown tuning status token" ) );
160 }
161}
162
163
164static std::string sideToString( const PNS::MEANDER_SIDE aValue )
165{
166 switch( aValue )
167 {
168 case PNS::MEANDER_SIDE_DEFAULT: return "default";
169 case PNS::MEANDER_SIDE_LEFT: return "left";
170 case PNS::MEANDER_SIDE_RIGHT: return "right";
171 default: wxFAIL; return "";
172 }
173}
174
175
176
177
179 LENGTH_TUNING_MODE aMode ) :
180 PCB_GENERATOR( aParent, aLayer ),
181 m_trackWidth( 0 ),
182 m_diffPairGap( 0 ),
183 m_tuningMode( aMode ),
184 m_tuningLength( 0 ),
185 m_tuningStatus( PNS::MEANDER_PLACER_BASE::TUNING_STATUS::TUNED ),
186 m_updateSideFromEnd( false )
187{
188 m_generatorType = GENERATOR_TYPE;
189 m_name = DISPLAY_NAME;
190 m_end = VECTOR2I( pcbIUScale.mmToIU( 10 ), 0 );
191 m_settings.m_initialSide = PNS::MEANDER_SIDE_LEFT;
192}
193
195 PCB_BASE_EDIT_FRAME* aFrame,
196 BOARD_CONNECTED_ITEM* aStartItem,
197 LENGTH_TUNING_MODE aMode )
198{
199 return nullptr;
200}
201
202
204{
205 return false;
206}
207
208
209void PCB_TUNING_PATTERN::EditStart( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit )
210{
211}
212
213
214static PNS::LINKED_ITEM* pickSegment( PNS::ROUTER* aRouter, const VECTOR2I& aWhere, int aLayer,
215 VECTOR2I& aPointOut,
216 const SHAPE_LINE_CHAIN& aBaseline = SHAPE_LINE_CHAIN() )
217{
218 return nullptr;
219}
220
221
222static std::optional<PNS::LINE> getPNSLine( const VECTOR2I& aStart, const VECTOR2I& aEnd,
223 PNS::ROUTER* router, int layer, VECTOR2I& aStartOut,
224 VECTOR2I& aEndOut )
225{
226 return std::nullopt;
227}
228
229
230bool PCB_TUNING_PATTERN::initBaseLine( PNS::ROUTER* aRouter, int aPNSLayer, BOARD* aBoard,
231 VECTOR2I& aStart, VECTOR2I& aEnd, NETINFO_ITEM* aNet,
232 std::optional<SHAPE_LINE_CHAIN>& aBaseLine )
233{
234 return true;
235}
236
237
238bool PCB_TUNING_PATTERN::initBaseLines( PNS::ROUTER* aRouter, int aPNSLayer, BOARD* aBoard )
239{
240 return true;
241}
242
243
244bool PCB_TUNING_PATTERN::removeToBaseline( PNS::ROUTER* aRouter, int aPNSLayer, SHAPE_LINE_CHAIN& aBaseLine )
245{
246
247 return true;
248}
249
250
251void PCB_TUNING_PATTERN::Remove( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit )
252{
253
254}
255
256
258{
259 return true;
260}
261
262
263bool PCB_TUNING_PATTERN::resetToBaseline( GENERATOR_TOOL* aTool, int aPNSLayer, SHAPE_LINE_CHAIN& aBaseLine,
264 bool aPrimary )
265{
266 return true;
267}
268
269
270bool PCB_TUNING_PATTERN::Update( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit )
271{
272 return true;
273}
274
275
276void PCB_TUNING_PATTERN::EditFinish( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit )
277{
278}
279
280
281void PCB_TUNING_PATTERN::EditCancel( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit )
282{
283}
284
285
287{
288 return true;
289}
290
291
293{
294
295 return true;
296}
297
298
300{
301
302 return true;
303}
304
305
307{
308 return SHAPE_LINE_CHAIN();
309}
310
311
312void PCB_TUNING_PATTERN::ViewDraw( int aLayer, KIGFX::VIEW* aView ) const
313{
314}
315
316
318{
319 return STRING_ANY_MAP();
320}
321
322
324{
325
326}
327
328
330{
331}
332
333
334std::vector<EDA_ITEM*> PCB_TUNING_PATTERN::GetPreviewItems( GENERATOR_TOOL* aTool,
335 PCB_BASE_EDIT_FRAME* aFrame,
336 bool aStatusItemsOnly )
337{
338 std::vector<EDA_ITEM*> previewItems;
339
340 return previewItems;
341}
342
343
345 std::vector<MSG_PANEL_ITEM>& aList )
346{
347}
348
349
350const wxString PCB_TUNING_PATTERN::DISPLAY_NAME = _HKI( "Tuning Pattern" );
351const wxString PCB_TUNING_PATTERN::GENERATOR_TYPE = wxS( "tuning_pattern" );
352
353
355
356
357#define HITTEST_THRESHOLD_PIXELS 5
358
359
361{
362 return 0;
363}
364
365
367
368// Also register under the 7.99 name
369template <typename T>
371{
373 {
374 GENERATORS_MGR::Instance().Register( wxS( "meanders" ), T::DISPLAY_NAME,
375 []()
376 {
377 return new T;
378 } );
379 }
380};
381
constexpr EDA_IU_SCALE pcbIUScale
Definition base_units.h:121
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:81
Information pertinent to a Pcbnew printed circuit board.
Definition board.h:372
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:63
Handle the data for a net.
Definition netinfo.h:46
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:167
a few functions useful in geometry calculations.
PCB_LAYER_ID
A quick note on layer IDs:
Definition layer_ids.h:56
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:40
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:683