KiCad PCB EDA Suite
router_tool.h
Go to the documentation of this file.
1/*
2 * KiRouter - a push-and-(sometimes-)shove PCB router
3 *
4 * Copyright (C) 2013-2017 CERN
5 * Copyright (C) 2016 KiCad Developers, see AUTHORS.txt for contributors.
6 * Author: Tomasz Wlostowski <[email protected]>
7 * Author: Maciej Suminski <[email protected]>
8 *
9 * This program is free software: you can redistribute it and/or modify it
10 * under the terms of the GNU General Public License as published by the
11 * Free Software Foundation, either version 3 of the License, or (at your
12 * option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License along
20 * with this program. If not, see <http://www.gnu.org/licenses/>.
21 */
22
23#ifndef __ROUTER_TOOL_H
24#define __ROUTER_TOOL_H
25
26#include "pns_tool_base.h"
27
29{
30public:
33
34 bool Init() override;
35 void Reset( RESET_REASON aReason ) override;
36
37 int MainLoop( const TOOL_EVENT& aEvent );
38 int RouteSelected( const TOOL_EVENT& aEvent );
39
40 int InlineBreakTrack( const TOOL_EVENT& aEvent );
41 bool CanInlineDrag( int aDragMode );
42 int InlineDrag( const TOOL_EVENT& aEvent );
43
44 int SelectCopperLayerPair( const TOOL_EVENT& aEvent );
45 int DpDimensionsDialog( const TOOL_EVENT& aEvent );
46 int SettingsDialog( const TOOL_EVENT& aEvent );
47 int ChangeRouterMode( const TOOL_EVENT& aEvent );
48 int CycleRouterMode( const TOOL_EVENT& aEvent );
49 int CustomTrackWidthDialog( const TOOL_EVENT& aEvent );
50
51 PNS::PNS_MODE GetRouterMode();
52
59 bool RoutingInProgress();
60
61 void setTransitions() override;
62
63 // A filter for narrowing a collection representing a simple corner
64 // or a non-fanout-via to a single PCB_TRACK item.
65 static void NeighboringSegmentFilter( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector );
66
67 void UpdateMessagePanel();
68
69private:
70 void performRouting();
71 void performDragging( int aMode = PNS::DM_ANY );
72 void breakTrack();
73
74 void handleCommonEvents( TOOL_EVENT& evt );
75 int handleLayerSwitch( const TOOL_EVENT& aEvent, bool aForceVia );
76
77 int getStartLayer( const PNS::ITEM* aItem );
78 void switchLayerOnViaPlacement();
79 void updateSizesAfterLayerSwitch( PCB_LAYER_ID targetLayer );
80 bool getNearestRatnestAnchor( VECTOR2I& aPoint, LAYER_RANGE& aLayers );
81
82 int onLayerCommand( const TOOL_EVENT& aEvent );
83 int onViaCommand( const TOOL_EVENT& aEvent );
84 int onTrackViaSizeChanged( const TOOL_EVENT& aEvent );
85
86 bool prepareInteractive();
87 bool finishInteractive();
88 void saveRouterDebugLog();
89
90private:
91 std::shared_ptr<ACTION_MENU> m_diffPairMenu;
92 std::shared_ptr<ACTION_MENU> m_trackViaMenu;
93
96
97 bool m_inRouterTool; // Re-entrancy guard
98};
99
100#endif
Used when the right click button is pressed, or when the select tool is in effect.
Definition: collectors.h:204
Represent a contiguous set of PCB layers.
Definition: pns_layerset.h:32
virtual void setTransitions() override
This method is meant to be overridden in order to specify handlers for events.
virtual bool Init() override
Init() is called once upon a registration of the tool.
Base class for PNS router board items.
Definition: pns_item.h:56
virtual void Reset(RESET_REASON aReason) override
Bring the tool to a known, initial state.
std::shared_ptr< ACTION_MENU > m_trackViaMenu
Definition: router_tool.h:92
PCB_LAYER_ID m_originalActiveLayer
Definition: router_tool.h:95
bool m_inRouterTool
Definition: router_tool.h:97
bool getNearestRatnestAnchor(VECTOR2I &aPoint, LAYER_RANGE &aLayers)
std::shared_ptr< ACTION_MENU > m_diffPairMenu
Definition: router_tool.h:91
int m_lastTargetLayer
Definition: router_tool.h:94
RESET_REASON
Determine the reason of reset for a tool.
Definition: tool_base.h:78
Generic, UI-independent tool event.
Definition: tool_event.h:156
#define APIEXPORT
Macros which export functions from a DLL/DSO.
Definition: import_export.h:44
PCB_LAYER_ID
A quick note on layer IDs:
Definition: layer_ids.h:59
PNS_MODE
< Routing modes
@ DM_ANY
Definition: pns_router.h:77