KiCad PCB EDA Suite
PNS::VIA Class Reference

#include <pns_via.h>

Inheritance diagram for PNS::VIA:
PNS::LINKED_ITEM PNS::ITEM PNS::VVIA

Public Types

enum  PnsKind {
  SOLID_T = 1 , LINE_T = 2 , JOINT_T = 4 , SEGMENT_T = 8 ,
  ARC_T = 16 , VIA_T = 32 , DIFF_PAIR_T = 64 , ANY_T = 0xff
}
 

Public Member Functions

 VIA ()
 
 VIA (const VECTOR2I &aPos, const LAYER_RANGE &aLayers, int aDiameter, int aDrill, int aNet=-1, VIATYPE aViaType=VIATYPE::THROUGH)
 
 VIA (const VIA &aB)
 
const VECTOR2IPos () const
 
void SetPos (const VECTOR2I &aPos)
 
VIATYPE ViaType () const
 
void SetViaType (VIATYPE aViaType)
 
int Diameter () const
 
void SetDiameter (int aDiameter)
 
int Drill () const
 
void SetDrill (int aDrill)
 
bool IsFree () const
 
void SetIsFree (bool aIsFree)
 
bool PushoutForce (NODE *aNode, const VECTOR2I &aDirection, VECTOR2I &aForce, bool aSolidsOnly=true, int aMaxIterations=10)
 
bool PushoutForce (NODE *aNode, const ITEM *aOther, VECTOR2I &aForce)
 
const SHAPEShape () const override
 Return the geometrical shape of the item. More...
 
const SHAPE_CIRCLEHole () const override
 
void SetHole (const SHAPE_CIRCLE &aHole)
 
VIAClone () const override
 Return a deep copy of the item. More...
 
const SHAPE_LINE_CHAIN Hull (int aClearance=0, int aWalkaroundThickness=0, int aLayer=-1) const override
 
const SHAPE_LINE_CHAIN HoleHull (int aClearance=0, int aWalkaroundThickness=0, int aLayer=-1) const override
 
virtual VECTOR2I Anchor (int n) const override
 
virtual int AnchorCount () const override
 
OPT_BOX2I ChangedArea (const VIA *aOther) const
 
const VIA_HANDLE MakeHandle () const
 
virtual void SetWidth (int aWidth)
 
virtual int Width () const
 
PnsKind Kind () const
 Return the type (kind) of the item. More...
 
bool OfKind (int aKindMask) const
 Return true if the item's type matches the mask aKindMask. More...
 
std::string KindStr () const
 Returns the kind of the item, as string. More...
 
void SetParent (BOARD_ITEM *aParent)
 
BOARD_ITEMParent () const
 
void SetNet (int aNet)
 
int Net () const
 
const LAYER_RANGELayers () const
 
void SetLayers (const LAYER_RANGE &aLayers)
 
void SetLayer (int aLayer)
 
virtual int Layer () const
 
bool LayersOverlap (const ITEM *aOther) const
 Return true if the set of layers spanned by aOther overlaps our layers. More...
 
NODEOwner () const
 Return the owner of this item, or NULL if there's none. More...
 
void SetOwner (NODE *aOwner)
 Set the node that owns this item. More...
 
bool BelongsTo (NODE *aNode) const
 
bool Collide (const ITEM *aOther, const NODE *aNode, bool aDifferentNetsOnly=true, int aOverrideClearance=-1) const
 Check for a collision (clearance violation) with between us and item aOther. More...
 
virtual void Mark (int aMarker) const
 
virtual void Unmark (int aMarker=-1) const
 
virtual int Marker () const
 
virtual void SetRank (int aRank)
 
virtual int Rank () const
 
bool IsLocked () const
 
void SetRoutable (bool aRoutable)
 
bool IsRoutable () const
 
void SetIsFreePad (bool aIsFreePad=true)
 
bool IsFreePad () const
 
bool IsVirtual () const
 
void SetIsCompoundShapePrimitive ()
 
bool IsCompoundShapePrimitive () const
 

Static Public Member Functions

static bool ClassOf (const ITEM *aItem)
 

Static Public Attributes

static const int UnusedNet = INT_MAX
 Supported item types. More...
 

Protected Attributes

PnsKind m_kind
 
BOARD_ITEMm_parent
 
NODEm_owner
 
LAYER_RANGE m_layers
 
bool m_movable
 
int m_net
 
int m_marker
 
int m_rank
 
bool m_routable
 
bool m_isVirtual
 
bool m_isFreePad
 
bool m_isCompoundShapePrimitive
 

Private Member Functions

bool collideSimple (const ITEM *aOther, const NODE *aNode, bool aDifferentNetsOnly, int aOverrideClearance) const
 

Private Attributes

int m_diameter
 
int m_drill
 
VECTOR2I m_pos
 
SHAPE_CIRCLE m_shape
 
SHAPE_CIRCLE m_hole
 
VIATYPE m_viaType
 
bool m_isFree
 

Detailed Description

Definition at line 49 of file pns_via.h.

Member Enumeration Documentation

◆ PnsKind

enum PNS::ITEM::PnsKind
inherited
Enumerator
SOLID_T 
LINE_T 
JOINT_T 
SEGMENT_T 
ARC_T 
VIA_T 
DIFF_PAIR_T 
ANY_T 

Definition at line 61 of file pns_item.h.

62 {
63 SOLID_T = 1,
64 LINE_T = 2,
65 JOINT_T = 4,
66 SEGMENT_T = 8,
67 ARC_T = 16,
68 VIA_T = 32,
69 DIFF_PAIR_T = 64,
70 ANY_T = 0xff
71 };
@ SOLID_T
Definition: pns_item.h:63
@ LINE_T
Definition: pns_item.h:64
@ SEGMENT_T
Definition: pns_item.h:66
@ DIFF_PAIR_T
Definition: pns_item.h:69
@ JOINT_T
Definition: pns_item.h:65

Constructor & Destructor Documentation

◆ VIA() [1/3]

PNS::VIA::VIA ( )
inline

Definition at line 52 of file pns_via.h.

52 :
54 {
55 m_diameter = 2; // Dummy value
56 m_drill = 0;
58 m_isFree = false;
59 m_isVirtual = false;
60 }
bool m_isVirtual
Definition: pns_item.h:263
LINKED_ITEM(PnsKind aKind)
int m_drill
Definition: pns_via.h:165
int m_diameter
Definition: pns_via.h:164
VIATYPE m_viaType
Definition: pns_via.h:169
bool m_isFree
Definition: pns_via.h:170

