KiCad PCB EDA Suite
pns_topology.h
Go to the documentation of this file.
1 /*
2  * KiRouter - a push-and-(sometimes-)shove PCB router
3  *
4  * Copyright (C) 2013-2015 CERN
5  * Copyright (C) 2016 KiCad Developers, see AUTHORS.txt for contributors.
6  * Author: Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
7  *
8  * This program is free software: you can redistribute it and/or modify it
9  * under the terms of the GNU General Public License as published by the
10  * Free Software Foundation, either version 3 of the License, or (at your
11  * option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License along
19  * with this program. If not, see <http://www.gnu.org/licenses/>.
20  */
21 
22 #ifndef __PNS_TOPOLOGY_H
23 #define __PNS_TOPOLOGY_H
24 
25 #include <vector>
26 #include <set>
27 
28 #include "pns_itemset.h"
29 
30 namespace PNS {
31 
32 class NODE;
33 class SEGMENT;
34 class JOINT;
35 class ITEM;
36 class SOLID;
37 class DIFF_PAIR;
38 
39 class TOPOLOGY
40 {
41 public:
42  typedef std::set<JOINT*> JOINT_SET;
43 
44  TOPOLOGY( NODE* aNode ):
45  m_world( aNode ) {};
46 
47  ~TOPOLOGY() {};
48 
49  bool SimplifyLine( LINE *aLine );
50  ITEM* NearestUnconnectedItem( JOINT* aStart, int* aAnchor = NULL, int aKindMask = ITEM::ANY_T );
51  bool LeadingRatLine( const LINE* aTrack, SHAPE_LINE_CHAIN& aRatLine );
52 
53  const JOINT_SET ConnectedJoints( JOINT* aStart );
54  const ITEM_SET ConnectedItems( JOINT* aStart, int aKindMask = ITEM::ANY_T );
55  const ITEM_SET ConnectedItems( ITEM* aStart, int aKindMask = ITEM::ANY_T );
56  int64_t ShortestConnectionLength( ITEM* aFrom, ITEM* aTo );
57 
64  const ITEM_SET AssembleTrivialPath( ITEM* aStart,
65  std::pair<JOINT*, JOINT*>* aTerminalJoints = nullptr );
66 
79  const ITEM_SET AssembleTuningPath( ITEM* aStart, SOLID** aStartPad = nullptr,
80  SOLID** aEndPad = nullptr );
81 
82  const DIFF_PAIR AssembleDiffPair( SEGMENT* aStart );
83 
84  bool AssembleDiffPair( ITEM* aStart, DIFF_PAIR& aPair );
85 
86  const std::set<ITEM*> AssembleCluster( ITEM* aStart, int aLayer );
87 
88 private:
89  bool followTrivialPath( LINE* aLine, bool aLeft, ITEM_SET& aSet, std::set<ITEM*>& aVisited,
90  JOINT** aTerminalJoint = nullptr );
91 
93 };
94 
95 }
96 
97 #endif
const JOINT_SET ConnectedJoints(JOINT *aStart)
Base class for PNS router board items.
Definition: pns_item.h:55
const ITEM_SET AssembleTrivialPath(ITEM *aStart, std::pair< JOINT *, JOINT * > *aTerminalJoints=nullptr)
Assembles a trivial path between two joints given a starting item.
int64_t ShortestConnectionLength(ITEM *aFrom, ITEM *aTo)
TOPOLOGY(NODE *aNode)
Definition: pns_topology.h:44
Keep the router "world" - i.e.
Definition: pns_node.h:145
const ITEM_SET ConnectedItems(JOINT *aStart, int aKindMask=ITEM::ANY_T)
const DIFF_PAIR AssembleDiffPair(SEGMENT *aStart)
ITEM * NearestUnconnectedItem(JOINT *aStart, int *aAnchor=NULL, int aKindMask=ITEM::ANY_T)
const ITEM_SET AssembleTuningPath(ITEM *aStart, SOLID **aStartPad=nullptr, SOLID **aEndPad=nullptr)
Like AssembleTrivialPath, but follows the track length algorithm, which discards segments that are fu...
Represents a track on a PCB, connecting two non-trivial joints (that is, vias, pads,...
Definition: pns_line.h:60
const std::set< ITEM * > AssembleCluster(ITEM *aStart, int aLayer)
Represents a 2D point on a given set of layers and belonging to a certain net, that links together a ...
Definition: pns_joint.h:42
bool followTrivialPath(LINE *aLine, bool aLeft, ITEM_SET &aSet, std::set< ITEM * > &aVisited, JOINT **aTerminalJoint=nullptr)
#define NULL
bool LeadingRatLine(const LINE *aTrack, SHAPE_LINE_CHAIN &aRatLine)
NODE * m_world
Definition: pns_topology.h:92
bool SimplifyLine(LINE *aLine)
DIFF_PAIR.
SHAPE_LINE_CHAIN.
Push and Shove diff pair dimensions (gap) settings dialog.
std::set< JOINT * > JOINT_SET
Definition: pns_topology.h:42