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 BOX2I sel = aRect;
239
240 if( aAccuracy )
241 sel.Inflate( aAccuracy );
242
243 // Convert selection box to polygon for accurate hit testing against the actual outline
244 SHAPE_LINE_CHAIN selPoly(
245 {
246 sel.GetOrigin(),
247 VECTOR2I( sel.GetRight(), sel.GetTop() ),
248 sel.GetEnd(),
249 VECTOR2I( sel.GetLeft(), sel.GetBottom() )
250 },
251 true );
252
253 return KIGEOM::ShapeHitTest( selPoly, getOutline(), aContained );
254 }
255
256 bool HitTest( const SHAPE_LINE_CHAIN& aPoly, bool aContained ) const override
257 {
258 return KIGEOM::ShapeHitTest( aPoly, getOutline(), aContained );
259 }
260
261 const BOX2I ViewBBox() const override { return GetBoundingBox(); }
262
263 EDA_ITEM* Clone() const override { return new PCB_TUNING_PATTERN( *this ); }
264
265 void ViewDraw( int aLayer, KIGFX::VIEW* aView ) const override final;
266
267 const VECTOR2I& GetEnd() const { return m_end; }
268 void SetEnd( const VECTOR2I& aValue ) { m_end = aValue; }
269
270 int GetEndX() const { return m_end.x; }
271 void SetEndX( int aValue ) { m_end.x = aValue; }
272
273 int GetEndY() const { return m_end.y; }
274 void SetEndY( int aValue ) { m_end.y = aValue; }
275
276 int GetWidth() const
277 {
278 for( BOARD_ITEM* item : GetBoardItems() )
279 if( PCB_TRACK* track = dynamic_cast<PCB_TRACK*>( item ) )
280 return track->GetWidth();
281
282 return m_trackWidth;
283 }
284
285 void SetWidth( int aValue )
286 {
287 m_trackWidth = aValue;
288
289 for( BOARD_ITEM* item : GetBoardItems() )
290 if( PCB_TRACK* track = dynamic_cast<PCB_TRACK*>( item ) )
291 track->SetWidth( aValue );
292 }
293
294 int GetNetCode() const
295 {
296 for( BOARD_ITEM* item : GetBoardItems() )
297 if( BOARD_CONNECTED_ITEM* bci = dynamic_cast<BOARD_CONNECTED_ITEM*>( item ) )
298 return bci->GetNetCode();
299
300 return 0;
301 }
302
303 void SetNetCode( int aNetCode )
304 {
305 if( BOARD* board = GetBoard() )
306 {
307 if( NETINFO_ITEM* net = board->FindNet( aNetCode ) )
308 m_lastNetName = net->GetNetname();
309 else
310 m_lastNetName.clear();
311 }
312
313 for( BOARD_ITEM* item : GetBoardItems() )
314 if( BOARD_CONNECTED_ITEM* bci = dynamic_cast<BOARD_CONNECTED_ITEM*>( item ) )
315 bci->SetNetCode( aNetCode );
316 }
317
318 bool HasSolderMask() const
319 {
320 for( BOARD_ITEM* item : GetBoardItems() )
321 if( PCB_TRACK* track = dynamic_cast<PCB_TRACK*>( item ) )
322 return track->HasSolderMask();
323
324 return true;
325 }
326
327 void SetHasSolderMask( bool aVal )
328 {
329 for( BOARD_ITEM* item : GetBoardItems() )
330 if( PCB_TRACK* track = dynamic_cast<PCB_TRACK*>( item ) )
331 track->SetHasSolderMask( aVal );
332 }
333
334 std::optional<int> GetLocalSolderMaskMargin() const
335 {
336 for( BOARD_ITEM* item : GetBoardItems() )
337 if( PCB_TRACK* track = dynamic_cast<PCB_TRACK*>( item ) )
338 return track->GetLocalSolderMaskMargin();
339
340 return std::optional<int>();
341 }
342
343 void SetLocalSolderMaskMargin( std::optional<int> aMargin )
344 {
345 for( BOARD_ITEM* item : GetBoardItems() )
346 if( PCB_TRACK* track = dynamic_cast<PCB_TRACK*>( item ) )
347 track->SetLocalSolderMaskMargin( aMargin );
348 }
349
351
362
364
365 int GetMinAmplitude() const { return m_settings.m_minAmplitude; }
366 void SetMinAmplitude( int aValue )
367 {
368 aValue = std::max( aValue, 0 );
369
370 m_settings.m_minAmplitude = aValue;
371
372 if( m_settings.m_maxAmplitude < m_settings.m_minAmplitude )
373 m_settings.m_maxAmplitude = m_settings.m_minAmplitude;
374 }
375
376 int GetMaxAmplitude() const { return m_settings.m_maxAmplitude; }
377 void SetMaxAmplitude( int aValue )
378 {
379 aValue = std::max( aValue, 0 );
380
381 m_settings.m_maxAmplitude = aValue;
382
383 if( m_settings.m_maxAmplitude < m_settings.m_minAmplitude )
384 m_settings.m_minAmplitude = m_settings.m_maxAmplitude;
385 }
386
387 // Update the initial side one time at EditStart based on m_end.
389
390 PNS::MEANDER_SIDE GetInitialSide() const { return m_settings.m_initialSide; }
391 void SetInitialSide( PNS::MEANDER_SIDE aValue ) { m_settings.m_initialSide = aValue; }
392
393 int GetSpacing() const { return m_settings.m_spacing; }
394 void SetSpacing( int aValue ) { m_settings.m_spacing = aValue; }
395
396 std::optional<int> GetTargetLength() const
397 {
398 if( m_settings.m_targetLength.Opt() == PNS::MEANDER_SETTINGS::LENGTH_UNCONSTRAINED )
399 return std::optional<int>();
400 else
401 return m_settings.m_targetLength.Opt();
402 }
403
404 void SetTargetLength( std::optional<int> aValue )
405 {
406 m_settings.m_isTimeDomain = false;
407
408 if( aValue.has_value() )
409 m_settings.SetTargetLength( aValue.value() );
410 else
412 }
413
414 std::optional<int> GetTargetDelay() const
415 {
416 if( m_settings.m_targetLengthDelay.Opt() == PNS::MEANDER_SETTINGS::DELAY_UNCONSTRAINED )
417 return std::optional<int>();
418 else
419 return m_settings.m_targetLengthDelay.Opt();
420 }
421
422 void SetTargetDelay( std::optional<int> aValue )
423 {
424 m_settings.m_isTimeDomain = true;
425
426 if( aValue.has_value() )
427 m_settings.SetTargetLengthDelay( aValue.value() );
428 else
430 }
431
432 int GetTargetSkew() const { return m_settings.m_targetSkew.Opt(); }
433 void SetTargetSkew( int aValue ) { m_settings.SetTargetSkew( aValue ); }
434
435 int GetTargetSkewDelay() const { return m_settings.m_targetSkewDelay.Opt(); }
436 void SetTargetSkewDelay( int aValue ) { m_settings.SetTargetSkewDelay( aValue ); }
437
438 bool GetOverrideCustomRules() const { return m_settings.m_overrideCustomRules; }
439 void SetOverrideCustomRules( bool aOverride ) { m_settings.m_overrideCustomRules = aOverride; }
440
441 int GetCornerRadiusPercentage() const { return m_settings.m_cornerRadiusPercentage; }
442 void SetCornerRadiusPercentage( int aValue ) { m_settings.m_cornerRadiusPercentage = aValue; }
443
444 bool IsSingleSided() const { return m_settings.m_singleSided; }
445 void SetSingleSided( bool aValue ) { m_settings.m_singleSided = aValue; }
446
447 bool IsRounded() const { return m_settings.m_cornerStyle == PNS::MEANDER_STYLE_ROUND; }
448 void SetRounded( bool aFlag ) { m_settings.m_cornerStyle = aFlag ? PNS::MEANDER_STYLE_ROUND
450
451 std::vector<std::pair<wxString, wxVariant>> GetRowData() override
452 {
453 std::vector<std::pair<wxString, wxVariant>> data = PCB_GENERATOR::GetRowData();
454 data.emplace_back( _HKI( "Net" ), m_lastNetName );
455 data.emplace_back( _HKI( "Tuning" ), m_tuningInfo );
456 return data;
457 }
458
459 const STRING_ANY_MAP GetProperties() const override;
460 void SetProperties( const STRING_ANY_MAP& aProps ) override;
461
462 void ShowPropertiesDialog( PCB_BASE_EDIT_FRAME* aEditFrame ) override;
463
464 std::vector<EDA_ITEM*> GetPreviewItems( GENERATOR_TOOL* aTool, PCB_BASE_EDIT_FRAME* aFrame,
465 bool aStatusItemsOnly = false ) override;
466
467 void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
468
469protected:
470 void swapData( BOARD_ITEM* aImage ) override
471 {
472 wxASSERT( aImage->Type() == PCB_GENERATOR_T );
473
474 std::swap( *this, *static_cast<PCB_TUNING_PATTERN*>( aImage ) );
475 }
476
477 bool recoverBaseline( PNS::ROUTER* aRouter );
478
479 bool baselineValid();
480
481 bool initBaseLine( PNS::ROUTER* aRouter, int aPNSLayer, BOARD* aBoard, VECTOR2I& aStart,
482 VECTOR2I& aEnd, NETINFO_ITEM* aNet,
483 std::optional<SHAPE_LINE_CHAIN>& aBaseLine );
484
485 bool initBaseLines( PNS::ROUTER* aRouter, int aPNSLayer, BOARD* aBoard );
486
487 bool removeToBaseline( PNS::ROUTER* aRouter, int aPNSLayer, SHAPE_LINE_CHAIN& aBaseLine );
488
489 bool resetToBaseline( GENERATOR_TOOL* aTool, int aPNSLayer, SHAPE_LINE_CHAIN& aBaseLine,
490 bool aPrimary );
491
493
494 void baseMirror( const VECTOR2I& aCentre, FLIP_DIRECTION aFlipDirection )
495 {
496 PCB_GENERATOR::baseMirror( aCentre, aFlipDirection );
497
498 if( m_baseLine )
499 {
500 m_baseLine->Mirror( aCentre, aFlipDirection );
501 m_origin = m_baseLine->CPoint( 0 );
502 m_end = m_baseLine->CLastPoint();
503 }
504
506 m_baseLineCoupled->Mirror( aCentre, aFlipDirection );
507
508 if( m_settings.m_initialSide == PNS::MEANDER_SIDE_RIGHT )
509 m_settings.m_initialSide = PNS::MEANDER_SIDE_LEFT;
510 else
511 m_settings.m_initialSide = PNS::MEANDER_SIDE_RIGHT;
512 }
513
514protected:
516
518
519 std::optional<SHAPE_LINE_CHAIN> m_baseLine;
520 std::optional<SHAPE_LINE_CHAIN> m_baseLineCoupled;
521
524
526
528 wxString m_tuningInfo;
529 long long m_tuningLength;
530
532
534};
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:85
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition board_item.h:236
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:322
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:98
KICAD_T Type() const
Returns the type of object.
Definition eda_item.h:110
bool HasFlag(EDA_ITEM_FLAGS aFlag) const
Definition eda_item.h:151
EDA_ITEM(EDA_ITEM *parent, KICAD_T idType, bool isSCH_ITEM=false, bool isBOARD_ITEM=false)
Definition eda_item.cpp:39
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:66
Handle the data for a net.
Definition netinfo.h:54
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:62
@ PNS_MODE_TUNE_DIFF_PAIR
Definition pns_router.h:66
@ PNS_MODE_TUNE_SINGLE
Definition pns_router.h:65
@ PNS_MODE_TUNE_DIFF_PAIR_SKEW
Definition pns_router.h:67
#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:91
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:695