References m_diameter, m_drill, m_isFree, PNS::ITEM::m_isVirtual, m_viaType, and THROUGH.

Referenced by Clone().

◆ VIA() [2/3]

PNS::VIA::VIA ( const VECTOR2I aPos,
const LAYER_RANGE aLayers,
int  aDiameter,
int  aDrill,
int  aNet = -1,
VIATYPE  aViaType = VIATYPE::THROUGH 
)
inline

Definition at line 62 of file pns_via.h.

63 :
65 {
66 SetNet( aNet );
67 SetLayers( aLayers );
68 m_pos = aPos;
69 m_diameter = aDiameter;
70 m_drill = aDrill;
71 m_shape = SHAPE_CIRCLE( aPos, aDiameter / 2 );
72 m_hole = SHAPE_CIRCLE( m_pos, aDrill / 2 );
73 m_viaType = aViaType;
74 m_isFree = false;
75 m_isVirtual = false;
76 }
void SetLayers(const LAYER_RANGE &aLayers)
Definition: pns_item.h:157
void SetNet(int aNet)
Definition: pns_item.h:153
VECTOR2I m_pos
Definition: pns_via.h:166
SHAPE_CIRCLE m_hole
Definition: pns_via.h:168
SHAPE_CIRCLE m_shape
Definition: pns_via.h:167

References m_diameter, m_drill, m_hole, m_isFree, PNS::ITEM::m_isVirtual, m_pos, m_shape, m_viaType, PNS::ITEM::SetLayers(), and PNS::ITEM::SetNet().

◆ VIA() [3/3]

PNS::VIA::VIA ( const VIA aB)
inline

Definition at line 78 of file pns_via.h.

78 :
79 LINKED_ITEM( aB )
80 {
81 SetNet( aB.Net() );
82 SetLayers( aB.Layers() );
83 m_pos = aB.m_pos;
84 m_diameter = aB.m_diameter;
86 m_hole = SHAPE_CIRCLE( m_pos, aB.m_drill / 2 );
87 m_marker = aB.m_marker;
88 m_rank = aB.m_rank;
89 m_drill = aB.m_drill;
90 m_viaType = aB.m_viaType;
91 m_isFree = aB.m_isFree;
92 m_isVirtual = aB.m_isVirtual;
93 }
int m_marker
Definition: pns_item.h:260
int m_rank
Definition: pns_item.h:261

References PNS::ITEM::Layers(), m_diameter, m_drill, m_hole, m_isFree, PNS::ITEM::m_isVirtual, PNS::ITEM::m_marker, m_pos, PNS::ITEM::m_rank, m_shape, m_viaType, PNS::ITEM::Net(), PNS::ITEM::SetLayers(), and PNS::ITEM::SetNet().

Member Function Documentation

◆ Anchor()

virtual VECTOR2I PNS::VIA::Anchor ( int  n) const
inlineoverridevirtual

Reimplemented from PNS::ITEM.

Definition at line 149 of file pns_via.h.

150 {
151 return m_pos;
152 }

References m_pos.

◆ AnchorCount()

virtual int PNS::VIA::AnchorCount ( ) const
inlineoverridevirtual

Reimplemented from PNS::ITEM.

Definition at line 154 of file pns_via.h.

155 {
156 return 1;
157 }

◆ BelongsTo()

bool PNS::ITEM::BelongsTo ( NODE aNode) const
inlineinherited
Returns
true if the item is owned by the node aNode.

Definition at line 183 of file pns_item.h.

184 {
185 return m_owner == aNode;
186 }
NODE * m_owner
Definition: pns_item.h:255

References PNS::ITEM::m_owner.

Referenced by PNS::NODE::doRemove().

◆ ChangedArea()

OPT_BOX2I PNS::VIA::ChangedArea ( const VIA aOther) const

Definition at line 157 of file pns_via.cpp.

158{
159 if ( aOther->Pos() != Pos() )
160 {
161 BOX2I tmp = Shape()->BBox();
162 tmp.Merge( aOther->Shape()->BBox() );
163 return tmp;
164 }
165
166 return OPT_BOX2I();
167}
std::optional< BOX2I > OPT_BOX2I
Definition: box2.h:850
BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
Definition: box2.h:588
const VECTOR2I & Pos() const
Definition: pns_via.h:100
const SHAPE * Shape() const override
Return the geometrical shape of the item.
Definition: pns_via.h:136
virtual const BOX2I BBox(int aClearance=0) const =0
Compute a bounding box of the shape, with a margin of aClearance a collision.

References SHAPE::BBox(), BOX2< Vec >::Merge(), Pos(), and Shape().

Referenced by PNS::ChangedArea().

◆ ClassOf()

static bool PNS::VIA::ClassOf ( const ITEM aItem)
inlinestatic

Definition at line 95 of file pns_via.h.

96 {
97 return aItem && VIA_T == aItem->Kind();
98 }

References PNS::ITEM::Kind(), and PNS::ITEM::VIA_T.

◆ Clone()

VIA * PNS::VIA::Clone ( ) const
overridevirtual

Return a deep copy of the item.

Implements PNS::ITEM.

Definition at line 135 of file pns_via.cpp.

136{
137 VIA* v = new VIA();
138
139 v->SetNet( Net() );
140 v->SetLayers( Layers() );
141 v->m_pos = m_pos;
142 v->m_diameter = m_diameter;
143 v->m_drill = m_drill;
144 v->m_shape = SHAPE_CIRCLE( m_pos, m_diameter / 2 );
145 v->m_hole = SHAPE_CIRCLE( m_pos, m_drill / 2 );
146 v->m_rank = m_rank;
147 v->m_marker = m_marker;
148 v->m_viaType = m_viaType;
149 v->m_parent = m_parent;
150 v->m_isFree = m_isFree;
151 v->m_isVirtual = m_isVirtual;
152
153 return v;
154}
const LAYER_RANGE & Layers() const
Definition: pns_item.h:156
int Net() const
Definition: pns_item.h:154
BOARD_ITEM * m_parent
Definition: pns_item.h:254
VIA()
Definition: pns_via.h:52

References PNS::ITEM::Layers(), m_diameter, m_drill, m_hole, m_isFree, PNS::ITEM::m_isVirtual, PNS::ITEM::m_marker, PNS::ITEM::m_parent, m_pos, PNS::ITEM::m_rank, m_shape, m_viaType, PNS::ITEM::Net(), PNS::ITEM::SetLayers(), PNS::ITEM::SetNet(), and VIA().

◆ Collide()

