KiCad PCB EDA Suite
Loading...
Searching...
No Matches
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-2023 KiCad Developers, see AUTHORS.txt for contributors.
6 * Author: Tomasz Wlostowski <[email protected]>
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
30namespace PNS {
31
32class NODE;
33class SEGMENT;
34class JOINT;
35class ITEM;
36class SOLID;
37class DIFF_PAIR;
38
40{
41public:
42
43 struct CLUSTER
44 {
45 const ITEM* m_key = nullptr;
46 std::set<ITEM*> m_items;
47 };
48
49 typedef std::set<const JOINT*> JOINT_SET;
50
51 TOPOLOGY( NODE* aNode ):
52 m_world( aNode ) {};
53
55
56 bool SimplifyLine( LINE *aLine );
57 ITEM* NearestUnconnectedItem( const JOINT* aStart, int* aAnchor = nullptr,
58 int aKindMask = ITEM::ANY_T );
59
60 bool NearestUnconnectedAnchorPoint( const LINE* aTrack, VECTOR2I& aPoint, PNS_LAYER_RANGE& aLayers,
61 ITEM*& aItem );
62 bool LeadingRatLine( const LINE* aTrack, SHAPE_LINE_CHAIN& aRatLine );
63
64 const JOINT_SET ConnectedJoints( const JOINT* aStart );
65 const ITEM_SET ConnectedItems( const JOINT* aStart, int aKindMask = ITEM::ANY_T );
66 const ITEM_SET ConnectedItems( ITEM* aStart, int aKindMask = ITEM::ANY_T );
67 int64_t ShortestConnectionLength( ITEM* aFrom, ITEM* aTo );
68
77 const ITEM_SET AssembleTrivialPath( ITEM* aStart,
78 std::pair<const JOINT*, const JOINT*>* aTerminalJoints = nullptr,
79 bool aFollowLockedSegments = false );
80
93 const ITEM_SET AssembleTuningPath( ITEM* aStart, SOLID** aStartPad = nullptr,
94 SOLID** aEndPad = nullptr );
95
97
98 bool AssembleDiffPair( ITEM* aStart, DIFF_PAIR& aPair );
99
100 const CLUSTER AssembleCluster( ITEM* aStart, int aLayer, double aAreaExpansionLimit = 0.0, NET_HANDLE aExcludedNet = nullptr );
101
102private:
104
105 bool followTrivialPath( LINE* aLine, bool aLeft, ITEM_SET& aSet,
106 const JOINT** aTerminalJoint = nullptr, bool aFollowLockedSegments = false );
107
109};
110
111}
112
113#endif
Basic class for a differential pair.
Base class for PNS router board items.
Definition: pns_item.h:97
A 2D point on a given set of layers and belonging to a certain net, that links together a number of b...
Definition: pns_joint.h:43
Represents a track on a PCB, connecting two non-trivial joints (that is, vias, pads,...
Definition: pns_line.h:62
Keep the router "world" - i.e.
Definition: pns_node.h:231
ITEM * NearestUnconnectedItem(const JOINT *aStart, int *aAnchor=nullptr, int aKindMask=ITEM::ANY_T)
std::set< const JOINT * > JOINT_SET
Definition: pns_topology.h:49
bool LeadingRatLine(const LINE *aTrack, SHAPE_LINE_CHAIN &aRatLine)
const DIFF_PAIR AssembleDiffPair(SEGMENT *aStart)
bool followTrivialPath(LINE *aLine, bool aLeft, ITEM_SET &aSet, const JOINT **aTerminalJoint=nullptr, bool aFollowLockedSegments=false)
const ITEM_SET ConnectedItems(const JOINT *aStart, int aKindMask=ITEM::ANY_T)
bool NearestUnconnectedAnchorPoint(const LINE *aTrack, VECTOR2I &aPoint, PNS_LAYER_RANGE &aLayers, ITEM *&aItem)
const CLUSTER AssembleCluster(ITEM *aStart, int aLayer, double aAreaExpansionLimit=0.0, NET_HANDLE aExcludedNet=nullptr)
const JOINT_SET ConnectedJoints(const JOINT *aStart)
int64_t ShortestConnectionLength(ITEM *aFrom, ITEM *aTo)
const int DP_PARALLELITY_THRESHOLD
Definition: pns_topology.h:103
TOPOLOGY(NODE *aNode)
Definition: pns_topology.h:51
const ITEM_SET AssembleTrivialPath(ITEM *aStart, std::pair< const JOINT *, const JOINT * > *aTerminalJoints=nullptr, bool aFollowLockedSegments=false)
Assemble a trivial path between two joints given a starting item.
bool SimplifyLine(LINE *aLine)
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...
Represent a contiguous set of PCB layers.
Definition: pns_layerset.h:32
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
Push and Shove diff pair dimensions (gap) settings dialog.
void * NET_HANDLE
Definition: pns_item.h:54
@ DIFF_PAIR
std::set< ITEM * > m_items
Definition: pns_topology.h:46