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;
84 m_layers = aOther.m_layers;
86 m_movable = aOther.m_movable;
87 m_kind = aOther.m_kind;
88 m_parent = aOther.m_parent;
90 m_marker = aOther.m_marker;
91 m_rank = aOther.m_rank;
111 virtual const SHAPE_LINE_CHAIN Hull(
int aClearance = 0,
int aWalkaroundThickness = 0 )
const 133 return ( aKindMask & m_kind ) != 0;
141 const std::string
KindStr()
const;
252 return m_owner == aNode;
276 virtual bool Collide(
const ITEM* aOther,
int aClearance,
bool aNeedMTV,
277 VECTOR2I& aMTV,
bool aDifferentNetsOnly =
true )
const;
284 bool Collide(
const ITEM* aOther,
int aClearance,
bool aDifferentNetsOnly =
true )
const 288 return Collide( aOther, aClearance,
false, dummy, aDifferentNetsOnly );
302 virtual void Mark(
int aMarker )
307 virtual void Unmark(
int aMarker = -1 )
309 m_marker &= ~aMarker;
312 virtual int Marker()
const 317 virtual void SetRank(
int aRank )
322 virtual int Rank()
const 327 virtual VECTOR2I Anchor(
int n )
const 332 virtual int AnchorCount()
const 337 bool IsLocked()
const 339 return Marker() & MK_LOCKED;
343 bool collideSimple(
const ITEM* aOther,
int aClearance,
bool aNeedMTV,
344 VECTOR2I& aMTV,
bool aDifferentNetsOnly )
const;
359 template<
typename T,
typename S >
360 std::unique_ptr< T > ItemCast( std::unique_ptr< S > aPtr )
362 static_assert(std::is_base_of< ITEM, S >::value,
"Need to be handed a ITEM!");
363 static_assert(std::is_base_of< ITEM, T >::value,
"Need to cast to an ITEM!");
364 return std::unique_ptr< T >(
static_cast<T*
>(aPtr.release()) );
367 template<
typename T >
368 std::unique_ptr< typename std::remove_const< T >::type >
Clone(
const T& aItem )
370 static_assert(std::is_base_of< ITEM, T >::value,
"Need to be handed an ITEM!");
371 return std::unique_ptr< typename std::remove_const< T >::type >( aItem.Clone() );
376 #endif // __PNS_ITEM_H Class ITEM.
Definition: pns_item.h:54
virtual ITEM * Clone() const =0
Function Clone()
void SetOwner(NODE *aOwner)
Functon SetOwner()
Definition: pns_item.h:240
virtual int Layer() const
Function Layer()
Definition: pns_item.h:218
Class NODE.
Definition: pns_node.h:138
void SetLayer(int aLayer)
Function SetLayer()
Definition: pns_item.h:198
Definition: pns_horizon_iface.hpp:26
void SetNet(int aNet)
Function SetNet()
Definition: pns_item.h:168
bool LayersOverlap(const ITEM *aOther) const
Function LayersOverlap()
Definition: pns_item.h:229
bool BelongsTo(NODE *aNode) const
Function BelongsTo()
Definition: pns_item.h:250
virtual const SHAPE * Shape() const
Function Shape()
Definition: pns_item.h:297
int Net() const
Function Net()
Definition: pns_item.h:178
void SetParent(const PNS_HORIZON_PARENT_ITEM *aParent)
Function SetParent()
Definition: pns_item.h:148
Class SHAPE.
Definition: shape.h:57
void SetLayers(const LAYER_RANGE &aLayers)
Function SetLayers()
Definition: pns_item.h:188
PnsKind
Supported item types
Definition: pns_item.h:60
const std::string KindStr() const
Function KindStr()
Definition: pns_item.cpp:63
Class SHAPE_LINE_CHAIN.
Definition: shape_line_chain.h:47
bool OfKind(int aKindMask) const
Function OfKind()
Definition: pns_item.h:131
PnsKind Kind() const
Function Kind()
Definition: pns_item.h:121
auto Parent() const
Function Parent()
Definition: pns_item.h:158
virtual bool Collide(const ITEM *aOther, int aClearance, bool aNeedMTV, VECTOR2I &aMTV, bool aDifferentNetsOnly=true) const
Function Collide()
Definition: pns_item.cpp:44
bool Collide(const ITEM *aOther, int aClearance, bool aDifferentNetsOnly=true) const
Function Collide()
Definition: pns_item.h:284
NODE * Owner() const
Function Owner()
Definition: pns_item.h:260
Definition: pns_algo_base.cpp:26
Class LAYER_RANGE.
Definition: pns_layerset.h:32
const LAYER_RANGE & Layers() const
Function Layers()
Definition: pns_item.h:208