bool PNS::ITEM::Collide ( const ITEM aOther,
const NODE aNode,
bool  aDifferentNetsOnly = true,
int  aOverrideClearance = -1 
) const
inherited

Check for a collision (clearance violation) with between us and item aOther.

Collision checking takes all PCB stuff into account (layers, nets, DRC rules). Optionally returns a minimum translation vector for force propagation algorithm.

Parameters
aOtheris the item to check collision against.
Returns
true, if a collision was found.

Definition at line 169 of file pns_item.cpp.

170{
171 if( collideSimple( aOther, aNode, aDifferentNetsOnly, aOverrideClearance ) )
172 return true;
173
174 // Special cases for "head" lines with vias attached at the end. Note that this does not
175 // support head-line-via to head-line-via collisions, but you can't route two independent
176 // tracks at once so it shouldn't come up.
177
178 if( m_kind == LINE_T )
179 {
180 const LINE* line = static_cast<const LINE*>( this );
181
182 if( line->EndsWithVia() && line->Via().collideSimple( aOther, aNode, aDifferentNetsOnly, aOverrideClearance ) )
183 return true;
184 }
185
186 if( aOther->m_kind == LINE_T )
187 {
188 const LINE* line = static_cast<const LINE*>( aOther );
189
190 if( line->EndsWithVia() && line->Via().collideSimple( this, aNode, aDifferentNetsOnly, aOverrideClearance ) )
191 return true;
192 }
193
194 return false;
195}
PnsKind m_kind
Definition: pns_item.h:252
bool collideSimple(const ITEM *aOther, const NODE *aNode, bool aDifferentNetsOnly, int aOverrideClearance) const
Definition: pns_item.cpp:32

References PNS::ITEM::collideSimple(), PNS::LINE::EndsWithVia(), PNS::ITEM::LINE_T, PNS::ITEM::m_kind, and PNS::LINE::Via().

Referenced by PNS::SHOVE::fixupViaCollisions(), PNS::SHOVE::onCollidingSolid(), PNS::NODE::DEFAULT_OBSTACLE_VISITOR::operator()(), PNS::OPTIMIZER::CACHE_VISITOR::operator()(), PNS::SHOVE::shoveLineFromLoneVia(), PNS::SHOVE::shoveLineToHullSet(), PNS::COMPONENT_DRAGGER::Start(), and PNS::verifyDpBypass().

◆ collideSimple()

bool PNS::ITEM::collideSimple ( const ITEM aOther,
const NODE aNode,
bool  aDifferentNetsOnly,
int  aOverrideClearance 
) const
privateinherited

Definition at line 32 of file pns_item.cpp.

33{
34 const ROUTER_IFACE* iface = ROUTER::GetInstance()->GetInterface();
35 const SHAPE* shapeA = Shape();
36 const SHAPE* holeA = Hole();
37 int lineWidthA = 0;
38 const SHAPE* shapeB = aOther->Shape();
39 const SHAPE* holeB = aOther->Hole();
40 int lineWidthB = 0;
41
42 // Sadly collision routines ignore SHAPE_POLY_LINE widths so we have to pass them in as part
43 // of the clearance value.
44 if( m_kind == LINE_T )
45 lineWidthA = static_cast<const LINE*>( this )->Width() / 2;
46
47 if( aOther->m_kind == LINE_T )
48 lineWidthB = static_cast<const LINE*>( aOther )->Width() / 2;
49
50 // same nets? no collision!
51 if( aDifferentNetsOnly && m_net == aOther->m_net && m_net >= 0 && aOther->m_net >= 0 )
52 return false;
53
54 // a pad associated with a "free" pin (NIC) doesn't have a net until it has been used
55 if( aDifferentNetsOnly && ( IsFreePad() || aOther->IsFreePad() ) )
56 return false;
57
58 // check if we are not on completely different layers first
59 if( !m_layers.Overlaps( aOther->m_layers ) )
60 return false;
61
62 auto checkKeepout =
63 []( const ZONE* aKeepout, const BOARD_ITEM* aOther )
64 {
65 if( aKeepout->GetDoNotAllowTracks() && aOther->IsType( { PCB_ARC_T, PCB_TRACE_T } ) )
66 return true;
67
68 if( aKeepout->GetDoNotAllowVias() && aOther->Type() == PCB_VIA_T )
69 return true;
70
71 if( aKeepout->GetDoNotAllowPads() && aOther->Type() == PCB_PAD_T )
72 return true;
73
74 // Incomplete test, but better than nothing:
75 if( aKeepout->GetDoNotAllowFootprints() && aOther->Type() == PCB_PAD_T )
76 {
77 return !aKeepout->GetParentFootprint()
78 || aKeepout->GetParentFootprint() != aOther->GetParentFootprint();
79 }
80
81 return false;
82 };
83
84 const ZONE* zoneA = dynamic_cast<ZONE*>( Parent() );
85 const ZONE* zoneB = dynamic_cast<ZONE*>( aOther->Parent() );
86
87 if( zoneA && aOther->Parent() && !checkKeepout( zoneA, aOther->Parent() ) )
88 return false;
89
90 if( zoneB && Parent() && !checkKeepout( zoneB, Parent() ) )
91 return false;
92
93 bool thisNotFlashed = !iface->IsFlashedOnLayer( this, aOther->Layer() );
94 bool otherNotFlashed = !iface->IsFlashedOnLayer( aOther, Layer() );
95
96 if( ( aNode->GetCollisionQueryScope() == NODE::CQS_ALL_RULES
97 || ( thisNotFlashed || otherNotFlashed ) )
98 && ( holeA || holeB ) )
99 {
100 int holeClearance = aNode->GetHoleClearance( this, aOther );
101
102 if( holeClearance >= 0 && holeA && holeA->Collide( shapeB, holeClearance + lineWidthB ) )
103 {
104 Mark( Marker() | MK_HOLE );
105 return true;
106 }
107
108 if( holeB && holeClearance >= 0 && holeB->Collide( shapeA, holeClearance + lineWidthA ) )
109 {
110 aOther->Mark( aOther->Marker() | MK_HOLE );
111 return true;
112 }
113
114 if( holeA && holeB )
115 {
116 int holeToHoleClearance = aNode->GetHoleToHoleClearance( this, aOther );
117
118 if( holeToHoleClearance >= 0 && holeA->Collide( holeB, holeToHoleClearance ) )
119 {
120 Mark( Marker() | MK_HOLE );
121 aOther->Mark( aOther->Marker() | MK_HOLE );
122 return true;
123 }
124 }
125 }
126
127 if( !aOther->Layers().IsMultilayer() && thisNotFlashed )
128 return false;
129
130 if( !Layers().IsMultilayer() && otherNotFlashed )
131 return false;
132
133 int clearance = aOverrideClearance >= 0 ? aOverrideClearance : aNode->GetClearance( this, aOther );
134
135 if( clearance >= 0 )
136 {
137 bool checkCastellation = ( m_parent && m_parent->GetLayer() == Edge_Cuts );
138 bool checkNetTie = aNode->GetRuleResolver()->IsInNetTie( this );
139
140 if( checkCastellation || checkNetTie )
141 {
142 // Slow method
143 int actual;
144 VECTOR2I pos;
145
146 if( shapeA->Collide( shapeB, clearance + lineWidthA, &actual, &pos ) )
147 {
148 if( checkCastellation && aNode->QueryEdgeExclusions( pos ) )
149 return false;
150
151 if( checkNetTie && aNode->GetRuleResolver()->IsNetTieExclusion( aOther, pos, this ) )
152 return false;
153
154 return true;
155 }
156 }
157 else
158 {
159 // Fast method
160 if( shapeA->Collide( shapeB, clearance + lineWidthA + lineWidthB ) )
161 return true;
162 }
163 }
164
165 return false;
166}
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:50
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition: board_item.h:167
BOARD_ITEM_CONTAINER * GetParentFootprint() const
Definition: board_item.cpp:217
bool Overlaps(const LAYER_RANGE &aOther) const
Definition: pns_layerset.h:67
BOARD_ITEM * Parent() const
Definition: pns_item.h:151
bool IsFreePad() const
Definition: pns_item.h:238
int m_net
Definition: pns_item.h:259
virtual const SHAPE * Hole() const
Definition: pns_item.h:207
LAYER_RANGE m_layers
Definition: pns_item.h:256
virtual int Layer() const
Definition: pns_item.h:160
virtual const SHAPE * Shape() const
Return the geometrical shape of the item.
Definition: pns_item.h:202
virtual void Mark(int aMarker) const
Definition: pns_item.h:212
virtual int Marker() const
Definition: pns_item.h:214
@ CQS_ALL_RULES
check all rules
Definition: pns_node.h:161
ROUTER_IFACE * GetInterface() const
Definition: pns_router.h:210
static ROUTER * GetInstance()
Definition: pns_router.cpp:78
An abstract shape on 2D plane.
Definition: shape.h:123
virtual bool Collide(const VECTOR2I &aP, int aClearance=0, int *aActual=nullptr, VECTOR2I *aLocation=nullptr) const
Check if the boundary of shape (this) lies closer to the point aP than aClearance,...
Definition: shape.h:178
Handle a list of polygons defining a copper zone.
Definition: zone.h:57
bool GetDoNotAllowVias() const
Definition: zone.h:693
bool GetDoNotAllowPads() const
Definition: zone.h:695
bool GetDoNotAllowTracks() const
Definition: zone.h:694
bool GetDoNotAllowFootprints() const
Definition: zone.h:696
@ Edge_Cuts
Definition: layer_ids.h:113
@ MK_HOLE
Definition: pns_item.h:45
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
Definition: typeinfo.h:102
@ PCB_PAD_T
class PAD, a pad in a footprint
Definition: typeinfo.h:87
@ PCB_ARC_T
class PCB_ARC, an arc track segment on a copper layer
Definition: typeinfo.h:103
@ PCB_TRACE_T
class PCB_TRACK, a track segment (segment on a copper layer)
Definition: typeinfo.h:101

