95 "net for length tuning. Make sure the names of the nets "
96 "belonging to a differential pair end with either _N/_P "
145 return std::max( totalP, totalN );
203 if( coupledSegments.size() == 0 )
219 int offset = ( tuned.
Gap() + tuned.
Width() ) / 2;
228 if(
const LINE* l = dyn_cast<const LINE*>( item ) )
230 PNS_DBG(
Dbg(), AddShape, &l->CLine(),
YELLOW, 10000, wxT(
"tuned-path-p" ) );
238 if(
const LINE* l = dyn_cast<const LINE*>( item ) )
240 PNS_DBG(
Dbg(), AddShape, &l->CLine(),
YELLOW, 10000, wxT(
"tuned-path-n" ) );
246 int curIndexP = 0, curIndexN = 0;
254 side = base.
Side( aP ) < 0;
260 while( sp.indexP >= curIndexP && curIndexP != -1 )
264 ssize_t arcIndex = tunedP.
ArcIndex( curIndexP );
273 curIndexP = tunedP.
NextShape( curIndexP );
276 while( sp.indexN >= curIndexN && curIndexN != -1 )
280 ssize_t arcIndex = tunedN.
ArcIndex( curIndexN );
289 curIndexN = tunedN.
NextShape( curIndexN );
295 while( curIndexP < tunedP.
PointCount() && curIndexP != -1 )
299 ssize_t arcIndex = tunedP.
ArcIndex( curIndexP );
308 curIndexP = tunedP.
NextShape( curIndexP );
311 while( curIndexN < tunedN.
PointCount() && curIndexN != -1 )
315 ssize_t arcIndex = tunedN.
ArcIndex( curIndexN );
324 curIndexN = tunedN.
NextShape( curIndexN );
353 tunedP.
Append( m->CLine( 0 ) );
354 tunedN.
Append( m->CLine( 1 ) );
448 int w = aShape->
Width();
449 int clearance = w + w * 3;
518 std::vector<NET_HANDLE> rv;
ROUTER * Router() const
Return current router settings.
DEBUG_DECORATOR * Dbg() const
Basic class for a differential pair.
const SHAPE_LINE_CHAIN & CN() const
std::vector< COUPLED_SEGMENTS > COUPLED_SEGMENTS_VEC
void SetShape(const SHAPE_LINE_CHAIN &aP, const SHAPE_LINE_CHAIN &aN, bool aSwapLanes=false)
const SHAPE_LINE_CHAIN & CP() const
void CoupledSegmentPairs(COUPLED_SEGMENTS_VEC &aPairs) const
bool Start(const VECTOR2I &aP, ITEM *aStartItem) override
Start routing a single track at point aP, taking item aStartItem as anchor (unless NULL).
bool CheckFit(MEANDER_SHAPE *aShape) override
Checks if it's OK to place the shape aShape (i.e.
const ITEM_SET Traces() override
Function Traces()
SHAPE_LINE_CHAIN m_finalShapeP
bool AbortPlacement() override
bool pairOrientation(const DIFF_PAIR::COUPLED_SEGMENTS &aPair)
long long int TuningResult() const override
Return the resultant length or skew of the tuned traces.
DP_MEANDER_PLACER(ROUTER *aRouter)
SHAPE_LINE_CHAIN m_finalShapeN
VECTOR2I m_currentStart
Current world state.
bool FixRoute(const VECTOR2I &aP, ITEM *aEndItem, bool aForceFinish=false) override
Commit the currently routed track to the parent node, taking aP as the final end point and aEndItem a...
int CurrentLayer() const override
Function CurrentLayer()
TUNING_STATUS TuningStatus() const override
Return the tuning status (too short, too long, etc.) of the trace(s) being tuned.
const SEG baselineSegment(const DIFF_PAIR::COUPLED_SEGMENTS &aCoupledSegs)
TUNING_STATUS m_lastStatus
const DIFF_PAIR & GetOriginPair()
const ITEM_SET TunedPath() override
bool HasPlacedAnything() const override
bool CommitPlacement() override
bool Move(const VECTOR2I &aP, ITEM *aEndItem) override
Move the end of the currently routed trace to the point aP, taking aEndItem as anchor (if not NULL).
const VECTOR2I & CurrentEnd() const override
Function CurrentEnd()
long long int m_lastLength
const VECTOR2I & CurrentStart() const override
Function CurrentStart()
LINKED_ITEM * m_initialSegment
long long int origPathLength() const
Current routing start point (end of tail, beginning of head).
const std::vector< NET_HANDLE > CurrentNets() const override
Function CurrentNets()
NODE * CurrentNode(bool aLoopsRemoved=false) const override
Return the most recent world state.
void Add(const LINE &aLine)
const std::vector< ITEM * > & CItems() const
Base class for PNS router board items.
const PNS_LAYER_RANGE & Layers() const
bool OfKind(int aKindMask) const
Represents a track on a PCB, connecting two non-trivial joints (that is, vias, pads,...
LINKED_ITEM * GetLink(int aIndex) const
Erase the linking information. Used to detach the line from the owning node.
Represent a set of meanders fitted over a single or two lines.
void SetBaselineOffset(int aOffset)
Set the parallel offset between the base segment and the meandered line.
void SetWidth(int aWidth)
Set the line width.
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.
void AddArcAndPt(const SHAPE_ARC &aArc1, const VECTOR2I &aPt2)
Create a dummy meander shape representing an arc corner.
bool CheckSelfIntersections(MEANDER_SHAPE *aShape, int aClearance)
Check if the given shape is intersecting with any other meander in the current line.
std::vector< MEANDER_SHAPE * > & Meanders()
void AddPtAndArc(const VECTOR2I &aPt1, const SHAPE_ARC &aArc2)
Create a dummy meander shape representing an arc corner.
Base class for Single trace & Differential pair meandering tools, as both of them share a lot of code...
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...
TUNING_STATUS
< Result of the length tuning operation
int m_currentWidth
Meander settings.
MEANDER_SETTINGS m_settings
The current end point.
NODE * m_world
Width of the meandered trace(s).
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)
MEANDER_SIDE m_initialSide
Allowable tuning error.
MINOPTMAX< long long int > m_targetLength
Target skew value for diff pair de-skewing.
The geometry of a single meander.
const SHAPE_LINE_CHAIN & CLine(int aShape) const
Keep the router "world" - i.e.
NODE * Branch()
Create a lightweight copy (called branch) of self that tracks the changes (added/removed items) wrs t...
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.
bool Add(std::unique_ptr< SEGMENT > aSegment, bool aAllowRedundant=false)
Add an item to the current node.
void Remove(ARC *aArc)
Remove an item from this branch.
virtual void DisplayPathLine(const SHAPE_LINE_CHAIN &aLine, int aImportance)=0
ROUTER_IFACE * GetInterface() const
void SetFailureReason(const wxString &aReason)
const DIFF_PAIR AssembleDiffPair(SEGMENT *aStart)
const ITEM_SET AssembleTuningPath(ITEM *aStart, SOLID **aStartPad=nullptr, SOLID **aEndPad=nullptr)
Like AssembleTrivialPath, but follows the track length algorithm, which discards segments that are fu...
int Side(const VECTOR2I &aP) const
Determine on which side of directed line passing via segment ends point aP lies.
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
const SHAPE_ARC & Arc(size_t aArc) const
int Split(const VECTOR2I &aP, bool aExact=false)
Insert the point aP belonging to one of the our segments, splitting the adjacent segment in two.
void Simplify(int aMaxError=0)
Simplify the line chain by removing colinear adjacent segments and duplicate vertices.
int PointCount() const
Return the number of points (vertices) in this line chain.
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.
int NextShape(int aPointIndex) const
Return the vertex index of the next shape in the chain, or -1 if aPointIndex is the last shape.
void Append(int aX, int aY, bool aAllowDuplication=false)
Append a new point at the end of the line chain.
const VECTOR2I & CPoint(int aIndex) const
Return a reference to a given point in 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.
Push and Shove diff pair dimensions (gap) settings dialog.
#define PNS_DBG(dbg, method,...)