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 );
73 bool Move(
const VECTOR2I& aP, ITEM* aEndItem )
override;
84 bool FixRoute(
const VECTOR2I& aP, ITEM* aEndItem,
bool aForceFinish )
override;
98 bool SetLayer(
int aLayer )
override;
106 const LINE&
Head()
const {
return m_head; }
114 const LINE&
Tail()
const {
return m_tail; }
121 const LINE
Trace()
const;
128 const ITEM_SET
Traces()
override;
146 const std::vector<int>
CurrentNets()
const override
148 return std::vector<int>( 1, m_currentNet );
158 return m_currentLayer;
166 NODE*
CurrentNode(
bool aLoopsRemoved =
false )
const override;
182 void UpdateSizes(
const SIZES_SETTINGS& aSizes )
override;
186 bool IsPlacingVia()
const override {
return m_placingVia; }
190 LOGGER*
Logger()
override;
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();
327 bool routeHead(
const VECTOR2I& aP, LINE& aNewHead);
336 void routeStep(
const VECTOR2I& aP );
338 const LINE reduceToNearestObstacle(
const LINE& aOriginalLine );
340 bool rhStopAtNearestObstacle(
const VECTOR2I& aP, LINE& aNewHead );
344 bool rhWalkOnly(
const VECTOR2I& aP, LINE& aNewHead);
347 bool rhShoveOnly(
const VECTOR2I& aP, LINE& aNewHead);
350 bool rhMarkObstacles(
const VECTOR2I& aP, LINE& aNewHead );
352 const VIA makeVia(
const VECTOR2I& aP );
354 bool buildInitialLine(
const VECTOR2I& aP, LINE& aHead,
bool aInvertPosture =
false );
376 std::unique_ptr< SHOVE > m_shove;
384 SIZES_SETTINGS m_sizes;
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
bool SetLayer(int aLayer) override
Function SetLayer()
Definition: pns_line_placer.cpp:876
const ITEM_SET Traces() override
Function Traces()
Definition: pns_line_placer.cpp:822
bool Move(const VECTOR2I &aP, ITEM *aEndItem) override
Function Move()
Definition: pns_line_placer.cpp:958
const std::vector< int > CurrentNets() const override
Function CurrentNet()
Definition: pns_line_placer.h:146
NODE * CurrentNode(bool aLoopsRemoved=false) const override
Function CurrentNode()
Definition: pns_line_placer.cpp:836
bool ToggleVia(bool aEnabled) override
Function ToggleVia()
Definition: pns_line_placer.cpp:77
const LINE & Tail() const
Function Tail()
Definition: pns_line_placer.h:114
void FlipPosture() override
Function FlipPosture()
Definition: pns_line_placer.cpp:829
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_line_placer.cpp:998
const VECTOR2I & CurrentEnd() const override
Function CurrentEnd()
Definition: pns_line_placer.h:136
void SetOrthoMode(bool aOrthoMode) override
Function SetOrthoMode()
Definition: pns_line_placer.cpp:1199
void UpdateSizes(const SIZES_SETTINGS &aSizes) override
Function UpdateSizes()
Definition: pns_line_placer.cpp:1177
LOGGER * Logger() override
Returns the logger object, allowing to dump geometry to a file.
Definition: pns_line_placer.cpp:1273
const LINE Trace() const
Function Trace()
Definition: pns_line_placer.cpp:811
bool SplitAdjacentSegments(NODE *aNode, ITEM *aSeg, const VECTOR2I &aP)
Function SplitAdjacentSegments()
Definition: pns_line_placer.cpp:845
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()
Definition: pns_line_placer.cpp:899
void GetModifiedNets(std::vector< int > &aNets) const override
Function GetModifiedNets.
Definition: pns_line_placer.cpp:1268