References SHAPE::Collide(), PNS::NODE::CQS_ALL_RULES, Edge_Cuts, PNS::NODE::GetClearance(), PNS::NODE::GetCollisionQueryScope(), ZONE::GetDoNotAllowFootprints(), ZONE::GetDoNotAllowPads(), ZONE::GetDoNotAllowTracks(), ZONE::GetDoNotAllowVias(), PNS::NODE::GetHoleClearance(), PNS::NODE::GetHoleToHoleClearance(), PNS::ROUTER::GetInstance(), PNS::ROUTER::GetInterface(), BOARD_ITEM::GetLayer(), BOARD_ITEM::GetParentFootprint(), PNS::NODE::GetRuleResolver(), PNS::ITEM::Hole(), PNS::ROUTER_IFACE::IsFlashedOnLayer(), PNS::ITEM::IsFreePad(), PNS::RULE_RESOLVER::IsInNetTie(), LAYER_RANGE::IsMultilayer(), PNS::RULE_RESOLVER::IsNetTieExclusion(), PNS::ITEM::Layer(), PNS::ITEM::Layers(), PNS::ITEM::LINE_T, PNS::ITEM::m_kind, PNS::ITEM::m_layers, PNS::ITEM::m_net, PNS::ITEM::m_parent, PNS::ITEM::Mark(), PNS::ITEM::Marker(), PNS::MK_HOLE, LAYER_RANGE::Overlaps(), PNS::ITEM::Parent(), PCB_ARC_T, PCB_PAD_T, PCB_TRACE_T, PCB_VIA_T, PNS::NODE::QueryEdgeExclusions(), and PNS::ITEM::Shape().

Referenced by PNS::ITEM::Collide().

◆ Diameter()

int PNS::VIA::Diameter ( ) const
inline

◆ Drill()

int PNS::VIA::Drill ( ) const
inline

Definition at line 120 of file pns_via.h.

120{ return m_drill; }

References m_drill.

◆ Hole()

const SHAPE_CIRCLE * PNS::VIA::Hole ( ) const
inlineoverridevirtual

Reimplemented from PNS::ITEM.

Definition at line 138 of file pns_via.h.

138{ return &m_hole; }

References m_hole.

Referenced by PushoutForce().

◆ HoleHull()

const SHAPE_LINE_CHAIN PNS::VIA::HoleHull ( int  aClearance = 0,
int  aWalkaroundThickness = 0,
int  aLayer = -1 
) const
overridevirtual

Reimplemented from PNS::ITEM.

Definition at line 124 of file pns_via.cpp.

125{
126 int cl = ( aClearance + aWalkaroundThickness / 2 );
127 int width = m_hole.GetRadius() * 2;
128
129 // Chamfer = width * ( 1 - sqrt(2)/2 ) for equilateral octagon
130 return OctagonalHull( m_pos - VECTOR2I( width / 2, width / 2 ), VECTOR2I( width, width ), cl,
131 ( 2 * cl + width ) * ( 1.0 - M_SQRT1_2 ) );
132}
int GetRadius() const
Definition: shape_circle.h:108
const SHAPE_LINE_CHAIN OctagonalHull(const VECTOR2I &aP0, const VECTOR2I &aSize, int aClearance, int aChamfer)
Definition: pns_utils.cpp:36
VECTOR2< int > VECTOR2I
Definition: vector2d.h:618

References SHAPE_CIRCLE::GetRadius(), m_hole, m_pos, and PNS::OctagonalHull().

◆ Hull()

const SHAPE_LINE_CHAIN PNS::VIA::Hull ( int  aClearance = 0,
int  aWalkaroundThickness = 0,
int  aLayer = -1 
) const
overridevirtual

Reimplemented from PNS::ITEM.

Definition at line 109 of file pns_via.cpp.

110{
111 int cl = ( aClearance + aWalkaroundThickness / 2 );
112 int width = m_diameter;
113
114 if( !ROUTER::GetInstance()->GetInterface()->IsFlashedOnLayer( this, aLayer ) )
115 width = m_hole.GetRadius() * 2;
116
117 // Chamfer = width * ( 1 - sqrt(2)/2 ) for equilateral octagon
118 return OctagonalHull( m_pos - VECTOR2I( width / 2, width / 2 ),
119 VECTOR2I( width, width ),
120 cl, ( 2 * cl + width ) * ( 1.0 - M_SQRT1_2 ) );
121}
virtual bool IsFlashedOnLayer(const PNS::ITEM *aItem, int aLayer) const =0

References PNS::ROUTER::GetInstance(), PNS::ROUTER::GetInterface(), SHAPE_CIRCLE::GetRadius(), PNS::ROUTER_IFACE::IsFlashedOnLayer(), m_diameter, m_hole, m_pos, and PNS::OctagonalHull().

Referenced by PNS::SHOVE::shoveLineFromLoneVia(), and PNS::SHOVE::ShoveObstacleLine().

◆ IsCompoundShapePrimitive()

bool PNS::ITEM::IsCompoundShapePrimitive ( ) const
inlineinherited

Definition at line 246 of file pns_item.h.

bool m_isCompoundShapePrimitive
Definition: pns_item.h:265

References PNS::ITEM::m_isCompoundShapePrimitive.

◆ IsFree()

bool PNS::VIA::IsFree ( ) const
inline

Definition at line 128 of file pns_via.h.

128{ return m_isFree; }

References m_isFree.

◆ IsFreePad()

bool PNS::ITEM::IsFreePad ( ) const
inlineinherited

Definition at line 238 of file pns_item.h.

238{ return m_isFreePad; }
bool m_isFreePad
Definition: pns_item.h:264

References PNS::ITEM::m_isFreePad.

Referenced by PNS::ITEM::collideSimple().

◆ IsLocked()

bool PNS::ITEM::IsLocked ( ) const
inlineinherited

Definition at line 229 of file pns_item.h.

230 {
231 return Marker() & MK_LOCKED;
232 }
@ MK_LOCKED
Definition: pns_item.h:43

References PNS::ITEM::Marker(), and PNS::MK_LOCKED.

Referenced by ROUTER_TOOL::InlineBreakTrack(), ROUTER_TOOL::performDragging(), and PNS::SHOVE::pushOrShoveVia().

◆ IsRoutable()

bool PNS::ITEM::IsRoutable ( ) const
inlineinherited

Definition at line 235 of file pns_item.h.

235{ return m_routable; }
bool m_routable
Definition: pns_item.h:262

References PNS::ITEM::m_routable.

Referenced by PNS::NODE::addSolid(), and PNS::NODE::removeSolidIndex().

◆ IsVirtual()

bool PNS::ITEM::IsVirtual ( ) const
inlineinherited

◆ Kind()

◆ KindStr()

std::string PNS::ITEM::KindStr ( ) const
inherited

Returns the kind of the item, as string.

Definition at line 198 of file pns_item.cpp.

199{
200 switch( m_kind )
201 {
202 case ARC_T: return "arc";
203 case LINE_T: return "line";
204 case SEGMENT_T: return "segment";
205 case VIA_T: return "via";
206 case JOINT_T: return "joint";
207 case SOLID_T: return "solid";
208 case DIFF_PAIR_T: return "diff-pair";
209 default: return "unknown";
210 }
211}

References PNS::ITEM::ARC_T, PNS::ITEM::DIFF_PAIR_T, PNS::ITEM::JOINT_T, PNS::ITEM::LINE_T, PNS::ITEM::m_kind, PNS::ITEM::SEGMENT_T, PNS::ITEM::SOLID_T, and PNS::ITEM::VIA_T.

Referenced by PNS::TOOL_BASE::pickSingleItem(), and PNS::TOOL_BASE::updateEndItem().

◆ Layer()

◆ Layers()

const LAYER_RANGE & PNS::ITEM::Layers ( ) const
inlineinherited

Definition at line 156 of file pns_item.h.

156{ return m_layers; }

References PNS::ITEM::m_layers.

Referenced by PNS::INDEX::Add(), PNS::NODE::Add(), PNS::NODE::addArc(), PNS_KICAD_IFACE::AddItem(), PNS::NODE::addSegment(), PNS::NODE::addSolid(), PNS::NODE::addVia(), PNS::ARC::ARC(), PNS::TOPOLOGY::AssembleDiffPair(), PNS::NODE::AssembleLine(), PNS::KEEP_TOPOLOGY_CONSTRAINT::Check(), PNS_PCBNEW_RULE_RESOLVER::Clearance(), Clone(), PNS::ITEM::collideSimple(), PNS::DP_MEANDER_PLACER::CurrentLayer(), PNS::MEANDER_PLACER::CurrentLayer(), PNS::DIFF_PAIR_PLACER::FindDpPrimitivePair(), PNS::NODE::FindJoint(), PNS::NODE::FindLinesBetweenJoints(), PNS::NODE::findRedundantArc(), PNS::NODE::findRedundantSegment(), PNS::NODE::FixupVirtualVias(), PNS::ROUTER::getNearestRatnestAnchor(), ROUTER_TOOL::getStartLayer(), PNS_PCBNEW_RULE_RESOLVER::HoleClearance(), PNS_PCBNEW_RULE_RESOLVER::HoleToHoleClearance(), PNS_KICAD_IFACE_BASE::IsFlashedOnLayer(), PNS::ITEM::Layer(), PNS::ITEM::LayersOverlap(), PNS::LINE::LINE(), PNS::NODE::LockJoint(), MakeHandle(), PNS::ROUTER::markViolations(), PNS::TOPOLOGY::NearestUnconnectedAnchorPoint(), PNS::SHOVE::onCollidingSolid(), LENGTH_TUNER_TOOL::performTuning(), PNS::TOOL_BASE::pickSingleItem(), PNS::INDEX::Query(), PNS::INDEX::Remove(), PNS::NODE::removeArcIndex(), PNS::NODE::removeSegmentIndex(), PNS::NODE::removeSolidIndex(), PNS::NODE::removeViaIndex(), PNS_LOG_PLAYER::ReplayLog(), PNS::SEGMENT::SEGMENT(), PNS::LINE_PLACER::SetLayer(), PNS::COMPONENT_DRAGGER::Start(), ROUTER_PREVIEW_ITEM::Update(), PNS::TOOL_BASE::updateEndItem(), PNS::DIFF_PAIR::updateLine(), PNS::TOOL_BASE::updateStartItem(), and VIA().

