22 #ifndef __PNS_DIFF_PLACER_H
23 #define __PNS_DIFF_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_algo_base.h"
35 #include "pns_diff_pair.h"
37 #include "pns_placement_algo.h"
55 class DIFF_PAIR_PLACER :
public PLACEMENT_ALGO
58 DIFF_PAIR_PLACER( ROUTER* aRouter );
76 bool Move(
const VECTOR2I& aP, ITEM* aEndItem )
override;
87 bool FixRoute(
const VECTOR2I& aP, ITEM* aEndItem,
bool aForceFinish )
override;
101 bool SetLayer(
int aLayer )
override;
108 const ITEM_SET
Traces()
override;
126 const std::vector<int>
CurrentNets()
const override;
135 return m_currentLayer;
143 NODE*
CurrentNode(
bool aLoopsRemoved =
false )
const override;
159 void UpdateSizes(
const SIZES_SETTINGS& aSizes )
override;
161 bool IsPlacingVia()
const override {
return m_placingVia; }
190 void updateLeadingRatLine();
197 void setWorld( NODE* aWorld );
204 void initPlacement( );
212 void setInitialDirection(
const DIRECTION_45& aDirection );
215 bool routeHead(
const VECTOR2I& aP );
216 bool tryWalkDp( NODE* aNode, DIFF_PAIR& aPair,
bool aSolidsOnly );
219 bool rhWalkOnly(
const VECTOR2I& aP );
222 bool rhShoveOnly (
const VECTOR2I& aP );
225 bool rhMarkObstacles(
const VECTOR2I& aP );
227 const VIA makeVia (
const VECTOR2I& aP,
int aNet );
229 bool findDpPrimitivePair(
const VECTOR2I& aP, ITEM* aItem, DP_PRIMITIVE_PAIR& aPair, std::string* aErrorMsg =
nullptr );
230 OPT_VECTOR2I getDanglingAnchor( NODE* aNode, ITEM* aItem );
231 bool attemptWalk( NODE* aNode, DIFF_PAIR* aCurrent, DIFF_PAIR& aWalk,
bool aPFirst,
bool aWindCw,
bool aSolidsOnly );
242 bool m_chainedPlacement;
243 bool m_initialDiagonal;
244 bool m_startDiagonal;
249 DP_PRIMITIVE_PAIR m_start;
250 OPT<DP_PRIMITIVE_PAIR> m_prevPair;
270 SIZES_SETTINGS m_sizes;
291 VECTOR2I m_currentEnd, m_currentStart;
292 DIFF_PAIR m_currentTrace;
294 ITEM* m_currentEndItem;
295 PNS_MODE m_currentMode;
302 #endif // __PNS_LINE_PLACER_H
void UpdateSizes(const SIZES_SETTINGS &aSizes) override
Function UpdateSizes()
Definition: pns_diff_pair_placer.cpp:734
const std::vector< int > CurrentNets() const override
Function CurrentNets()
Definition: pns_diff_pair_placer.cpp:838
bool IsPlacingVia() const override
Function IsPlacingVia()
Definition: pns_diff_pair_placer.h:161
bool SetLayer(int aLayer) override
Function SetLayer()
Definition: pns_diff_pair_placer.cpp:381
bool Start(const VECTOR2I &aP, ITEM *aStartItem) override
Function Start()
Definition: pns_diff_pair_placer.cpp:547
NODE * CurrentNode(bool aLoopsRemoved=false) const override
Function CurrentNode()
Definition: pns_diff_pair_placer.cpp:372
void SetOrthoMode(bool aOrthoMode) override
Function SetOrthoMode()
Definition: pns_diff_pair_placer.cpp:90
void FlipPosture() override
Function FlipPosture()
Definition: pns_diff_pair_placer.cpp:363
bool ToggleVia(bool aEnabled) override
Function ToggleVia()
Definition: pns_diff_pair_placer.cpp:99
bool FixRoute(const VECTOR2I &aP, ITEM *aEndItem, bool aForceFinish) override
Function FixRoute()
Definition: pns_diff_pair_placer.cpp:746
int CurrentLayer() const override
Function CurrentLayer()
Definition: pns_diff_pair_placer.h:133
void GetModifiedNets(std::vector< int > &aNets) const override
Function GetModifiedNets.
Definition: pns_diff_pair_placer.cpp:814
const ITEM_SET Traces() override
Function Traces()
Definition: pns_diff_pair_placer.cpp:352
Class DIRECTION_45.
Definition: direction45.h:37
const VECTOR2I & CurrentEnd() const override
Function CurrentEnd()
Definition: pns_diff_pair_placer.h:116
bool Move(const VECTOR2I &aP, ITEM *aEndItem) override
Function Move()
Definition: pns_diff_pair_placer.cpp:712