KiCad PCB EDA Suite
Loading...
Searching...
No Matches
PNS::LINE_PLACER Class Reference

Single track placement algorithm. More...

#include <pns_line_placer.h>

Inheritance diagram for PNS::LINE_PLACER:
PNS::PLACEMENT_ALGO PNS::ALGO_BASE

Public Member Functions

 LINE_PLACER (ROUTER *aRouter)
 
 ~LINE_PLACER ()
 
bool Start (const VECTOR2I &aP, ITEM *aStartItem) override
 Start routing a single track at point aP, taking item aStartItem as anchor (unless NULL).
 
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).
 
bool FixRoute (const VECTOR2I &aP, ITEM *aEndItem, bool aForceFinish) override
 Commit the currently routed track to the parent node taking aP as the final end point and aEndItem as the final anchor (if provided).
 
std::optional< VECTOR2IUnfixRoute () override
 
bool CommitPlacement () override
 
bool AbortPlacement () override
 
bool HasPlacedAnything () const override
 
bool ToggleVia (bool aEnabled) override
 Enable/disable a via at the end of currently routed trace.
 
bool SetLayer (int aLayer) override
 Set the current routing layer.
 
const LINEHead () const
 Return the "head" of the line being placed, that is the volatile part that has not been "fixed" yet.
 
const LINETail () const
 Return the "tail" of the line being placed, the part which has already wrapped around and shoved some obstacles.
 
const LINE Trace () const
 Return the complete routed line.
 
const ITEM_SET Traces () override
 Return the complete routed line, as a single-member ITEM_SET.
 
const VECTOR2ICurrentStart () const override
 Return the current start of the line being placed.
 
const VECTOR2ICurrentEnd () const override
 Return the current end of the line being placed.
 
const std::vector< NET_HANDLECurrentNets () const override
 Return the net of currently routed track.
 
int CurrentLayer () const override
 Return the layer of currently routed track.
 
NODECurrentNode (bool aLoopsRemoved=false) const override
 Return the most recent world state.
 
void FlipPosture () override
 Toggle the current posture (straight/diagonal) of the trace head.
 
void UpdateSizes (const SIZES_SETTINGS &aSizes) override
 Perform on-the-fly update of the width, via diameter & drill size from a settings class.
 
void SetOrthoMode (bool aOrthoMode) override
 Function SetOrthoMode()
 
bool IsPlacingVia () const override
 Function IsPlacingVia()
 
void GetModifiedNets (std::vector< NET_HANDLE > &aNets) const override
 Function GetModifiedNets.
 
bool SplitAdjacentSegments (NODE *aNode, ITEM *aSeg, const VECTOR2I &aP)
 Snaps the point aP to segment aSeg.
 
bool SplitAdjacentArcs (NODE *aNode, ITEM *aArc, const VECTOR2I &aP)
 Snaps the point aP to arc aArc.
 
ROUTERRouter () const
 Return current router settings.
 
ROUTING_SETTINGSSettings () const
 Return the logger object, allowing to dump geometry to a file.
 
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.
 
DEBUG_DECORATORDbg () const
 
const BOX2IVisibleViewArea () const
 

Protected Attributes

DEBUG_DECORATORm_debugDecorator
 
ROUTERm_router
 
LOGGERm_logger
 

Private Member Functions

bool route (const VECTOR2I &aP)
 Re-route the current track to point aP.
 
void updateLeadingRatLine ()
 Draw the "leading" rats nest line, which connects the end of currently routed track and the nearest yet unrouted item.
 
void setWorld (NODE *aWorld)
 Set the board to route.
 
void initPlacement ()
 Initialize placement of a new line with given parameters.
 
void setInitialDirection (const DIRECTION_45 &aDirection)
 Set preferred direction of the very first track segment to be laid.
 
void removeLoops (NODE *aNode, LINE &aLatest)
 Searches aNode for traces concurrent to aLatest and removes them.
 
void simplifyNewLine (NODE *aNode, LINKED_ITEM *aLatest)
 Assemble a line starting from segment or arc aLatest, removes collinear segments and redundant vertices.
 
bool handleSelfIntersections ()
 Check if the head of the track intersects its tail.
 
