KiCad PCB EDA Suite
PNS::MEANDER_PLACER Class Reference

Single track length matching/meandering tool. More...

#include <pns_meander_placer.h>

Inheritance diagram for PNS::MEANDER_PLACER:
PNS::MEANDER_PLACER_BASE PNS::PLACEMENT_ALGO PNS::ALGO_BASE PNS::MEANDER_SKEW_PLACER

Public Types

enum  TUNING_STATUS { TOO_SHORT = 0 , TOO_LONG , TUNED }
 < Result of the length tuning operation More...
 

Public Member Functions

 MEANDER_PLACER (ROUTER *aRouter)
 
virtual ~MEANDER_PLACER ()
 
virtual bool Start (const VECTOR2I &aP, ITEM *aStartItem) override
 Function Start() More...
 
virtual bool Move (const VECTOR2I &aP, ITEM *aEndItem) override
 Function Move() More...
 
virtual bool FixRoute (const VECTOR2I &aP, ITEM *aEndItem, bool aForceFinish=false) override
 Function FixRoute() More...
 
bool CommitPlacement () override
 
bool AbortPlacement () override
 
bool HasPlacedAnything () const override
 
NODECurrentNode (bool aLoopsRemoved=false) const override
 Function CurrentNode() More...
 
const ITEM_SET Traces () override
 Function Traces() More...
 
const VECTOR2ICurrentEnd () const override
 Function CurrentEnd() More...
 
const std::vector< int > CurrentNets () const override
 Function CurrentNets() More...
 
int CurrentLayer () const override
 Function CurrentLayer() More...
 
virtual const wxString TuningInfo (EDA_UNITS aUnits) const override
 Return a string describing the status and length of the tuned traces. More...
 
virtual TUNING_STATUS TuningStatus () const override
 Return the tuning status (too short, too long, etc.) of the trace(s) being tuned. More...
 
bool CheckFit (MEANDER_SHAPE *aShape) override
 Checks if it's OK to place the shape aShape (i.e. More...
 
virtual void AmplitudeStep (int aSign)
 Increase/decreases the current meandering amplitude by one step. More...
 
virtual void SpacingStep (int aSign)
 Increase/decrease the current meandering spacing by one step. More...
 
virtual int Clearance ()
 Return the clearance of the track(s) being length tuned. More...
 
virtual const MEANDER_SETTINGSMeanderSettings () const
 Return the current meandering configuration. More...
 
virtual void UpdateSettings (const MEANDER_SETTINGS &aSettings)
 
int GetTotalPadToDieLength (const LINE &aLine) const
 
virtual bool UnfixRoute ()
 
virtual bool ToggleVia (bool aEnabled)
 Function ToggleVia() More...
 
virtual bool IsPlacingVia () const
 Function IsPlacingVia() More...
 
virtual bool SetLayer (int aLayer)
 Function SetLayer() More...
 
virtual void FlipPosture ()
 Function FlipPosture() More...
 
virtual void UpdateSizes (const SIZES_SETTINGS &aSizes)
 Function UpdateSizes() More...
 
virtual void SetOrthoMode (bool aOrthoMode)
 Function SetOrthoMode() More...
 
virtual void GetModifiedNets (std::vector< int > &aNets) const
 Function GetModifiedNets. More...
 
ROUTERRouter () const
 Return current router settings. More...
 
ROUTING_SETTINGSSettings () const
 Return the logger object, allowing to dump geometry to a file. More...
 
virtual LOGGERLogger ()
 
void SetLogger (LOGGER *aLogger)
 
void SetDebugDecorator (DEBUG_DECORATOR *aDecorator)
 Assign a debug decorator allowing this algo to draw extra graphics for visual debugging. More...
 
DEBUG_DECORATORDbg () const
 
const BOX2IVisibleViewArea () const
 

Protected Member Functions

bool doMove (const VECTOR2I &aP, ITEM *aEndItem, long long int aTargetLength)
 
void setWorld (NODE *aWorld)
 
virtual long long int origPathLength () const
 current routing start point (end of tail, beginning of head) More...
 
void cutTunedLine (const SHAPE_LINE_CHAIN &aOrigin, const VECTOR2I &aTuneStart, const VECTOR2I &aCursorPos, SHAPE_LINE_CHAIN &aPre, SHAPE_LINE_CHAIN &aTuned, SHAPE_LINE_CHAIN &aPost)
 Extract the part of a track to be meandered, depending on the starting point and the cursor position. More...
 
void tuneLineLength (MEANDERED_LINE &aTuned, long long int aElongation)
 Take a set of meanders in aTuned and tunes their length to extend the original line length by aElongation. More...
 
int compareWithTolerance (long long int aValue, long long int aExpected, long long int aTolerance=0) const
 Compare aValue against aExpected with given tolerance. More...
 
VECTOR2I getSnappedStartPoint (LINKED_ITEM *aStartItem, VECTOR2I aStartPoint)
 
long long int lineLength (const ITEM_SET &aLine, const SOLID *aStartPad, const SOLID *aEndPad) const
 Calculate the total length of the line represented by an item set (tracks and vias) More...
 

Protected Attributes

VECTOR2I m_currentStart
 Current world state. More...
 
NODEm_currentNode
 
LINE m_originLine
 
LINE m_currentTrace
 
ITEM_SET m_tunedPath
 
SHAPE_LINE_CHAIN m_finalShape
 
MEANDERED_LINE m_result
 
LINKED_ITEMm_initialSegment
 
long long int m_lastLength
 
TUNING_STATUS m_lastStatus
 
NODEm_world
 Total length added by pad to die size. More...
 
int m_padToDieLength
 Width of the meandered trace(s). More...
 
int m_currentWidth
 Meander settings. More...
 
MEANDER_SETTINGS m_settings
 The current end point. More...
 
VECTOR2I m_currentEnd
 
SOLIDm_startPad_p
 
SOLIDm_endPad_p
 
SOLIDm_startPad_n
 
SOLIDm_endPad_n
 
DEBUG_DECORATORm_debugDecorator
 
ROUTERm_router
 
LOGGERm_logger
 

Detailed Description

Single track length matching/meandering tool.

Definition at line 45 of file pns_meander_placer.h.

Member Enumeration Documentation

◆ TUNING_STATUS

< Result of the length tuning operation

Enumerator
TOO_SHORT 
TOO_LONG 
TUNED 

Definition at line 49 of file pns_meander_placer_base.h.

Constructor & Destructor Documentation

◆ MEANDER_PLACER()

PNS::MEANDER_PLACER::MEANDER_PLACER ( ROUTER aRouter)

Definition at line 34 of file pns_meander_placer.cpp.

34 :
35 MEANDER_PLACER_BASE( aRouter )
36{
37 m_currentNode = nullptr;
38
39 // Init temporary variables (do not leave uninitialized members)
40 m_initialSegment = nullptr;
41 m_lastLength = 0;
43}
TUNING_STATUS m_lastStatus
LINKED_ITEM * m_initialSegment
long long int m_lastLength