◆ LayersOverlap()

bool PNS::ITEM::LayersOverlap ( const ITEM aOther) const
inlineinherited

Return true if the set of layers spanned by aOther overlaps our layers.

Definition at line 165 of file pns_item.h.

166 {
167 return Layers().Overlaps( aOther->Layers() );
168 }

References PNS::ITEM::Layers(), and LAYER_RANGE::Overlaps().

Referenced by PNS::MEANDER_PLACER_BASE::lineLength(), PNS::SHOVE::onCollidingArc(), PNS::SHOVE::onCollidingSegment(), PNS::NODE::rebuildJoint(), and PNS::SHOVE::ShoveObstacleLine().

◆ MakeHandle()

const VIA_HANDLE PNS::VIA::MakeHandle ( ) const

Definition at line 169 of file pns_via.cpp.

170{
171 VIA_HANDLE h;
172 h.pos = Pos();
173 h.layers = Layers();
174 h.net = Net();
175 h.valid = true;
176 return h;
177}

References PNS::ITEM::Layers(), PNS::VIA_HANDLE::layers, PNS::ITEM::Net(), PNS::VIA_HANDLE::net, PNS::VIA_HANDLE::pos, Pos(), and PNS::VIA_HANDLE::valid.

Referenced by PNS::SHOVE::pushSpringback(), PNS::SHOVE::ShoveDraggingVia(), and PNS::DRAGGER::startDragVia().

◆ Mark()

virtual void PNS::ITEM::Mark ( int  aMarker) const
inlinevirtualinherited

Reimplemented in PNS::LINE.

Definition at line 212 of file pns_item.h.

212{ m_marker = aMarker; }

References PNS::ITEM::m_marker.

Referenced by PNS::ITEM::collideSimple(), and PNS::SHOVE::ShoveDraggingVia().

◆ Marker()

virtual int PNS::ITEM::Marker ( ) const
inlinevirtualinherited

◆ Net()

int PNS::ITEM::Net ( ) const
inlineinherited

Definition at line 154 of file pns_item.h.

154{ return m_net; }

References PNS::ITEM::m_net.

Referenced by PNS::INDEX::Add(), PNS::NODE::Add(), PNS::NODE::addArc(), PNS_KICAD_IFACE::AddItem(), PNS::NODE::addSegment(), PNS::NODE::addSolid(), PNS::NODE::addVia(), PNS::ARC::ARC(), PNS::TOPOLOGY::AssembleCluster(), PNS::TOPOLOGY::AssembleDiffPair(), PNS::NODE::AssembleLine(), PNS::LINE_PLACER::buildInitialLine(), PNS::KEEP_TOPOLOGY_CONSTRAINT::Check(), Clone(), PNS::DRAGGER::CurrentNets(), PNS::MEANDER_PLACER::CurrentNets(), PNS::DIFF_PAIR::DIFF_PAIR(), PNS::OPTIMIZER::fanoutCleanup(), PNS::DIFF_PAIR_PLACER::FindDpPrimitivePair(), PNS::NODE::FindJoint(), PNS::NODE::findRedundantArc(), PNS::NODE::findRedundantSegment(), PNS::LINE_PLACER::FixRoute(), ROUTER_TOOL::InlineDrag(), PNS_PCBNEW_RULE_RESOLVER::IsDiffPair(), PNS_PCBNEW_RULE_RESOLVER::IsNetTieExclusion(), PNS::ROUTER::isStartingPointRoutable(), PNS::LINE::LINE(), PNS::NODE::LockJoint(), MakeHandle(), PNS::MEANDER_SKEW_PLACER::origPathLength(), ROUTER_TOOL::performDragging(), LENGTH_TUNER_TOOL::performTuning(), ROUTER_TOOL::prepareInteractive(), PNS_PCBNEW_RULE_RESOLVER::QueryConstraint(), PNS::NODE::rebuildJoint(), PNS::INDEX::Remove(), PNS::NODE::removeArcIndex(), PNS::NODE::removeSegmentIndex(), PNS::NODE::removeSolidIndex(), PNS::NODE::removeViaIndex(), PNS::OPTIMIZER::runSmartPads(), PNS::SEGMENT::SEGMENT(), PNS::SHOVE::ShoveObstacleLine(), PNS::DIFF_PAIR_PLACER::Start(), PNS::LINE_PLACER::Start(), PNS::MEANDER_SKEW_PLACER::Start(), ROUTER_TOOL::UpdateMessagePanel(), and VIA().

◆ OfKind()

◆ Owner()

NODE * PNS::ITEM::Owner ( ) const
inlineinherited

Return the owner of this item, or NULL if there's none.

Definition at line 173 of file pns_item.h.

173{ return m_owner; }

References PNS::ITEM::m_owner.

Referenced by PNS_KICAD_IFACE_BASE::inheritTrackWidth(), PNS::LINE_PLACER::Move(), and PNS::LINE_PLACER::rhShoveOnly().

◆ Parent()

◆ Pos()

◆ PushoutForce() [1/2]

bool PNS::VIA::PushoutForce ( NODE aNode,
const ITEM aOther,
VECTOR2I aForce 
)

Definition at line 32 of file pns_via.cpp.

33{
34 int clearance = aNode->GetClearance( this, aOther );
35 VECTOR2I elementForces[4], force;
36 size_t nf = 0;
37
38 if( aNode->GetCollisionQueryScope() == NODE::CQS_ALL_RULES )
39 {
40 int holeClearance = aNode->GetHoleClearance( this, aOther );
41 int hole2holeClearance = aNode->GetHoleToHoleClearance( this, aOther );
42
43 if( aOther->Hole() )
44 {
45 aOther->Hole()->Collide( Shape(), holeClearance, &elementForces[nf++] );
46 aOther->Hole()->Collide( Hole(), hole2holeClearance, &elementForces[nf++] );
47 }
48
49 aOther->Shape()->Collide( Hole(), holeClearance, &elementForces[nf++] );
50 }
51
52 aOther->Shape()->Collide( Shape(), clearance, &elementForces[nf++] );
53
54 for( size_t i = 0; i < nf; i++ )
55 {
56 if( elementForces[i].SquaredEuclideanNorm() > force.SquaredEuclideanNorm() )
57 force = elementForces[i];
58 }
59
60 aForce = force;
61
62 return ( force != VECTOR2I( 0, 0 ) );
63}
const SHAPE_CIRCLE * Hole() const override
Definition: pns_via.h:138
extended_type SquaredEuclideanNorm() const
Compute the squared euclidean norm of the vector, which is defined as (x ** 2 + y ** 2).
Definition: vector2d.h:300

References SHAPE::Collide(), PNS::NODE::CQS_ALL_RULES, PNS::NODE::GetClearance(), PNS::NODE::GetCollisionQueryScope(), PNS::NODE::GetHoleClearance(), PNS::NODE::GetHoleToHoleClearance(), PNS::ITEM::Hole(), Hole(), PNS::ITEM::Shape(), Shape(), and VECTOR2< T >::SquaredEuclideanNorm().

◆ PushoutForce() [2/2]

bool PNS::VIA::PushoutForce ( NODE aNode,
const VECTOR2I aDirection,
VECTOR2I aForce,
bool  aSolidsOnly = true,
int  aMaxIterations = 10 
)

Definition at line 65 of file pns_via.cpp.

67{
68 int iter = 0;
69 VIA mv( *this );
70 VECTOR2I totalForce;
71
72
73 while( iter < aMaxIterations )
74 {
75 NODE::OPT_OBSTACLE obs = aNode->CheckColliding( &mv, aSolidsOnly ? ITEM::SOLID_T
76 : ITEM::ANY_T );
77
78 if( !obs )
79 break;
80
81 if( iter > aMaxIterations / 2 )
82 {
83 VECTOR2I l = aDirection.Resize( m_diameter / 2 );
84 totalForce += l;
85 mv.SetPos( mv.Pos() + l );
86 }
87
88 VECTOR2I force;
89 bool collFound = PushoutForce( aNode, obs->m_item, force );
90
91 if( collFound )
92 {
93 totalForce += force;
94 mv.SetPos( mv.Pos() + force );
95 }
96
97 iter++;
98 }
99
100 if( iter == aMaxIterations )
101 return false;
102
103 aForce = totalForce;
104
105 return true;
106}
std::optional< OBSTACLE > OPT_OBSTACLE
Definition: pns_node.h:165
bool PushoutForce(NODE *aNode, const VECTOR2I &aDirection, VECTOR2I &aForce, bool aSolidsOnly=true, int aMaxIterations=10)
Definition: pns_via.cpp:65
VECTOR2< T > Resize(T aNewLength) const
Return a vector of the same direction, but length specified in aNewLength.
Definition: vector2d.h:378

References PNS::ITEM::ANY_T, PNS::NODE::CheckColliding(), m_diameter, Pos(), PushoutForce(), VECTOR2< T >::Resize(), SetPos(), and PNS::ITEM::SOLID_T.

Referenced by PNS::LINE_PLACER::buildInitialLine(), and PushoutForce().

◆ Rank()

virtual int PNS::ITEM::Rank ( ) const
inlinevirtualinherited

Reimplemented in PNS::LINE.

Definition at line 217 of file pns_item.h.

217{ return m_rank; }

References PNS::ITEM::m_rank.

Referenced by PNS::ARC::ARC(), PNS::LINE::LINE(), PNS::SHOVE::onCollidingVia(), and PNS::SHOVE::shoveIteration().

◆ SetDiameter()

void PNS::VIA::SetDiameter ( int  aDiameter)
inline

◆ SetDrill()

void PNS::VIA::SetDrill ( int  aDrill)
inline

Definition at line 122 of file pns_via.h.

123 {
124 m_drill = aDrill;
125 m_hole.SetRadius( m_drill / 2 );
126 }

References m_drill, m_hole, and SHAPE_CIRCLE::SetRadius().

Referenced by PNS::DIFF_PAIR::SetViaDrill(), and PNS::LINE::SetViaDrill().

◆ SetHole()

void PNS::VIA::SetHole ( const SHAPE_CIRCLE aHole)
inline

Definition at line 139 of file pns_via.h.

139{ m_hole = aHole; }

References m_hole.

Referenced by PNS::VVIA::VVIA().

◆ SetIsCompoundShapePrimitive()

void PNS::ITEM::SetIsCompoundShapePrimitive ( )
inlineinherited

Definition at line 245 of file pns_item.h.

References PNS::ITEM::m_isCompoundShapePrimitive.

◆ SetIsFree()

void PNS::VIA::SetIsFree ( bool  aIsFree)
inline

Definition at line 129 of file pns_via.h.

129{ m_isFree = aIsFree; }

References m_isFree.

◆ SetIsFreePad()

void PNS::ITEM::SetIsFreePad ( bool  aIsFreePad = true)
inlineinherited

Definition at line 237 of file pns_item.h.

237{ m_isFreePad = aIsFreePad; }

References PNS::ITEM::m_isFreePad.

◆ SetLayer()

◆ SetLayers()

void PNS::ITEM::SetLayers ( const LAYER_RANGE aLayers)
inlineinherited

Definition at line 157 of file pns_item.h.

157{ m_layers = aLayers; }

References PNS::ITEM::m_layers.

Referenced by PNS::TOPOLOGY::AssembleDiffPair(), PNS::NODE::AssembleLine(), Clone(), and VIA().

◆ SetNet()

◆ SetOwner()

void PNS::ITEM::SetOwner ( NODE aOwner)
inlineinherited

Set the node that owns this item.

An item can belong to a single NODE or be unowned.

Definition at line 178 of file pns_item.h.

178{ m_owner = aOwner; }

References PNS::ITEM::m_owner.

Referenced by PNS::NODE::AssembleLine(), PNS::NODE::doRemove(), and PNS::NODE::Remove().

◆ SetParent()

void PNS::ITEM::SetParent ( BOARD_ITEM aParent)
inlineinherited

Definition at line 150 of file pns_item.h.

150{ m_parent = aParent; }

References PNS::ITEM::m_parent.

