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;
103 virtual ITEM*
Clone()
const = 0;
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;
254 return m_owner == aNode;
278 virtual bool Collide(
const ITEM* aOther,
int aClearance,
bool aNeedMTV,
279 VECTOR2I& aMTV,
bool aDifferentNetsOnly =
true )
const;
286 bool Collide(
const ITEM* aOther,
int aClearance,
bool aDifferentNetsOnly =
true )
const
290 return Collide( aOther, aClearance,
false, dummy, aDifferentNetsOnly );
304 virtual void Mark(
int aMarker )
309 virtual void Unmark(
int aMarker = -1 )
311 m_marker &= ~aMarker;
314 virtual int Marker()
const
319 virtual void SetRank(
int aRank )
324 virtual int Rank()
const
329 virtual VECTOR2I Anchor(
int n )
const
334 virtual int AnchorCount()
const
339 bool IsLocked()
const
341 return Marker() & MK_LOCKED;
344 void SetRoutable(
bool aRoutable )
346 m_routable = aRoutable;
349 bool IsRoutable()
const
355 bool collideSimple(
const ITEM* aOther,
int aClearance,
bool aNeedMTV,
356 VECTOR2I& aMTV,
bool aDifferentNetsOnly )
const;
361 const PNS_HORIZON_PARENT_ITEM* m_parent;
372 template<
typename T,
typename S >
373 std::unique_ptr< T > ItemCast( std::unique_ptr< S > aPtr )
375 static_assert(std::is_base_of< ITEM, S >::value,
"Need to be handed a ITEM!");
376 static_assert(std::is_base_of< ITEM, T >::value,
"Need to cast to an ITEM!");
377 return std::unique_ptr< T >( static_cast<T*>(aPtr.release()) );
380 template<
typename T >
381 std::unique_ptr< typename std::remove_const< T >::type > Clone(
const T& aItem )
383 static_assert(std::is_base_of< ITEM, T >::value,
"Need to be handed an ITEM!");
384 return std::unique_ptr< typename std::remove_const< T >::type >( aItem.Clone() );
389 #endif // __PNS_ITEM_H
auto Parent() const
Function Parent()
Definition: pns_item.h:160
virtual ITEM * Clone() const =0
Function Clone()
void SetOwner(NODE *aOwner)
Functon SetOwner()
Definition: pns_item.h:242
const LAYER_RANGE & Layers() const
Function Layers()
Definition: pns_item.h:210
Class LAYER_RANGE.
Definition: pns_layerset.h:32
void SetNet(int aNet)
Function SetNet()
Definition: pns_item.h:170
void SetLayer(int aLayer)
Function SetLayer()
Definition: pns_item.h:200
int Net() const
Function Net()
Definition: pns_item.h:180
Class VECTOR2 defines a general 2D-vector/point.
Definition: vector2d.h:63
Definition: pns_horizon_iface.hpp:28
bool LayersOverlap(const ITEM *aOther) const
Function LayersOverlap()
Definition: pns_item.h:231
virtual const SHAPE * Shape() const
Function Shape()
Definition: pns_item.h:299
bool BelongsTo(NODE *aNode) const
Function BelongsTo()
Definition: pns_item.h:252
const std::string KindStr() const
Function KindStr()
Definition: pns_item.cpp:63
void SetParent(const PNS_HORIZON_PARENT_ITEM *aParent)
Function SetParent()
Definition: pns_item.h:150
void SetLayers(const LAYER_RANGE &aLayers)
Function SetLayers()
Definition: pns_item.h:190
Class ITEM.
Definition: pns_item.h:54
PnsKind
Supported item types
Definition: pns_item.h:60
bool Collide(const ITEM *aOther, int aClearance, bool aDifferentNetsOnly=true) const
Function Collide()
Definition: pns_item.h:286
Class NODE.
Definition: pns_node.h:136
Class SHAPE_LINE_CHAIN.
Definition: shape_line_chain.h:47
PnsKind Kind() const
Function Kind()
Definition: pns_item.h:123
Class SHAPE.
Definition: shape.h:58
virtual int Layer() const
Function Layer()
Definition: pns_item.h:220
NODE * Owner() const
Function Owner()
Definition: pns_item.h:262
virtual bool Collide(const ITEM *aOther, int aClearance, bool aNeedMTV, VECTOR2I &aMTV, bool aDifferentNetsOnly=true) const
Function Collide()
Definition: pns_item.cpp:44
bool OfKind(int aKindMask) const
Function OfKind()
Definition: pns_item.h:133