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 <tomasz.wlostowski@cern.ch>
7  * Author: Maciej Suminski <maciej.suminski@cern.ch>
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 {
30 public:
31  ROUTER_TOOL();
32  ~ROUTER_TOOL();
33 
34  bool Init() override;
35  void Reset( RESET_REASON aReason ) override;
36 
37  int MainLoop( const TOOL_EVENT& aEvent );
38 
39  int InlineBreakTrack( const TOOL_EVENT& aEvent );
40  bool CanInlineDrag( int aDragMode );
41  int InlineDrag( const TOOL_EVENT& aEvent );
42 
43  int SelectCopperLayerPair( const TOOL_EVENT& aEvent );
44  int DpDimensionsDialog( const TOOL_EVENT& aEvent );
45  int SettingsDialog( const TOOL_EVENT& aEvent );
46  int ChangeRouterMode( const TOOL_EVENT& aEvent );
47  int CustomTrackWidthDialog( const TOOL_EVENT& aEvent );
48 
49  PNS::PNS_MODE GetRouterMode();
50 
51  void setTransitions() override;
52 
53  // A filter for narrowing a collection representing a simple corner
54  // or a non-fanout-via to a single TRACK item.
55  static void NeighboringSegmentFilter( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector );
56 
57 private:
58  void performRouting();
59  void performDragging( int aMode = PNS::DM_ANY );
60  void breakTrack();
61 
62  void handleCommonEvents( TOOL_EVENT& evt );
63  int handleLayerSwitch( const TOOL_EVENT& aEvent, bool aForceVia );
64 
65  int getStartLayer( const PNS::ITEM* aItem );
66  void switchLayerOnViaPlacement();
67 
68  int onLayerCommand( const TOOL_EVENT& aEvent );
69  int onViaCommand( const TOOL_EVENT& aEvent );
70  int onTrackViaSizeChanged( const TOOL_EVENT& aEvent );
71 
72  bool prepareInteractive();
73  bool finishInteractive();
74  void saveRouterDebugLog();
75 
76 private:
77  std::shared_ptr<ACTION_MENU> m_diffPairMenu;
78  std::shared_ptr<ACTION_MENU> m_trackViaMenu;
79 
81 };
82 
83 #endif
Base class for PNS router board items.
Definition: pns_item.h:55
#define APIEXPORT
Macros which export functions from a DLL/DSO.
Definition: import_export.h:44
PNS_MODE
< Routing modes
virtual void Reset(RESET_REASON aReason) override
Bring the tool to a known, initial state.
virtual void setTransitions() override
This method is meant to be overridden in order to specify handlers for events.
Generic, UI-independent tool event.
Definition: tool_event.h:173
Used when the right click button is pressed, or when the select tool is in effect.
Definition: collectors.h:241
virtual bool Init() override
Init() is called once upon a registration of the tool.
RESET_REASON
Determine the reason of reset for a tool.
Definition: tool_base.h:78
std::shared_ptr< ACTION_MENU > m_trackViaMenu
Definition: router_tool.h:78
int m_lastTargetLayer
Definition: router_tool.h:80
std::shared_ptr< ACTION_MENU > m_diffPairMenu
Definition: router_tool.h:77