![]() |
KiCad PCB EDA Suite
|
Base class for Single trace & Differential pair meandering tools, as both of them share a lot of code. More...
#include <pns_meander_placer_base.h>
Public Types | |
enum | TUNING_STATUS { TOO_SHORT = 0, TOO_LONG, TUNED } |
< Result of the length tuning operation More... | |
Public Member Functions | |
MEANDER_PLACER_BASE (ROUTER *aRouter) | |
virtual | ~MEANDER_PLACER_BASE () |
virtual const wxString | TuningInfo (EDA_UNITS aUnits) const =0 |
Return a string describing the status and length of the tuned traces. More... | |
virtual TUNING_STATUS | TuningStatus () const =0 |
Return the tuning status (too short, too long, etc.) of the trace(s) being tuned. 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 const MEANDER_SETTINGS & | MeanderSettings () const |
Return the current meandering configuration. More... | |
virtual void | UpdateSettings (const MEANDER_SETTINGS &aSettings) |
virtual bool | CheckFit (MEANDER_SHAPE *aShape) |
Checks if it's OK to place the shape aShape (i.e. More... | |
int | GetTotalPadToDieLength (const LINE &aLine) const |
virtual bool | Start (const VECTOR2I &aP, ITEM *aStartItem)=0 |
Function Start() More... | |
virtual bool | Move (const VECTOR2I &aP, ITEM *aEndItem)=0 |
Function Move() More... | |
virtual bool | FixRoute (const VECTOR2I &aP, ITEM *aEndItem, bool aForceFinish=false)=0 |
Function FixRoute() More... | |
virtual bool | UnfixRoute () |
virtual bool | CommitPlacement () |
virtual bool | AbortPlacement () |
virtual bool | HasPlacedAnything () const |
virtual bool | ToggleVia (bool aEnabled) |
Function ToggleVia() More... | |
virtual bool | IsPlacingVia () const |
Function IsPlacingVia() More... | |
virtual bool | SetLayer (int aLayer) |
Function SetLayer() More... | |
virtual const ITEM_SET | Traces ()=0 |
Function Traces() More... | |
virtual const VECTOR2I & | CurrentEnd () const =0 |
Function CurrentEnd() More... | |
virtual const std::vector< int > | CurrentNets () const =0 |
Function CurrentNets() More... | |
virtual int | CurrentLayer () const =0 |
Function CurrentLayer() More... | |
virtual NODE * | CurrentNode (bool aLoopsRemoved=false) const =0 |
Function CurrentNode() 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... | |
ROUTER * | Router () const |
Return current router settings. More... | |
ROUTING_SETTINGS & | Settings () const |
Return the logger object, allowing to dump geometry to a file. More... | |
virtual LOGGER * | Logger () |
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_DECORATOR * | Dbg () const |
const BOX2I & | VisibleViewArea () const |
Protected Member Functions | |
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) |
Pointer to world to search colliding items. More... | |
Protected Attributes | |
NODE * | m_world |
Total length added by pad to die size. More... | |
int | m_padToDieLenth |
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 |
DEBUG_DECORATOR * | m_debugDecorator |
ROUTER * | m_router |
LOGGER * | m_logger |
Base class for Single trace & Differential pair meandering tools, as both of them share a lot of code.
Definition at line 47 of file pns_meander_placer_base.h.
< Result of the length tuning operation
Enumerator | |
---|---|
TOO_SHORT | |
TOO_LONG | |
TUNED |
Definition at line 51 of file pns_meander_placer_base.h.
PNS::MEANDER_PLACER_BASE::MEANDER_PLACER_BASE | ( | ROUTER * | aRouter | ) |
Definition at line 30 of file pns_meander_placer_base.cpp.
References m_currentWidth, m_padToDieLenth, m_world, and NULL.
|
virtual |
Definition at line 39 of file pns_meander_placer_base.cpp.
|
inlinevirtualinherited |
Reimplemented in PNS::LINE_PLACER, PNS::DIFF_PAIR_PLACER, PNS::DP_MEANDER_PLACER, and PNS::MEANDER_PLACER.
Definition at line 85 of file pns_placement_algo.h.
|
virtual |
Increase/decreases the current meandering amplitude by one step.
aSign | direction (negative = decrease, positive = increase). |
Definition at line 44 of file pns_meander_placer_base.cpp.
References PNS::MEANDER_SETTINGS::m_maxAmplitude, PNS::MEANDER_SETTINGS::m_minAmplitude, m_settings, and PNS::MEANDER_SETTINGS::m_step.
|
inlinevirtual |
Checks if it's OK to place the shape aShape (i.e.
if it doesn't cause DRC violations or collide with other meanders).
aShape | the shape to check. |
Reimplemented in PNS::DP_MEANDER_PLACER, and PNS::MEANDER_PLACER.
Definition at line 105 of file pns_meander_placer_base.h.
Referenced by PNS::MEANDER_SHAPE::Fit().
|
inlinevirtualinherited |
Reimplemented in PNS::LINE_PLACER, PNS::DIFF_PAIR_PLACER, PNS::DP_MEANDER_PLACER, and PNS::MEANDER_PLACER.
Definition at line 83 of file pns_placement_algo.h.
|
protected |
Compare aValue against aExpected with given tolerance.
Definition at line 228 of file pns_meander_placer_base.cpp.
Referenced by PNS::MEANDER_PLACER::doMove(), and PNS::DP_MEANDER_PLACER::Move().
|
pure virtualinherited |
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.
Implemented in PNS::LINE_PLACER, PNS::DIFF_PAIR_PLACER, PNS::DP_MEANDER_PLACER, and PNS::MEANDER_PLACER.
|
pure virtualinherited |
Function CurrentLayer()
Returns the layer of currently routed track.
Implemented in PNS::LINE_PLACER, PNS::DIFF_PAIR_PLACER, PNS::DP_MEANDER_PLACER, and PNS::MEANDER_PLACER.
|
pure virtualinherited |
Function CurrentNets()
Returns the net code(s) of currently routed track(s).
Implemented in PNS::LINE_PLACER, PNS::DIFF_PAIR_PLACER, PNS::DP_MEANDER_PLACER, and PNS::MEANDER_PLACER.
|
pure virtualinherited |
Function CurrentNode()
Returns the most recent board state.
Implemented in PNS::LINE_PLACER, PNS::DIFF_PAIR_PLACER, PNS::DP_MEANDER_PLACER, and PNS::MEANDER_PLACER.
|
protected |
Extract the part of a track to be meandered, depending on the starting point and the cursor position.
aOrigin | the original line. |
aTuneStart | point where we start meandering (start click coordinates). |
aCursorPos | current cursor position. |
aPre | part before the beginning of meanders. |
aTuned | part to be meandered. |
aPost | part after the end of meanders. |
Definition at line 68 of file pns_meander_placer_base.cpp.
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 PNS::MEANDER_PLACER::doMove(), and PNS::DP_MEANDER_PLACER::Move().
|
inlineinherited |
Definition at line 78 of file pns_algo_base.h.
References PNS::ALGO_BASE::m_debugDecorator.
Referenced by PNS::MEANDER_PLACER::doMove(), PNS::COMPONENT_DRAGGER::Drag(), PNS::MEANDER_SKEW_PLACER::Move(), PNS::DP_MEANDER_PLACER::Move(), PNS::SHOVE::onCollidingArc(), PNS::SHOVE::onCollidingLine(), PNS::SHOVE::onCollidingSegment(), PNS::SHOVE::onCollidingSolid(), PNS::DRAGGER::optimizeAndUpdateDraggedLine(), PNS::SHOVE::replaceLine(), PNS::LINE_PLACER::rhShoveOnly(), PNS::LINE_PLACER::rhWalkOnly(), PNS::SHOVE::runOptimizer(), PNS::SHOVE::shoveIteration(), PNS::SHOVE::ShoveLines(), PNS::SHOVE::shoveLineToHullSet(), PNS::SHOVE::ShoveObstacleLine(), PNS::WALKAROUND::singleStep(), PNS::DRAGGER::Start(), and PNS::DRAGGER::tryWalkaround().
|
pure virtualinherited |
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).
Implemented in PNS::LINE_PLACER, PNS::DIFF_PAIR_PLACER, PNS::DP_MEANDER_PLACER, and PNS::MEANDER_PLACER.
|
inlinevirtualinherited |
Function FlipPosture()
Toggles the current posture (straight/diagonal) of the trace head.
Reimplemented in PNS::LINE_PLACER, and PNS::DIFF_PAIR_PLACER.
Definition at line 160 of file pns_placement_algo.h.
|
inlinevirtualinherited |
Function GetModifiedNets.
Returns the net codes of all currently routed trace(s)
Reimplemented in PNS::LINE_PLACER, and PNS::DIFF_PAIR_PLACER.
Definition at line 191 of file pns_placement_algo.h.
|
protected |
Pointer to world to search colliding items.
Definition at line 240 of file pns_meander_placer_base.cpp.
References PNS::ITEM::ARC_T, PNS::ITEM::Kind(), and PNS::ITEM::SEGMENT_T.
Referenced by PNS::MEANDER_SKEW_PLACER::Start(), PNS::MEANDER_PLACER::Start(), and PNS::DP_MEANDER_PLACER::Start().
int PNS::MEANDER_PLACER_BASE::GetTotalPadToDieLength | ( | const LINE & | aLine | ) | const |
Definition at line 184 of file pns_meander_placer_base.cpp.
References PNS::NODE::FindLineEnds(), PNS::JOINT::LinkList(), and m_world.
Referenced by PNS::MEANDER_SKEW_PLACER::Start(), PNS::MEANDER_PLACER::Start(), and PNS::DP_MEANDER_PLACER::Start().
|
inlinevirtualinherited |
Reimplemented in PNS::LINE_PLACER, PNS::DIFF_PAIR_PLACER, PNS::DP_MEANDER_PLACER, and PNS::MEANDER_PLACER.
Definition at line 87 of file pns_placement_algo.h.
|
inlinevirtualinherited |
Function IsPlacingVia()
Returns true if the placer is placing a via (or more vias).
Reimplemented in PNS::LINE_PLACER, and PNS::DIFF_PAIR_PLACER.
Definition at line 104 of file pns_placement_algo.h.
|
virtualinherited |
Reimplemented in PNS::SHOVE.
Definition at line 34 of file pns_algo_base.cpp.
References NULL.
Referenced by PNS::LINE_PLACER::rhShoveOnly(), PNS::LINE_PLACER::rhWalkOnly(), PNS::DRAGGER::Start(), and PNS::DRAGGER::tryWalkaround().
|
virtual |
Return the current meandering configuration.
Definition at line 222 of file pns_meander_placer_base.cpp.
References m_settings.
Referenced by PNS::MEANDER_SHAPE::makeMiterShape(), LENGTH_TUNER_TOOL::meanderSettingsDialog(), PNS::MEANDER_SHAPE::Settings(), and PNS::MEANDERED_LINE::Settings().
|
pure virtualinherited |
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).
Implemented in PNS::LINE_PLACER, PNS::DIFF_PAIR_PLACER, PNS::DP_MEANDER_PLACER, PNS::MEANDER_PLACER, and PNS::MEANDER_SKEW_PLACER.
|
inlineinherited |
Return current router settings.
Definition at line 54 of file pns_algo_base.h.
References PNS::ALGO_BASE::m_router.
Referenced by PNS::DIFF_PAIR_PLACER::attemptWalk(), PNS::MEANDER_PLACER::CommitPlacement(), PNS::DP_MEANDER_PLACER::CommitPlacement(), PNS::DIFF_PAIR_PLACER::CommitPlacement(), PNS::LINE_PLACER::CommitPlacement(), PNS::COMPONENT_DRAGGER::FixRoute(), PNS::DRAGGER::FixRoute(), PNS::DIFF_PAIR_PLACER::initPlacement(), PNS::LINE_PLACER::initPlacement(), PNS::SHOVE::onCollidingSolid(), PNS::LINE_PLACER::rhShoveOnly(), PNS::LINE_PLACER::rhWalkOnly(), PNS::MEANDER_SKEW_PLACER::Start(), PNS::MEANDER_PLACER::Start(), PNS::DP_MEANDER_PLACER::Start(), PNS::DRAGGER::Start(), PNS::DIFF_PAIR_PLACER::Start(), and PNS::DRAGGER::tryWalkaround().
|
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.
References PNS::ALGO_BASE::m_debugDecorator.
Referenced by PNS::LINE_PLACER::rhShoveOnly(), PNS::LINE_PLACER::rhWalkOnly(), PNS::SHOVE::SHOVE(), and PNS::DRAGGER::tryWalkaround().
|
inlinevirtualinherited |
Function SetLayer()
Sets the current routing layer.
Reimplemented in PNS::LINE_PLACER, and PNS::DIFF_PAIR_PLACER.
Definition at line 114 of file pns_placement_algo.h.
|
inlineinherited |
Definition at line 65 of file pns_algo_base.h.
References PNS::ALGO_BASE::m_logger.
Referenced by PNS::LINE_PLACER::rhShoveOnly(), PNS::LINE_PLACER::rhWalkOnly(), and PNS::DRAGGER::tryWalkaround().
|
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::LINE_PLACER, and PNS::DIFF_PAIR_PLACER.
Definition at line 182 of file pns_placement_algo.h.
|
inherited |
Return the logger object, allowing to dump geometry to a file.
Definition at line 28 of file pns_algo_base.cpp.
References PNS::ALGO_BASE::m_router, and PNS::ROUTER::Settings().
Referenced by PNS::DIFF_PAIR_PLACER::attemptWalk(), PNS::LINE_PLACER::buildInitialLine(), PNS::DRAGGER::dragMarkObstacles(), PNS::DRAGGER::dragShove(), PNS::DRAGGER::dragWalkaround(), PNS::COMPONENT_DRAGGER::FixRoute(), PNS::DRAGGER::FixRoute(), PNS::DIFF_PAIR_PLACER::FixRoute(), PNS::LINE_PLACER::FixRoute(), PNS::DIFF_PAIR_PLACER::initPlacement(), PNS::LINE_PLACER::initPlacement(), PNS::LINE_PLACER::Move(), PNS::SHOVE::onCollidingSolid(), PNS::DRAGGER::optimizeAndUpdateDraggedLine(), PNS::LINE_PLACER::rhMarkObstacles(), PNS::LINE_PLACER::rhShoveOnly(), PNS::LINE_PLACER::rhWalkOnly(), PNS::LINE_PLACER::routeStep(), PNS::SHOVE::runOptimizer(), PNS::SHOVE::shoveMainLoop(), PNS::DRAGGER::Start(), PNS::LINE_PLACER::Start(), and PNS::DRAGGER::tryWalkaround().
|
virtual |
Increase/decrease the current meandering spacing by one step.
aSign | direction (negative = decrease, positive = increase). |
Definition at line 53 of file pns_meander_placer_base.cpp.
References m_currentWidth, m_settings, PNS::MEANDER_SETTINGS::m_spacing, and PNS::MEANDER_SETTINGS::m_step.
|
pure virtualinherited |
Function Start()
Starts placement/drag operation at point aP, taking item aStartItem as anchor (unless NULL).
Implemented in PNS::LINE_PLACER, PNS::DIFF_PAIR_PLACER, PNS::DP_MEANDER_PLACER, PNS::MEANDER_PLACER, and PNS::MEANDER_SKEW_PLACER.
|
inlinevirtualinherited |
Function ToggleVia()
Enables/disables a via at the end of currently routed trace.
Reimplemented in PNS::LINE_PLACER, and PNS::DIFF_PAIR_PLACER.
Definition at line 94 of file pns_placement_algo.h.
|
pure virtualinherited |
Function Traces()
Returns all routed/tuned traces.
Implemented in PNS::LINE_PLACER, PNS::DIFF_PAIR_PLACER, PNS::DP_MEANDER_PLACER, and PNS::MEANDER_PLACER.
|
protected |
Take a set of meanders in aTuned and tunes their length to extend the original line length by aElongation.
Definition at line 114 of file pns_meander_placer_base.cpp.
References PNS::MEANDER_SETTINGS::m_minAmplitude, m_settings, PNS::MEANDERED_LINE::Meanders(), PNS::MT_CORNER, PNS::MT_EMPTY, PNS::MT_FINISH, PNS::MT_SINGLE, and PNS::MT_START.
Referenced by PNS::MEANDER_PLACER::doMove(), and PNS::DP_MEANDER_PLACER::Move().
|
pure virtual |
Return a string describing the status and length of the tuned traces.
Implemented in PNS::DP_MEANDER_PLACER, PNS::MEANDER_PLACER, and PNS::MEANDER_SKEW_PLACER.
Referenced by PNS_TUNE_STATUS_POPUP::UpdateStatus().
|
pure virtual |
Return the tuning status (too short, too long, etc.) of the trace(s) being tuned.
Implemented in PNS::DP_MEANDER_PLACER, and PNS::MEANDER_PLACER.
Referenced by PNS_TUNE_STATUS_POPUP::UpdateStatus().
|
inlinevirtualinherited |
Reimplemented in PNS::LINE_PLACER.
Definition at line 81 of file pns_placement_algo.h.
|
virtual |
Definition at line 62 of file pns_meander_placer_base.cpp.
References m_settings.
Referenced by LENGTH_TUNER_TOOL::meanderSettingsDialog().
|
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::LINE_PLACER, and PNS::DIFF_PAIR_PLACER.
Definition at line 171 of file pns_placement_algo.h.
|
inherited |
Definition at line 39 of file pns_algo_base.cpp.
References PNS::ALGO_BASE::m_router, and PNS::ROUTER::VisibleViewArea().
Referenced by PNS::SHOVE::runOptimizer().
|
protected |
Definition at line 155 of file pns_meander_placer_base.h.
Referenced by PNS::MEANDER_PLACER::CurrentEnd(), PNS::DP_MEANDER_PLACER::CurrentEnd(), PNS::MEANDER_SKEW_PLACER::Start(), and PNS::MEANDER_PLACER::Start().
|
protected |
Meander settings.
Definition at line 149 of file pns_meander_placer_base.h.
Referenced by MEANDER_PLACER_BASE(), SpacingStep(), PNS::MEANDER_SKEW_PLACER::Start(), PNS::MEANDER_PLACER::Start(), and PNS::DP_MEANDER_PLACER::Start().
|
protectedinherited |
Definition at line 86 of file pns_algo_base.h.
Referenced by PNS::ALGO_BASE::Dbg(), and PNS::ALGO_BASE::SetDebugDecorator().
|
protectedinherited |
Definition at line 88 of file pns_algo_base.h.
Referenced by PNS::ALGO_BASE::SetLogger(), and PNS::WALKAROUND::singleStep().
|
protected |
Width of the meandered trace(s).
Definition at line 146 of file pns_meander_placer_base.h.
Referenced by PNS::MEANDER_SKEW_PLACER::itemsetLength(), MEANDER_PLACER_BASE(), PNS::MEANDER_PLACER::origPathLength(), PNS::DP_MEANDER_PLACER::origPathLength(), PNS::MEANDER_SKEW_PLACER::Start(), PNS::MEANDER_PLACER::Start(), and PNS::DP_MEANDER_PLACER::Start().
|
protectedinherited |
Definition at line 87 of file pns_algo_base.h.
Referenced by PNS::ALGO_BASE::Router(), PNS::ALGO_BASE::Settings(), PNS::DIFF_PAIR_PLACER::updateLeadingRatLine(), PNS::LINE_PLACER::updateLeadingRatLine(), and PNS::ALGO_BASE::VisibleViewArea().
|
protected |
The current end point.
Definition at line 152 of file pns_meander_placer_base.h.
Referenced by AmplitudeStep(), PNS::MEANDER_PLACER::CheckFit(), PNS::DP_MEANDER_PLACER::CheckFit(), PNS::MEANDER_PLACER::doMove(), MeanderSettings(), PNS::MEANDER_SKEW_PLACER::Move(), PNS::MEANDER_PLACER::Move(), PNS::DP_MEANDER_PLACER::Move(), SpacingStep(), tuneLineLength(), PNS::MEANDER_SKEW_PLACER::TuningInfo(), PNS::MEANDER_PLACER::TuningInfo(), PNS::DP_MEANDER_PLACER::TuningInfo(), and UpdateSettings().
|
protected |
Total length added by pad to die size.
Definition at line 143 of file pns_meander_placer_base.h.
Referenced by PNS::MEANDER_PLACER::AbortPlacement(), PNS::DP_MEANDER_PLACER::AbortPlacement(), PNS::MEANDER_PLACER::CurrentNode(), PNS::DP_MEANDER_PLACER::CurrentNode(), PNS::MEANDER_PLACER::doMove(), PNS::DP_MEANDER_PLACER::DP_MEANDER_PLACER(), GetTotalPadToDieLength(), MEANDER_PLACER_BASE(), PNS::DP_MEANDER_PLACER::Move(), PNS::MEANDER_SKEW_PLACER::Start(), PNS::MEANDER_PLACER::Start(), and PNS::DP_MEANDER_PLACER::Start().