KiCad PCB EDA Suite
router_tool.cpp File Reference
#include <wx/numdlg.h>
#include <functional>
#include <class_board.h>
#include <class_board_item.h>
#include <class_module.h>
#include <class_edge_mod.h>
#include <class_pad.h>
#include <pcb_edit_frame.h>
#include <pcbnew_id.h>
#include <pcb_layer_widget.h>
#include <dialogs/dialog_pns_settings.h>
#include <dialogs/dialog_pns_diff_pair_dimensions.h>
#include <dialogs/dialog_track_via_size.h>
#include <confirm.h>
#include <bitmaps.h>
#include <tool/action_menu.h>
#include <tool/tool_manager.h>
#include <tool/grid_menu.h>
#include <tool/zoom_menu.h>
#include <tools/pcb_actions.h>
#include <tools/selection_tool.h>
#include <tools/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"

Go to the source code of this file.

Classes

class  TRACK_WIDTH_MENU
 
class  DIFF_PAIR_MENU
 
class  ROUTER_TOOL_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."), checked_ok_xpm)
 
static const TOOL_ACTION ACT_EndTrack ("pcbnew.InteractiveRouter.EndTrack", AS_CONTEXT, WXK_END, "", _("Finish Track"), _("Stops laying the current track."), checked_ok_xpm)
 
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."), via_xpm, 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."), via_buried_xpm, 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."), via_microvia_xpm, 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."), select_w_layer_xpm, 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."), select_w_layer_xpm, 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."), width_track_xpm)
 
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."), change_entry_orient_xpm)
 
static const TOOL_ACTION ACT_SwitchRounding ("pcbnew.InteractiveRouter.SwitchRounding", AS_CONTEXT, 0, LEGACY_HK_NAME("Switch Corner Rounding"), _("Switch Corner Rounding"), _("Switches the corner type of the currently routed track."), switch_corner_rounding_shape_xpm)
 

Macro Definition Documentation

◆ _ [1/2]

#define _ (   s)    s

Definition at line 158 of file router_tool.cpp.

◆ _ [2/2]

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

Definition at line 158 of file router_tool.cpp.

Enumeration Type Documentation

◆ VIA_ACTION_FLAGS

Flags used by via tool actions.

Enumerator
VIA_MASK 
VIA 
BLIND_VIA 

Normal via

MICROVIA 

blind/buried via

SELECT_LAYER 

Microvia

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 };
Normal via
Definition: router_tool.cpp:68
blind/buried via
Definition: router_tool.cpp:69
Microvia
Definition: router_tool.cpp:72

Function Documentation

◆ getTargetLayerFromEvent()

static PCB_LAYER_ID getTargetLayerFromEvent ( const TOOL_EVENT aEvent)
static

Definition at line 566 of file router_tool.cpp.

567 {
568  if( aEvent.IsAction( &PCB_ACTIONS::layerTop ) )
569  return F_Cu;
570  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner1 ) )
571  return In1_Cu;
572  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner2 ) )
573  return In2_Cu;
574  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner3 ) )
575  return In3_Cu;
576  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner4 ) )
577  return In4_Cu;
578  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner5 ) )
579  return In5_Cu;
580  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner6 ) )
581  return In6_Cu;
582  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner7 ) )
583  return In7_Cu;
584  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner8 ) )
585  return In8_Cu;
586  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner9 ) )
587  return In9_Cu;
588  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner10 ) )
589  return In10_Cu;
590  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner11 ) )
591  return In11_Cu;
592  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner12 ) )
593  return In12_Cu;
594  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner13 ) )
595  return In13_Cu;
596  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner14 ) )
597  return In14_Cu;
598  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner15 ) )
599  return In15_Cu;
600  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner16 ) )
601  return In16_Cu;
602  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner17 ) )
603  return In17_Cu;
604  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner18 ) )
605  return In18_Cu;
606  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner19 ) )
607  return In19_Cu;
608  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner20 ) )
609  return In20_Cu;
610  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner21 ) )
611  return In21_Cu;
612  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner22 ) )
613  return In22_Cu;
614  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner23 ) )
615  return In23_Cu;
616  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner24 ) )
617  return In24_Cu;
618  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner25 ) )
619  return In25_Cu;
620  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner26 ) )
621  return In26_Cu;
622  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner27 ) )
623  return In27_Cu;
624  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner28 ) )
625  return In28_Cu;
626  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner29 ) )
627  return In29_Cu;
628  else if( aEvent.IsAction( &PCB_ACTIONS::layerInner30 ) )
629  return In30_Cu;
630  else if( aEvent.IsAction( &PCB_ACTIONS::layerBottom ) )
631  return B_Cu;
632  else
633  return UNDEFINED_LAYER;
634 }
static TOOL_ACTION layerBottom
Definition: pcb_actions.h:265
static TOOL_ACTION layerInner26
Definition: pcb_actions.h:260
static TOOL_ACTION layerInner2
Definition: pcb_actions.h:236
static TOOL_ACTION layerInner5
Definition: pcb_actions.h:239
static TOOL_ACTION layerInner6
Definition: pcb_actions.h:240
static TOOL_ACTION layerInner7
Definition: pcb_actions.h:241
static TOOL_ACTION layerInner8
Definition: pcb_actions.h:242
static TOOL_ACTION layerInner21
Definition: pcb_actions.h:255
static TOOL_ACTION layerInner3
Definition: pcb_actions.h:237
static TOOL_ACTION layerInner24
Definition: pcb_actions.h:258
static TOOL_ACTION layerInner11
Definition: pcb_actions.h:245
bool IsAction(const TOOL_ACTION *aAction) const
Function IsAction() Tests if the event contains an action issued upon activation of the given TOOL_AC...
Definition: tool_event.cpp:67
static TOOL_ACTION layerTop
Definition: pcb_actions.h:234
static TOOL_ACTION layerInner23
Definition: pcb_actions.h:257
static TOOL_ACTION layerInner13
Definition: pcb_actions.h:247
static TOOL_ACTION layerInner25
Definition: pcb_actions.h:259
static TOOL_ACTION layerInner18
Definition: pcb_actions.h:252
static TOOL_ACTION layerInner30
Definition: pcb_actions.h:264
static TOOL_ACTION layerInner29
Definition: pcb_actions.h:263
static TOOL_ACTION layerInner10
Definition: pcb_actions.h:244
static TOOL_ACTION layerInner15
Definition: pcb_actions.h:249
static TOOL_ACTION layerInner28
Definition: pcb_actions.h:262
static TOOL_ACTION layerInner27
Definition: pcb_actions.h:261
static TOOL_ACTION layerInner17
Definition: pcb_actions.h:251
static TOOL_ACTION layerInner20
Definition: pcb_actions.h:254
static TOOL_ACTION layerInner22
Definition: pcb_actions.h:256
static TOOL_ACTION layerInner14
Definition: pcb_actions.h:248
static TOOL_ACTION layerInner9
Definition: pcb_actions.h:243
static TOOL_ACTION layerInner16
Definition: pcb_actions.h:250
static TOOL_ACTION layerInner4
Definition: pcb_actions.h:238
static TOOL_ACTION layerInner19
Definition: pcb_actions.h:253
static TOOL_ACTION layerInner1
Definition: pcb_actions.h:235
static TOOL_ACTION layerInner12
Definition: pcb_actions.h:246

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::onViaCommand().

◆ getViaTypeFromFlags()

static VIATYPE getViaTypeFromFlags ( int  aFlags)
static

Definition at line 549 of file router_tool.cpp.

550 {
551  switch( aFlags & VIA_ACTION_FLAGS::VIA_MASK )
552  {
554  return VIATYPE::THROUGH;
556  return VIATYPE::BLIND_BURIED;
558  return VIATYPE::MICROVIA;
559  default:
560  wxASSERT_MSG( false, "Unhandled via type" );
561  return VIATYPE::THROUGH;
562  }
563 }
Normal via
Definition: router_tool.cpp:68
blind/buried via
Definition: router_tool.cpp:69

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

Referenced by ROUTER_TOOL::onViaCommand().

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."), width_track_xpm)
static

◆ ACT_EndTrack

const TOOL_ACTION ACT_EndTrack("pcbnew.InteractiveRouter.EndTrack", AS_CONTEXT, WXK_END, "", _("Finish Track"), _("Stops laying the current track."), checked_ok_xpm)
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."), via_buried_xpm, 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."), via_microvia_xpm, 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."), via_xpm, 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."), select_w_layer_xpm, 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."), select_w_layer_xpm, 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."), change_entry_orient_xpm)
static

◆ ACT_SwitchRounding

const TOOL_ACTION ACT_SwitchRounding("pcbnew.InteractiveRouter.SwitchRounding", AS_CONTEXT, 0, LEGACY_HK_NAME("Switch Corner Rounding"), _("Switch Corner Rounding"), _("Switches the corner type of the currently routed track."), switch_corner_rounding_shape_xpm)
static

◆ ACT_UndoLastSegment

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