KiCad PCB EDA Suite
router_tool.cpp File Reference
#include <wx/hyperlink.h>
#include <advanced_config.h>
#include <functional>
#include <board.h>
#include <board_item.h>
#include <footprint.h>
#include <fp_shape.h>
#include <pad.h>
#include <pcb_edit_frame.h>
#include <pcbnew_id.h>
#include <dialogs/dialog_pns_settings.h>
#include <dialogs/dialog_pns_diff_pair_dimensions.h>
#include <dialogs/dialog_track_via_size.h>
#include <widgets/infobar.h>
#include <confirm.h>
#include <bitmaps.h>
#include <tool/action_menu.h>
#include <tool/tool_manager.h>
#include <tool/tool_menu.h>
#include <tools/pcb_actions.h>
#include <tools/pcb_selection_tool.h>
#include <tools/pcb_grid_helper.h>
#include "router_tool.h"
#include "pns_segment.h"
#include "pns_router.h"
#include "pns_itemset.h"
#include "pns_logger.h"
#include "pns_kicad_iface.h"
#include <plugins/kicad/kicad_plugin.h>

Go to the source code of this file.

Classes

class  TRACK_WIDTH_MENU
 
class  DIFF_PAIR_MENU
 

Macros

#define _(s)   s
 
#define _(s)   wxGetTranslation((s))
 

Enumerations

enum  VIA_ACTION_FLAGS {
  VIA_MASK = 0x03, VIA = 0x00, BLIND_VIA = 0x01, MICROVIA = 0x02,
  SELECT_LAYER = VIA_MASK + 1
}
 Flags used by via tool actions. More...
 

Functions

static VIATYPE getViaTypeFromFlags (int aFlags)
 
static PCB_LAYER_ID getTargetLayerFromEvent (const TOOL_EVENT &aEvent)
 

Variables

static const TOOL_ACTION ACT_UndoLastSegment ("pcbnew.InteractiveRouter.UndoLastSegment", AS_CONTEXT, WXK_BACK, "", _("Undo last segment"), _("Stops laying the current track."), BITMAPS::checked_ok)
 
static const TOOL_ACTION ACT_EndTrack ("pcbnew.InteractiveRouter.EndTrack", AS_CONTEXT, WXK_END, "", _("Finish Track"), _("Stops laying the current track."), BITMAPS::checked_ok)
 
static const TOOL_ACTION ACT_AutoEndRoute ("pcbnew.InteractiveRouter.AutoEndRoute", AS_CONTEXT, 'F', "", _("Auto-finish Track"), _("Automagically finishes laying the current track."))
 
static const TOOL_ACTION ACT_PlaceThroughVia ("pcbnew.InteractiveRouter.PlaceVia", AS_CONTEXT, 'V', LEGACY_HK_NAME("Add Through Via"), _("Place Through Via"), _("Adds a through-hole via at the end of currently routed track."), BITMAPS::via, AF_NONE,(void *) VIA_ACTION_FLAGS::VIA)
 
static const TOOL_ACTION ACT_PlaceBlindVia ("pcbnew.InteractiveRouter.PlaceBlindVia", AS_CONTEXT, MD_ALT+MD_SHIFT+ 'V', LEGACY_HK_NAME("Add Blind/Buried Via"), _("Place Blind/Buried Via"), _("Adds a blind or buried via at the end of currently routed track."), BITMAPS::via_buried, AF_NONE,(void *) VIA_ACTION_FLAGS::BLIND_VIA)
 
static const TOOL_ACTION ACT_PlaceMicroVia ("pcbnew.InteractiveRouter.PlaceMicroVia", AS_CONTEXT, MD_CTRL+ 'V', LEGACY_HK_NAME("Add MicroVia"), _("Place Microvia"), _("Adds a microvia at the end of currently routed track."), BITMAPS::via_microvia, AF_NONE,(void *) VIA_ACTION_FLAGS::MICROVIA)
 
