KiCad PCB EDA Suite
Loading...
Searching...
No Matches
pcb_tuning_pattern.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) 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 <eda_item.h>
27#include <pcb_base_edit_frame.h>
28#include <router/pns_meander.h>
30#include <router/pns_router.h>
32
33
34namespace KIGFX
35{
36 class VIEW;
37 class RENDER_SETTINGS;
38}
39
46
47
49{
50public:
52
53 wxString GetClass() const override;
54
55#if defined(DEBUG)
56 void Show( int nestLevel, std::ostream& os ) const override;
57#endif
58
59 VECTOR2I GetPosition() const override;
60 void SetPosition( const VECTOR2I& aPos ) override;
61
62 void SetMinMax( const double aMin, const double aMax );
63
64 void ClearMinMax();
65
66 void SetCurrent( const double aCurrent, const wxString& aLabel );
67
68 void SetIsTimeDomain( const bool aIsTimeDomain );
69
70 const BOX2I ViewBBox() const override;
71
72 std::vector<int> ViewGetLayers() const override;
73
74 void ViewDraw( int aLayer, KIGFX::VIEW* aView ) const override;
75
76protected:
79 double m_min;
80 double m_max;
81 double m_current;
83 wxString m_currentText;
84 wxString m_minText;
85 wxString m_maxText;
87};
88
89
91{
92public:
93 static const wxString GENERATOR_TYPE;
94 static const wxString DISPLAY_NAME;
95
96 PCB_TUNING_PATTERN( BOARD_ITEM* aParent = nullptr, PCB_LAYER_ID aLayer = F_Cu,
98
99 wxString GetGeneratorType() const override { return wxS( "tuning_pattern" ); }
100
101 wxString GetItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const override
102 {
103 return _( "Tuning Pattern" );
104 }
105
106 wxString GetFriendlyName() const override
107 {
108 return _( "Tuning Pattern" );
109 }
110
111 wxString GetPluralName() const override
112 {
113 return _( "Tuning Patterns" );
114 }
115
116 wxString GetCommitMessage() const override
117 {
118 return _( "Edit Tuning Pattern" );
119 }
120
121 BITMAPS GetMenuImage() const override
122 {
123 switch( m_tuningMode )
124 {
125 case SINGLE: return BITMAPS::ps_tune_length; break;
128 }
129
130 return BITMAPS::unknown;
131 }
132
134 BOARD_CONNECTED_ITEM* aStartItem,
135 LENGTH_TUNING_MODE aMode );
136
137 void EditStart( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit ) override;
138 bool Update( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit ) override;
139 void EditFinish( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit ) override;
140 void EditCancel( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit ) override;
141
142 void Remove( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit ) override;
143
144 bool MakeEditPoints( EDIT_POINTS& points ) const override;
145
146 bool UpdateFromEditPoints( EDIT_POINTS& aEditPoints ) override;
147
148 bool UpdateEditPoints( EDIT_POINTS& aEditPoints ) override;
149
150 void Move( const VECTOR2I& aMoveVector ) override
151 {
152 m_origin += aMoveVector;
153 m_end += aMoveVector;
154
155 if( !this->HasFlag( IN_EDIT ) )
156 {
157 PCB_GROUP::Move( aMoveVector );
158
159 if( m_baseLine )
160 m_baseLine->Move( aMoveVector );
161
163 m_baseLineCoupled->Move( aMoveVector );
164 }
165 }
166
167 void Rotate( const VECTOR2I& aRotCentre, const EDA_ANGLE& aAngle ) override
168 {
169 if( !this->HasFlag( IN_EDIT ) )
170 {
171 PCB_GENERATOR::Rotate( aRotCentre, aAngle );
172 RotatePoint( m_end, aRotCentre, aAngle );
173
174 if( m_baseLine )
175 m_baseLine->Rotate( aAngle, aRotCentre );
176
178 m_baseLineCoupled->Rotate( aAngle, aRotCentre );
179 }
180 }
181
182 void Flip( const VECTOR2I& aCentre, FLIP_DIRECTION aFlipDirection ) override
183 {
184 if( !this->HasFlag( IN_EDIT ) )
185 {
186 PCB_GENERATOR::Flip( aCentre, aFlipDirection );
187
188 baseMirror( aCentre, aFlipDirection );
189 }
190 }
191
192 void Mirror( const VECTOR2I& aCentre, FLIP_DIRECTION aFlipDirection ) override
193 {
194 if( !this->HasFlag( IN_EDIT ) )
195 {
196 PCB_GENERATOR::Mirror( aCentre, aFlipDirection );
197
198 baseMirror( aCentre, aFlipDirection );
199 }
200 }
201
202 void SetLayer( PCB_LAYER_ID aLayer ) override
203 {
204 PCB_GENERATOR::SetLayer( aLayer );
205
206 for( BOARD_ITEM* item : GetBoardItems() )
207 item->SetLayer( aLayer );
208 }
209
210 PCB_LAYER_ID GetLayer() const override
211 {
212 for( BOARD_ITEM* item : GetBoardItems() )
213 {
214 if( PCB_TRACK* track = dynamic_cast<PCB_TRACK*>( item ) )
215 return track->GetLayer();
216 }
217
219 }
220
221 const BOX2I GetBoundingBox() const override
222 {
223 return getOutline().BBox();
224 }
225
226 std::vector<int> ViewGetLayers() const override
227 {
228 return { LAYER_ANCHOR, GetLayer() };
229 }
230
231 bool HitTest( const VECTOR2I& aPosition, int aAccuracy = 0 ) const override
232 {
233 return getOutline().Collide( aPosition, aAccuracy );
234 }
235
236 bool HitTest( const BOX2I& aRect, bool aContained, int aAccuracy ) const override
237 {
238 bool anyItems = false;
239
240 for( BOARD_ITEM* item : GetBoardItems() )
241 {
242 anyItems = true;
243
244 if( aContained )
245 {
246 if( !item->HitTest( aRect, true, aAccuracy ) )
247 return false;
248 }
249 else if( item->HitTest( aRect, false, aAccuracy ) )
250 {
251 return true;
252 }
253 }
254
255 if( anyItems )
256 return aContained;
257
258 BOX2I sel = aRect;
259
260 if( aAccuracy )
261 sel.Inflate( aAccuracy );
262
263 // Convert selection box to polygon for accurate hit testing against the actual outline
264 SHAPE_LINE_CHAIN selPoly(
265 {
266 sel.GetOrigin(),
267 VECTOR2I( sel.GetRight(), sel.GetTop() ),
268 sel.GetEnd(),
269 VECTOR2I( sel.GetLeft(), sel.GetBottom() )
270 },
271 true );
272
273 return KIGEOM::ShapeHitTest( selPoly, getOutline(), aContained );
274 }
275
276 bool HitTest( const SHAPE_LINE_CHAIN& aPoly, bool aContained ) const override
277 {
278 bool anyItems = false;
279
280 for( BOARD_ITEM* item : GetBoardItems() )
281 {
282 anyItems = true;
283
284 if( aContained )
285 {
286 if( !item->HitTest( aPoly, true ) )
287 return false;
288 }
289 else if( item->HitTest( aPoly, false ) )
290 {
291 return true;
292 }
293 }
294
295 if( anyItems )
296 return aContained;
297
298 return KIGEOM::ShapeHitTest( aPoly, getOutline(), aContained );
299 }
300
301 const BOX2I ViewBBox() const override { return GetBoundingBox(); }
302
303 EDA_ITEM* Clone() const override { return new PCB_TUNING_PATTERN( *this ); }
304
305 void ViewDraw( int aLayer, KIGFX::VIEW* aView ) const override final;
306
307 const VECTOR2I& GetEnd() const { return m_end; }
308 void SetEnd( const VECTOR2I& aValue ) { m_end = aValue; }
309
310 int GetEndX() const { return m_end.x; }
311 void SetEndX( int aValue ) { m_end.x = aValue; }
312
313 int GetEndY() const { return m_end.y; }
314 void SetEndY( int aValue ) { m_end.y = aValue; }
315
316 int GetWidth() const
317 {
318 for( BOARD_ITEM* item : GetBoardItems() )
319 if( PCB_TRACK* track = dynamic_cast<PCB_TRACK*>( item ) )
320 return track->GetWidth();
321
322 return m_trackWidth;
323 }
324
325 void SetWidth( int aValue )
326 {
327 m_trackWidth = aValue;
328
329 for( BOARD_ITEM* item : GetBoardItems() )
330 if( PCB_TRACK* track = dynamic_cast<PCB_TRACK*>( item ) )
331 track->SetWidth( aValue );
332 }
333
334 int GetNetCode() const
335 {
336 for( BOARD_ITEM* item : GetBoardItems() )
337 if( BOARD_CONNECTED_ITEM* bci = dynamic_cast<BOARD_CONNECTED_ITEM*>( item ) )
338 return bci->GetNetCode();
339
340 return 0;
341 }
342
343 void SetNetCode( int aNetCode )
344 {
345 if( BOARD* board = GetBoard() )
346 {
347 if( NETINFO_ITEM* net = board->FindNet( aNetCode ) )
348 m_lastNetName = net->GetNetname();
349 else
350 m_lastNetName.clear();
351 }
352
353 for( BOARD_ITEM* item : GetBoardItems() )
354 if( BOARD_CONNECTED_ITEM* bci = dynamic_cast<BOARD_CONNECTED_ITEM*>( item ) )
355 bci->SetNetCode( aNetCode );
356 }
357
358 bool HasSolderMask() const
359 {
360 for( BOARD_ITEM* item : GetBoardItems() )
361 if( PCB_TRACK* track = dynamic_cast<PCB_TRACK*>( item ) )
362 return track->HasSolderMask();
363
364 return true;
365 }
366
367 void SetHasSolderMask( bool aVal )
368 {
369 for( BOARD_ITEM* item : GetBoardItems() )
370 if( PCB_TRACK* track = dynamic_cast<PCB_TRACK*>( item ) )
371 track->SetHasSolderMask( aVal );
372 }
373
374 std::optional<int> GetLocalSolderMaskMargin() const
375 {
376 for( BOARD_ITEM* item : GetBoardItems() )
377 if( PCB_TRACK* track = dynamic_cast<PCB_TRACK*>( item ) )
378 return track->GetLocalSolderMaskMargin();
379
380 return std::optional<int>();
381 }
382
383 void SetLocalSolderMaskMargin( std::optional<int> aMargin )
384 {
385 for( BOARD_ITEM* item : GetBoardItems() )
386 if( PCB_TRACK* track = dynamic_cast<PCB_TRACK*>( item ) )
387 track->SetLocalSolderMaskMargin( aMargin );
388 }
389
391
402
404
405 int GetMinAmplitude() const { return m_settings.m_minAmplitude; }
406 void SetMinAmplitude( int aValue )
407 {
408 aValue = std::max( aValue, 0 );
409
410 m_settings.m_minAmplitude = aValue;
411
412 if( m_settings.m_maxAmplitude < m_settings.m_minAmplitude )
413 m_settings.m_maxAmplitude = m_settings.m_minAmplitude;
414 }
415
416 int GetMaxAmplitude() const { return m_settings.m_maxAmplitude; }
417 void SetMaxAmplitude( int aValue )
418 {
419 aValue = std::max( aValue, 0 );
420
421 m_settings.m_maxAmplitude = aValue;
422
423 if( m_settings.m_maxAmplitude < m_settings.m_minAmplitude )
424 m_settings.m_minAmplitude = m_settings.m_maxAmplitude;
425 }
426
427 // Update the initial side one time at EditStart based on m_end.
429
430 PNS::MEANDER_SIDE GetInitialSide() const { return m_settings.m_initialSide; }
431 void SetInitialSide( PNS::MEANDER_SIDE aValue ) { m_settings.m_initialSide = aValue; }
432
433 int GetSpacing() const { return m_settings.m_spacing; }
434 void SetSpacing( int aValue ) { m_settings.m_spacing = aValue; }
435
436 std::optional<int> GetTargetLength() const
437 {
438 if( m_settings.m_targetLength.Opt() == PNS::MEANDER_SETTINGS::LENGTH_UNCONSTRAINED )
439 return std::optional<int>();
440 else
441 return m_settings.m_targetLength.Opt();
442 }
443
444 void SetTargetLength( std::optional<int> aValue )
445 {
446 m_settings.m_isTimeDomain = false;
447
448 if( aValue.has_value() )
449 m_settings.SetTargetLength( aValue.value() );
450 else
452 }
453
454 std::optional<int> GetTargetDelay() const
455 {
456 if( m_settings.m_targetLengthDelay.Opt() == PNS::MEANDER_SETTINGS::DELAY_UNCONSTRAINED )
457 return std::optional<int>();
458 else
459 return m_settings.m_targetLengthDelay.Opt();
460 }
461
462 void SetTargetDelay( std::optional<int> aValue )
463 {
464 m_settings.m_isTimeDomain = true;
465
466 if( aValue.has_value() )
467 m_settings.SetTargetLengthDelay( aValue.value() );
468 else
470 }
471
472 int GetTargetSkew() const { return m_settings.m_targetSkew.Opt(); }
473 void SetTargetSkew( int aValue ) { m_settings.SetTargetSkew( aValue ); }
474
475 int GetTargetSkewDelay() const { return m_settings.m_targetSkewDelay.Opt(); }
476 void SetTargetSkewDelay( int aValue ) { m_settings.SetTargetSkewDelay( aValue ); }
477
478 bool GetOverrideCustomRules() const { return m_settings.m_overrideCustomRules; }
479 void SetOverrideCustomRules( bool aOverride ) { m_settings.m_overrideCustomRules = aOverride; }
480
481 int GetCornerRadiusPercentage() const { return m_settings.m_cornerRadiusPercentage; }
482 void SetCornerRadiusPercentage( int aValue ) { m_settings.m_cornerRadiusPercentage = aValue; }
483
484 bool IsSingleSided() const { return m_settings.m_singleSided; }
485 void SetSingleSided( bool aValue ) { m_settings.m_singleSided = aValue; }
486
487 bool IsRounded() const { return m_settings.m_cornerStyle == PNS::MEANDER_STYLE_ROUND; }
488 void SetRounded( bool aFlag ) { m_settings.m_cornerStyle = aFlag ? PNS::MEANDER_STYLE_ROUND
490
491 std::vector<std::pair<wxString, wxVariant>> GetRowData() override
492 {
493 std::vector<std::pair<wxString, wxVariant>> data = PCB_GENERATOR::GetRowData();
494 data.emplace_back( _HKI( "Net" ), m_lastNetName );
495 data.emplace_back( _HKI( "Tuning" ), m_tuningInfo );
496 return data;
497 }
498
499 const STRING_ANY_MAP GetProperties() const override;
500 void SetProperties( const STRING_ANY_MAP& aProps ) override;
501
502 void ShowPropertiesDialog( PCB_BASE_EDIT_FRAME* aEditFrame ) override;
503
504 std::vector<EDA_ITEM*> GetPreviewItems( GENERATOR_TOOL* aTool, PCB_BASE_EDIT_FRAME* aFrame,
505 bool aStatusItemsOnly = false ) override;
506
507 void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
508
509protected:
510 void swapData( BOARD_ITEM* aImage ) override
511 {
512 wxASSERT( aImage->Type() == PCB_GENERATOR_T );
513
514 std::swap( *this, *static_cast<PCB_TUNING_PATTERN*>( aImage ) );
515 }
516
517 bool recoverBaseline( PNS::ROUTER* aRouter );
518
519 bool baselineValid();
520
521 bool initBaseLine( PNS::ROUTER* aRouter, int aPNSLayer, BOARD* aBoard, VECTOR2I& aStart,
522 VECTOR2I& aEnd, NETINFO_ITEM* aNet,
523 std::optional<SHAPE_LINE_CHAIN>& aBaseLine );
524
525 bool initBaseLines( PNS::ROUTER* aRouter, int aPNSLayer, BOARD* aBoard );
526
527 bool removeToBaseline( PNS::ROUTER* aRouter, int aPNSLayer, SHAPE_LINE_CHAIN& aBaseLine );
528
529 bool resetToBaseline( GENERATOR_TOOL* aTool, int aPNSLayer, SHAPE_LINE_CHAIN& aBaseLine,
530 bool aPrimary );
531
533
534 void baseMirror( const VECTOR2I& aCentre, FLIP_DIRECTION aFlipDirection )
535 {
536 PCB_GENERATOR::baseMirror( aCentre, aFlipDirection );
537
538 if( m_baseLine )
539 {
540 m_baseLine->Mirror( aCentre, aFlipDirection );
541 m_origin = m_baseLine->CPoint( 0 );
542 m_end = m_baseLine->CLastPoint();
543 }
544
546 m_baseLineCoupled->Mirror( aCentre, aFlipDirection );
547
548 if( m_settings.m_initialSide == PNS::MEANDER_SIDE_RIGHT )
549 m_settings.m_initialSide = PNS::MEANDER_SIDE_LEFT;
550 else
551 m_settings.m_initialSide = PNS::MEANDER_SIDE_RIGHT;
552 }
553
554protected:
556
558
559 std::optional<SHAPE_LINE_CHAIN> m_baseLine;
560 std::optional<SHAPE_LINE_CHAIN> m_baseLineCoupled;
561
564
566
568 wxString m_tuningInfo;
569 long long m_tuningLength;
570
572
574};
BITMAPS
A list of all bitmap identifiers.
@ ps_diff_pair_tune_length
@ ps_diff_pair_tune_phase
BOX2< VECTOR2I > BOX2I
Definition box2.h:922
A base class derived from BOARD_ITEM for items that can be connected and have a net,...
BOARD_ITEM(BOARD_ITEM *aParent, KICAD_T idtype, PCB_LAYER_ID aLayer=F_Cu)
Definition board_item.h:86
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition board_item.h:268
friend class BOARD
Definition board_item.h:494
virtual const BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
Information pertinent to a Pcbnew printed circuit board.
Definition board.h:323
constexpr BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
Definition box2.h:558
constexpr const Vec GetEnd() const
Definition box2.h:212
constexpr coord_type GetLeft() const
Definition box2.h:228
constexpr const Vec & GetOrigin() const
Definition box2.h:210
constexpr coord_type GetRight() const
Definition box2.h:217
constexpr coord_type GetTop() const
Definition box2.h:229
constexpr coord_type GetBottom() const
Definition box2.h:222
The base class for create windows for drawing purpose.
A base class for most all the KiCad significant classes used in schematics and boards.
Definition eda_item.h:100
KICAD_T Type() const
Returns the type of object.
Definition eda_item.h:112
bool HasFlag(EDA_ITEM_FLAGS aFlag) const
Definition eda_item.h:153
EDA_ITEM(EDA_ITEM *parent, KICAD_T idType, bool isSCH_ITEM=false, bool isBOARD_ITEM=false)
Definition eda_item.cpp:41
EDIT_POINTS is a VIEW_ITEM that manages EDIT_POINTs and EDIT_LINEs and draws them.
Handle actions specific to filling copper zones.
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
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:50
Common, abstract interface for edit frames.
void baseMirror(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection)
virtual void SetLayer(PCB_LAYER_ID aLayer) override
Set the layer this item is on.
void Rotate(const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle) override
Rotate this object.
void Flip(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection) override
Flip this object, i.e.
PCB_GENERATOR(BOARD_ITEM *aParent, PCB_LAYER_ID aLayer)
void Mirror(const VECTOR2I &aCentre, FLIP_DIRECTION aMirrorDirection) override
Mirror this object relative to a given horizontal axis the layer is not changed.
VECTOR2I m_origin
virtual std::vector< std::pair< wxString, wxVariant > > GetRowData()
void Move(const VECTOR2I &aMoveVector) override
Move this object.
std::unordered_set< BOARD_ITEM * > GetBoardItems() const
void SetTargetSkew(int aValue)
void Mirror(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection) override
Mirror this object relative to a given horizontal axis the layer is not changed.
bool initBaseLines(PNS::ROUTER *aRouter, int aPNSLayer, BOARD *aBoard)
const STRING_ANY_MAP GetProperties() const override
bool HitTest(const BOX2I &aRect, bool aContained, int aAccuracy) const override
Test if aPosition is inside or on the boundary of this item.
void SetEnd(const VECTOR2I &aValue)
void SetLocalSolderMaskMargin(std::optional< int > aMargin)
void SetMinAmplitude(int aValue)
void SetSpacing(int aValue)
wxString GetGeneratorType() const override
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
Return a user-visible description string of this item.
std::vector< int > ViewGetLayers() const override
bool HitTest(const SHAPE_LINE_CHAIN &aPoly, bool aContained) const override
Test if aPosition is inside or on the boundary of this item.
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.
PNS::ROUTER_MODE GetPNSMode()
bool initBaseLine(PNS::ROUTER *aRouter, int aPNSLayer, BOARD *aBoard, VECTOR2I &aStart, VECTOR2I &aEnd, NETINFO_ITEM *aNet, std::optional< SHAPE_LINE_CHAIN > &aBaseLine)
void SetTargetSkewDelay(int aValue)
PCB_TUNING_PATTERN(BOARD_ITEM *aParent=nullptr, PCB_LAYER_ID aLayer=F_Cu, LENGTH_TUNING_MODE aMode=LENGTH_TUNING_MODE::SINGLE)
const BOX2I ViewBBox() const override
Return the bounding box of the item covering all its layers.
void swapData(BOARD_ITEM *aImage) override
void SetLayer(PCB_LAYER_ID aLayer) override
Set the layer this item is on.
bool recoverBaseline(PNS::ROUTER *aRouter)
void SetWidth(int aValue)
PNS::MEANDER_SIDE GetInitialSide() const
std::optional< int > GetLocalSolderMaskMargin() const
const VECTOR2I & GetEnd() const
void SetInitialSide(PNS::MEANDER_SIDE aValue)
wxString GetFriendlyName() const override
void SetTargetDelay(std::optional< int > aValue)
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
wxString GetCommitMessage() const override
LENGTH_TUNING_MODE GetTuningMode() const
void SetHasSolderMask(bool aVal)
std::optional< int > GetTargetDelay() const
void Move(const VECTOR2I &aMoveVector) override
Move this object.
void Rotate(const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle) override
Rotate this object.
std::vector< EDA_ITEM * > GetPreviewItems(GENERATOR_TOOL *aTool, PCB_BASE_EDIT_FRAME *aFrame, bool aStatusItemsOnly=false) override
void Flip(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection) override
Flip this object, i.e.
void EditStart(GENERATOR_TOOL *aTool, BOARD *aBoard, BOARD_COMMIT *aCommit) override
void baseMirror(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection)
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
void SetOverrideCustomRules(bool aOverride)
void SetRounded(bool aFlag)
LENGTH_TUNING_MODE m_tuningMode
std::vector< std::pair< wxString, wxVariant > > GetRowData() 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 SetCornerRadiusPercentage(int aValue)
PNS::MEANDER_PLACER_BASE::TUNING_STATUS m_tuningStatus
std::optional< SHAPE_LINE_CHAIN > m_baseLineCoupled
void SetProperties(const STRING_ANY_MAP &aProps) override
wxString GetPluralName() const 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
std::optional< SHAPE_LINE_CHAIN > m_baseLine
PNS::MEANDER_SETTINGS m_settings
void SetEndX(int aValue)
void ShowPropertiesDialog(PCB_BASE_EDIT_FRAME *aEditFrame) override
PCB_LAYER_ID GetLayer() const override
Return the primary layer this item is on.
bool Update(GENERATOR_TOOL *aTool, BOARD *aBoard, BOARD_COMMIT *aCommit) override
void SetNetCode(int aNetCode)
bool UpdateEditPoints(EDIT_POINTS &aEditPoints) override
void EditCancel(GENERATOR_TOOL *aTool, BOARD *aBoard, BOARD_COMMIT *aCommit) override
bool GetOverrideCustomRules() const
void SetMaxAmplitude(int aValue)
PNS::MEANDER_SETTINGS & GetSettings()
void SetSingleSided(bool aValue)
bool removeToBaseline(PNS::ROUTER *aRouter, int aPNSLayer, SHAPE_LINE_CHAIN &aBaseLine)
std::optional< int > GetTargetLength() const
void EditFinish(GENERATOR_TOOL *aTool, BOARD *aBoard, BOARD_COMMIT *aCommit) override
bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
int GetCornerRadiusPercentage() const
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
SHAPE_LINE_CHAIN getOutline() const
void SetEndY(int aValue)
void SetTargetLength(std::optional< int > aValue)
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
Dimensions for the meandering algorithm.
Definition pns_meander.h:70
static const long long int LENGTH_UNCONSTRAINED
Definition pns_meander.h:73
static const long long int DELAY_UNCONSTRAINED
Definition pns_meander.h:76
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
virtual bool Collide(const VECTOR2I &aP, int aClearance=0, int *aActual=nullptr, VECTOR2I *aLocation=nullptr) const override
Check if point aP lies closer to us than aClearance.
const BOX2I BBox(int aClearance=0) const override
Compute a bounding box of the shape, with a margin of aClearance a collision.
A name/value tuple with unique names and wxAny values.
void SetIsTimeDomain(const bool aIsTimeDomain)
void SetCurrent(const double aCurrent, const wxString &aLabel)
wxString GetClass() const override
Return the class name.
VECTOR2I GetPosition() const override
void SetMinMax(const double aMin, const double aMax)
void ViewDraw(int aLayer, KIGFX::VIEW *aView) const override
Draw the parts of the object belonging to layer aLayer.
std::vector< int > ViewGetLayers() const override
Return the all the layers within the VIEW the object is painted on.
TUNING_STATUS_VIEW_ITEM(PCB_BASE_EDIT_FRAME *aFrame)
const BOX2I ViewBBox() const override
Return the bounding box of the item covering all its layers.
void SetPosition(const VECTOR2I &aPos) override
#define _(s)
#define IN_EDIT
Item currently edited.
a few functions useful in geometry calculations.
@ LAYER_ANCHOR
Anchor of items having an anchor point (texts, footprints).
Definition layer_ids.h:248
PCB_LAYER_ID
A quick note on layer IDs:
Definition layer_ids.h:60
@ F_Cu
Definition layer_ids.h:64
FLIP_DIRECTION
Definition mirror.h:27
bool ShapeHitTest(const SHAPE_LINE_CHAIN &aHitter, const SHAPE &aHittee, bool aHitteeContained)
Perform a shape-to-shape hit test.
The Cairo implementation of the graphics abstraction layer.
Definition eda_group.h:33
MEANDER_SIDE
Definition pns_meander.h:60
@ MEANDER_SIDE_RIGHT
Definition pns_meander.h:63
@ MEANDER_SIDE_LEFT
Definition pns_meander.h:61
@ MEANDER_STYLE_ROUND
Definition pns_meander.h:54
@ MEANDER_STYLE_CHAMFER
Definition pns_meander.h:55
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
LENGTH_TUNING_MODE
@ DIFF_PAIR
@ DIFF_PAIR_SKEW
void RotatePoint(int *pX, int *pY, const EDA_ANGLE &aAngle)
Calculate the new point of coord coord pX, pY, for a rotation center 0, 0.
Definition trigo.cpp:229
@ PCB_GENERATOR_T
class PCB_GENERATOR, generator on a layer
Definition typeinfo.h:88
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:687