Referenced by PNS_KICAD_IFACE::AddItem().

◆ SetPos()

void PNS::VIA::SetPos ( const VECTOR2I aPos)
inline

Definition at line 102 of file pns_via.h.

103 {
104 m_pos = aPos;
105 m_shape.SetCenter( aPos );
106 m_hole.SetCenter( aPos );
107 }
void SetCenter(const VECTOR2I &aCenter)
Definition: shape_circle.h:103

References m_hole, m_pos, m_shape, and SHAPE_CIRCLE::SetCenter().

Referenced by PNS::LINE_PLACER::buildInitialLine(), PNS::DIFF_PAIR_PLACER::propagateDpHeadForces(), PushoutForce(), PNS::SHOVE::ShoveDraggingVia(), and PNS::SHOVE::ShoveLines().

◆ SetRank()

virtual void PNS::ITEM::SetRank ( int  aRank)
inlinevirtualinherited

Reimplemented in PNS::LINE.

Definition at line 216 of file pns_item.h.

216{ m_rank = aRank; }

References PNS::ITEM::m_rank.

Referenced by PNS::NODE::Commit(), and PNS::SHOVE::ShoveDraggingVia().

◆ SetRoutable()

void PNS::ITEM::SetRoutable ( bool  aRoutable)
inlineinherited

Definition at line 234 of file pns_item.h.

234{ m_routable = aRoutable; }

References PNS::ITEM::m_routable.

◆ SetViaType()

void PNS::VIA::SetViaType ( VIATYPE  aViaType)
inline

Definition at line 110 of file pns_via.h.

110{ m_viaType = aViaType; }

References m_viaType.

◆ SetWidth()

virtual void PNS::LINKED_ITEM::SetWidth ( int  aWidth)
inlinevirtualinherited

Reimplemented in PNS::ARC, and PNS::SEGMENT.

Definition at line 36 of file pns_linked_item.h.

37 {};

◆ Shape()

const SHAPE * PNS::VIA::Shape ( ) const
inlineoverridevirtual

Return the geometrical shape of the item.

Used for collision detection and spatial indexing.

Reimplemented from PNS::ITEM.

Definition at line 136 of file pns_via.h.

136{ return &m_shape; }

References m_shape.

Referenced by ChangedArea(), PNS::SHOVE::onCollidingVia(), PNS::DIFF_PAIR_PLACER::propagateDpHeadForces(), and PushoutForce().

◆ Unmark()

virtual void PNS::ITEM::Unmark ( int  aMarker = -1) const
inlinevirtualinherited

Reimplemented in PNS::LINE.

Definition at line 213 of file pns_item.h.

213{ m_marker &= ~aMarker; }

References PNS::ITEM::m_marker.

Referenced by PNS::NODE::Commit(), and PNS::DRAGGER::Start().

◆ ViaType()

VIATYPE PNS::VIA::ViaType ( ) const
inline

Definition at line 109 of file pns_via.h.

109{ return m_viaType; }

References m_viaType.

◆ Width()

virtual int PNS::LINKED_ITEM::Width ( ) const
inlinevirtualinherited

Reimplemented in PNS::ARC, and PNS::SEGMENT.

Definition at line 39 of file pns_linked_item.h.

40 {
41 return 0;
42 }

Referenced by PNS::NODE::AssembleLine(), PNS::JOINT::IsLineCorner(), and PNS::TOOL_BASE::snapToItem().

Member Data Documentation

◆ m_diameter

int PNS::VIA::m_diameter
private

Definition at line 164 of file pns_via.h.

Referenced by Clone(), Diameter(), Hull(), PushoutForce(), SetDiameter(), and VIA().

◆ m_drill

int PNS::VIA::m_drill
private

Definition at line 165 of file pns_via.h.

Referenced by Clone(), Drill(), SetDrill(), and VIA().

◆ m_hole

SHAPE_CIRCLE PNS::VIA::m_hole
private

Definition at line 168 of file pns_via.h.

Referenced by Clone(), Hole(), HoleHull(), Hull(), SetDrill(), SetHole(), SetPos(), and VIA().

◆ m_isCompoundShapePrimitive

bool PNS::ITEM::m_isCompoundShapePrimitive
protectedinherited

◆ m_isFree

bool PNS::VIA::m_isFree
private

Definition at line 170 of file pns_via.h.

Referenced by Clone(), IsFree(), SetIsFree(), and VIA().

◆ m_isFreePad

bool PNS::ITEM::m_isFreePad
protectedinherited

Definition at line 264 of file pns_item.h.

Referenced by PNS::ITEM::IsFreePad(), PNS::ITEM::ITEM(), and PNS::ITEM::SetIsFreePad().

◆ m_isVirtual

bool PNS::ITEM::m_isVirtual
protectedinherited

Definition at line 263 of file pns_item.h.

Referenced by Clone(), PNS::ITEM::IsVirtual(), PNS::ITEM::ITEM(), VIA(), and PNS::VVIA::VVIA().

◆ m_kind

PnsKind PNS::ITEM::m_kind
protectedinherited

◆ m_layers

◆ m_marker

◆ m_movable

bool PNS::ITEM::m_movable
protectedinherited

◆ m_net

◆ m_owner

NODE* PNS::ITEM::m_owner
protectedinherited

◆ m_parent

BOARD_ITEM* PNS::ITEM::m_parent
protectedinherited

◆ m_pos

VECTOR2I PNS::VIA::m_pos
private

Definition at line 166 of file pns_via.h.

Referenced by Anchor(), Clone(), HoleHull(), Hull(), Pos(), SetPos(), and VIA().

◆ m_rank

◆ m_routable

bool PNS::ITEM::m_routable
protectedinherited

Definition at line 262 of file pns_item.h.

Referenced by PNS::ITEM::IsRoutable(), PNS::ITEM::ITEM(), and PNS::ITEM::SetRoutable().

◆ m_shape

SHAPE_CIRCLE PNS::VIA::m_shape
private

Definition at line 167 of file pns_via.h.

Referenced by Clone(), SetDiameter(), SetPos(), Shape(), and VIA().

◆ m_viaType

VIATYPE PNS::VIA::m_viaType
private

Definition at line 169 of file pns_via.h.

Referenced by Clone(), SetViaType(), VIA(), and ViaType().

◆ UnusedNet

const int PNS::ITEM::UnusedNet = INT_MAX
staticinherited

Supported item types.

Definition at line 58 of file pns_item.h.

Referenced by PNS::ITEM::ITEM().


The documentation for this class was generated from the following files: