22 #ifndef __PNS_LINE_PLACER_H
23 #define __PNS_LINE_PLACER_H
25 #include <math/vector2d.h>
27 #include <geometry/shape.h>
28 #include <geometry/shape_line_chain.h>
30 #include "pns_sizes_settings.h"
34 #include "pns_placement_algo.h"
52 class LINE_PLACER :
public PLACEMENT_ALGO
55 LINE_PLACER( ROUTER* aRouter );
148 return std::vector<int>( 1, m_currentNet );
158 return m_currentLayer;
221 void updateLeadingRatLine();
228 void setWorld(
NODE* aWorld );
235 void initPlacement();
243 void setInitialDirection(
const DIRECTION_45& aDirection );
251 void removeLoops(
NODE* aNode,
LINE& aLatest );
260 void simplifyNewLine(
NODE* aNode,
SEGMENT* aLatest );
269 bool checkObtusity(
const SEG& aA,
const SEG& aB )
const;
279 bool handleSelfIntersections();
288 bool handlePullback();
308 bool reduceTail(
const VECTOR2I& aEnd );
317 bool optimizeTailHeadTransition();
336 void routeStep(
const VECTOR2I& aP );
338 const LINE reduceToNearestObstacle(
const LINE& aOriginalLine );
340 bool rhStopAtNearestObstacle(
const VECTOR2I& aP,
LINE& aNewHead );
350 bool rhMarkObstacles(
const VECTOR2I& aP,
LINE& aNewHead );
354 bool buildInitialLine(
const VECTOR2I& aP,
LINE& aHead,
bool aInvertPosture =
false );
376 std::unique_ptr< SHOVE > m_shove;
392 VECTOR2I m_currentEnd, m_currentStart;
395 PNS_MODE m_currentMode;
399 bool m_chainedPlacement;
405 #endif // __PNS_LINE_PLACER_H
bool IsPlacingVia() const override
Function IsPlacingVia()
Definition: pns_line_placer.h:186
Definition: pns_line.h:61
NODE * CurrentNode(bool aLoopsRemoved=false) const override
Function CurrentNode()
bool SetLayer(int aLayer) override
Function SetLayer()
Definition: pns_sizes_settings.h:37
const ITEM_SET Traces() override
Function Traces()
LOGGER * Logger() override
Returns the logger object, allowing to dump geometry to a file.
Definition: pns_segment.h:39
bool Move(const VECTOR2I &aP, ITEM *aEndItem) override
Function Move()
const std::vector< int > CurrentNets() const override
Function CurrentNet()
Definition: pns_line_placer.h:146
bool ToggleVia(bool aEnabled) override
Function ToggleVia()
const LINE & Tail() const
Function Tail()
Definition: pns_line_placer.h:114
void FlipPosture() override
Function FlipPosture()
int CurrentLayer() const override
Function CurrentLayer()
Definition: pns_line_placer.h:156
bool FixRoute(const VECTOR2I &aP, ITEM *aEndItem, bool aForceFinish) override
Function FixRoute()
Definition: pns_logger.h:40
const VECTOR2I & CurrentEnd() const override
Function CurrentEnd()
Definition: pns_line_placer.h:136
void SetOrthoMode(bool aOrthoMode) override
Function SetOrthoMode()
void UpdateSizes(const SIZES_SETTINGS &aSizes) override
Function UpdateSizes()
Definition: pns_itemset.h:40
const LINE Trace() const
Function Trace()
Class ITEM.
Definition: pns_item.h:55
bool SplitAdjacentSegments(NODE *aNode, ITEM *aSeg, const VECTOR2I &aP)
Function SplitAdjacentSegments()
Class NODE.
Definition: pns_node.h:138
Class DIRECTION_45.
Definition: direction45.h:37
const LINE & Head() const
Function Head()
Definition: pns_line_placer.h:106
bool Start(const VECTOR2I &aP, ITEM *aStartItem) override
Function Start()
void GetModifiedNets(std::vector< int > &aNets) const override
Function GetModifiedNets.