bool handlePullback ()
 Deal with pull-back: reduces the tail if head trace is moved backwards wrs to the current tail direction.
 
bool mergeHead ()
 Moves "established" segments from the head to the tail if certain conditions are met.
 
bool reduceTail (const VECTOR2I &aEnd)
 Attempt to reduce the number of segments in the tail by trying to replace a certain number of latest tail segments with a direct trace leading to aEnd that does not collide with anything.
 
bool optimizeTailHeadTransition ()
 Try to reduce the corner count of the most recent part of tail/head by merging obtuse/collinear segments.
 
bool routeHead (const VECTOR2I &aP, LINE &aNewHead, LINE &aNewTail)
 Compute the head trace between the current start point (m_p_start) and point aP, starting with direction defined in m_direction.
 
void routeStep (const VECTOR2I &aP)
 Perform a single routing algorithm step, for the end point aP.
 
bool rhWalkOnly (const VECTOR2I &aP, LINE &aNewHead, LINE &aNewTail)
 
bool rhWalkBase (const VECTOR2I &aP, LINE &aWalkLine, int aCollisionMask, bool &aViaOk)
 
bool splitHeadTail (const LINE &aNewLine, const LINE &aOldTail, LINE &aNewHead, LINE &aNewTail)
 
bool cursorDistMinimum (const SHAPE_LINE_CHAIN &aL, const VECTOR2I &aCursor, double lengthThreshold, SHAPE_LINE_CHAIN &aOut)
 
bool clipAndCheckCollisions (const VECTOR2I &aP, const SHAPE_LINE_CHAIN &aL, SHAPE_LINE_CHAIN &aOut, int &thresholdDist)
 
void updatePStart (const LINE &tail)
 
bool rhShoveOnly (const VECTOR2I &aP, LINE &aNewHead, LINE &aNewTail)
 < Route step shove mode.
 
bool rhMarkObstacles (const VECTOR2I &aP, LINE &aNewHead, LINE &aNewTail)
 
const VIA makeVia (const VECTOR2I &aP)
 
bool buildInitialLine (const VECTOR2I &aP, LINE &aHead, bool aForceNoVia=false)
 

Private Attributes

DIRECTION_45 m_direction
 current routing direction
 
DIRECTION_45 m_initial_direction
 routing direction for new traces
 
LINE m_head
 the volatile part of the track from the previously analyzed point to the current routing destination
 
LINE m_tail
 routing "tail": part of the track that has been already fixed due to collisions with obstacles
 
NODEm_world
 pointer to world to search colliding items
 
VECTOR2I m_p_start
 current routing start (end of tail, beginning of head)
 
VECTOR2I m_fixStart
 start point of the last 'fix'
 
std::optional< VECTOR2Im_last_p_end
 
std::unique_ptr< SHOVEm_shove
 The shove engine.
 
NODEm_currentNode
 Current world state.
 
NODEm_lastNode
 Postprocessed world state (including marked collisions & removed loops)
 
SIZES_SETTINGS m_sizes
 
bool m_placingVia
 
NET_HANDLE m_currentNet
 
int m_currentLayer
 
VECTOR2I m_currentEnd
 
VECTOR2I m_currentStart
 
LINE m_currentTrace
 
ITEMm_startItem
 
ITEMm_endItem
 
bool m_idle
 
bool m_chainedPlacement
 
bool m_orthoMode
 
bool m_placementCorrect
 
FIXED_TAIL m_fixedTail
 
MOUSE_TRAIL_TRACER m_mouseTrailTracer
 

Detailed Description

Single track placement algorithm.

Interactively routes a track. Applies shove and walkaround algorithms when needed.

Definition at line 84 of file pns_line_placer.h.

Constructor & Destructor Documentation

◆ LINE_PLACER()

◆ ~LINE_PLACER()

PNS::LINE_PLACER::~LINE_PLACER ( )

Definition at line 62 of file pns_line_placer.cpp.

Member Function Documentation

◆ AbortPlacement()

bool PNS::LINE_PLACER::AbortPlacement ( )
overridevirtual

Reimplemented from PNS::PLACEMENT_ALGO.

Definition at line 2076 of file pns_line_placer.cpp.

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

◆ buildInitialLine()

