26 #include <math/vector2d.h>
28 #include <geometry/shape.h>
29 #include <geometry/shape_line_chain.h>
31 #include "pns_layerset.h"
33 class BOARD_CONNECTED_ITEM;
38 class PNS_HORIZON_PARENT_ITEM;
42 MK_VIOLATION = ( 1 << 3 ),
43 MK_LOCKED = ( 1 << 4 ),
44 MK_DP_COUPLED = ( 1 << 5 )
57 static const int UnusedNet = INT_MAX;
83 ITEM(
const ITEM& aOther )
85 m_layers = aOther.m_layers;
87 m_movable = aOther.m_movable;
88 m_kind = aOther.m_kind;
89 m_parent = aOther.m_parent;
91 m_marker = aOther.m_marker;
92 m_rank = aOther.m_rank;
93 m_routable = aOther.m_routable;
113 virtual const SHAPE_LINE_CHAIN Hull(
int aClearance = 0,
int aWalkaroundThickness = 0 )
const
135 return ( aKindMask & m_kind ) != 0;
143 const std::string
KindStr()
const;
185 bool InAnyNet()
const
187 return m_net != UnusedNet;
259 return m_owner == aNode;
283 virtual bool Collide(
const ITEM* aOther,
int aClearance,
bool aNeedMTV,
284 VECTOR2I& aMTV,
bool aDifferentNetsOnly =
true )
const;
291 bool Collide(
const ITEM* aOther,
int aClearance,
bool aDifferentNetsOnly =
true )
const
295 return Collide( aOther, aClearance,
false, dummy, aDifferentNetsOnly );
309 virtual void Mark(
int aMarker )
314 virtual void Unmark(
int aMarker = -1 )
316 m_marker &= ~aMarker;
319 virtual int Marker()
const
324 virtual void SetRank(
int aRank )
329 virtual int Rank()
const
334 virtual VECTOR2I Anchor(
int n )
const
339 virtual int AnchorCount()
const
344 bool IsLocked()
const
346 return Marker() & MK_LOCKED;
349 void SetRoutable(
bool aRoutable )
351 m_routable = aRoutable;
354 bool IsRoutable()
const
360 bool collideSimple(
const ITEM* aOther,
int aClearance,
bool aNeedMTV,
361 VECTOR2I& aMTV,
bool aDifferentNetsOnly )
const;
366 const PNS_HORIZON_PARENT_ITEM* m_parent;
377 template<
typename T,
typename S >
378 std::unique_ptr< T > ItemCast( std::unique_ptr< S > aPtr )
380 static_assert(std::is_base_of< ITEM, S >::value,
"Need to be handed a ITEM!");
381 static_assert(std::is_base_of< ITEM, T >::value,
"Need to cast to an ITEM!");
382 return std::unique_ptr< T >(
static_cast<T*
>(aPtr.release()) );
385 template<
typename T >
386 std::unique_ptr< typename std::remove_const< T >::type > Clone(
const T& aItem )
388 static_assert(std::is_base_of< ITEM, T >::value,
"Need to be handed an ITEM!");
389 return std::unique_ptr< typename std::remove_const< T >::type >( aItem.Clone() );
Class LAYER_RANGE.
Definition: pns_layerset.h:33
Class ITEM.
Definition: pns_item.h:55
void SetLayers(const LAYER_RANGE &aLayers)
Function SetLayers()
Definition: pns_item.h:195
const LAYER_RANGE & Layers() const
Function Layers()
Definition: pns_item.h:215
void SetOwner(NODE *aOwner)
Functon SetOwner()
Definition: pns_item.h:247
void SetNet(int aNet)
Function SetNet()
Definition: pns_item.h:170
PnsKind Kind() const
Function Kind()
Definition: pns_item.h:123
virtual const SHAPE * Shape() const
Function Shape()
Definition: pns_item.h:304
NODE * Owner() const
Function Owner()
Definition: pns_item.h:267
bool BelongsTo(NODE *aNode) const
Function BelongsTo()
Definition: pns_item.h:257
virtual int Layer() const
Function Layer()
Definition: pns_item.h:225
void SetLayer(int aLayer)
Function SetLayer()
Definition: pns_item.h:205
const std::string KindStr() const
Function KindStr()
Definition: pns_item.cpp:63
PnsKind
Supported item types
Definition: pns_item.h:61
bool OfKind(int aKindMask) const
Function OfKind()
Definition: pns_item.h:133
auto Parent() const
Function Parent()
Definition: pns_item.h:160
void SetParent(const PNS_HORIZON_PARENT_ITEM *aParent)
Function SetParent()
Definition: pns_item.h:150
virtual ITEM * Clone() const =0
Function Clone()
bool LayersOverlap(const ITEM *aOther) const
Function LayersOverlap()
Definition: pns_item.h:236
bool Collide(const ITEM *aOther, int aClearance, bool aDifferentNetsOnly=true) const
Function Collide()
Definition: pns_item.h:291
int Net() const
Function Net()
Definition: pns_item.h:180
virtual bool Collide(const ITEM *aOther, int aClearance, bool aNeedMTV, VECTOR2I &aMTV, bool aDifferentNetsOnly=true) const
Function Collide()
Definition: pns_item.cpp:44
Class NODE.
Definition: pns_node.h:138
Definition: pns_horizon_iface.hpp:29
Class SHAPE_LINE_CHAIN.
Definition: shape_line_chain.h:50
Class SHAPE.
Definition: shape.h:59