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 {
213 }
214
215 const BOX2I GetBoundingBox() const override
216 {
217 return getOutline().BBox();
218 }
219
220 std::vector<int> ViewGetLayers() const override
221 {
222 return { LAYER_ANCHOR, GetLayer() };
223 }
224
225 bool HitTest( const VECTOR2I& aPosition, int aAccuracy = 0 ) const override
226 {
227 return getOutline().Collide( aPosition, aAccuracy );
228 }
229
230 bool HitTest( const BOX2I& aRect, bool aContained, int aAccuracy ) const override
231 {
232 BOX2I sel = aRect;
233
234 if ( aAccuracy )
235 sel.Inflate( aAccuracy );
236
237 if( aContained )
238 return sel.Contains( GetBoundingBox() );
239
240 return sel.Intersects( GetBoundingBox() );
241 }
242
243 bool HitTest( const SHAPE_LINE_CHAIN& aPoly, bool aContained ) const override
244 {
245 return KIGEOM::ShapeHitTest( aPoly, getOutline(), aContained );
246 }
247
248 const BOX2I ViewBBox() const override { return GetBoundingBox(); }
249
250 EDA_ITEM* Clone() const override { return new PCB_TUNING_PATTERN( *this ); }
251
252 void ViewDraw( int aLayer, KIGFX::VIEW* aView ) const override final;
253
254 const VECTOR2I& GetEnd() const { return m_end; }
255 void SetEnd( const VECTOR2I& aValue ) { m_end = aValue; }
256
257 int GetEndX() const { return m_end.x; }
258 void SetEndX( int aValue ) { m_end.x = aValue; }
259
260 int GetEndY() const { return m_end.y; }
261 void SetEndY( int aValue ) { m_end.y = aValue; }
262
263 int GetWidth() const
264 {
265 for( BOARD_ITEM* item : GetBoardItems() )
266 if( PCB_TRACK* track = dynamic_cast<PCB_TRACK*>( item ) )
267 return track->GetWidth();
268
269 return m_trackWidth;
270 }
271
272 void SetWidth( int aValue )
273 {
274 m_trackWidth = aValue;
275
276 for( BOARD_ITEM* item : GetBoardItems() )
277 if( PCB_TRACK* track = dynamic_cast<PCB_TRACK*>( item ) )
278 track->SetWidth( aValue );
279 }
280
281 int GetNetCode() const
282 {
283 for( BOARD_ITEM* item : GetBoardItems() )
284 if( BOARD_CONNECTED_ITEM* bci = dynamic_cast<BOARD_CONNECTED_ITEM*>( item ) )
285 return bci->GetNetCode();
286
287 return 0;
288 }
289
290 void SetNetCode( int aNetCode )
291 {
292 if( BOARD* board = GetBoard() )
293 {
294 if( NETINFO_ITEM* net = board->FindNet( aNetCode ) )
295 m_lastNetName = net->GetNetname();
296 else
297 m_lastNetName.clear();
298 }
299
300 for( BOARD_ITEM* item : GetBoardItems() )
301 if( BOARD_CONNECTED_ITEM* bci = dynamic_cast<BOARD_CONNECTED_ITEM*>( item ) )
302 bci->SetNetCode( aNetCode );
303 }
304
305 bool HasSolderMask() const
306 {
307 for( BOARD_ITEM* item : GetBoardItems() )
308 if( PCB_TRACK* track = dynamic_cast<PCB_TRACK*>( item ) )
309 return track->HasSolderMask();
310
311 return true;
312 }
313
314 void SetHasSolderMask( bool aVal )
315 {
316 for( BOARD_ITEM* item : GetBoardItems() )
317 if( PCB_TRACK* track = dynamic_cast<PCB_TRACK*>( item ) )
318 track->SetHasSolderMask( aVal );
319 }
320
321 std::optional<int> GetLocalSolderMaskMargin() const
322 {
323 for( BOARD_ITEM* item : GetBoardItems() )
324 if( PCB_TRACK* track = dynamic_cast<PCB_TRACK*>( item ) )
325 return track->GetLocalSolderMaskMargin();
326
327 return std::optional<int>();
328 }
329
330 void SetLocalSolderMaskMargin( std::optional<int> aMargin )
331 {
332 for( BOARD_ITEM* item : GetBoardItems() )
333 if( PCB_TRACK* track = dynamic_cast<PCB_TRACK*>( item ) )
334 track->SetLocalSolderMaskMargin( aMargin );
335 }
336
338
349
351
352 int GetMinAmplitude() const { return m_settings.m_minAmplitude; }
353 void SetMinAmplitude( int aValue )
354 {
355 aValue = std::max( aValue, 0 );
356
357 m_settings.m_minAmplitude = aValue;
358
359 if( m_settings.m_maxAmplitude < m_settings.m_minAmplitude )
360 m_settings.m_maxAmplitude = m_settings.m_minAmplitude;
361 }
362
363 int GetMaxAmplitude() const { return m_settings.m_maxAmplitude; }
364 void SetMaxAmplitude( int aValue )
365 {
366 aValue = std::max( aValue, 0 );
367
368 m_settings.m_maxAmplitude = aValue;
369
370 if( m_settings.m_maxAmplitude < m_settings.m_minAmplitude )
371 m_settings.m_minAmplitude = m_settings.m_maxAmplitude;
372 }
373
374 // Update the initial side one time at EditStart based on m_end.
376
377 PNS::MEANDER_SIDE GetInitialSide() const { return m_settings.m_initialSide; }
378 void SetInitialSide( PNS::MEANDER_SIDE aValue ) { m_settings.m_initialSide = aValue; }
379
380 int GetSpacing() const { return m_settings.m_spacing; }
381 void SetSpacing( int aValue ) { m_settings.m_spacing = aValue; }
382
383 std::optional<int> GetTargetLength() const
384 {
385 if( m_settings.m_targetLength.Opt() == PNS::MEANDER_SETTINGS::LENGTH_UNCONSTRAINED )
386 return std::optional<int>();
387 else
388 return m_settings.m_targetLength.Opt();
389 }
390
391 void SetTargetLength( std::optional<int> aValue )
392 {
393 m_settings.m_isTimeDomain = false;
394
395 if( aValue.has_value() )
396 m_settings.SetTargetLength( aValue.value() );
397 else
399 }
400
401 std::optional<int> GetTargetDelay() const
402 {
403 if( m_settings.m_targetLengthDelay.Opt() == PNS::MEANDER_SETTINGS::DELAY_UNCONSTRAINED )
404 return std::optional<int>();
405 else
406 return m_settings.m_targetLengthDelay.Opt();
407 }
408
409 void SetTargetDelay( std::optional<int> aValue )
410 {
411 m_settings.m_isTimeDomain = true;
412
413 if( aValue.has_value() )
414 m_settings.SetTargetLengthDelay( aValue.value() );
415 else
417 }
418
419 int GetTargetSkew() const { return m_settings.m_targetSkew.Opt(); }
420 void SetTargetSkew( int aValue ) { m_settings.SetTargetSkew( aValue ); }
421
422 int GetTargetSkewDelay() const { return m_settings.m_targetSkewDelay.Opt(); }
423 void SetTargetSkewDelay( int aValue ) { m_settings.SetTargetSkewDelay( aValue ); }
424
425 bool GetOverrideCustomRules() const { return m_settings.m_overrideCustomRules; }
426 void SetOverrideCustomRules( bool aOverride ) { m_settings.m_overrideCustomRules = aOverride; }
427
428 int GetCornerRadiusPercentage() const { return m_settings.m_cornerRadiusPercentage; }
429 void SetCornerRadiusPercentage( int aValue ) { m_settings.m_cornerRadiusPercentage = aValue; }
430
431 bool IsSingleSided() const { return m_settings.m_singleSided; }
432 void SetSingleSided( bool aValue ) { m_settings.m_singleSided = aValue; }
433
434 bool IsRounded() const { return m_settings.m_cornerStyle == PNS::MEANDER_STYLE_ROUND; }
435 void SetRounded( bool aFlag ) { m_settings.m_cornerStyle = aFlag ? PNS::MEANDER_STYLE_ROUND
437
438 std::vector<std::pair<wxString, wxVariant>> GetRowData() override
439 {
440 std::vector<std::pair<wxString, wxVariant>> data = PCB_GENERATOR::GetRowData();
441 data.emplace_back( _HKI( "Net" ), m_lastNetName );
442 data.emplace_back( _HKI( "Tuning" ), m_tuningInfo );
443 return data;
444 }
445
446 const STRING_ANY_MAP GetProperties() const override;
447 void SetProperties( const STRING_ANY_MAP& aProps ) override;
448
449 void ShowPropertiesDialog( PCB_BASE_EDIT_FRAME* aEditFrame ) override;
450
451 std::vector<EDA_ITEM*> GetPreviewItems( GENERATOR_TOOL* aTool, PCB_BASE_EDIT_FRAME* aFrame,
452 bool aStatusItemsOnly = false ) override;
453
454 void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
455
456protected:
457 void swapData( BOARD_ITEM* aImage ) override
458 {
459 wxASSERT( aImage->Type() == PCB_GENERATOR_T );
460
461 std::swap( *this, *static_cast<PCB_TUNING_PATTERN*>( aImage ) );
462 }
463
464 bool recoverBaseline( PNS::ROUTER* aRouter );
465
466 bool baselineValid();
467
468 bool initBaseLine( PNS::ROUTER* aRouter, int aPNSLayer, BOARD* aBoard, VECTOR2I& aStart,
469 VECTOR2I& aEnd, NETINFO_ITEM* aNet,
470 std::optional<SHAPE_LINE_CHAIN>& aBaseLine );
471
472 bool initBaseLines( PNS::ROUTER* aRouter, int aPNSLayer, BOARD* aBoard );
473
474 bool removeToBaseline( PNS::ROUTER* aRouter, int aPNSLayer, SHAPE_LINE_CHAIN& aBaseLine );
475
476 bool resetToBaseline( GENERATOR_TOOL* aTool, int aPNSLayer, SHAPE_LINE_CHAIN& aBaseLine,
477 bool aPrimary );
478
480
481 void baseMirror( const VECTOR2I& aCentre, FLIP_DIRECTION aFlipDirection )
482 {
483 PCB_GENERATOR::baseMirror( aCentre, aFlipDirection );
484
485 if( m_baseLine )
486 {
487 m_baseLine->Mirror( aCentre, aFlipDirection );
488 m_origin = m_baseLine->CPoint( 0 );
489 m_end = m_baseLine->CLastPoint();
490 }
491
493 m_baseLineCoupled->Mirror( aCentre, aFlipDirection );
494
495 if( m_settings.m_initialSide == PNS::MEANDER_SIDE_RIGHT )
496 m_settings.m_initialSide = PNS::MEANDER_SIDE_LEFT;
497 else
498 m_settings.m_initialSide = PNS::MEANDER_SIDE_RIGHT;
499 }
500
501protected:
503
505
506 std::optional<SHAPE_LINE_CHAIN> m_baseLine;
507 std::optional<SHAPE_LINE_CHAIN> m_baseLineCoupled;
508
511
513
515 wxString m_tuningInfo;
516
518
520};
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:81
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition board_item.h:232
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:317
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 bool Contains(const Vec &aPoint) const
Definition box2.h:168
constexpr bool Intersects(const BOX2< Vec > &aRect) const
Definition box2.h:311
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:146
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:68
static const long long int LENGTH_UNCONSTRAINED
Definition pns_meander.h:71
static const long long int DELAY_UNCONSTRAINED
Definition pns_meander.h:74
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:247
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:58
@ MEANDER_SIDE_RIGHT
Definition pns_meander.h:61
@ MEANDER_SIDE_LEFT
Definition pns_meander.h:59
@ MEANDER_STYLE_ROUND
Definition pns_meander.h:52
@ MEANDER_STYLE_CHAMFER
Definition pns_meander.h:53
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