References m_currentNode, m_initialSegment, m_lastLength, m_lastStatus, and PNS::MEANDER_PLACER_BASE::TOO_SHORT.

◆ ~MEANDER_PLACER()

PNS::MEANDER_PLACER::~MEANDER_PLACER ( )
virtual

Definition at line 46 of file pns_meander_placer.cpp.

47{
48}

Member Function Documentation

◆ AbortPlacement()

bool PNS::MEANDER_PLACER::AbortPlacement ( )
overridevirtual

Reimplemented from PNS::PLACEMENT_ALGO.

Definition at line 212 of file pns_meander_placer.cpp.

213{
215 return true;
216}
NODE * m_world
Total length added by pad to die size.
void KillChildren()
Definition: pns_node.cpp:1451

References PNS::NODE::KillChildren(), and PNS::MEANDER_PLACER_BASE::m_world.

◆ AmplitudeStep()

void PNS::MEANDER_PLACER_BASE::AmplitudeStep ( int  aSign)
virtualinherited

Increase/decreases the current meandering amplitude by one step.

Parameters
aSigndirection (negative = decrease, positive = increase).

Definition at line 48 of file pns_meander_placer_base.cpp.

49{
51 a = std::max( a, m_settings.m_minAmplitude );
52
54}
MEANDER_SETTINGS m_settings
The current end point.
int m_minAmplitude
Maximum meandering amplitude.
Definition: pns_meander.h:77
int m_step
Length PadToDie.
Definition: pns_meander.h:86
int m_maxAmplitude
Meandering period/spacing (see dialog picture for explanation).
Definition: pns_meander.h:80

References PNS::MEANDER_SETTINGS::m_maxAmplitude, PNS::MEANDER_SETTINGS::m_minAmplitude, PNS::MEANDER_PLACER_BASE::m_settings, and PNS::MEANDER_SETTINGS::m_step.

◆ CheckFit()

bool PNS::MEANDER_PLACER::CheckFit ( MEANDER_SHAPE aShape)
overridevirtual

Checks if it's OK to place the shape aShape (i.e.

if it doesn't cause DRC violations or collide with other meanders).

Parameters
aShapethe shape to check.
Returns
true if the shape fits.

Reimplemented from PNS::MEANDER_PLACER_BASE.

Definition at line 235 of file pns_meander_placer.cpp.

236{
237 LINE l( m_originLine, aShape->CLine( 0 ) );
238
239 if( m_currentNode->CheckColliding( &l ) )
240 return false;
241
242 int w = aShape->Width();
243 int clearance = w + m_settings.m_spacing;
244
245 return m_result.CheckSelfIntersections( aShape, clearance );
246}
const SHAPE_LINE_CHAIN & CLine() const
Definition: pns_line.h:137
bool CheckSelfIntersections(MEANDER_SHAPE *aShape, int aClearance)
Check if the given shape is intersecting with any other meander in the current line.
int m_spacing
Amplitude/spacing adjustment step.
Definition: pns_meander.h:83
OPT_OBSTACLE CheckColliding(const ITEM *aItem, int aKindMask=ITEM::ANY_T)
Check if the item collides with anything else in the world, and if found, returns the obstacle.
Definition: pns_node.cpp:468

References PNS::NODE::CheckColliding(), PNS::MEANDERED_LINE::CheckSelfIntersections(), PNS::MEANDER_SHAPE::CLine(), m_currentNode, m_originLine, m_result, PNS::MEANDER_PLACER_BASE::m_settings, PNS::MEANDER_SETTINGS::m_spacing, and PNS::MEANDER_SHAPE::Width().

◆ Clearance()

int PNS::MEANDER_PLACER_BASE::Clearance ( )
virtualinherited

Return the clearance of the track(s) being length tuned.

Returns
clearance value in internal units

Definition at line 66 of file pns_meander_placer_base.cpp.

67{
68 // Assumption: All tracks are part of the same net class.
69 // It shouldn't matter which track we pick. They should all have the same clearance if
70 // they are part of the same net class. Therefore, pick the first one on the list.
71 ITEM* itemToCheck = Traces().CItems().front().item;
72 PNS::CONSTRAINT constraint;
73
75 nullptr, CurrentLayer(), &constraint );
76
77 wxCHECK_MSG( constraint.m_Value.HasMin(), m_currentWidth, wxT( "No minimum clearance?" ) );
78
79 return constraint.m_Value.Min();
80}
T Min() const
Definition: minoptmax.h:33
bool HasMin() const
Definition: minoptmax.h:37
ROUTER * Router() const
Return current router settings.
Definition: pns_algo_base.h:54
const ENTRIES & CItems() const
Definition: pns_itemset.h:136
int m_currentWidth
Meander settings.
virtual const ITEM_SET Traces()=0
Function Traces()
virtual int CurrentLayer() const =0
Function CurrentLayer()
RULE_RESOLVER * GetRuleResolver() const
Definition: pns_router.h:170
virtual bool QueryConstraint(CONSTRAINT_TYPE aType, const PNS::ITEM *aItemA, const PNS::ITEM *aItemB, int aLayer, PNS::CONSTRAINT *aConstraint)=0
MINOPTMAX< int > m_Value
Definition: pns_node.h:70

References PNS::ITEM_SET::CItems(), PNS::CT_CLEARANCE, PNS::PLACEMENT_ALGO::CurrentLayer(), PNS::ROUTER::GetRuleResolver(), MINOPTMAX< T >::HasMin(), PNS::MEANDER_PLACER_BASE::m_currentWidth, PNS::CONSTRAINT::m_Value, MINOPTMAX< T >::Min(), PNS::RULE_RESOLVER::QueryConstraint(), PNS::ALGO_BASE::Router(), and PNS::PLACEMENT_ALGO::Traces().

Referenced by PNS::MEANDER_SHAPE::spacing(), and PNS::MEANDER_PLACER_BASE::SpacingStep().

◆ CommitPlacement()

bool PNS::MEANDER_PLACER::CommitPlacement ( )
overridevirtual

Reimplemented from PNS::PLACEMENT_ALGO.

Definition at line 225 of file pns_meander_placer.cpp.

226{
227 if( m_currentNode )
229
230 m_currentNode = nullptr;
231 return true;
232}
void CommitRouting()
Definition: pns_router.cpp:728

References PNS::ROUTER::CommitRouting(), m_currentNode, and PNS::ALGO_BASE::Router().

Referenced by FixRoute().

◆ compareWithTolerance()

int PNS::MEANDER_PLACER_BASE::compareWithTolerance ( long long int  aValue,
long long int  aExpected,
long long int  aTolerance = 0 
) const
protectedinherited

Compare aValue against aExpected with given tolerance.