◆ clipAndCheckCollisions()

bool PNS::LINE_PLACER::clipAndCheckCollisions ( const VECTOR2I aP,
const SHAPE_LINE_CHAIN aL,
SHAPE_LINE_CHAIN aOut,
int &  thresholdDist 
)
private

◆ CommitPlacement()

bool PNS::LINE_PLACER::CommitPlacement ( )
overridevirtual

◆ CurrentEnd()

const VECTOR2I & PNS::LINE_PLACER::CurrentEnd ( ) const
inlineoverridevirtual

Return the current end of the line being placed.

It may not be equal to the cursor position due to collisions.

Implements PNS::PLACEMENT_ALGO.

Definition at line 163 of file pns_line_placer.h.

References m_currentEnd.

◆ CurrentLayer()

int PNS::LINE_PLACER::CurrentLayer ( ) const
inlineoverridevirtual

Return the layer of currently routed track.

Implements PNS::PLACEMENT_ALGO.

Definition at line 179 of file pns_line_placer.h.

References m_currentLayer.

◆ CurrentNets()

const std::vector< NET_HANDLE > PNS::LINE_PLACER::CurrentNets ( ) const
inlineoverridevirtual

Return the net of currently routed track.

Implements PNS::PLACEMENT_ALGO.

Definition at line 171 of file pns_line_placer.h.

References m_currentNet.

◆ CurrentNode()

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

Return the most recent world state.

Implements PNS::PLACEMENT_ALGO.

Definition at line 1281 of file pns_line_placer.cpp.

References m_currentNode, and m_lastNode.

◆ CurrentStart()

const VECTOR2I & PNS::LINE_PLACER::CurrentStart ( ) const
inlineoverridevirtual

Return the current start of the line being placed.

Implements PNS::PLACEMENT_ALGO.

Definition at line 154 of file pns_line_placer.h.

References m_currentStart.

◆ cursorDistMinimum()

bool PNS::LINE_PLACER::cursorDistMinimum ( const SHAPE_LINE_CHAIN aL,
const VECTOR2I aCursor,
double  lengthThreshold,
SHAPE_LINE_CHAIN aOut 
)
private

◆ Dbg()

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

Definition at line 78 of file pns_algo_base.h.

References PNS::ALGO_BASE::m_debugDecorator.

Referenced by PNS::SHOVE::AddLockedSpringbackNode(), buildInitialLine(), clipAndCheckCollisions(), PNS::MEANDER_PLACER::doMove(), PNS::COMPONENT_DRAGGER::Drag(), PNS::MULTI_DRAGGER::Drag(), PNS::DRAGGER::dragShove(), PNS::DRAGGER::dragWalkaround(), PNS::MULTI_DRAGGER::findNewLeaderSegment(), PNS::SHOVE::fixupViaCollisions(), handlePullback(), mergeHead(), PNS::DP_MEANDER_PLACER::Move(), PNS::MEANDER_SKEW_PLACER::Move(), PNS::MULTI_DRAGGER::multidragShove(), PNS::MULTI_DRAGGER::multidragWalkaround(), PNS::SHOVE::onCollidingArc(), PNS::SHOVE::onCollidingLine(), PNS::SHOVE::onCollidingSegment(), PNS::SHOVE::onCollidingSolid(), PNS::SHOVE::onCollidingVia(), PNS::SHOVE::onReverseCollidingVia(), PNS::DRAGGER::optimizeAndUpdateDraggedLine(), optimizeTailHeadTransition(), PNS::SHOVE::preShoveCleanup(), PNS::SHOVE::pruneRootLines(), PNS::SHOVE::pushLineStack(), PNS::SHOVE::pushOrShoveVia(), PNS::SHOVE::pushSpringback(), PNS::SHOVE::reconstructHeads(), PNS::SHOVE::reduceSpringback(), reduceTail(), PNS::SHOVE::removeHeads(), removeLoops(), PNS::SHOVE::replaceItems(), PNS::SHOVE::replaceLine(), rhShoveOnly(), rhWalkBase(), rhWalkOnly(), PNS::WALKAROUND::Route(), routeStep(), PNS::SHOVE::Run(), PNS::SHOVE::runOptimizer(), PNS::SHOVE::shoveIteration(), PNS::SHOVE::shoveLineToHullSet(), PNS::SHOVE::shoveMainLoop(), PNS::SHOVE::ShoveObstacleLine(), PNS::WALKAROUND::singleStep(), splitHeadTail(), Start(), PNS::DRAGGER::Start(), PNS::MULTI_DRAGGER::Start(), PNS::SHOVE::touchRootLine(), Trace(), PNS::DRAGGER::tryWalkaround(), PNS::MULTI_DRAGGER::tryWalkaround(), and PNS::SHOVE::unwindLineStack().

◆ FixRoute()

bool PNS::LINE_PLACER::FixRoute ( const VECTOR2I aP,
ITEM aEndItem,
bool  aForceFinish 
)
overridevirtual

Commit the currently routed track 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 cases, the track is only committed if CanViolateDRC() is on.

<

Todo:
Determine what to do if m_lastNode is a null pointer. I'm guessing return false but someone with more knowledge of the code will need to determine that..

Implements PNS::PLACEMENT_ALGO.

Definition at line 1531 of file pns_line_placer.cpp.

References PNS::NODE::Add(), PNS::FIXED_TAIL::AddStage(), PNS::MOUSE_TRAIL_TRACER::AddTrailPoint(), SHAPE_LINE_CHAIN::Arc(), SHAPE_LINE_CHAIN::ArcCount(), SHAPE_LINE_CHAIN::ArcIndex(), PNS::NODE::Branch(), PNS::NODE::CheckColliding(), SHAPE_LINE_CHAIN::Clear(), PNS::MOUSE_TRAIL_TRACER::Clear(), PNS::LINE::CLine(), PNS::Clone(), SHAPE_LINE_CHAIN::CPoint(), PNS::LINE::CSegment(), SHAPE_LINE_CHAIN::CSegment(), PNS::LINE::EndsWithVia(), PNS::ROUTING_SETTINGS::GetFixAllSegments(), PNS::ROUTER::GetInterface(), PNS::ROUTER_IFACE::GetNetCode(), PNS::NODE::GetUpdatedItems(), SHAPE_LINE_CHAIN::IsPtOnArc(), PNS::LINE::Line(), m_chainedPlacement, m_currentLayer, m_currentNet, m_currentNode, m_currentStart, m_direction, m_fixedTail, m_fixStart, m_head, m_idle, m_initial_direction, m_lastNode, m_mouseTrailTracer, m_p_start, m_placementCorrect, m_placingVia, PNS::ALGO_BASE::m_router, m_shove, m_startItem, m_tail, m_world, PNS::ROUTING_SETTINGS::Mode(), PNS::ITEM::Net(), SHAPE_LINE_CHAIN::PointCount(), PNS::LINE::RemoveVia(), PNS::RM_MarkObstacles, PNS::RM_Shove, PNS::ITEM::SEGMENT_T, SHAPE_LINE_CHAIN::SegmentCount(), PNS::MOUSE_TRAIL_TRACER::SetDefaultDirections(), setInitialDirection(), PNS::ITEM::SetLayer(), PNS::ITEM::SetNet(), PNS::ALGO_BASE::Settings(), PNS::MOUSE_TRAIL_TRACER::SetTolerance(), PNS::ARC::SetWidth(), PNS::SEGMENT::SetWidth(), simplifyNewLine(), PNS::ITEM::SOLID_T, Trace(), DIRECTION_45::UNDEFINED, PNS::LINE::Via(), and PNS::LINE::Width().

◆ FlipPosture()

void PNS::LINE_PLACER::FlipPosture ( )
overridevirtual

◆ GetModifiedNets()

void PNS::LINE_PLACER::GetModifiedNets ( std::vector< NET_HANDLE > &  aNets) const
overridevirtual

Function GetModifiedNets.

Returns the nets of all currently routed trace(s)

Reimplemented from PNS::PLACEMENT_ALGO.

Definition at line 2070 of file pns_line_placer.cpp.

References m_currentNet.

◆ handlePullback()

◆ handleSelfIntersections()

bool PNS::LINE_PLACER::handleSelfIntersections ( )
private

Check if the head of the track intersects its tail.

If so, cuts the tail up to the intersecting segment and fixes the head direction to match the last segment before the cut.

Returns
true if the line has been changed.

Definition at line 110 of file pns_line_placer.cpp.

References SHAPE_LINE_CHAIN::Clear(), SHAPE_LINE_CHAIN::CPoint(), SHAPE_LINE_CHAIN::CSegment(), SHAPE_LINE_CHAIN::Intersect(), PNS::LINE::Line(), m_direction, m_head, m_initial_direction, m_tail, SHAPE_LINE_CHAIN::PointCount(), and SHAPE_LINE_CHAIN::Remove().

Referenced by routeStep().

◆ HasPlacedAnything()

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

Reimplemented from PNS::PLACEMENT_ALGO.

Definition at line 1773 of file pns_line_placer.cpp.

References m_fixedTail, m_placementCorrect, and PNS::FIXED_TAIL::StageCount().

Referenced by UpdateSizes().

◆ Head()

const LINE & PNS::LINE_PLACER::Head ( ) const
inline

Return the "head" of the line being placed, that is the volatile part that has not been "fixed" yet.

Definition at line 133 of file pns_line_placer.h.

References m_head.

◆ initPlacement()

◆ IsPlacingVia()

bool PNS::LINE_PLACER::IsPlacingVia ( ) const
inlineoverridevirtual

Function IsPlacingVia()

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

Reimplemented from PNS::PLACEMENT_ALGO.

Definition at line 204 of file pns_line_placer.h.

References m_placingVia.

◆ Logger()

◆ makeVia()

◆ mergeHead()

◆ Move()

◆ optimizeTailHeadTransition()

◆ reduceTail()

bool PNS::LINE_PLACER::reduceTail ( const VECTOR2I aEnd)
private

Attempt to reduce the number of segments in the tail by trying to replace a certain number of latest tail segments with a direct trace leading to aEnd that does not collide with anything.

Parameters
aEndis the current routing destination point.
Returns
true if the line has been changed.

Definition at line 262 of file pns_line_placer.cpp.

References SEG::A, PNS::ITEM::ANY_T, DIRECTION_45::BuildInitialTrace(), PNS::NODE::CheckColliding(), SHAPE_LINE_CHAIN::Clear(), SHAPE_LINE_CHAIN::CSegment(), PNS::ALGO_BASE::Dbg(), PNS::LINE::Line(), m_currentNode, m_direction, m_head, m_initial_direction, m_tail, PNS_DBG, SHAPE_LINE_CHAIN::Remove(), and SHAPE_LINE_CHAIN::SegmentCount().

Referenced by routeStep().

◆ removeLoops()

void PNS::LINE_PLACER::removeLoops ( NODE aNode,
LINE aLatest 
)
private

◆ rhMarkObstacles()

◆ rhShoveOnly()

◆ rhWalkBase()

◆ rhWalkOnly()

◆ route()

bool PNS::LINE_PLACER::route ( const VECTOR2I aP)
private

Re-route the current track to point aP.

Returns true, when routing has completed successfully (i.e. the trace end has reached point aP), and false if the trace was stuck somewhere on the way. May call routeStep() repetitively due to mouse smoothing.

Parameters
aPending point of current route.
Returns
true, if the routing is complete.

Definition at line 1225 of file pns_line_placer.cpp.

References PNS::LINE::CPoint(), m_head, PNS::LINE::PointCount(), and routeStep().

Referenced by Move().

◆ routeHead()

bool PNS::LINE_PLACER::routeHead ( const VECTOR2I aP,
LINE aNewHead,
LINE aNewTail 
)
private

Compute the head trace between the current start point (m_p_start) and point aP, starting with direction defined in m_direction.

The trace walks around all colliding solid or non-movable items. Movable segments are ignored, as they'll be handled later by the shove algorithm.

Definition at line 1023 of file pns_line_placer.cpp.

References rhMarkObstacles(), rhShoveOnly(), rhWalkOnly(), PNS::RM_MarkObstacles, PNS::RM_Shove, PNS::RM_Walkaround, and PNS::ALGO_BASE::Settings().

Referenced by routeStep().

◆ Router()

◆ routeStep()

void PNS::LINE_PLACER::routeStep ( const VECTOR2I aP)
private

Perform a single routing algorithm step, for the end point aP.

Parameters
aPis the ending point of current route.
Returns
true if the line has been changed. Route step walk around mode.

Definition at line 1113 of file pns_line_placer.cpp.

References SHAPE_LINE_CHAIN::Append(), PNS::LINE::Clear(), PNS::ALGO_BASE::Dbg(), PNS::LINE::EndsWithVia(), DIRECTION_45::Format(), GREEN, handlePullback(), handleSelfIntersections(), LIGHTGREEN, PNS::LINE::Line(), m_direction, m_head, m_last_p_end, m_p_start, m_tail, mergeHead(), optimizeTailHeadTransition(), PNS_DBG, PNS_DBGN, PNS::LINE::PointCount(), reduceTail(), routeHead(), PNS::ALGO_BASE::Settings(), PNS::LINE::ShapeCount(), updatePStart(), and WHITE.

Referenced by route().

◆ 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.

References PNS::ALGO_BASE::m_debugDecorator.

Referenced by PNS::SHOVE::onCollidingSolid(), rhWalkBase(), PNS::SHOVE::SHOVE(), PNS::DRAGGER::tryWalkaround(), and PNS::MULTI_DRAGGER::tryWalkaround().

◆ setInitialDirection()

void PNS::LINE_PLACER::setInitialDirection ( const DIRECTION_45 aDirection)
private

Set preferred direction of the very first track segment to be laid.

Used by posture switching mechanism.

Definition at line 101 of file pns_line_placer.cpp.

References m_direction, m_initial_direction, m_tail, and PNS::LINE::SegmentCount().

Referenced by FixRoute(), and Start().

◆ SetLayer()

◆ SetLogger()

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

◆ SetOrthoMode()

void PNS::LINE_PLACER::SetOrthoMode ( bool  aOrthoMode)
overridevirtual

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 from PNS::PLACEMENT_ALGO.

Definition at line 1973 of file pns_line_placer.cpp.

References m_orthoMode.

◆ Settings()

◆ setWorld()

void PNS::LINE_PLACER::setWorld ( NODE aWorld)
private

Set the board to route.

Definition at line 67 of file pns_line_placer.cpp.

References m_world.

Referenced by initPlacement().

◆ simplifyNewLine()

void PNS::LINE_PLACER::simplifyNewLine ( NODE aNode,
LINKED_ITEM aLatest 
)
private

◆ SplitAdjacentArcs()

bool PNS::LINE_PLACER::SplitAdjacentArcs ( NODE aNode,
ITEM aArc,
const VECTOR2I aP 
)

Snaps the point aP to arc aArc.

Splits the arc in two, forming a joint at aP and stores updated topology in node aNode.

Definition at line 1318 of file pns_line_placer.cpp.

References PNS::NODE::Add(), PNS::ARC::Arc(), PNS::ITEM::ARC_T, PNS::Clone(), PNS::NODE::FindJoint(), SHAPE_ARC::GetCenter(), SHAPE_ARC::GetP0(), SHAPE_ARC::GetP1(), SHAPE_ARC::GetWidth(), SHAPE_ARC::IsClockwise(), PNS::JOINT::LinkCount(), PNS::ITEM::OfKind(), and PNS::NODE::Remove().

Referenced by PNS::ROUTER::BreakSegmentOrArc().

◆ SplitAdjacentSegments()

bool PNS::LINE_PLACER::SplitAdjacentSegments ( NODE aNode,
ITEM aSeg,
const VECTOR2I aP 
)

Snaps the point aP to segment aSeg.

Splits the segment in two, forming a joint at aP and stores updated topology in node aNode.

Definition at line 1290 of file pns_line_placer.cpp.

References SEG::A, PNS::NODE::Add(), SEG::B, PNS::Clone(), PNS::NODE::FindJoint(), PNS::JOINT::LinkCount(), PNS::ITEM::OfKind(), PNS::NODE::Remove(), PNS::SEGMENT::Seg(), and PNS::ITEM::SEGMENT_T.

Referenced by PNS::ROUTER::BreakSegmentOrArc(), initPlacement(), and Move().

◆ splitHeadTail()

◆ Start()

◆ Tail()

const LINE & PNS::LINE_PLACER::Tail ( ) const
inline

Return the "tail" of the line being placed, the part which has already wrapped around and shoved some obstacles.

Definition at line 139 of file pns_line_placer.h.

References m_tail.

◆ ToggleVia()

bool PNS::LINE_PLACER::ToggleVia ( bool  aEnabled)
overridevirtual

Enable/disable a via at the end of currently routed trace.

Reimplemented from PNS::PLACEMENT_ALGO.

Definition at line 90 of file pns_line_placer.cpp.

References m_head, m_placingVia, and PNS::LINE::RemoveVia().

◆ Trace()

◆ Traces()

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

Return the complete routed line, as a single-member ITEM_SET.

Implements PNS::PLACEMENT_ALGO.

Definition at line 1258 of file pns_line_placer.cpp.

References m_currentTrace, and Trace().

◆ UnfixRoute()

◆ updateLeadingRatLine()

void PNS::LINE_PLACER::updateLeadingRatLine ( )
private

Draw the "leading" rats nest line, which connects the end of currently routed track and the nearest yet unrouted item.

If the routing for current net is complete, draws nothing.

Definition at line 1962 of file pns_line_placer.cpp.

References PNS::ROUTER_IFACE::DisplayRatline(), PNS::ROUTER::GetInterface(), PNS::TOPOLOGY::LeadingRatLine(), m_currentNet, m_lastNode, PNS::ALGO_BASE::m_router, and Trace().

Referenced by Move().

◆ updatePStart()

void PNS::LINE_PLACER::updatePStart ( const LINE tail)
private

◆ UpdateSizes()

void PNS::LINE_PLACER::UpdateSizes ( const SIZES_SETTINGS aSizes)
overridevirtual

Perform on-the-fly update of the width, via diameter & drill size from a settings class.

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 from PNS::PLACEMENT_ALGO.

Definition at line 1936 of file pns_line_placer.cpp.

References PNS::LINE::EndsWithVia(), HasPlacedAnything(), PNS::ITEM::Kind(), m_currentTrace, m_head, m_idle, m_sizes, m_startItem, m_tail, PNS::ITEM::SEGMENT_T, PNS::LINE::SetViaDiameter(), PNS::LINE::SetViaDrill(), PNS::LINE::SetWidth(), PNS::SIZES_SETTINGS::TrackWidth(), PNS::SIZES_SETTINGS::TrackWidthIsExplicit(), PNS::SIZES_SETTINGS::ViaDiameter(), and PNS::SIZES_SETTINGS::ViaDrill().

◆ VisibleViewArea()

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

Definition at line 40 of file pns_algo_base.cpp.

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

Referenced by PNS::SHOVE::runOptimizer().

Member Data Documentation

◆ m_chainedPlacement

bool PNS::LINE_PLACER::m_chainedPlacement
private

Definition at line 382 of file pns_line_placer.h.

Referenced by FixRoute(), LINE_PLACER(), SetLayer(), and Start().

◆ m_currentEnd

VECTOR2I PNS::LINE_PLACER::m_currentEnd
private

Definition at line 374 of file pns_line_placer.h.

Referenced by CurrentEnd(), Move(), SetLayer(), and Start().

◆ m_currentLayer

int PNS::LINE_PLACER::m_currentLayer
private

◆ m_currentNet

NET_HANDLE PNS::LINE_PLACER::m_currentNet
private

◆ m_currentNode

◆ m_currentStart

VECTOR2I PNS::LINE_PLACER::m_currentStart
private

◆ m_currentTrace

LINE PNS::LINE_PLACER::m_currentTrace
private

Definition at line 376 of file pns_line_placer.h.

Referenced by FlipPosture(), Traces(), and UpdateSizes().

◆ 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_direction

◆ m_endItem

ITEM* PNS::LINE_PLACER::m_endItem
private

Definition at line 379 of file pns_line_placer.h.

Referenced by LINE_PLACER(), Move(), rhShoveOnly(), and Start().

◆ m_fixedTail

FIXED_TAIL PNS::LINE_PLACER::m_fixedTail
private

Definition at line 386 of file pns_line_placer.h.

Referenced by FixRoute(), HasPlacedAnything(), Start(), and UnfixRoute().

◆ m_fixStart

VECTOR2I PNS::LINE_PLACER::m_fixStart
private

start point of the last 'fix'

Definition at line 357 of file pns_line_placer.h.

Referenced by FixRoute(), Start(), and UnfixRoute().

◆ m_head

LINE PNS::LINE_PLACER::m_head
private

the volatile part of the track from the previously analyzed point to the current routing destination

Definition at line 349 of file pns_line_placer.h.

Referenced by clipAndCheckCollisions(), FixRoute(), handlePullback(), handleSelfIntersections(), Head(), initPlacement(), mergeHead(), optimizeTailHeadTransition(), reduceTail(), rhMarkObstacles(), rhWalkBase(), route(), routeStep(), SetLayer(), Start(), ToggleVia(), Trace(), UnfixRoute(), and UpdateSizes().

◆ m_idle

bool PNS::LINE_PLACER::m_idle
private

Definition at line 381 of file pns_line_placer.h.

Referenced by FixRoute(), initPlacement(), LINE_PLACER(), SetLayer(), and UpdateSizes().

◆ m_initial_direction

DIRECTION_45 PNS::LINE_PLACER::m_initial_direction
private

◆ m_last_p_end

std::optional<VECTOR2I> PNS::LINE_PLACER::m_last_p_end
private

Definition at line 359 of file pns_line_placer.h.

Referenced by buildInitialLine(), initPlacement(), and routeStep().

◆ m_lastNode

NODE* PNS::LINE_PLACER::m_lastNode
private

Postprocessed world state (including marked collisions & removed loops)

Definition at line 364 of file pns_line_placer.h.

Referenced by CommitPlacement(), CurrentNode(), FixRoute(), initPlacement(), LINE_PLACER(), Move(), UnfixRoute(), and updateLeadingRatLine().

◆ m_logger

LOGGER* PNS::ALGO_BASE::m_logger
protectedinherited

Definition at line 88 of file pns_algo_base.h.

Referenced by PNS::ALGO_BASE::Logger(), and PNS::ALGO_BASE::SetLogger().

◆ m_mouseTrailTracer

MOUSE_TRAIL_TRACER PNS::LINE_PLACER::m_mouseTrailTracer
private

◆ m_orthoMode

bool PNS::LINE_PLACER::m_orthoMode
private

Definition at line 383 of file pns_line_placer.h.

Referenced by buildInitialLine(), LINE_PLACER(), and SetOrthoMode().

◆ m_p_start

VECTOR2I PNS::LINE_PLACER::m_p_start
private

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

Definition at line 356 of file pns_line_placer.h.

Referenced by buildInitialLine(), FixRoute(), handlePullback(), initPlacement(), Move(), routeStep(), SetLayer(), UnfixRoute(), and updatePStart().

◆ m_placementCorrect

bool PNS::LINE_PLACER::m_placementCorrect
private

Definition at line 384 of file pns_line_placer.h.

Referenced by FixRoute(), HasPlacedAnything(), LINE_PLACER(), and Start().

◆ m_placingVia

bool PNS::LINE_PLACER::m_placingVia
private

◆ m_router

◆ m_shove

std::unique_ptr<SHOVE> PNS::LINE_PLACER::m_shove
private

The shove engine.

Definition at line 361 of file pns_line_placer.h.

Referenced by CommitPlacement(), FixRoute(), initPlacement(), LINE_PLACER(), rhShoveOnly(), Start(), and UnfixRoute().

◆ m_sizes

SIZES_SETTINGS PNS::LINE_PLACER::m_sizes
private

Definition at line 367 of file pns_line_placer.h.

Referenced by initPlacement(), makeVia(), and UpdateSizes().

◆ m_startItem

ITEM* PNS::LINE_PLACER::m_startItem
private

◆ m_tail

LINE PNS::LINE_PLACER::m_tail
private

◆ m_world

NODE* PNS::LINE_PLACER::m_world
private

pointer to world to search colliding items

Definition at line 355 of file pns_line_placer.h.

Referenced by AbortPlacement(), FixRoute(), initPlacement(), LINE_PLACER(), and setWorld().


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