static const TOOL_ACTION ACT_SelLayerAndPlaceThroughVia ("pcbnew.InteractiveRouter.SelLayerAndPlaceVia", AS_CONTEXT, '<', LEGACY_HK_NAME("Select Layer and Add Through Via"), _("Select Layer and Place Through Via..."), _("Select a layer, then add a through-hole via at the end of currently routed track."), BITMAPS::select_w_layer, AF_NONE,(void *)(VIA_ACTION_FLAGS::VIA|VIA_ACTION_FLAGS::SELECT_LAYER))
 
static const TOOL_ACTION ACT_SelLayerAndPlaceBlindVia ("pcbnew.InteractiveRouter.SelLayerAndPlaceBlindVia", AS_CONTEXT, MD_ALT+'<', LEGACY_HK_NAME("Select Layer and Add Blind/Buried Via"), _("Select Layer and Place Blind/Buried Via..."), _("Select a layer, then add a blind or buried via at the end of currently routed track."), BITMAPS::select_w_layer, AF_NONE,(void *)(VIA_ACTION_FLAGS::BLIND_VIA|VIA_ACTION_FLAGS::SELECT_LAYER))
 
static const TOOL_ACTION ACT_CustomTrackWidth ("pcbnew.InteractiveRouter.CustomTrackViaSize", AS_CONTEXT, 'Q', LEGACY_HK_NAME("Custom Track/Via Size"), _("Custom Track/Via Size..."), _("Shows a dialog for changing the track width and via size."), BITMAPS::width_track)
 
static const TOOL_ACTION ACT_SwitchPosture ("pcbnew.InteractiveRouter.SwitchPosture", AS_CONTEXT, '/', LEGACY_HK_NAME("Switch Track Posture"), _("Switch Track Posture"), _("Switches posture of the currently routed track."), BITMAPS::change_entry_orient)
 
static const TOOL_ACTION ACT_SwitchRounding ("pcbnew.InteractiveRouter.SwitchRounding", AS_CONTEXT, MD_CTRL+'/', "", _("Track Corner Mode"), _("Switches between sharp and rounded corners when routing tracks."), BITMAPS::switch_corner_rounding_shape)
 

Macro Definition Documentation

◆ _ [1/2]

#define _ (   s)    s

Definition at line 160 of file router_tool.cpp.

◆ _ [2/2]

#define _ (   s)    wxGetTranslation((s))

Definition at line 160 of file router_tool.cpp.

Enumeration Type Documentation

◆ VIA_ACTION_FLAGS

Flags used by via tool actions.

Enumerator
VIA_MASK 
VIA 

Normal via.

BLIND_VIA 

blind/buried via

MICROVIA 

Microvia.

SELECT_LAYER 

Ask user to select layer before adding via.

Definition at line 63 of file router_tool.cpp.

64 {
65  // Via type
66  VIA_MASK = 0x03,
67  VIA = 0x00,
68  BLIND_VIA = 0x01,
69  MICROVIA = 0x02,
70 
71  // Select layer
72  SELECT_LAYER = VIA_MASK + 1,
73 };
Definition: track.h:343
blind/buried via
Definition: router_tool.cpp:68
Microvia.
Definition: router_tool.cpp:69
Ask user to select layer before adding via.
Definition: router_tool.cpp:72

Function Documentation

◆ getTargetLayerFromEvent()

static PCB_LAYER_ID getTargetLayerFromEvent ( const TOOL_EVENT aEvent)
static

Definition at line 627 of file router_tool.cpp.

628 {
629  if( aEvent.IsAction( &PCB_ACTIONS::layerTop ) )
630  return F_Cu;
631  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner1 ) )
632  return In1_Cu;
633  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner2 ) )
634  return In2_Cu;
635  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner3 ) )
636  return In3_Cu;
637  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner4 ) )
638  return In4_Cu;
639  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner5 ) )
640  return In5_Cu;
641  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner6 ) )
642  return In6_Cu;
643  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner7 ) )
644  return In7_Cu;
645  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner8 ) )
646  return In8_Cu;
647  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner9 ) )
648  return In9_Cu;
649  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner10 ) )
650  return In10_Cu;
651  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner11 ) )
652  return In11_Cu;
653  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner12 ) )
654  return In12_Cu;
655  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner13 ) )
656  return In13_Cu;
657  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner14 ) )
658  return In14_Cu;
659  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner15 ) )
660  return In15_Cu;
661  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner16 ) )
662  return In16_Cu;
663  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner17 ) )
664  return In17_Cu;
665  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner18 ) )
666  return In18_Cu;
667  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner19 ) )
668  return In19_Cu;
669  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner20 ) )
670  return In20_Cu;
671  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner21 ) )
672  return In21_Cu;
673  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner22 ) )
674  return In22_Cu;
675  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner23 ) )
676  return In23_Cu;
677  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner24 ) )
678  return In24_Cu;
679  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner25 ) )
680  return In25_Cu;
681  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner26 ) )
682  return In26_Cu;
683  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner27 ) )
684  return In27_Cu;
685  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner28 ) )
686  return In28_Cu;
687  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner29 ) )
688  return In29_Cu;
689  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner30 ) )
690  return In30_Cu;
691  else if( aEvent.IsAction( &PCB_ACTIONS::layerBottom ) )
692  return B_Cu;
693  else
694  return UNDEFINED_LAYER;
695 }
static TOOL_ACTION layerBottom
Definition: pcb_actions.h:288
static TOOL_ACTION layerInner26
Definition: pcb_actions.h:283
static TOOL_ACTION layerInner2
Definition: pcb_actions.h:259
static TOOL_ACTION layerInner5
Definition: pcb_actions.h:262
static TOOL_ACTION layerInner6
Definition: pcb_actions.h:263
static TOOL_ACTION layerInner7
Definition: pcb_actions.h:264
static TOOL_ACTION layerInner8
Definition: pcb_actions.h:265
static TOOL_ACTION layerInner21
Definition: pcb_actions.h:278
static TOOL_ACTION layerInner3
Definition: pcb_actions.h:260
static TOOL_ACTION layerInner24
Definition: pcb_actions.h:281
static TOOL_ACTION layerInner11
Definition: pcb_actions.h:268
bool IsAction(const TOOL_ACTION *aAction) const
Test if the event contains an action issued upon activation of the given TOOL_ACTION.
Definition: tool_event.cpp:70
static TOOL_ACTION layerTop
Definition: pcb_actions.h:257
static TOOL_ACTION layerInner23
Definition: pcb_actions.h:280
static TOOL_ACTION layerInner13
Definition: pcb_actions.h:270
static TOOL_ACTION layerInner25
Definition: pcb_actions.h:282
static TOOL_ACTION layerInner18
Definition: pcb_actions.h:275
static TOOL_ACTION layerInner30
Definition: pcb_actions.h:287
static TOOL_ACTION layerInner29
Definition: pcb_actions.h:286
static TOOL_ACTION layerInner10
Definition: pcb_actions.h:267
static TOOL_ACTION layerInner15
Definition: pcb_actions.h:272
static TOOL_ACTION layerInner28
Definition: pcb_actions.h:285
static TOOL_ACTION layerInner27
Definition: pcb_actions.h:284
static TOOL_ACTION layerInner17
Definition: pcb_actions.h:274
static TOOL_ACTION layerInner20
Definition: pcb_actions.h:277
static TOOL_ACTION layerInner22
Definition: pcb_actions.h:279
static TOOL_ACTION layerInner14
Definition: pcb_actions.h:271
static TOOL_ACTION layerInner9
Definition: pcb_actions.h:266
static TOOL_ACTION layerInner16
Definition: pcb_actions.h:273
static TOOL_ACTION layerInner4
Definition: pcb_actions.h:261
static TOOL_ACTION layerInner19
Definition: pcb_actions.h:276
static TOOL_ACTION layerInner1
Definition: pcb_actions.h:258
static TOOL_ACTION layerInner12
Definition: pcb_actions.h:269

References B_Cu, F_Cu, In10_Cu, In11_Cu, In12_Cu, In13_Cu, In14_Cu, In15_Cu, In16_Cu, In17_Cu, In18_Cu, In19_Cu, In1_Cu, In20_Cu, In21_Cu, In22_Cu, In23_Cu, In24_Cu, In25_Cu, In26_Cu, In27_Cu, In28_Cu, In29_Cu, In2_Cu, In30_Cu, In3_Cu, In4_Cu, In5_Cu, In6_Cu, In7_Cu, In8_Cu, In9_Cu, TOOL_EVENT::IsAction(), PCB_ACTIONS::layerBottom, PCB_ACTIONS::layerInner1, PCB_ACTIONS::layerInner10, PCB_ACTIONS::layerInner11, PCB_ACTIONS::layerInner12, PCB_ACTIONS::layerInner13, PCB_ACTIONS::layerInner14, PCB_ACTIONS::layerInner15, PCB_ACTIONS::layerInner16, PCB_ACTIONS::layerInner17, PCB_ACTIONS::layerInner18, PCB_ACTIONS::layerInner19, PCB_ACTIONS::layerInner2, PCB_ACTIONS::layerInner20, PCB_ACTIONS::layerInner21, PCB_ACTIONS::layerInner22, PCB_ACTIONS::layerInner23, PCB_ACTIONS::layerInner24, PCB_ACTIONS::layerInner25, PCB_ACTIONS::layerInner26, PCB_ACTIONS::layerInner27, PCB_ACTIONS::layerInner28, PCB_ACTIONS::layerInner29, PCB_ACTIONS::layerInner3, PCB_ACTIONS::layerInner30, PCB_ACTIONS::layerInner4, PCB_ACTIONS::layerInner5, PCB_ACTIONS::layerInner6, PCB_ACTIONS::layerInner7, PCB_ACTIONS::layerInner8, PCB_ACTIONS::layerInner9, PCB_ACTIONS::layerTop, and UNDEFINED_LAYER.

Referenced by ROUTER_TOOL::handleLayerSwitch().

◆ getViaTypeFromFlags()

static VIATYPE getViaTypeFromFlags ( int  aFlags)
static

Definition at line 610 of file router_tool.cpp.

611 {
612  switch( aFlags & VIA_ACTION_FLAGS::VIA_MASK )
613  {
615  return VIATYPE::THROUGH;
617  return VIATYPE::BLIND_BURIED;
619  return VIATYPE::MICROVIA;
620  default:
621  wxASSERT_MSG( false, "Unhandled via type" );
622  return VIATYPE::THROUGH;
623  }
624 }
blind/buried via
Definition: router_tool.cpp:68
Microvia.
Definition: router_tool.cpp:69
Normal via.
Definition: router_tool.cpp:67

References BLIND_BURIED, BLIND_VIA, MICROVIA, THROUGH, VIA, and VIA_MASK.

Referenced by ROUTER_TOOL::handleLayerSwitch().

Variable Documentation

◆ ACT_AutoEndRoute

const TOOL_ACTION ACT_AutoEndRoute("pcbnew.InteractiveRouter.AutoEndRoute", AS_CONTEXT, 'F', "", _("Auto-finish Track"), _("Automagically finishes laying the current track."))
static

◆ ACT_CustomTrackWidth

const TOOL_ACTION ACT_CustomTrackWidth("pcbnew.InteractiveRouter.CustomTrackViaSize", AS_CONTEXT, 'Q', LEGACY_HK_NAME("Custom Track/Via Size"), _("Custom Track/Via Size..."), _("Shows a dialog for changing the track width and via size."), BITMAPS::width_track)
static

◆ ACT_EndTrack

const TOOL_ACTION ACT_EndTrack("pcbnew.InteractiveRouter.EndTrack", AS_CONTEXT, WXK_END, "", _("Finish Track"), _("Stops laying the current track."), BITMAPS::checked_ok)
static

◆ ACT_PlaceBlindVia

const TOOL_ACTION ACT_PlaceBlindVia("pcbnew.InteractiveRouter.PlaceBlindVia", AS_CONTEXT, MD_ALT+MD_SHIFT+'V', LEGACY_HK_NAME("Add Blind/Buried Via"), _("Place Blind/Buried Via"), _("Adds a blind or buried via at the end of currently routed track."), BITMAPS::via_buried, AF_NONE,(void *) VIA_ACTION_FLAGS::BLIND_VIA)
static

◆ ACT_PlaceMicroVia

const TOOL_ACTION ACT_PlaceMicroVia("pcbnew.InteractiveRouter.PlaceMicroVia", AS_CONTEXT, MD_CTRL+'V', LEGACY_HK_NAME("Add MicroVia"), _("Place Microvia"), _("Adds a microvia at the end of currently routed track."), BITMAPS::via_microvia, AF_NONE,(void *) VIA_ACTION_FLAGS::MICROVIA)
static

◆ ACT_PlaceThroughVia

const TOOL_ACTION ACT_PlaceThroughVia("pcbnew.InteractiveRouter.PlaceVia", AS_CONTEXT, 'V', LEGACY_HK_NAME("Add Through Via"), _("Place Through Via"), _("Adds a through-hole via at the end of currently routed track."), BITMAPS::via, AF_NONE,(void *) VIA_ACTION_FLAGS::VIA)
static

◆ ACT_SelLayerAndPlaceBlindVia

const TOOL_ACTION ACT_SelLayerAndPlaceBlindVia("pcbnew.InteractiveRouter.SelLayerAndPlaceBlindVia", AS_CONTEXT, MD_ALT+'<', LEGACY_HK_NAME("Select Layer and Add Blind/Buried Via"), _("Select Layer and Place Blind/Buried Via..."), _("Select a layer, then add a blind or buried via at the end of currently routed track."), BITMAPS::select_w_layer, AF_NONE,(void *)(VIA_ACTION_FLAGS::BLIND_VIA|VIA_ACTION_FLAGS::SELECT_LAYER))
static

◆ ACT_SelLayerAndPlaceThroughVia

const TOOL_ACTION ACT_SelLayerAndPlaceThroughVia("pcbnew.InteractiveRouter.SelLayerAndPlaceVia", AS_CONTEXT, '<', LEGACY_HK_NAME("Select Layer and Add Through Via"), _("Select Layer and Place Through Via..."), _("Select a layer, then add a through-hole via at the end of currently routed track."), BITMAPS::select_w_layer, AF_NONE,(void *)(VIA_ACTION_FLAGS::VIA|VIA_ACTION_FLAGS::SELECT_LAYER))
static

◆ ACT_SwitchPosture

const TOOL_ACTION ACT_SwitchPosture("pcbnew.InteractiveRouter.SwitchPosture", AS_CONTEXT, '/', LEGACY_HK_NAME("Switch Track Posture"), _("Switch Track Posture"), _("Switches posture of the currently routed track."), BITMAPS::change_entry_orient)
static

◆ ACT_SwitchRounding

const TOOL_ACTION ACT_SwitchRounding("pcbnew.InteractiveRouter.SwitchRounding", AS_CONTEXT, MD_CTRL+'/', "", _("Track Corner Mode"), _("Switches between sharp and rounded corners when routing tracks."), BITMAPS::switch_corner_rounding_shape)
static

◆ ACT_UndoLastSegment

const TOOL_ACTION ACT_UndoLastSegment("pcbnew.InteractiveRouter.UndoLastSegment", AS_CONTEXT, WXK_BACK, "", _("Undo last segment"), _("Stops laying the current track."), BITMAPS::checked_ok)
static