Definition at line 249 of file pns_meander_placer_base.cpp.

251{
252 if( aValue < aExpected - aTolerance )
253 return -1;
254 else if( aValue > aExpected + aTolerance )
255 return 1;
256 else
257 return 0;
258}

Referenced by doMove(), and PNS::DP_MEANDER_PLACER::Move().

◆ CurrentEnd()

const VECTOR2I & PNS::MEANDER_PLACER::CurrentEnd ( ) const
overridevirtual

Function CurrentEnd()

Returns the current end of the line(s) being placed/tuned. It may not be equal to the cursor position due to collisions.

Implements PNS::PLACEMENT_ALGO.

Definition at line 256 of file pns_meander_placer.cpp.

257{
258 return m_currentEnd;
259}

References PNS::MEANDER_PLACER_BASE::m_currentEnd.

◆ CurrentLayer()

int PNS::MEANDER_PLACER::CurrentLayer ( ) const
overridevirtual

Function CurrentLayer()

Returns the layer of currently routed track.

Implements PNS::PLACEMENT_ALGO.

Definition at line 261 of file pns_meander_placer.cpp.

262{
263 return m_initialSegment->Layers().Start();
264}
int Start() const
Definition: pns_layerset.h:82
const LAYER_RANGE & Layers() const
Definition: pns_item.h:154

References PNS::ITEM::Layers(), m_initialSegment, and LAYER_RANGE::Start().

◆ CurrentNets()

const std::vector< int > PNS::MEANDER_PLACER::CurrentNets ( ) const
inlineoverridevirtual

Function CurrentNets()

Returns the net code(s) of currently routed track(s).

Implements PNS::PLACEMENT_ALGO.

Definition at line 80 of file pns_meander_placer.h.

81 {
82 return std::vector<int> (1, m_originLine.Net() );
83 }
int Net() const
Definition: pns_item.h:152

References m_originLine, and PNS::ITEM::Net().

◆ CurrentNode()

NODE * PNS::MEANDER_PLACER::CurrentNode ( bool  aLoopsRemoved = false) const
overridevirtual

Function CurrentNode()

Returns the most recent board state.

Implements PNS::PLACEMENT_ALGO.

Definition at line 51 of file pns_meander_placer.cpp.

52{
53 if( !m_currentNode )
54 return m_world;
55
56 return m_currentNode;
57}

References m_currentNode, and PNS::MEANDER_PLACER_BASE::m_world.

◆ cutTunedLine()

void PNS::MEANDER_PLACER_BASE::cutTunedLine ( const SHAPE_LINE_CHAIN aOrigin,
const VECTOR2I aTuneStart,
const VECTOR2I aCursorPos,
SHAPE_LINE_CHAIN aPre,
SHAPE_LINE_CHAIN aTuned,
SHAPE_LINE_CHAIN aPost 
)
protectedinherited

Extract the part of a track to be meandered, depending on the starting point and the cursor position.

Parameters
aOriginthe original line.
aTuneStartpoint where we start meandering (start click coordinates).
aCursorPoscurrent cursor position.
aPrepart before the beginning of meanders.
aTunedpart to be meandered.
aPostpart after the end of meanders.

Definition at line 89 of file pns_meander_placer_base.cpp.

92{
93 VECTOR2I cp ( aCursorPos );
94
95 if( cp == aTuneStart ) // we don't like tuning segments with 0 length
96 {
97 int idx = aOrigin.FindSegment( cp );
98
99 if( idx >= 0 )
100 {
101 const SEG& s = aOrigin.CSegment( idx );
102 cp += ( s.B - s.A ).Resize( 2 );
103 }
104 else
105 {
106 cp += VECTOR2I( 2, 5 ); // some arbitrary value that is not 45 degrees oriented
107 }
108 }
109
110 VECTOR2I n = aOrigin.NearestPoint( cp, false );
111 VECTOR2I m = aOrigin.NearestPoint( aTuneStart, false );
112
113 SHAPE_LINE_CHAIN l( aOrigin );
114 l.Split( n );
115 l.Split( m );
116
117 int i_start = l.Find( m );
118 int i_end = l.Find( n );
119
120 if( i_start > i_end )
121 {
122 l = l.Reverse();
123 i_start = l.Find( m );
124 i_end = l.Find( n );
125 }
126
127 aPre = l.Slice( 0, i_start );
128 aPost = l.Slice( i_end, -1 );
129 aTuned = l.Slice( i_start, i_end );
130
131 aTuned.Simplify();
132}
Definition: seg.h:42
VECTOR2I A
Definition: seg.h:49
VECTOR2I B
Definition: seg.h:50
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
SHAPE_LINE_CHAIN & Simplify(bool aRemoveColinear=true)
Simplify the line chain by removing colinear adjacent segments and duplicate vertices.
int FindSegment(const VECTOR2I &aP, int aThreshold=1) const
Search for segment containing point aP.
const SHAPE_LINE_CHAIN Slice(int aStartIndex, int aEndIndex=-1) const
Return a subset of this line chain containing the [start_index, end_index] range of points.
const VECTOR2I NearestPoint(const VECTOR2I &aP, bool aAllowInternalShapePoints=true) const
Find a point on the line chain that is closest to point aP.
const SEG CSegment(int aIndex) const
Return a constant copy of the aIndex segment in the line chain.
VECTOR2< int > VECTOR2I
Definition: vector2d.h:607

References SEG::A, SEG::B, SHAPE_LINE_CHAIN::CSegment(), SHAPE_LINE_CHAIN::Find(), SHAPE_LINE_CHAIN::FindSegment(), SHAPE_LINE_CHAIN::NearestPoint(), SHAPE_LINE_CHAIN::Reverse(), SHAPE_LINE_CHAIN::Simplify(), SHAPE_LINE_CHAIN::Slice(), and SHAPE_LINE_CHAIN::Split().

Referenced by doMove(), and PNS::DP_MEANDER_PLACER::Move().

◆ Dbg()

DEBUG_DECORATOR * PNS::ALGO_BASE::Dbg ( ) const
inlineinherited

◆ doMove()

bool PNS::MEANDER_PLACER::doMove ( const VECTOR2I aP,
ITEM aEndItem,
long long int  aTargetLength 
)
protected

Definition at line 107 of file pns_meander_placer.cpp.

108{
109 SHAPE_LINE_CHAIN pre, tuned, post;
110
111 if( m_currentNode )
112 delete m_currentNode;
113
115
116 cutTunedLine( m_originLine.CLine(), m_currentStart, aP, pre, tuned, post );
117
118 m_result = MEANDERED_LINE( this, false );
121
122 for( int i = 0; i < tuned.SegmentCount(); i++ )
123 {
124 if( tuned.IsArcSegment( i ) )
125 {
126 ssize_t arcIndex = tuned.ArcIndex( i );
127 m_result.AddArc( tuned.Arc( arcIndex ) );
128 i = tuned.NextShape( i );
129
130 // NextShape will return -1 if last shape
131 if( i < 0 )
132 i = tuned.SegmentCount();
133
134 continue;
135 }
136
137 const SEG s = tuned.CSegment( i );
138 m_result.AddCorner( s.A );
139 m_result.MeanderSegment( s, s.Side( aP ) < 0 );
140 m_result.AddCorner( s.B );
141 }
142
143 long long int lineLen = origPathLength();
144
145 m_lastLength = lineLen;
147
148 if( compareWithTolerance( lineLen, aTargetLength, m_settings.m_lengthTolerance ) > 0 )
149 {
151 } else {
152 m_lastLength = lineLen - tuned.Length();
153 tuneLineLength( m_result, aTargetLength - lineLen );
154 }
155
156 for( const ITEM* item : m_tunedPath.CItems() )
157 {
158 if( const LINE* l = dyn_cast<const LINE*>( item ) )
159 {
160 PNS_DBG( Dbg(), AddItem, l, BLUE, 30000, wxT( "tuned-line" ) );
161 }
162 }
163
164 if( m_lastStatus != TOO_LONG )
165 {
166 tuned.Clear();
167
168 for( MEANDER_SHAPE* m : m_result.Meanders() )
169 {
170 if( m->Type() != MT_EMPTY )
171 {
172 tuned.Append ( m->CLine( 0 ) );
173 }
174 }
175
176 m_lastLength += tuned.Length();
177
178 int comp = compareWithTolerance( m_lastLength - aTargetLength, 0,
180
181 if( comp > 0 )
183 else if( comp < 0 )
185 else
187 }
188
190 m_finalShape.Append( pre );
191 m_finalShape.Append( tuned );
192 m_finalShape.Append( post );
194
195 return true;
196}
DEBUG_DECORATOR * Dbg() const
Definition: pns_algo_base.h:78
int Width() const
Return true if the line is geometrically identical as line aOther.
Definition: pns_line.h:156
void SetBaselineOffset(int aOffset)
Set the parallel offset between the base segment and the meandered line.
Definition: pns_meander.h:481
void SetWidth(int aWidth)
Set the line width.
Definition: pns_meander.h:466
void AddCorner(const VECTOR2I &aA, const VECTOR2I &aB=VECTOR2I(0, 0))
Create a dummy meander shape representing a line corner.
void MeanderSegment(const SEG &aSeg, bool aSide, int aBaseIndex=0)
Fit maximum amplitude meanders on a given segment and adds to the current line.
Definition: pns_meander.cpp:45
void AddArc(const SHAPE_ARC &aArc1, const SHAPE_ARC &aArc2=SHAPE_ARC())
Create a dummy meander shape representing an arc corner.
std::vector< MEANDER_SHAPE * > & Meanders()
Definition: pns_meander.h:489
void tuneLineLength(MEANDERED_LINE &aTuned, long long int aElongation)
Take a set of meanders in aTuned and tunes their length to extend the original line length by aElonga...
void cutTunedLine(const SHAPE_LINE_CHAIN &aOrigin, const VECTOR2I &aTuneStart, const VECTOR2I &aCursorPos, SHAPE_LINE_CHAIN &aPre, SHAPE_LINE_CHAIN &aTuned, SHAPE_LINE_CHAIN &aPost)
Extract the part of a track to be meandered, depending on the starting point and the cursor position.
int compareWithTolerance(long long int aValue, long long int aExpected, long long int aTolerance=0) const
Compare aValue against aExpected with given tolerance.
virtual long long int origPathLength() const
current routing start point (end of tail, beginning of head)
SHAPE_LINE_CHAIN m_finalShape
VECTOR2I m_currentStart
Current world state.
int m_lengthTolerance
Target skew value for diff pair de-skewing.
Definition: pns_meander.h:101
NODE * Branch()
Create a lightweight copy (called branch) of self that tracks the changes (added/removed items) wrs t...
Definition: pns_node.cpp:139
int Side(const VECTOR2I &aP) const
Determine on which side of directed line passing via segment ends point aP lies.
Definition: seg.h:143
const SHAPE_ARC & Arc(size_t aArc) const
int NextShape(int aPointIndex, bool aForwards=true) const
Return the vertex index of the next shape in the chain, or -1 if aPointIndex is the last shape.
ssize_t ArcIndex(size_t aSegment) const
Return the arc index for the given segment index.
void Clear()
Remove all points from the line chain.
void Append(int aX, int aY, bool aAllowDuplication=false)
Append a new point at the end of the line chain.
int SegmentCount() const
Return the number of segments in this line chain.
bool IsArcSegment(size_t aSegment) const
long long int Length() const
Return length of the line chain in Euclidean metric.
@ BLUE
Definition: color4d.h:56
@ MT_EMPTY
Definition: pns_meander.h:46
#define PNS_DBG(dbg, method,...)

References SEG::A, PNS::MEANDERED_LINE::AddArc(), PNS::MEANDERED_LINE::AddCorner(), SHAPE_LINE_CHAIN::Append(), SHAPE_LINE_CHAIN::Arc(), SHAPE_LINE_CHAIN::ArcIndex(), SEG::B, BLUE, PNS::NODE::Branch(), PNS::ITEM_SET::CItems(), SHAPE_LINE_CHAIN::Clear(), PNS::LINE::CLine(), PNS::MEANDER_PLACER_BASE::compareWithTolerance(), SHAPE_LINE_CHAIN::CSegment(), PNS::MEANDER_PLACER_BASE::cutTunedLine(), PNS::ALGO_BASE::Dbg(), SHAPE_LINE_CHAIN::IsArcSegment(), SHAPE_LINE_CHAIN::Length(), m_currentNode, m_currentStart, m_finalShape, m_lastLength, m_lastStatus, PNS::MEANDER_SETTINGS::m_lengthTolerance, m_originLine, m_result, PNS::MEANDER_PLACER_BASE::m_settings, m_tunedPath, PNS::MEANDER_PLACER_BASE::m_world, PNS::MEANDERED_LINE::Meanders(), PNS::MEANDERED_LINE::MeanderSegment(), PNS::MT_EMPTY, SHAPE_LINE_CHAIN::NextShape(), origPathLength(), PNS_DBG, SHAPE_LINE_CHAIN::SegmentCount(), PNS::MEANDERED_LINE::SetBaselineOffset(), PNS::MEANDERED_LINE::SetWidth(), SEG::Side(), SHAPE_LINE_CHAIN::Simplify(), PNS::MEANDER_PLACER_BASE::TOO_LONG, PNS::MEANDER_PLACER_BASE::TOO_SHORT, PNS::MEANDER_PLACER_BASE::TUNED, PNS::MEANDER_PLACER_BASE::tuneLineLength(), and PNS::LINE::Width().

Referenced by Move(), and PNS::MEANDER_SKEW_PLACER::Move().

◆ FixRoute()

bool PNS::MEANDER_PLACER::FixRoute ( const VECTOR2I aP,
ITEM aEndItem,
bool  aForceFinish = false 
)
overridevirtual

Function FixRoute()

Commits the currently routed items to the parent node, taking aP as the final end point and aEndItem as the final anchor (if provided).

Returns
true, if route has been committed. May return false if the routing result is violating design rules - in such case, the track is only committed if Settings.CanViolateDRC() is on.

Implements PNS::PLACEMENT_ALGO.

Definition at line 199 of file pns_meander_placer.cpp.

200{
201 if( !m_currentNode )
202 return false;
203
207
208 return true;
209}
bool CommitPlacement() override
bool Add(std::unique_ptr< SEGMENT > aSegment, bool aAllowRedundant=false)
Add an item to the current node.
Definition: pns_node.cpp:656

References PNS::NODE::Add(), CommitPlacement(), m_currentNode, m_currentTrace, m_finalShape, and m_originLine.

◆ FlipPosture()

virtual void PNS::PLACEMENT_ALGO::FlipPosture ( )
inlinevirtualinherited

Function FlipPosture()

Toggles the current posture (straight/diagonal) of the trace head.

Reimplemented in PNS::DIFF_PAIR_PLACER, and PNS::LINE_PLACER.

Definition at line 160 of file pns_placement_algo.h.

161 {
162 }

◆ GetModifiedNets()

virtual void PNS::PLACEMENT_ALGO::GetModifiedNets ( std::vector< int > &  aNets) const
inlinevirtualinherited

Function GetModifiedNets.

Returns the net codes of all currently routed trace(s)

Reimplemented in PNS::DIFF_PAIR_PLACER, and PNS::LINE_PLACER.

Definition at line 191 of file pns_placement_algo.h.

192 {
193 }

◆ getSnappedStartPoint()

VECTOR2I PNS::MEANDER_PLACER_BASE::getSnappedStartPoint ( LINKED_ITEM aStartItem,
VECTOR2I  aStartPoint 
)
protectedinherited

Definition at line 261 of file pns_meander_placer_base.cpp.

262{
263 if( aStartItem->Kind() == ITEM::SEGMENT_T )
264 {
265 return static_cast<SEGMENT*>( aStartItem )->Seg().NearestPoint( aStartPoint );
266 }
267 else
268 {
269 wxASSERT( aStartItem->Kind() == ITEM::ARC_T );
270 ARC* arc = static_cast<ARC*>( aStartItem );
271
272 if( ( VECTOR2I( arc->Anchor( 0 ) - aStartPoint ) ).SquaredEuclideanNorm() <=
273 ( VECTOR2I( arc->Anchor( 1 ) - aStartPoint ) ).SquaredEuclideanNorm() )
274 {
275 return arc->Anchor( 0 );
276 }
277 else
278 {
279 return arc->Anchor( 1 );
280 }
281 }
282}
@ SEGMENT_T
Definition: pns_item.h:66

References PNS::ARC::Anchor(), PNS::ITEM::ARC_T, PNS::ITEM::Kind(), and PNS::ITEM::SEGMENT_T.

Referenced by PNS::DP_MEANDER_PLACER::Start(), Start(), and PNS::MEANDER_SKEW_PLACER::Start().

◆ GetTotalPadToDieLength()

int PNS::MEANDER_PLACER_BASE::GetTotalPadToDieLength ( const LINE aLine) const
inherited

Definition at line 205 of file pns_meander_placer_base.cpp.

206{
207 int length = 0;
208 JOINT start;
209 JOINT end;
210
211 m_world->FindLineEnds( aLine, start, end );
212
213 // Extract the length of the pad to die for start and end pads
214 for( auto& link : start.LinkList() )
215 {
216 if( const SOLID* solid = dynamic_cast<const SOLID*>( link.item ) )
217 {
218 // If there are overlapping pads, choose the first with a non-zero length
219 if( solid->GetPadToDie() > 0 )
220 {
221 length += solid->GetPadToDie();
222 break;
223 }
224 }
225 }
226
227 for( auto& link : end.LinkList() )
228 {
229 if( const SOLID* solid = dynamic_cast<const SOLID*>( link.item ) )
230 {
231 if( solid->GetPadToDie() > 0 )
232 {
233 length += solid->GetPadToDie();
234 break;
235 }
236 }
237 }
238
239 return length;
240}
void FindLineEnds(const LINE &aLine, JOINT &aA, JOINT &aB)
Destroy all child nodes. Applicable only to the root node.
Definition: pns_node.cpp:1069

References PNS::NODE::FindLineEnds(), PNS::JOINT::LinkList(), and PNS::MEANDER_PLACER_BASE::m_world.

◆ HasPlacedAnything()

bool PNS::MEANDER_PLACER::HasPlacedAnything ( ) const
overridevirtual

Reimplemented from PNS::PLACEMENT_ALGO.

Definition at line 219 of file pns_meander_placer.cpp.

220{
221 return m_currentTrace.SegmentCount() > 0;
222}
int SegmentCount() const
Definition: pns_line.h:139

References m_currentTrace, and PNS::LINE::SegmentCount().

◆ IsPlacingVia()

virtual bool PNS::PLACEMENT_ALGO::IsPlacingVia ( ) const
inlinevirtualinherited

Function IsPlacingVia()

Returns true if the placer is placing a via (or more vias).

Reimplemented in PNS::DIFF_PAIR_PLACER, and PNS::LINE_PLACER.

Definition at line 104 of file pns_placement_algo.h.

105 {
106 return false;
107 }

◆ lineLength()

long long int PNS::MEANDER_PLACER_BASE::lineLength ( const ITEM_SET aLine,
const SOLID aStartPad,
const SOLID aEndPad 
) const
protectedinherited

Calculate the total length of the line represented by an item set (tracks and vias)

Parameters
aLine
Returns
Pointer to world to search colliding items.

If there is a start pad but the pad's layers do not overlap the first track layer, then there must be a fanout via on the line. If there isn't, we still need to have the via back to the pad, so count the distance in the line tuning

Definition at line 285 of file pns_meander_placer_base.cpp.

286{
287 long long int total = 0;
288
289 if( aLine.Empty() )
290 return 0;
291
292 const ITEM* start_item = aLine[0];
293 const ITEM* end_item = aLine[aLine.Size() - 1];
294 bool start_via = false;
295 bool end_via = false;
296
297
303 start_via = aStartPad && ( !aStartPad->LayersOverlap( start_item ) );
304 end_via = aEndPad && ( !aEndPad->LayersOverlap( end_item ) );
305
306 for( int idx = 0; idx < aLine.Size(); idx++ )
307 {
308 const ITEM* item = aLine[idx];
309
310 if( const LINE* l = dyn_cast<const LINE*>( item ) )
311 {
312 total += l->CLine().Length();
313 }
314 else if( item->OfKind( ITEM::VIA_T ) && idx > 0 && idx < aLine.Size() - 1 )
315 {
316 int layerPrev = aLine[idx - 1]->Layer();
317 int layerNext = aLine[idx + 1]->Layer();
318
319 if( layerPrev != layerNext )
320 total += m_router->GetInterface()->StackupHeight( layerPrev, layerNext );
321 }
322 }
323
324 if( start_via )
325 {
326 int layerPrev = aStartPad->Layer();
327 int layerNext = start_item->Layer();
328
329 total += m_router->GetInterface()->StackupHeight( layerPrev, layerNext );
330 }
331
332 if( end_via )
333 {
334 int layerPrev = end_item->Layer();
335 int layerNext = aEndPad->Layer();
336
337 total += m_router->GetInterface()->StackupHeight( layerPrev, layerNext );
338 }
339
340 return total;
341}
ROUTER * m_router
Definition: pns_algo_base.h:87
virtual int StackupHeight(int aFirstLayer, int aSecondLayer) const =0
ROUTER_IFACE * GetInterface() const
Definition: pns_router.h:208

References PNS::ITEM_SET::Empty(), PNS::ROUTER::GetInterface(), PNS::ITEM::Layer(), PNS::ITEM::LayersOverlap(), PNS::ALGO_BASE::m_router, PNS::ITEM::OfKind(), PNS::ITEM_SET::Size(), PNS::ROUTER_IFACE::StackupHeight(), and PNS::ITEM::VIA_T.

Referenced by PNS::DP_MEANDER_PLACER::origPathLength(), origPathLength(), PNS::MEANDER_SKEW_PLACER::origPathLength(), and PNS::MEANDER_SKEW_PLACER::Start().

◆ Logger()

LOGGER * PNS::ALGO_BASE::Logger ( )
virtualinherited

Reimplemented in PNS::SHOVE.

Definition at line 34 of file pns_algo_base.cpp.

35{
36 return nullptr;
37}

Referenced by PNS::LINE_PLACER::rhShoveOnly(), PNS::LINE_PLACER::rhWalkOnly(), PNS::DRAGGER::Start(), and PNS::DRAGGER::tryWalkaround().

◆ MeanderSettings()

const MEANDER_SETTINGS & PNS::MEANDER_PLACER_BASE::MeanderSettings ( ) const
virtualinherited

Return the current meandering configuration.

Returns
the settings

Definition at line 243 of file pns_meander_placer_base.cpp.

244{
245 return m_settings;
246}

References PNS::MEANDER_PLACER_BASE::m_settings.

Referenced by PNS::MEANDER_SHAPE::makeMiterShape(), LENGTH_TUNER_TOOL::meanderSettingsDialog(), PNS::MEANDER_SHAPE::Settings(), and PNS::MEANDERED_LINE::Settings().

◆ Move()

bool PNS::MEANDER_PLACER::Move ( const VECTOR2I aP,
ITEM aEndItem 
)
overridevirtual

Function Move()

Moves the end of the currently routed primtive(s) to the point aP, taking aEndItem as the anchor (if not NULL). (unless NULL).

Implements PNS::PLACEMENT_ALGO.

Reimplemented in PNS::MEANDER_SKEW_PLACER.

Definition at line 101 of file pns_meander_placer.cpp.

102{
103 return doMove( aP, aEndItem, m_settings.m_targetLength );
104}
bool doMove(const VECTOR2I &aP, ITEM *aEndItem, long long int aTargetLength)
long long int m_targetLength
Type of corners for the meandered line.
Definition: pns_meander.h:92

References doMove(), PNS::MEANDER_PLACER_BASE::m_settings, and PNS::MEANDER_SETTINGS::m_targetLength.

◆ origPathLength()

long long int PNS::MEANDER_PLACER::origPathLength ( ) const
protectedvirtual

current routing start point (end of tail, beginning of head)

Reimplemented in PNS::MEANDER_SKEW_PLACER.

Definition at line 95 of file pns_meander_placer.cpp.

96{
98}
int m_padToDieLength
Width of the meandered trace(s).
long long int lineLength(const ITEM_SET &aLine, const SOLID *aStartPad, const SOLID *aEndPad) const
Calculate the total length of the line represented by an item set (tracks and vias)

References PNS::MEANDER_PLACER_BASE::lineLength(), PNS::MEANDER_PLACER_BASE::m_endPad_n, PNS::MEANDER_PLACER_BASE::m_padToDieLength, PNS::MEANDER_PLACER_BASE::m_startPad_n, and m_tunedPath.

Referenced by doMove().

◆ Router()

◆ SetDebugDecorator()

void PNS::ALGO_BASE::SetDebugDecorator ( DEBUG_DECORATOR aDecorator)
inlineinherited

Assign a debug decorator allowing this algo to draw extra graphics for visual debugging.

Definition at line 73 of file pns_algo_base.h.

74 {
75 m_debugDecorator = aDecorator;
76 }

References PNS::ALGO_BASE::m_debugDecorator.

Referenced by PNS::SHOVE::onCollidingSolid(), PNS::LINE_PLACER::rhShoveOnly(), PNS::LINE_PLACER::rhWalkOnly(), PNS::SHOVE::SHOVE(), and PNS::DRAGGER::tryWalkaround().

◆ SetLayer()

virtual bool PNS::PLACEMENT_ALGO::SetLayer ( int  aLayer)
inlinevirtualinherited

Function SetLayer()

Sets the current routing layer.

Reimplemented in PNS::DIFF_PAIR_PLACER, and PNS::LINE_PLACER.

Definition at line 114 of file pns_placement_algo.h.

115 {
116 return false;
117 }

◆ SetLogger()

void PNS::ALGO_BASE::SetLogger ( LOGGER aLogger)
inlineinherited

Definition at line 65 of file pns_algo_base.h.

66 {
67 m_logger = aLogger;
68 }
LOGGER * m_logger
Definition: pns_algo_base.h:88

References PNS::ALGO_BASE::m_logger.

Referenced by PNS::LINE_PLACER::rhShoveOnly(), PNS::LINE_PLACER::rhWalkOnly(), and PNS::DRAGGER::tryWalkaround().

◆ SetOrthoMode()

virtual void PNS::PLACEMENT_ALGO::SetOrthoMode ( bool  aOrthoMode)
inlinevirtualinherited

Function SetOrthoMode()

Forces the router to place a straight 90/45 degree trace (with the end as near to the cursor as possible) instead of a standard 135 degree two-segment bend.

Reimplemented in PNS::DIFF_PAIR_PLACER, and PNS::LINE_PLACER.

Definition at line 182 of file pns_placement_algo.h.

183 {
184 }

◆ Settings()

◆ setWorld()

void PNS::MEANDER_PLACER::setWorld ( NODE aWorld)
protected

◆ SpacingStep()

void PNS::MEANDER_PLACER_BASE::SpacingStep ( int  aSign)
virtualinherited

Increase/decrease the current meandering spacing by one step.

Parameters
aSigndirection (negative = decrease, positive = increase).

Definition at line 57 of file pns_meander_placer_base.cpp.

58{
59 int s = m_settings.m_spacing + aSign * m_settings.m_step;
60 s = std::max( s, m_currentWidth + Clearance() );
61
63}
virtual int Clearance()
Return the clearance of the track(s) being length tuned.

References PNS::MEANDER_PLACER_BASE::Clearance(), PNS::MEANDER_PLACER_BASE::m_currentWidth, PNS::MEANDER_PLACER_BASE::m_settings, PNS::MEANDER_SETTINGS::m_spacing, and PNS::MEANDER_SETTINGS::m_step.

◆ Start()

bool PNS::MEANDER_PLACER::Start ( const VECTOR2I aP,
ITEM aStartItem 
)
overridevirtual

Function Start()

Starts placement/drag operation at point aP, taking item aStartItem as anchor (unless NULL).

Implements PNS::PLACEMENT_ALGO.

Reimplemented in PNS::MEANDER_SKEW_PLACER.

Definition at line 60 of file pns_meander_placer.cpp.

61{
62 if( !aStartItem || !aStartItem->OfKind( ITEM::SEGMENT_T | ITEM::ARC_T ) )
63 {
64 Router()->SetFailureReason( _( "Please select a track whose length you want to tune." ) );
65 return false;
66 }
67
68 m_initialSegment = static_cast<LINKED_ITEM*>( aStartItem );
69 m_currentNode = nullptr;
71
72 m_world = Router()->GetWorld()->Branch();
74
75 TOPOLOGY topo( m_world );
76 m_tunedPath = topo.AssembleTuningPath( m_initialSegment, &m_startPad_n, &m_endPad_n );
77
79
80 if( m_startPad_n )
82
83 if( m_endPad_n )
85
87
89 m_currentEnd = VECTOR2I( 0, 0 );
90
91 return true;
92}
VECTOR2I getSnappedStartPoint(LINKED_ITEM *aStartItem, VECTOR2I aStartPoint)
void Remove(ARC *aArc)
Remove an item from this branch.
Definition: pns_node.cpp:873
const LINE AssembleLine(LINKED_ITEM *aSeg, int *aOriginSegmentIndex=nullptr, bool aStopAtLockedJoints=false, bool aFollowLockedSegments=false)
Follow the joint map to assemble a line connecting two non-trivial joints starting from segment aSeg.
Definition: pns_node.cpp:983
void SetFailureReason(const wxString &aReason)
Definition: pns_router.h:203
NODE * GetWorld() const
Definition: pns_router.h:154
int GetPadToDie() const
Definition: pns_solid.h:103
#define _(s)

References _, PNS::ITEM::ARC_T, PNS::NODE::AssembleLine(), PNS::TOPOLOGY::AssembleTuningPath(), PNS::NODE::Branch(), PNS::SOLID::GetPadToDie(), PNS::MEANDER_PLACER_BASE::getSnappedStartPoint(), PNS::ROUTER::GetWorld(), PNS::MEANDER_PLACER_BASE::m_currentEnd, m_currentNode, m_currentStart, PNS::MEANDER_PLACER_BASE::m_currentWidth, PNS::MEANDER_PLACER_BASE::m_endPad_n, m_initialSegment, m_originLine, PNS::MEANDER_PLACER_BASE::m_padToDieLength, PNS::MEANDER_PLACER_BASE::m_startPad_n, m_tunedPath, PNS::MEANDER_PLACER_BASE::m_world, PNS::ITEM::OfKind(), PNS::NODE::Remove(), PNS::ALGO_BASE::Router(), PNS::ITEM::SEGMENT_T, PNS::ROUTER::SetFailureReason(), and PNS::LINE::Width().

◆ ToggleVia()

virtual bool PNS::PLACEMENT_ALGO::ToggleVia ( bool  aEnabled)
inlinevirtualinherited

Function ToggleVia()

Enables/disables a via at the end of currently routed trace.

Reimplemented in PNS::DIFF_PAIR_PLACER, and PNS::LINE_PLACER.

Definition at line 94 of file pns_placement_algo.h.

95 {
96 return false;
97 }

◆ Traces()

const ITEM_SET PNS::MEANDER_PLACER::Traces ( )
overridevirtual

Function Traces()

Returns all routed/tuned traces.

Implements PNS::PLACEMENT_ALGO.

Definition at line 249 of file pns_meander_placer.cpp.

250{
252 return ITEM_SET( &m_currentTrace );
253}

References m_currentTrace, m_finalShape, and m_originLine.

◆ tuneLineLength()

void PNS::MEANDER_PLACER_BASE::tuneLineLength ( MEANDERED_LINE aTuned,
long long int  aElongation 
)
protectedinherited

Take a set of meanders in aTuned and tunes their length to extend the original line length by aElongation.

Definition at line 135 of file pns_meander_placer_base.cpp.

136{
137 long long int remaining = aElongation;
138 bool finished = false;
139
140 for( MEANDER_SHAPE* m : aTuned.Meanders() )
141 {
142 if( m->Type() != MT_CORNER && m->Type() != MT_ARC )
143 {
144 if( remaining >= 0 )
145 remaining -= m->MaxTunableLength() - m->BaselineLength();
146
147 if( remaining < 0 )
148 {
149 if( !finished )
150 {
151 MEANDER_TYPE newType;
152
153 if( m->Type() == MT_START || m->Type() == MT_SINGLE )
154 newType = MT_SINGLE;
155 else
156 newType = MT_FINISH;
157
158 m->SetType( newType );
159 m->Recalculate();
160
161 finished = true;
162 }
163 else
164 {
165 m->MakeEmpty();
166 }
167 }
168 }
169 }
170
171 remaining = aElongation;
172 int meanderCount = 0;
173
174 for( MEANDER_SHAPE* m : aTuned.Meanders() )
175 {
176 if( m->Type() != MT_CORNER && m->Type() != MT_ARC && m->Type() != MT_EMPTY )
177 {
178 if(remaining >= 0)
179 {
180 remaining -= m->MaxTunableLength() - m->BaselineLength();
181 meanderCount ++;
182 }
183 }
184 }
185
186 long long int balance = 0;
187
188 if( meanderCount )
189 balance = -remaining / meanderCount;
190
191 if( balance >= 0 )
192 {
193 for( MEANDER_SHAPE* m : aTuned.Meanders() )
194 {
195 if( m->Type() != MT_CORNER && m->Type() != MT_ARC && m->Type() != MT_EMPTY )
196 {
197 m->Resize( std::max( m->Amplitude() - balance / 2,
198 (long long int) m_settings.m_minAmplitude ) );
199 }
200 }
201 }
202}
MEANDER_TYPE
Shapes of available meanders.
Definition: pns_meander.h:37
@ MT_ARC
Definition: pns_meander.h:45
@ MT_START
Definition: pns_meander.h:39
@ MT_FINISH
Definition: pns_meander.h:40
@ MT_CORNER
Definition: pns_meander.h:44
@ MT_SINGLE
Definition: pns_meander.h:38

References PNS::MEANDER_SETTINGS::m_minAmplitude, PNS::MEANDER_PLACER_BASE::m_settings, PNS::MEANDERED_LINE::Meanders(), PNS::MT_ARC, PNS::MT_CORNER, PNS::MT_EMPTY, PNS::MT_FINISH, PNS::MT_SINGLE, and PNS::MT_START.

Referenced by doMove(), and PNS::DP_MEANDER_PLACER::Move().

◆ TuningInfo()

const wxString PNS::MEANDER_PLACER::TuningInfo ( EDA_UNITS  aUnits) const
overridevirtual

Return a string describing the status and length of the tuned traces.

Implements PNS::MEANDER_PLACER_BASE.

Reimplemented in PNS::MEANDER_SKEW_PLACER.

Definition at line 267 of file pns_meander_placer.cpp.

268{
269 wxString status;
270
271 switch ( m_lastStatus )
272 {
273 case TOO_LONG:
274 status = _( "Too long: " );
275 break;
276 case TOO_SHORT:
277 status = _( "Too short: " );
278 break;
279 case TUNED:
280 status = _( "Tuned: " );
281 break;
282 default:
283 return _( "?" );
284 }
285
286 status += ::MessageTextFromValue( aUnits, m_lastLength );
287 status += wxT( "/" );
289
290 return status;
291}
wxString MessageTextFromValue(EDA_UNITS aUnits, int aValue, bool aAddUnitLabel, EDA_DATA_TYPE aType)
Convert a value to a string using double notation.
Definition: base_units.cpp:103

References _, m_lastLength, m_lastStatus, PNS::MEANDER_PLACER_BASE::m_settings, PNS::MEANDER_SETTINGS::m_targetLength, MessageTextFromValue(), PNS::MEANDER_PLACER_BASE::TOO_LONG, PNS::MEANDER_PLACER_BASE::TOO_SHORT, and PNS::MEANDER_PLACER_BASE::TUNED.

◆ TuningStatus()

MEANDER_PLACER::TUNING_STATUS PNS::MEANDER_PLACER::TuningStatus ( ) const
overridevirtual

Return the tuning status (too short, too long, etc.) of the trace(s) being tuned.

Implements PNS::MEANDER_PLACER_BASE.

Definition at line 294 of file pns_meander_placer.cpp.

295{
296 return m_lastStatus;
297}

References m_lastStatus.

◆ UnfixRoute()

virtual bool PNS::PLACEMENT_ALGO::UnfixRoute ( )
inlinevirtualinherited

Reimplemented in PNS::LINE_PLACER.

Definition at line 81 of file pns_placement_algo.h.

81{ return false; };

◆ UpdateSettings()

void PNS::MEANDER_PLACER_BASE::UpdateSettings ( const MEANDER_SETTINGS aSettings)
virtualinherited

◆ UpdateSizes()

virtual void PNS::PLACEMENT_ALGO::UpdateSizes ( const SIZES_SETTINGS aSizes)
inlinevirtualinherited

Function UpdateSizes()

Performs on-the-fly update of the width, via diameter & drill size from a settings class. Used to dynamically change these parameters as the track is routed.

Reimplemented in PNS::DIFF_PAIR_PLACER, and PNS::LINE_PLACER.

Definition at line 171 of file pns_placement_algo.h.

172 {
173 }

◆ VisibleViewArea()

const BOX2I & PNS::ALGO_BASE::VisibleViewArea ( ) const
inherited

Definition at line 40 of file pns_algo_base.cpp.

41{
42 return m_router->VisibleViewArea();
43}
const BOX2I & VisibleViewArea() const
Definition: pns_router.h:211

References PNS::ALGO_BASE::m_router, and PNS::ROUTER::VisibleViewArea().

Referenced by PNS::DRAGGER::optimizeAndUpdateDraggedLine(), and PNS::SHOVE::runOptimizer().

Member Data Documentation

◆ m_currentEnd

VECTOR2I PNS::MEANDER_PLACER_BASE::m_currentEnd
protectedinherited

◆ m_currentNode

NODE* PNS::MEANDER_PLACER::m_currentNode
protected

◆ m_currentStart

VECTOR2I PNS::MEANDER_PLACER::m_currentStart
protected

Current world state.

Definition at line 105 of file pns_meander_placer.h.

Referenced by doMove(), Start(), and PNS::MEANDER_SKEW_PLACER::Start().

◆ m_currentTrace

LINE PNS::MEANDER_PLACER::m_currentTrace
protected

Definition at line 111 of file pns_meander_placer.h.

Referenced by FixRoute(), HasPlacedAnything(), and Traces().

◆ m_currentWidth

◆ m_debugDecorator

DEBUG_DECORATOR* PNS::ALGO_BASE::m_debugDecorator
protectedinherited

Definition at line 86 of file pns_algo_base.h.

Referenced by PNS::ALGO_BASE::Dbg(), and PNS::ALGO_BASE::SetDebugDecorator().

◆ m_endPad_n

◆ m_endPad_p

◆ m_finalShape

SHAPE_LINE_CHAIN PNS::MEANDER_PLACER::m_finalShape
protected

Definition at line 114 of file pns_meander_placer.h.

Referenced by doMove(), FixRoute(), and Traces().

◆ m_initialSegment

LINKED_ITEM* PNS::MEANDER_PLACER::m_initialSegment
protected

◆ m_lastLength

long long int PNS::MEANDER_PLACER::m_lastLength
protected

◆ m_lastStatus

TUNING_STATUS PNS::MEANDER_PLACER::m_lastStatus
protected

◆ m_logger

LOGGER* PNS::ALGO_BASE::m_logger
protectedinherited

Definition at line 88 of file pns_algo_base.h.

Referenced by PNS::ALGO_BASE::SetLogger().

◆ m_originLine

LINE PNS::MEANDER_PLACER::m_originLine
protected

◆ m_padToDieLength

◆ m_result

MEANDERED_LINE PNS::MEANDER_PLACER::m_result
protected

Definition at line 115 of file pns_meander_placer.h.

Referenced by CheckFit(), and doMove().

◆ m_router

◆ m_settings

◆ m_startPad_n

◆ m_startPad_p

◆ m_tunedPath

ITEM_SET PNS::MEANDER_PLACER::m_tunedPath
protected

Definition at line 112 of file pns_meander_placer.h.

Referenced by doMove(), origPathLength(), and Start().

◆ m_world


The documentation for this class was generated from the following files: