KiCad PCB EDA Suite
BOARD_INSPECTION_TOOL Class Reference

Tool for pcb inspection. More...

#include <board_inspection_tool.h>

Inheritance diagram for BOARD_INSPECTION_TOOL:
PCB_TOOL_BASE TOOL_INTERACTIVE TOOL_BASE

Public Types

enum  RESET_REASON { RUN , MODEL_RELOAD , GAL_SWITCH , REDRAW }
 Determine the reason of reset for a tool. More...
 

Public Member Functions

 BOARD_INSPECTION_TOOL ()
 
bool Init () override
 Init() is called once upon a registration of the tool. More...
 
void Reset (RESET_REASON aReason) override
 Bring the tool to a known, initial state. More...
 
int ShowBoardStatistics (const TOOL_EVENT &aEvent)
 Show dialog with board statistics. More...
 
int HighlightNet (const TOOL_EVENT &aEvent)
 Clear all board highlights. More...
 
int ClearHighlight (const TOOL_EVENT &aEvent)
 Perform the appropriate action in response to an Eeschema cross-probe. More...
 
int HighlightItem (const TOOL_EVENT &aEvent)
 Update ratsnest for selected items. More...
 
int UpdateLocalRatsnest (const TOOL_EVENT &aEvent)
 Hide ratsnest for selected items. Called when there are no items selected. More...
 
int HideLocalRatsnest (const TOOL_EVENT &aEvent)
 Show local ratsnest of a component. More...
 
int LocalRatsnestTool (const TOOL_EVENT &aEvent)
 
int ListNets (const TOOL_EVENT &aEvent)
 Hide the ratsnest for a given net. More...
 
int HideNetInRatsnest (const TOOL_EVENT &aEvent)
 Show the ratsnest for a given net. More...
 
int ShowNetInRatsnest (const TOOL_EVENT &aEvent)
 
void InspectDRCError (const std::shared_ptr< RC_ITEM > &aDRCItem)
 Show the clearance resolution for two selected items. More...
 
int InspectClearance (const TOOL_EVENT &aEvent)
 
int InspectConstraints (const TOOL_EVENT &aEvent)
 
bool IsNetHighlightSet () const
 
void SetIsFootprintEditor (bool aEnabled)
 Function SetIsFootprintEditor() More...
 
bool IsFootprintEditor () const
 
void SetIsBoardEditor (bool aEnabled)
 
bool IsBoardEditor () const
 
virtual bool Is45Limited () const
 Should the tool use its 45° mode option? More...
 
void Activate ()
 Run the tool. More...
 
TOOL_MENUGetToolMenu ()
 
void SetContextMenu (ACTION_MENU *aMenu, CONTEXT_MENU_TRIGGER aTrigger=CMENU_BUTTON)
 Assign a context menu and tells when it should be activated. More...
 
void RunMainStack (std::function< void()> aFunc)
 Call a function using the main stack. More...
 
template<class T >
void Go (int(T::*aStateFunc)(const TOOL_EVENT &), const TOOL_EVENT_LIST &aConditions=TOOL_EVENT(TC_ANY, TA_ANY))
 Define which state (aStateFunc) to go when a certain event arrives (aConditions). More...
 
TOOL_EVENTWait (const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
 Suspend execution of the tool until an event specified in aEventList arrives. More...
 
TOOL_TYPE GetType () const
 Return the type of the tool. More...
 
TOOL_ID GetId () const
 Return the unique identifier of the tool. More...
 
const std::string & GetName () const
 Return the name of the tool. More...
 
TOOL_MANAGERGetManager () const
 Return the instance of TOOL_MANAGER that takes care of the tool. More...
 
bool IsToolActive () const
 

Protected Types

enum  INTERACTIVE_PLACEMENT_OPTIONS { IPO_ROTATE = 0x01 , IPO_FLIP = 0x02 , IPO_SINGLE_CLICK = 0x04 , IPO_REPEAT = 0x08 }
 Options for placing items interactively. More...
 

Protected Member Functions

void doInteractiveItemPlacement (const TOOL_EVENT &aTool, INTERACTIVE_PLACER_BASE *aPlacer, const wxString &aCommitMessage, int aOptions=IPO_ROTATE|IPO_FLIP|IPO_REPEAT)
 Helper function for performing a common interactive idiom: wait for a left click, place an item there (perhaps with a dialog or other user interaction), then have it move with the mouse and respond to rotate/flip, etc. More...
 
KIGFX::PCB_VIEWview () const
 
KIGFX::VIEW_CONTROLScontrols () const
 
PCB_BASE_EDIT_FRAMEframe () const
 
BOARDboard () const
 
FOOTPRINTfootprint () const
 
PCBNEW_SETTINGS::DISPLAY_OPTIONSdisplayOptions () const
 
PCB_DRAW_PANEL_GALcanvas () const
 
const PCB_SELECTIONselection () const
 
PCB_SELECTIONselection ()
 
void attachManager (TOOL_MANAGER *aManager)
 Set the TOOL_MANAGER the tool will belong to. More...
 
KIGFX::VIEWgetView () const
 Returns the instance of #VIEW object used in the application. More...
 
KIGFX::VIEW_CONTROLSgetViewControls () const
 Return the instance of VIEW_CONTROLS object used in the application. More...
 
template<typename T >
T * getEditFrame () const
 Return the application window object, casted to requested user type. More...
 
template<typename T >
T * getModel () const
 Return the model object if it matches the requested type. More...
 

Protected Attributes

bool m_isFootprintEditor
 
bool m_isBoardEditor
 
TOOL_MENU m_menu
 The functions below are not yet implemented - their interface may change. More...
 
TOOL_TYPE m_type
 Unique identifier for the tool, assigned by a TOOL_MANAGER instance. More...
 
TOOL_ID m_toolId
 Name of the tool. More...
 
std::string m_toolName
 
TOOL_MANAGERm_toolMgr
 

Private Member Functions

void calculateSelectionRatsnest (const VECTOR2I &aDelta)
 < Recalculate dynamic ratsnest for the current selection. More...
 
bool highlightNet (const VECTOR2D &aPosition, bool aUseSelection)
 Look for a BOARD_CONNECTED_ITEM in a given spot and if one is found - it enables highlight for its net. More...
 
void doHideRatsnestNet (int aNetCode, bool aHide)
 Bind handlers to corresponding TOOL_ACTIONs. More...
 
void setTransitions () override
 This method is meant to be overridden in order to specify handlers for events. More...
 
void onListNetsDialogClosed (wxCommandEvent &aEvent)
 
void onInspectClearanceDialogClosed (wxCommandEvent &aEvent)
 
void onInspectConstraintsDialogClosed (wxCommandEvent &aEvent)
 
DRC_ENGINE makeDRCEngine (bool *aCompileError, bool *aCourtyardError=nullptr)
 
wxString getItemDescription (BOARD_ITEM *aItem)
 
void reportCompileError (REPORTER *r)
 
void reportHeader (const wxString &aTitle, BOARD_ITEM *a, REPORTER *r)
 
void reportHeader (const wxString &aTitle, BOARD_ITEM *a, BOARD_ITEM *b, REPORTER *r)
 
void reportHeader (const wxString &aTitle, BOARD_ITEM *a, BOARD_ITEM *b, PCB_LAYER_ID aLayer, REPORTER *r)
 
void resetTransitions ()
 Clear the current transition map and restores the default one created by setTransitions(). More...
 
void goInternal (TOOL_STATE_FUNC &aState, const TOOL_EVENT_LIST &aConditions)
 
EDA_ITEMgetModelInt () const
 
TOOLS_HOLDERgetToolHolderInt () const
 

Private Attributes

PCB_EDIT_FRAMEm_frame
 
std::set< int > m_currentlyHighlighted
 
std::set< int > m_lastHighlighted
 
CONNECTIVITY_DATAm_dynamicData
 
std::unique_ptr< DIALOG_NET_INSPECTORm_listNetsDialog
 
DIALOG_NET_INSPECTOR::SETTINGS m_listNetsDialogSettings
 
std::unique_ptr< DIALOG_CONSTRAINTS_REPORTERm_inspectClearanceDialog
 
std::unique_ptr< DIALOG_CONSTRAINTS_REPORTERm_inspectConstraintsDialog
 

Detailed Description

Tool for pcb inspection.

Definition at line 42 of file board_inspection_tool.h.

Member Enumeration Documentation

◆ INTERACTIVE_PLACEMENT_OPTIONS

Options for placing items interactively.

Enumerator
IPO_ROTATE 

Handle the rotate action in the loop by calling the item's rotate method.

IPO_FLIP 

Handle flip action in the loop by calling the item's flip method.

IPO_SINGLE_CLICK 

Create an item immediately on placement starting, otherwise show the pencil cursor until the item is created.

IPO_REPEAT 

Allow repeat placement of the item.

Definition at line 121 of file pcb_tool_base.h.

121 {
123 IPO_ROTATE = 0x01,
124
126 IPO_FLIP = 0x02,
127
130 IPO_SINGLE_CLICK = 0x04,
131
133 IPO_REPEAT = 0x08
134 };
@ IPO_FLIP
Handle flip action in the loop by calling the item's flip method.
@ IPO_ROTATE
Handle the rotate action in the loop by calling the item's rotate method.
@ IPO_SINGLE_CLICK
Create an item immediately on placement starting, otherwise show the pencil cursor until the item is ...
@ IPO_REPEAT
Allow repeat placement of the item.

◆ RESET_REASON

enum TOOL_BASE::RESET_REASON
inherited

Determine the reason of reset for a tool.

Enumerator
RUN 

Tool is invoked after being inactive.

MODEL_RELOAD 

Model changes (required full reload)

GAL_SWITCH 

Rendering engine changes.

REDRAW 

Full drawing refresh.

Definition at line 77 of file tool_base.h.

78 {
79 RUN,
82 REDRAW
83 };
@ REDRAW
Full drawing refresh.
Definition: tool_base.h:82
@ MODEL_RELOAD
Model changes (required full reload)
Definition: tool_base.h:80
@ GAL_SWITCH
Rendering engine changes.
Definition: tool_base.h:81
@ RUN
Tool is invoked after being inactive.
Definition: tool_base.h:79

Constructor & Destructor Documentation

◆ BOARD_INSPECTION_TOOL()

BOARD_INSPECTION_TOOL::BOARD_INSPECTION_TOOL ( )

Definition at line 45 of file board_inspection_tool.cpp.

45 :
46 PCB_TOOL_BASE( "pcbnew.InspectionTool" ),
47 m_frame( nullptr )
48{
49 m_dynamicData = nullptr;
50}
CONNECTIVITY_DATA * m_dynamicData
PCB_TOOL_BASE(TOOL_ID aId, const std::string &aName)
Constructor.
Definition: pcb_tool_base.h:77

References m_dynamicData.

Member Function Documentation

◆ Activate()

void TOOL_INTERACTIVE::Activate ( )
inherited

Run the tool.

After activation, the tool starts receiving events until it is finished.

Definition at line 51 of file tool_interactive.cpp.

52{
54}
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
TOOL_ID m_toolId
Name of the tool.
Definition: tool_base.h:210
bool InvokeTool(TOOL_ID aToolId)
Call a tool by sending a tool activation event to tool of given ID.

References TOOL_MANAGER::InvokeTool(), TOOL_BASE::m_toolId, and TOOL_BASE::m_toolMgr.

Referenced by AUTOPLACE_TOOL::autoplace(), EDIT_TOOL::copyToClipboard(), SCH_EDIT_TOOL::DeleteItemCursor(), SYMBOL_EDITOR_EDIT_TOOL::DeleteItemCursor(), PL_EDIT_TOOL::DeleteItemCursor(), PCB_CONTROL::DeleteItemCursor(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), PCB_TOOL_BASE::doInteractiveItemPlacement(), EDIT_TOOL::doMoveSelection(), EDIT_TOOL::DragArcTrack(), DRAWING_TOOL::DrawArc(), DRAWING_TOOL::DrawCircle(), DRAWING_TOOL::DrawDimension(), DRAWING_TOOL::DrawLine(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::DrawRectangle(), SCH_DRAWING_TOOLS::DrawShape(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), PL_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), DRAWING_TOOL::DrawZone(), BOARD_EDITOR_CONTROL::DrillOrigin(), PAD_TOOL::EnumeratePads(), PCB_CONTROL::GridSetOrigin(), SCH_EDITOR_CONTROL::HighlightNetCursor(), ROUTER_TOOL::InlineBreakTrack(), ROUTER_TOOL::InlineDrag(), DRAWING_TOOL::InteractivePlaceWithPreview(), LocalRatsnestTool(), EE_POINT_EDITOR::Main(), SCH_MOVE_TOOL::Main(), SYMBOL_EDITOR_MOVE_TOOL::Main(), PICKER_TOOL::Main(), PL_EDIT_TOOL::Main(), PL_POINT_EDITOR::Main(), PCB_PICKER_TOOL::Main(), LENGTH_TUNER_TOOL::MainLoop(), ROUTER_TOOL::MainLoop(), GERBVIEW_INSPECTION_TOOL::MeasureTool(), PCB_VIEWER_TOOLS::MeasureTool(), PCB_POINT_EDITOR::OnSelectionChange(), GROUP_TOOL::PickNewMember(), SYMBOL_EDITOR_DRAWING_TOOLS::PlaceAnchor(), BOARD_EDITOR_CONTROL::PlaceFootprint(), SCH_DRAWING_TOOLS::PlaceImage(), DRAWING_TOOL::PlaceImage(), DRAWING_TOOL::PlaceImportedGraphics(), PL_DRAWING_TOOLS::PlaceItem(), SCH_DRAWING_TOOLS::PlaceSymbol(), DRAWING_TOOL::PlaceText(), EDIT_TOOL::Remove(), ROUTER_TOOL::RouteSelected(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), DRAWING_TOOL::SetAnchor(), DRC_TOOL::ShowDRCDialog(), SCH_DRAWING_TOOLS::SingleClickPlace(), SCH_DRAWING_TOOLS::TwoClickPlace(), SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace(), and SCH_LINE_WIRE_BUS_TOOL::UnfoldBus().

◆ attachManager()

void TOOL_BASE::attachManager ( TOOL_MANAGER aManager)
protectedinherited

Set the TOOL_MANAGER the tool will belong to.

Called by TOOL_MANAGER::RegisterTool()

Definition at line 60 of file tool_base.cpp.

61{
62 m_toolMgr = aManager;
63}

References TOOL_BASE::m_toolMgr.

Referenced by TOOL_MANAGER::RegisterTool().

◆ board()

BOARD * PCB_TOOL_BASE::board ( ) const
inlineprotectedinherited

Definition at line 170 of file pcb_tool_base.h.

170{ return getModel<BOARD>(); }

Referenced by PCB_CONTROL::AppendBoard(), BOARD_EDITOR_CONTROL::AssignNetclass(), AUTOPLACE_TOOL::autoplace(), calculateSelectionRatsnest(), EDIT_TOOL::ChangeTrackWidth(), ZONE_FILLER_TOOL::CheckAllZones(), ClearHighlight(), EDIT_TOOL::copyToClipboard(), FOOTPRINT_EDITOR_CONTROL::CreateFootprint(), MICROWAVE_TOOL::createInductorBetween(), ROUTER_TOOL::CustomTrackWidthDialog(), PCB_CONTROL::DeleteItemCursor(), PCB_TOOL_BASE::doInteractiveItemPlacement(), EDIT_TOOL::doMoveSelection(), EDIT_TOOL::DragArcTrack(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), DRAWING_TOOL::drawShape(), PAD_TOOL::EnumeratePads(), PAD_TOOL::explodePad(), BOARD_EDITOR_CONTROL::ExportNetlist(), ZONE_FILLER_TOOL::FillAllZones(), EDIT_TOOL::FilletTracks(), PCB_TOOL_BASE::footprint(), GROUP_TOOL::Group(), ROUTER_TOOL::handleLayerSwitch(), highlightNet(), ROUTER_TOOL::Init(), ROUTER_TOOL::InlineDrag(), DRAWING_TOOL::InteractivePlaceWithPreview(), PCB_CONTROL::LayerNext(), PCB_CONTROL::LayerPrev(), LocalRatsnestTool(), EDIT_TOOL::MoveExact(), FOOTPRINT_EDITOR_CONTROL::NewFootprint(), PCB_CONTROL::Paste(), PCB_CONTROL::placeBoardItems(), BOARD_EDITOR_CONTROL::PlaceFootprint(), PAD_TOOL::PlacePad(), DRAWING_TOOL::PlaceText(), PCB_CONTROL::pruneItemLayers(), EDIT_TOOL::rebuildConnectivity(), ZONE_FILLER_TOOL::rebuildConnectivity(), PAD_TOOL::RecombinePad(), BOARD_EDITOR_CONTROL::RepairBoard(), FOOTPRINT_EDITOR_CONTROL::RepairFootprint(), PNS::TOOL_BASE::Reset(), PAD_TOOL::Reset(), PCB_CONTROL::Reset(), PCB_CONTROL::TrackDisplayMode(), PCB_CONTROL::unfilledZoneCheck(), GROUP_TOOL::Ungroup(), ROUTER_TOOL::UpdateMessagePanel(), ROUTER_TOOL::updateSizesAfterLayerSwitch(), PCB_CONTROL::ViaDisplayMode(), PCB_CONTROL::ZoneDisplayMode(), ZONE_FILLER_TOOL::ZoneFill(), ZONE_FILLER_TOOL::ZoneFillDirty(), BOARD_EDITOR_CONTROL::ZoneMerge(), and ZONE_FILLER_TOOL::ZoneUnfillAll().

◆ calculateSelectionRatsnest()

void BOARD_INSPECTION_TOOL::calculateSelectionRatsnest ( const VECTOR2I aDelta)
private

< Recalculate dynamic ratsnest for the current selection.

Definition at line 1676 of file board_inspection_tool.cpp.

1677{
1679 SELECTION& selection = selectionTool->GetSelection();
1680 std::shared_ptr<CONNECTIVITY_DATA> connectivity = board()->GetConnectivity();
1681 std::vector<BOARD_ITEM*> items;
1682 std::deque<EDA_ITEM*> queued_items( selection.begin(), selection.end() );
1683
1684 for( std::size_t i = 0; i < queued_items.size(); ++i )
1685 {
1686 BOARD_ITEM* item = static_cast<BOARD_ITEM*>( queued_items[i] );
1687
1688 if( item->Type() == PCB_FOOTPRINT_T )
1689 {
1690 for( PAD* pad : static_cast<FOOTPRINT*>( item )->Pads() )
1691 {
1692 if( pad->GetLocalRatsnestVisible() || displayOptions().m_ShowModuleRatsnest )
1693 items.push_back( pad );
1694 }
1695 }
1696 else if( item->Type() == PCB_GROUP_T )
1697 {
1698 PCB_GROUP *group = static_cast<PCB_GROUP*>( item );
1699 group->RunOnDescendants( [ &queued_items ]( BOARD_ITEM *aItem )
1700 {
1701 queued_items.push_back( aItem );
1702 } );
1703 }
1704 else if( BOARD_CONNECTED_ITEM* boardItem = dyn_cast<BOARD_CONNECTED_ITEM*>( item ) )
1705 {
1706 if( boardItem->GetLocalRatsnestVisible() || displayOptions().m_ShowModuleRatsnest )
1707 items.push_back( boardItem );
1708 }
1709 }
1710
1711 if( items.empty() || std::none_of( items.begin(), items.end(),
1712 []( const BOARD_ITEM* aItem )
1713 {
1714 return( aItem->Type() == PCB_TRACE_T
1715 || aItem->Type() == PCB_PAD_T
1716 || aItem->Type() == PCB_ARC_T
1717 || aItem->Type() == PCB_ZONE_T
1718 || aItem->Type() == PCB_FOOTPRINT_T
1719 || aItem->Type() == PCB_VIA_T );
1720 } ) )
1721 {
1722 return;
1723 }
1724
1725 if( !m_dynamicData )
1726 {
1727 m_dynamicData = new CONNECTIVITY_DATA( items, true );
1728 connectivity->BlockRatsnestItems( items );
1729 }
1730 else
1731 {
1732 m_dynamicData->Move( aDelta );
1733 }
1734
1735 connectivity->ComputeLocalRatsnest( items, m_dynamicData );
1736}
A base class derived from BOARD_ITEM for items that can be connected and have a net,...
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:70
std::shared_ptr< CONNECTIVITY_DATA > GetConnectivity() const
Return a list of missing connections between components/tracks.
Definition: board.h:430
void Move(const VECTOR2I &aDelta)
Moves the connectivity list anchors.
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:97
PADS & Pads()
Definition: footprint.h:170
Definition: pad.h:60
A set of BOARD_ITEMs (i.e., without duplicates).
Definition: pcb_group.h:51
The selection tool: currently supports:
PCB_SELECTION & GetSelection()
BOARD * board() const
PCBNEW_SETTINGS::DISPLAY_OPTIONS & displayOptions() const
const PCB_SELECTION & selection() const
ITER end()
Definition: selection.h:74
ITER begin()
Definition: selection.h:73
@ PCB_GROUP_T
class PCB_GROUP, a set of BOARD_ITEMs
Definition: typeinfo.h:115
@ PCB_FOOTPRINT_T
class FOOTPRINT, a footprint
Definition: typeinfo.h:86

References SELECTION::begin(), PCB_TOOL_BASE::board(), PCB_TOOL_BASE::displayOptions(), SELECTION::end(), BOARD::GetConnectivity(), PCB_SELECTION_TOOL::GetSelection(), TOOL_MANAGER::GetTool(), group, m_dynamicData, PCBNEW_SETTINGS::DISPLAY_OPTIONS::m_ShowModuleRatsnest, TOOL_BASE::m_toolMgr, CONNECTIVITY_DATA::Move(), pad, FOOTPRINT::Pads(), PCB_FOOTPRINT_T, PCB_GROUP_T, PCB_TOOL_BASE::selection(), and EDA_ITEM::Type().

Referenced by UpdateLocalRatsnest().

◆ canvas()

◆ ClearHighlight()

int BOARD_INSPECTION_TOOL::ClearHighlight ( const TOOL_EVENT aEvent)

Perform the appropriate action in response to an Eeschema cross-probe.

Definition at line 1533 of file board_inspection_tool.cpp.

1534{
1535 BOARD* board = static_cast<BOARD*>( m_toolMgr->GetModel() );
1537
1538 m_currentlyHighlighted.clear();
1539 m_lastHighlighted.clear();
1540
1542 settings->SetHighlight( false );
1546 return 0;
1547}
std::set< int > m_lastHighlighted
std::set< int > m_currentlyHighlighted
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:269
void ResetNetHighLight()
Reset all high light data to the init state.
Definition: board.cpp:2083
void SetMsgPanel(const std::vector< MSG_PANEL_ITEM > &aList)
Clear the message panel and populates it with the contents of aList.
virtual RENDER_SETTINGS * GetSettings()=0
Return a pointer to current settings that are going to be used when drawing items.
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
void SetHighlight(bool aEnabled, int aNetcode=-1, bool aMulti=false)
Turns on/off highlighting.
void UpdateAllLayersColor()
Apply the new coloring scheme to all layers.
Definition: view.cpp:761
PAINTER * GetPainter() const
Return the painter object used by the view for drawing #VIEW_ITEMS.
Definition: view.h:213
void SendCrossProbeNetName(const wxString &aNetName)
Send a net name to Eeschema for highlighting.
EDA_ITEM * GetModel() const
Definition: tool_manager.h:292
KIGFX::VIEW * GetView() const
Definition: tool_manager.h:285

References PCB_TOOL_BASE::board(), TOOL_MANAGER::GetModel(), KIGFX::VIEW::GetPainter(), KIGFX::PAINTER::GetSettings(), TOOL_MANAGER::GetView(), m_currentlyHighlighted, m_frame, m_lastHighlighted, TOOL_BASE::m_toolMgr, BOARD::ResetNetHighLight(), PCB_EDIT_FRAME::SendCrossProbeNetName(), KIGFX::RENDER_SETTINGS::SetHighlight(), EDA_DRAW_FRAME::SetMsgPanel(), and KIGFX::VIEW::UpdateAllLayersColor().

Referenced by PCB_SELECTION_TOOL::Main(), and setTransitions().

◆ controls()

◆ displayOptions()

◆ doHideRatsnestNet()

void BOARD_INSPECTION_TOOL::doHideRatsnestNet ( int  aNetCode,
bool  aHide 
)
private

Bind handlers to corresponding TOOL_ACTIONs.

Definition at line 1812 of file board_inspection_tool.cpp.

1813{
1816
1818 SELECTION& selection = selectionTool->GetSelection();
1819
1820 if( aNetCode <= 0 && !selection.Empty() )
1821 {
1822 for( EDA_ITEM* item : selection )
1823 {
1824 if( BOARD_CONNECTED_ITEM* bci = dynamic_cast<BOARD_CONNECTED_ITEM*>( item ) )
1825 {
1826 if( bci->GetNetCode() > 0 )
1827 doHideRatsnestNet( bci->GetNetCode(), aHide );
1828 }
1829 }
1830
1831 return;
1832 }
1833
1834 if( aHide )
1835 rs->GetHiddenNets().insert( aNetCode );
1836 else
1837 rs->GetHiddenNets().erase( aNetCode );
1838
1841
1842 m_frame->GetAppearancePanel()->OnNetVisibilityChanged( aNetCode, !aHide );
1843}
void OnNetVisibilityChanged(int aNetCode, bool aVisibility)
Notifies the panel when a net has been hidden or shown via the external tool.
void doHideRatsnestNet(int aNetCode, bool aHide)
Bind handlers to corresponding TOOL_ACTIONs.
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
Update the board display after modifying it by a python script (note: it is automatically called by a...
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:85
PCB specific render settings.
Definition: pcb_painter.h:72
std::set< int > & GetHiddenNets()
Definition: pcb_painter.h:118
APPEARANCE_CONTROLS * GetAppearancePanel()
void RedrawRatsnest()
Return the bounding box of the view that should be used if model is not valid.
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:109

References doHideRatsnestNet(), SELECTION::Empty(), PCB_BASE_EDIT_FRAME::GetAppearancePanel(), PCB_BASE_FRAME::GetCanvas(), KIGFX::PCB_RENDER_SETTINGS::GetHiddenNets(), KIGFX::VIEW::GetPainter(), PCB_SELECTION_TOOL::GetSelection(), KIGFX::PAINTER::GetSettings(), TOOL_MANAGER::GetTool(), TOOL_MANAGER::GetView(), m_frame, TOOL_BASE::m_toolMgr, APPEARANCE_CONTROLS::OnNetVisibilityChanged(), PCB_DRAW_PANEL_GAL::RedrawRatsnest(), EDA_DRAW_PANEL_GAL::Refresh(), and PCB_TOOL_BASE::selection().

Referenced by doHideRatsnestNet(), HideNetInRatsnest(), and ShowNetInRatsnest().

◆ doInteractiveItemPlacement()

void PCB_TOOL_BASE::doInteractiveItemPlacement ( const TOOL_EVENT aTool,
INTERACTIVE_PLACER_BASE aPlacer,
const wxString &  aCommitMessage,
int  aOptions = IPO_ROTATE | IPO_FLIP | IPO_REPEAT 
)
protectedinherited

Helper function for performing a common interactive idiom: wait for a left click, place an item there (perhaps with a dialog or other user interaction), then have it move with the mouse and respond to rotate/flip, etc.

More complex interactive processes are not supported here, you should implement a customised event loop for those.

Parameters
aItemCreatorthe callable that will attempt to create the item
aCommitMessagethe message used on a successful commit

Definition at line 41 of file pcb_tool_base.cpp.

44{
45 using namespace std::placeholders;
46 std::unique_ptr<BOARD_ITEM> newItem;
47
48 frame()->PushTool( aTool );
49
50 BOARD_COMMIT commit( frame() );
51
53
54 Activate();
55 // Must be done after Activate() so that it gets set into the correct context
56 controls()->ShowCursor( true );
57 controls()->ForceCursorPosition( false );
58 // do not capture or auto-pan until we start placing an item
59
60 PCB_GRID_HELPER grid( m_toolMgr, frame()->GetMagneticItemsSettings() );
61
62 // Add a VIEW_GROUP that serves as a preview for the new item
63 PCB_SELECTION preview;
64 view()->Add( &preview );
65
66 aPlacer->m_board = board();
67 aPlacer->m_frame = frame();
68 aPlacer->m_modifiers = 0;
69
70 auto makeNewItem =
71 [&]( VECTOR2I aPosition )
72 {
73 if( frame()->GetModel() )
74 newItem = aPlacer->CreateItem();
75
76 if( newItem )
77 {
78 newItem->SetPosition( aPosition );
79 preview.Add( newItem.get() );
80
81 if( newItem->Type() == PCB_FOOTPRINT_T )
82 {
83 FOOTPRINT* fp = dyn_cast<FOOTPRINT*>( newItem.get() );
84
85 // footprints have more drawable parts
86 fp->RunOnChildren( std::bind( &KIGFX::VIEW_GROUP::Add, &preview, _1 ) );
87 }
88 }
89 };
90
91 if( aOptions & IPO_SINGLE_CLICK )
92 makeNewItem( controls()->GetCursorPosition() );
93
94 auto setCursor =
95 [&]()
96 {
97 if( !newItem )
99 else
101 };
102
103 // Set initial cursor
104 setCursor();
105
106 // Main loop: keep receiving events
107 while( TOOL_EVENT* evt = Wait() )
108 {
109 setCursor();
110
111 grid.SetSnap( false ); // Interactive placement tools need to set their own item snaps
112 grid.SetUseGrid( getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
113 VECTOR2I cursorPos = grid.BestSnapAnchor( controls()->GetMousePosition(), nullptr );
114
115 aPlacer->m_modifiers = evt->Modifier();
116
117 auto cleanup =
118 [&] ()
119 {
120 newItem = nullptr;
121 preview.Clear();
122 view()->Update( &preview );
123 controls()->SetAutoPan( false );
124 controls()->CaptureCursor( false );
125 controls()->ShowCursor( true );
126 controls()->ForceCursorPosition( false );
127 };
128
129 if( evt->IsCancelInteractive() )
130 {
131 if( aOptions & IPO_SINGLE_CLICK )
132 {
133 cleanup();
134 frame()->PopTool( aTool );
135 break;
136 }
137 else if( newItem )
138 {
139 cleanup();
140 }
141 else
142 {
143 frame()->PopTool( aTool );
144 break;
145 }
146 }
147 else if( evt->IsActivate() )
148 {
149 if( newItem )
150 cleanup();
151
152 if( evt->IsPointEditor() )
153 {
154 // don't exit (the point editor runs in the background)
155 }
156 else if( evt->IsMoveTool() )
157 {
158 // leave ourselves on the stack so we come back after the move
159 break;
160 }
161 else
162 {
163 frame()->PopTool( aTool );
164 break;
165 }
166 }
167 else if( evt->IsClick( BUT_LEFT ) || evt->IsDblClick( BUT_LEFT ) )
168 {
169 if( !newItem )
170 {
171 // create the item if possible
172 makeNewItem( cursorPos );
173
174 // no item created, so wait for another click
175 if( !newItem )
176 continue;
177
178 controls()->CaptureCursor( true );
179 controls()->SetAutoPan( true );
180 }
181 else
182 {
183 BOARD_ITEM* newBoardItem = newItem.release();
184 EDA_ITEM_FLAGS oldFlags = newBoardItem->GetFlags();
185
186 newBoardItem->ClearFlags();
187
188 if( !aPlacer->PlaceItem( newBoardItem, commit ) )
189 {
190 newBoardItem->SetFlags( oldFlags );
191 newItem.reset( newBoardItem );
192 continue;
193 }
194
195 preview.Clear();
196 commit.Push( aCommitMessage );
197
198 controls()->CaptureCursor( false );
199 controls()->SetAutoPan( false );
200 controls()->ShowCursor( true );
201
202 if( !( aOptions & IPO_REPEAT ) )
203 break;
204
205 if( aOptions & IPO_SINGLE_CLICK )
206 makeNewItem( controls()->GetCursorPosition() );
207
208 setCursor();
209 }
210 }
211 else if( evt->IsClick( BUT_RIGHT ) )
212 {
214 }
215 else if( evt->IsAction( &PCB_ACTIONS::trackViaSizeChanged ) )
216 {
218 }
219 else if( newItem && evt->Category() == TC_COMMAND )
220 {
221 /*
222 * Handle any events that can affect the item as we move it around
223 */
224 if( TOOL_EVT_UTILS::IsRotateToolEvt( *evt ) && ( aOptions & IPO_ROTATE ) )
225 {
226 EDA_ANGLE rotationAngle = TOOL_EVT_UTILS::GetEventRotationAngle( *frame(), *evt );
227 newItem->Rotate( newItem->GetPosition(), rotationAngle );
228 view()->Update( &preview );
229 }
230 else if( evt->IsAction( &PCB_ACTIONS::flip ) && ( aOptions & IPO_FLIP ) )
231 {
232 newItem->Flip( newItem->GetPosition(), frame()->GetPcbNewSettings()->m_FlipLeftRight );
233 view()->Update( &preview );
234 }
235 else if( evt->IsAction( &PCB_ACTIONS::properties ) )
236 {
237 frame()->OnEditItemRequest( newItem.get() );
238
239 // Notify other tools of the changes
241 }
242 else if( evt->IsAction( &ACTIONS::refreshPreview ) )
243 {
244 preview.Clear();
245 newItem.reset();
246
247 makeNewItem( cursorPos );
248 aPlacer->SnapItem( newItem.get() );
249 view()->Update( &preview );
250 }
251 else
252 {
253 evt->SetPassEvent();
254 }
255 }
256 else if( newItem && evt->IsMotion() )
257 {
258 // track the cursor
259 newItem->SetPosition( cursorPos );
260 aPlacer->SnapItem( newItem.get() );
261
262 // Show a preview of the item
263 view()->Update( &preview );
264 }
265 else
266 {
267 evt->SetPassEvent();
268 }
269 }
270
271 view()->Remove( &preview );
273 controls()->SetAutoPan( false );
274 controls()->CaptureCursor( false );
275 controls()->ForceCursorPosition( false );
276}
static TOOL_ACTION refreshPreview
Definition: actions.h:110
void SetCurrentCursor(KICURSOR aCursor)
Set the current cursor shape for this panel.
void SetFlags(EDA_ITEM_FLAGS aMask)
Definition: eda_item.h:139
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: eda_item.h:141
EDA_ITEM_FLAGS GetFlags() const
Definition: eda_item.h:142
static const TOOL_EVENT SelectedItemsModified
Selected items were moved, this can be very high frequency on the canvas, use with care.
Definition: actions.h:214
void RunOnChildren(const std::function< void(BOARD_ITEM *)> &aFunction) const
Invoke a function on all BOARD_ITEMs that belong to the footprint (pads, drawings,...
Definition: footprint.cpp:1393
virtual void Update(const VIEW_ITEM *aItem, int aUpdateFlags) const override
For dynamic VIEWs, inform the associated VIEW that the graphical representation of this item has chan...
Definition: pcb_view.cpp:92
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1) override
Add a VIEW_ITEM to the view.
Definition: pcb_view.cpp:58
virtual void Remove(VIEW_ITEM *aItem) override
Remove a VIEW_ITEM from the view.
Definition: pcb_view.cpp:75
virtual void CaptureCursor(bool aEnabled)
Force the cursor to stay within the drawing panel area.
virtual void ForceCursorPosition(bool aEnabled, const VECTOR2D &aPosition=VECTOR2D(0, 0))
Place the cursor immediately at a given point.
virtual void ShowCursor(bool aEnabled)
Enable or disables display of cursor.
virtual void SetAutoPan(bool aEnabled)
Turn on/off auto panning (this feature is used when there is a tool active (eg.
virtual void Add(VIEW_ITEM *aItem)
Add an item to the group.
Definition: view_group.cpp:57
static TOOL_ACTION trackViaSizeChanged
Definition: pcb_actions.h:338
static TOOL_ACTION properties
Activation of the edit tool.
Definition: pcb_actions.h:149
static TOOL_ACTION selectionClear
Clear the current selection.
Definition: pcb_actions.h:59
static TOOL_ACTION flip
Flipping of selected objects.
Definition: pcb_actions.h:126
virtual void OnEditItemRequest(BOARD_ITEM *aItem)=0
Install the corresponding dialog editor for the given item.
virtual BOARD_ITEM_CONTAINER * GetModel() const =0
KIGFX::PCB_VIEW * view() const
KIGFX::VIEW_CONTROLS * controls() const
virtual void Add(EDA_ITEM *aItem)
Definition: selection.cpp:42
virtual void Clear() override
Remove all the stored items from the group.
Definition: selection.h:92
virtual void PopTool(const TOOL_EVENT &aEvent)
Pops a tool from the stack.
virtual void PushTool(const TOOL_EVENT &aEvent)
NB: the definition of "tool" is different at the user level.
TOOL_MANAGER * GetManager() const
Return the instance of TOOL_MANAGER that takes care of the tool.
Definition: tool_base.h:144
KIGFX::VIEW * getView() const
Returns the instance of #VIEW object used in the application.
Definition: tool_base.cpp:36
Generic, UI-independent tool event.
Definition: tool_event.h:156
TOOL_MENU m_menu
The functions below are not yet implemented - their interface may change.
TOOL_EVENT * Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Suspend execution of the tool until an event specified in aEventList arrives.
void Activate()
Run the tool.
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagate an event to tools that requested events of matching type(s).
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Run the specified action.
Definition: tool_manager.h:142
void ShowContextMenu(SELECTION &aSelection)
Helper function to set and immediately show a CONDITIONAL_MENU in concert with the given SELECTION.
Definition: tool_menu.cpp:57
std::uint32_t EDA_ITEM_FLAGS
EDA_ANGLE GetEventRotationAngle(const PCB_BASE_EDIT_FRAME &aFrame, const TOOL_EVENT &aEvent)
Function getEventRotationAngle()
bool IsRotateToolEvt(const TOOL_EVENT &aEvt)
Function isRotateToolEvt()
virtual void SnapItem(BOARD_ITEM *aItem)
PCB_BASE_EDIT_FRAME * m_frame
Definition: pcb_tool_base.h:64
virtual std::unique_ptr< BOARD_ITEM > CreateItem()=0
virtual bool PlaceItem(BOARD_ITEM *aItem, BOARD_COMMIT &aCommit)
@ TC_COMMAND
Definition: tool_event.h:52
@ BUT_LEFT
Definition: tool_event.h:127
@ BUT_RIGHT
Definition: tool_event.h:128

References TOOL_INTERACTIVE::Activate(), SELECTION::Add(), KIGFX::VIEW_GROUP::Add(), KIGFX::PCB_VIEW::Add(), ARROW, PCB_TOOL_BASE::board(), BUT_LEFT, BUT_RIGHT, KIGFX::VIEW_CONTROLS::CaptureCursor(), SELECTION::Clear(), EDA_ITEM::ClearFlags(), PCB_TOOL_BASE::controls(), INTERACTIVE_PLACER_BASE::CreateItem(), PCB_ACTIONS::flip, KIGFX::VIEW_CONTROLS::ForceCursorPosition(), PCB_TOOL_BASE::frame(), PCB_BASE_FRAME::GetCanvas(), TOOL_EVT_UTILS::GetEventRotationAngle(), EDA_ITEM::GetFlags(), TOOL_BASE::GetManager(), PCB_BASE_FRAME::GetModel(), TOOL_BASE::getView(), grid, PCB_TOOL_BASE::IPO_FLIP, PCB_TOOL_BASE::IPO_REPEAT, PCB_TOOL_BASE::IPO_ROTATE, PCB_TOOL_BASE::IPO_SINGLE_CLICK, TOOL_EVT_UTILS::IsRotateToolEvt(), INTERACTIVE_PLACER_BASE::m_board, INTERACTIVE_PLACER_BASE::m_frame, TOOL_INTERACTIVE::m_menu, INTERACTIVE_PLACER_BASE::m_modifiers, TOOL_BASE::m_toolMgr, PCB_BASE_EDIT_FRAME::OnEditItemRequest(), PCB_FOOTPRINT_T, PENCIL, PLACE, INTERACTIVE_PLACER_BASE::PlaceItem(), TOOLS_HOLDER::PopTool(), TOOL_MANAGER::ProcessEvent(), PCB_ACTIONS::properties, BOARD_COMMIT::Push(), TOOLS_HOLDER::PushTool(), ACTIONS::refreshPreview, KIGFX::PCB_VIEW::Remove(), TOOL_MANAGER::RunAction(), FOOTPRINT::RunOnChildren(), EVENTS::SelectedItemsModified, PCB_TOOL_BASE::selection(), PCB_ACTIONS::selectionClear, KIGFX::VIEW_CONTROLS::SetAutoPan(), EDA_DRAW_PANEL_GAL::SetCurrentCursor(), EDA_ITEM::SetFlags(), TOOL_MENU::ShowContextMenu(), KIGFX::VIEW_CONTROLS::ShowCursor(), INTERACTIVE_PLACER_BASE::SnapItem(), TC_COMMAND, PCB_ACTIONS::trackViaSizeChanged, KIGFX::PCB_VIEW::Update(), PCB_TOOL_BASE::view(), and TOOL_INTERACTIVE::Wait().

Referenced by MICROWAVE_TOOL::addMicrowaveFootprint(), DRAWING_TOOL::DrawVia(), and PAD_TOOL::PlacePad().

◆ footprint()

◆ frame()

PCB_BASE_EDIT_FRAME * PCB_TOOL_BASE::frame ( ) const
inlineprotectedinherited

Definition at line 165 of file pcb_tool_base.h.

166 {
167 return getEditFrame<PCB_BASE_EDIT_FRAME>();
168 }

Referenced by PCB_POINT_EDITOR::addCorner(), AUTOPLACE_TOOL::autoplace(), PCB_TOOL_BASE::canvas(), ZONE_FILLER_TOOL::CheckAllZones(), PNS::TOOL_BASE::checkSnap(), PAD_TOOL::copyPadSettings(), EDIT_TOOL::copyToClipboard(), ROUTER_TOOL::CustomTrackWidthDialog(), FOOTPRINT_EDITOR_CONTROL::DeleteFootprint(), EDIT_TOOL::DeleteItems(), PCB_TOOL_BASE::displayOptions(), BOARD_EDITOR_CONTROL::doCrossProbePcbToSch(), PCB_TOOL_BASE::doInteractiveItemPlacement(), EDIT_TOOL::doMoveSelection(), ROUTER_TOOL::DpDimensionsDialog(), EDIT_TOOL::DragArcTrack(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::drawShape(), DRAWING_TOOL::DrawVia(), DRAWING_TOOL::DrawZone(), PAD_TOOL::EditPad(), PAD_TOOL::EnumeratePads(), PAD_TOOL::explodePad(), BOARD_EDITOR_CONTROL::ExportSpecctraDSN(), ZONE_FILLER_TOOL::FillAllZones(), EDIT_TOOL::FilletTracks(), ROUTER_TOOL::finishInteractive(), EDIT_TOOL::Flip(), PCB_CONTROL::FlipPcbView(), GLOBAL_EDIT_TOOL::GlobalDeletions(), ROUTER_TOOL::handleLayerSwitch(), PCB_CONTROL::HighContrastMode(), PCB_CONTROL::HighContrastModeCycle(), HighlightItem(), FOOTPRINT_EDITOR_CONTROL::ImportFootprint(), BOARD_EDITOR_CONTROL::ImportSpecctraSession(), SCRIPTING_TOOL::Init(), ROUTER_TOOL::Init(), EDIT_TOOL::Init(), ROUTER_TOOL::InlineBreakTrack(), ROUTER_TOOL::InlineDrag(), DRAWING_TOOL::InteractivePlaceWithPreview(), PCB_TOOL_BASE::Is45Limited(), PCB_PICKER_TOOL::Main(), LENGTH_TUNER_TOOL::MainLoop(), ROUTER_TOOL::MainLoop(), LENGTH_TUNER_TOOL::meanderSettingsDialog(), EDIT_TOOL::MoveExact(), PCB_CONTROL::NetColorModeCycle(), PCB_POINT_EDITOR::OnSelectionChange(), ROUTER_TOOL::onViaCommand(), PCB_CONTROL::Paste(), PAD_TOOL::pastePadProperties(), ROUTER_TOOL::performDragging(), ROUTER_TOOL::performRouting(), LENGTH_TUNER_TOOL::performTuning(), GROUP_TOOL::PickNewMember(), PNS::TOOL_BASE::pickSingleItem(), BOARD_EDITOR_CONTROL::PlaceFootprint(), DRAWING_TOOL::PlaceText(), ROUTER_TOOL::prepareInteractive(), PCB_CONTROL::pruneItemLayers(), PAD_TOOL::pushPadSettings(), PCB_CONTROL::RatsnestModeCycle(), POSITION_RELATIVE_TOOL::RelativeItemSelectionMove(), SCRIPTING_TOOL::reloadPlugins(), PCB_POINT_EDITOR::removeCorner(), PNS::TOOL_BASE::Reset(), PAD_TOOL::Reset(), EDIT_TOOL::Rotate(), ROUTER_TOOL::RouteSelected(), ROUTER_TOOL::SelectCopperLayerPair(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), PCB_POINT_EDITOR::setEditedPoint(), ROUTER_TOOL::SettingsDialog(), GLOBAL_EDIT_TOOL::swapBoardItem(), GLOBAL_EDIT_TOOL::SwapLayers(), ROUTER_TOOL::switchLayerOnViaPlacement(), DRAWING_TOOL::ToggleHV45Mode(), PCB_CONTROL::ToggleRatsnest(), PCB_CONTROL::unfilledZoneCheck(), PCB_POINT_EDITOR::updateItem(), ROUTER_TOOL::UpdateMessagePanel(), EDIT_TOOL::updateModificationPoint(), BOARD_EDITOR_CONTROL::UpdateSchematicFromPCB(), PCB_CONTROL::ZoneDisplayMode(), ZONE_FILLER_TOOL::ZoneFill(), ZONE_FILLER_TOOL::ZoneFillAll(), and ZONE_FILLER_TOOL::ZoneFillDirty().

◆ getEditFrame()

template<typename T >
T * TOOL_BASE::getEditFrame ( ) const
inlineprotectedinherited

Return the application window object, casted to requested user type.

Definition at line 185 of file tool_base.h.

186 {
187#if !defined( QA_TEST ) // Dynamic casts give the linker a seizure in the test framework
188 wxASSERT( dynamic_cast<T*>( getToolHolderInt() ) );
189#endif
190 return static_cast<T*>( getToolHolderInt() );
191 }
TOOLS_HOLDER * getToolHolderInt() const
Definition: tool_base.cpp:48

References TOOL_BASE::getToolHolderInt().

Referenced by ZONE_CREATE_HELPER::createNewZone(), and ZONE_CREATE_HELPER::setUniquePriority().

◆ GetId()

TOOL_ID TOOL_BASE::GetId ( ) const
inlineinherited

Return the unique identifier of the tool.

The identifier is set by an instance of TOOL_MANAGER.

Returns
Identifier of the tool.

Definition at line 121 of file tool_base.h.

122 {
123 return m_toolId;
124 }

References TOOL_BASE::m_toolId.

Referenced by TOOL_MANAGER::finishTool(), TOOL_MANAGER::InitTools(), TOOL_MANAGER::isActive(), TOOL_MANAGER::RegisterTool(), ACTION_MANAGER::RunHotKey(), TOOL_MANAGER::runTool(), TOOL_MANAGER::saveViewControls(), and TOOL_MANAGER::ShutdownTool().

◆ getItemDescription()

wxString BOARD_INSPECTION_TOOL::getItemDescription ( BOARD_ITEM aItem)
private

Definition at line 152 of file board_inspection_tool.cpp.

153{
154 // Null items have no description
155 if( !aItem )
156 return wxString();
157
158 wxString msg = aItem->GetItemDescription( m_frame );
159
160 if( aItem->IsConnected() && !isNPTHPad( aItem ) )
161 {
162 BOARD_CONNECTED_ITEM* cItem = static_cast<BOARD_CONNECTED_ITEM*>( aItem );
163
164 msg += wxS( " " ) + wxString::Format( _( "[netclass %s]" ),
165 cItem->GetEffectiveNetClass()->GetName() );
166 }
167
168 return msg;
169};
bool isNPTHPad(BOARD_ITEM *aItem)
virtual NETCLASS * GetEffectiveNetClass() const
Return the NETCLASS for this item.
virtual bool IsConnected() const
Returns information if the object is derived from BOARD_CONNECTED_ITEM.
Definition: board_item.h:127
virtual wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider) const
Return a user-visible description string of this item.
Definition: eda_item.cpp:108
const wxString GetName() const
Definition: netclass.h:65
#define _(s)
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200

References _, Format(), BOARD_CONNECTED_ITEM::GetEffectiveNetClass(), EDA_ITEM::GetItemDescription(), NETCLASS::GetName(), BOARD_ITEM::IsConnected(), isNPTHPad(), and m_frame.

Referenced by InspectClearance(), and reportHeader().

◆ GetManager()

TOOL_MANAGER * TOOL_BASE::GetManager ( ) const
inlineinherited

◆ getModel()

template<typename T >
T * TOOL_BASE::getModel ( ) const
inlineprotectedinherited

Return the model object if it matches the requested type.

Store the type of the tool.

Definition at line 197 of file tool_base.h.

References TOOL_BASE::getModelInt().

Referenced by ZONE_CREATE_HELPER::commitZone(), and ZONE_CREATE_HELPER::createZoneFromExisting().

◆ getModelInt()

EDA_ITEM * TOOL_BASE::getModelInt ( ) const
privateinherited

Definition at line 54 of file tool_base.cpp.

55{
56 return m_toolMgr->GetModel();
57}

References TOOL_MANAGER::GetModel(), and TOOL_BASE::m_toolMgr.

Referenced by TOOL_BASE::getModel().

◆ GetName()

const std::string & TOOL_BASE::GetName ( void  ) const
inlineinherited

Return the name of the tool.

Tool names are expected to obey the format: application.ToolName (eg. pcbnew.InteractiveSelection).

Returns
The name of the tool.

Definition at line 134 of file tool_base.h.

135 {
136 return m_toolName;
137 }
std::string m_toolName
Definition: tool_base.h:214

References TOOL_BASE::m_toolName.

Referenced by TOOL_MANAGER::dispatchInternal(), TOOL_MANAGER::InitTools(), TOOL_MANAGER::invokeTool(), TOOL_MANAGER::RegisterTool(), TOOL_MANAGER::runTool(), and TOOL_MANAGER::ShutdownTool().

◆ getToolHolderInt()

TOOLS_HOLDER * TOOL_BASE::getToolHolderInt ( ) const
privateinherited

Definition at line 48 of file tool_base.cpp.

49{
50 return m_toolMgr->GetToolHolder();
51}
TOOLS_HOLDER * GetToolHolder() const
Definition: tool_manager.h:296

References TOOL_MANAGER::GetToolHolder(), and TOOL_BASE::m_toolMgr.

Referenced by TOOL_BASE::getEditFrame().

◆ GetToolMenu()

◆ GetType()

TOOL_TYPE TOOL_BASE::GetType ( ) const
inlineinherited

Return the type of the tool.

Returns
The type of the tool.

Definition at line 109 of file tool_base.h.

110 {
111 return m_type;
112 }
TOOL_TYPE m_type
Unique identifier for the tool, assigned by a TOOL_MANAGER instance.
Definition: tool_base.h:207

References TOOL_BASE::m_type.

Referenced by TOOL_MANAGER::finishTool(), TOOL_MANAGER::InvokeTool(), TOOL_MANAGER::ResetTools(), TOOL_MANAGER::runTool(), and TOOL_MANAGER::ShutdownTool().

◆ getView()

KIGFX::VIEW * TOOL_BASE::getView ( ) const
protectedinherited

Returns the instance of #VIEW object used in the application.

It allows tools to draw.

Returns
The instance of VIEW.

Definition at line 36 of file tool_base.cpp.

37{
38 return m_toolMgr->GetView();
39}

References TOOL_MANAGER::GetView(), and TOOL_BASE::m_toolMgr.

Referenced by EE_POINT_EDITOR::addCornerCondition(), ALIGN_DISTRIBUTE_TOOL::AlignLeft(), ALIGN_DISTRIBUTE_TOOL::AlignRight(), COMMON_TOOLS::CenterContents(), SCH_EDIT_TOOL::ChangeTextType(), EE_INSPECTION_TOOL::CheckSymbol(), GERBVIEW_CONTROL::ClearAllLayers(), PL_SELECTION_TOOL::ClearSelection(), EE_SELECTION_TOOL::ClearSelection(), EE_SELECTION_TOOL::CollectHits(), SCH_LINE_WIRE_BUS_TOOL::computeBreakPoint(), COMMON_TOOLS::CursorControl(), SCH_EDIT_TOOL::DeleteItemCursor(), PL_EDIT_TOOL::DeleteItemCursor(), PCB_CONTROL::DeleteItemCursor(), EDIT_TOOL::DeleteItems(), PL_EDIT_TOOL::DoDelete(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), PCB_TOOL_BASE::doInteractiveItemPlacement(), EDIT_TOOL::doMoveSelection(), SELECTION_TOOL::doSelectionMenu(), COMMON_TOOLS::doZoomFit(), COMMON_TOOLS::doZoomInOut(), COMMON_TOOLS::doZoomToPreset(), EDIT_TOOL::DragArcTrack(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), SCH_LINE_WIRE_BUS_TOOL::DrawSegments(), PL_DRAWING_TOOLS::DrawShape(), DRAWING_TOOL::drawShape(), DRAWING_TOOL::DrawZone(), BOARD_EDITOR_CONTROL::DrillOrigin(), SYMBOL_EDITOR_EDIT_TOOL::Duplicate(), PAD_TOOL::EnumeratePads(), EE_SELECTION_TOOL::GetNode(), ROUTER_TOOL::getStartLayer(), PCB_CONTROL::GridResetOrigin(), PCB_CONTROL::GridSetOrigin(), EE_SELECTION_TOOL::GuessSelectionCandidates(), PCB_SELECTION_TOOL::GuessSelectionCandidates(), ROUTER_TOOL::handleCommonEvents(), EE_SELECTION_TOOL::highlight(), PL_SELECTION_TOOL::highlight(), PCB_SELECTION_TOOL::highlight(), GERBVIEW_CONTROL::HighlightControl(), highlightNet(), PNS::TOOL_BASE::highlightNets(), PCB_SELECTION_TOOL::hitTestDistance(), SCH_EDIT_TOOL::Init(), EDIT_TOOL::Init(), ROUTER_TOOL::InlineDrag(), EE_POINT_EDITOR::Main(), SCH_MOVE_TOOL::Main(), PL_POINT_EDITOR::Main(), PCB_PICKER_TOOL::Main(), GERBVIEW_INSPECTION_TOOL::MeasureTool(), PCB_VIEWER_TOOLS::MeasureTool(), SCH_EDIT_TOOL::Mirror(), EDIT_TOOL::MoveExact(), PL_EDIT_TOOL::moveItem(), COMMON_TOOLS::OnGridChanged(), PCB_POINT_EDITOR::OnSelectionChange(), COMMON_TOOLS::PanControl(), SCH_EDITOR_CONTROL::Paste(), SYMBOL_EDITOR_EDIT_TOOL::Paste(), PL_EDIT_TOOL::Paste(), ROUTER_TOOL::performRouting(), PNS::TOOL_BASE::pickSingleItem(), BOARD_EDITOR_CONTROL::PlaceFootprint(), DRAWING_TOOL::PlaceImage(), DRAWING_TOOL::PlaceImportedGraphics(), PL_DRAWING_TOOLS::PlaceItem(), SCH_DRAWING_TOOLS::PlaceSymbol(), DRAWING_TOOL::PlaceText(), ROUTER_TOOL::prepareInteractive(), SCH_EDIT_TOOL::Properties(), EDIT_TOOL::Properties(), EE_SELECTION_TOOL::Reset(), EE_TOOL_BASE< T >::Reset(), GERBVIEW_SELECTION_TOOL::Reset(), PNS::TOOL_BASE::Reset(), BOARD_EDITOR_CONTROL::Reset(), DRAWING_TOOL::Reset(), PCB_CONTROL::Reset(), PCB_SELECTION_TOOL::Reset(), SCH_EDIT_TOOL::Rotate(), GERBVIEW_SELECTION_TOOL::select(), PCB_SELECTION_TOOL::Selectable(), EE_SELECTION_TOOL::SelectAll(), PCB_SELECTION_TOOL::SelectAll(), EE_SELECTION_TOOL::selectionContains(), PL_SELECTION_TOOL::selectionContains(), PCB_SELECTION_TOOL::selectionContains(), EE_SELECTION_TOOL::selectMultiple(), PL_SELECTION_TOOL::selectMultiple(), PCB_SELECTION_TOOL::selectMultiple(), PL_SELECTION_TOOL::SelectPoint(), EE_SELECTION_TOOL::selectPoint(), ZOOM_TOOL::selectRegion(), GERBVIEW_SELECTION_TOOL::selectVisually(), DRAWING_TOOL::SetAnchor(), SCH_DRAWING_TOOLS::SingleClickPlace(), SCH_EDITOR_CONTROL::ToggleERCErrors(), SCH_EDITOR_CONTROL::ToggleERCExclusions(), SCH_EDITOR_CONTROL::ToggleERCWarnings(), SCH_EDITOR_CONTROL::ToggleHiddenFields(), SCH_EDITOR_CONTROL::ToggleHiddenPins(), SCH_EDITOR_CONTROL::ToggleOPCurrents(), SCH_EDITOR_CONTROL::ToggleOPVoltages(), SCH_DRAWING_TOOLS::TwoClickPlace(), SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace(), EE_SELECTION_TOOL::unhighlight(), PL_SELECTION_TOOL::unhighlight(), PCB_SELECTION_TOOL::unhighlight(), GERBVIEW_SELECTION_TOOL::unselect(), GERBVIEW_SELECTION_TOOL::unselectVisually(), EE_POINT_EDITOR::updateEditedPoint(), PL_POINT_EDITOR::updateEditedPoint(), PCB_POINT_EDITOR::updateEditedPoint(), SCH_FIND_REPLACE_TOOL::UpdateFind(), PL_POINT_EDITOR::updateItem(), PCB_POINT_EDITOR::updateItem(), EE_TOOL_BASE< T >::updateItem(), SCH_EDITOR_CONTROL::UpdateNetHighlighting(), EE_POINT_EDITOR::updatePoints(), PL_POINT_EDITOR::updatePoints(), PCB_POINT_EDITOR::updatePoints(), PCB_SELECTION_TOOL::updateSelection(), PNS::TOOL_BASE::updateStartItem(), PCB_SELECTION_TOOL::view(), PCB_TOOL_BASE::view(), PCB_VIEWER_TOOLS::view(), EE_SELECTION_TOOL::ZoomFitCrossProbeBBox(), PCB_SELECTION_TOOL::ZoomFitCrossProbeBBox(), PCB_SELECTION_TOOL::zoomFitSelection(), EE_SELECTION_TOOL::~EE_SELECTION_TOOL(), GERBVIEW_SELECTION_TOOL::~GERBVIEW_SELECTION_TOOL(), and PCB_SELECTION_TOOL::~PCB_SELECTION_TOOL().

◆ getViewControls()

KIGFX::VIEW_CONTROLS * TOOL_BASE::getViewControls ( ) const
protectedinherited

Return the instance of VIEW_CONTROLS object used in the application.

It allows tools to read & modify user input and its settings (eg. show cursor, enable snapping to grid, etc.).

Returns
The instance of VIEW_CONTROLS.

Definition at line 42 of file tool_base.cpp.

43{
44 return m_toolMgr->GetViewControls();
45}
KIGFX::VIEW_CONTROLS * GetViewControls() const
Definition: tool_manager.h:287

References TOOL_MANAGER::GetViewControls(), and TOOL_BASE::m_toolMgr.

Referenced by EE_POINT_EDITOR::addCorner(), PCB_POINT_EDITOR::addCorner(), EE_POINT_EDITOR::addCornerCondition(), EE_SELECTION_TOOL::autostartEvent(), SCH_EDIT_TOOL::BreakWire(), PCB_SELECTION_TOOL::controls(), PCB_TOOL_BASE::controls(), EDIT_TOOL::copyToClipboard(), COMMON_TOOLS::CursorControl(), EDIT_TOOL::DeleteItems(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), EDIT_TOOL::doMoveSelection(), SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus(), COMMON_TOOLS::doZoomToPreset(), EDIT_TOOL::DragArcTrack(), DRAWING_TOOL::DrawCircle(), DRAWING_TOOL::DrawLine(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::DrawRectangle(), SCH_DRAWING_TOOLS::DrawShape(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), PL_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), SYMBOL_EDITOR_EDIT_TOOL::Duplicate(), PAD_TOOL::EnumeratePads(), SCH_LINE_WIRE_BUS_TOOL::finishSegments(), SCH_EDITOR_CONTROL::HighlightNet(), HighlightNet(), FOOTPRINT_EDITOR_CONTROL::ImportFootprint(), SCH_EDIT_TOOL::Init(), EDIT_TOOL::Init(), EE_POINT_EDITOR::Main(), EE_SELECTION_TOOL::Main(), SCH_MOVE_TOOL::Main(), SYMBOL_EDITOR_MOVE_TOOL::Main(), PICKER_TOOL::Main(), PL_EDIT_TOOL::Main(), PL_POINT_EDITOR::Main(), PCB_PICKER_TOOL::Main(), ROUTER_TOOL::MainLoop(), GERBVIEW_INSPECTION_TOOL::MeasureTool(), PCB_VIEWER_TOOLS::MeasureTool(), COMMON_TOOLS::OnGridChanged(), PCB_POINT_EDITOR::OnSelectionChange(), SCH_EDITOR_CONTROL::Paste(), SYMBOL_EDITOR_EDIT_TOOL::Paste(), ROUTER_TOOL::performDragging(), LENGTH_TUNER_TOOL::performTuning(), SYMBOL_EDITOR_DRAWING_TOOLS::PlaceAnchor(), PCB_CONTROL::placeBoardItems(), BOARD_EDITOR_CONTROL::PlaceFootprint(), SCH_DRAWING_TOOLS::PlaceImage(), DRAWING_TOOL::PlaceImage(), PL_DRAWING_TOOLS::PlaceItem(), SCH_DRAWING_TOOLS::PlaceSymbol(), SCH_EDIT_TOOL::Properties(), EDIT_TOOL::Properties(), SCH_EDIT_TOOL::RepeatDrawItem(), PL_SELECTION_TOOL::RequestSelection(), EE_SELECTION_TOOL::RequestSelection(), DRAWING_TOOL::Reset(), PCB_POINT_EDITOR::Reset(), COMMON_TOOLS::ResetLocalCoords(), ROUTER_TOOL::RouteSelected(), PCB_SELECTION_TOOL::selectCursor(), EE_SELECTION_TOOL::selectMultiple(), PL_SELECTION_TOOL::selectMultiple(), PCB_SELECTION_TOOL::selectMultiple(), EE_SELECTION_TOOL::SelectNode(), ZOOM_TOOL::selectRegion(), ALIGN_DISTRIBUTE_TOOL::selectTarget(), PICKER_TOOL::setControls(), PCB_PICKER_TOOL::setControls(), EE_POINT_EDITOR::setEditedPoint(), PL_POINT_EDITOR::setEditedPoint(), PCB_POINT_EDITOR::setEditedPoint(), SCH_DRAWING_TOOLS::SingleClickPlace(), SCH_DRAWING_TOOLS::TwoClickPlace(), SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace(), EE_POINT_EDITOR::updateEditedPoint(), PL_POINT_EDITOR::updateEditedPoint(), PCB_POINT_EDITOR::updateEditedPoint(), PCB_POINT_EDITOR::updateItem(), PL_EDIT_TOOL::updateModificationPoint(), and COMMON_TOOLS::ZoomCenter().

◆ Go()

template<class T >
void TOOL_INTERACTIVE::Go ( int(T::*)(const TOOL_EVENT &)  aStateFunc,
const TOOL_EVENT_LIST aConditions = TOOL_EVENTTC_ANYTA_ANY ) 
)
inherited

Define which state (aStateFunc) to go when a certain event arrives (aConditions).

No conditions means any event.

Definition at line 147 of file tool_interactive.h.

149{
150 TOOL_STATE_FUNC sptr = std::bind( aStateFunc, static_cast<T*>( this ), std::placeholders::_1 );
151
152 goInternal( sptr, aConditions );
153}
void goInternal(TOOL_STATE_FUNC &aState, const TOOL_EVENT_LIST &aConditions)
std::function< int(const TOOL_EVENT &)> TOOL_STATE_FUNC
Definition: tool_base.h:58

References TOOL_INTERACTIVE::goInternal().

Referenced by EDA_3D_CONTROLLER::setTransitions(), CVPCB_ASSOCIATION_TOOL::setTransitions(), CVPCB_CONTROL::setTransitions(), CVPCB_FOOTPRINT_VIEWER_SELECTION_TOOL::setTransitions(), EE_INSPECTION_TOOL::setTransitions(), EE_POINT_EDITOR::setTransitions(), EE_SELECTION_TOOL::setTransitions(), SCH_DRAWING_TOOLS::setTransitions(), SCH_EDIT_TOOL::setTransitions(), SCH_EDITOR_CONTROL::setTransitions(), SCH_FIND_REPLACE_TOOL::setTransitions(), SCH_LINE_WIRE_BUS_TOOL::setTransitions(), SCH_MOVE_TOOL::setTransitions(), SCH_NAVIGATE_TOOL::setTransitions(), SIMULATOR_CONTROL::setTransitions(), SYMBOL_EDITOR_CONTROL::setTransitions(), SYMBOL_EDITOR_DRAWING_TOOLS::setTransitions(), SYMBOL_EDITOR_EDIT_TOOL::setTransitions(), SYMBOL_EDITOR_MOVE_TOOL::setTransitions(), SYMBOL_EDITOR_PIN_TOOL::setTransitions(), GERBVIEW_CONTROL::setTransitions(), GERBVIEW_INSPECTION_TOOL::setTransitions(), GERBVIEW_SELECTION_TOOL::setTransitions(), COMMON_CONTROL::setTransitions(), COMMON_TOOLS::setTransitions(), PICKER_TOOL::setTransitions(), ZOOM_TOOL::setTransitions(), KICAD_MANAGER_CONTROL::setTransitions(), PL_DRAWING_TOOLS::setTransitions(), PL_EDIT_TOOL::setTransitions(), PL_EDITOR_CONTROL::setTransitions(), PL_POINT_EDITOR::setTransitions(), PL_SELECTION_TOOL::setTransitions(), AUTOPLACE_TOOL::setTransitions(), MICROWAVE_TOOL::setTransitions(), SCRIPTING_TOOL::setTransitions(), LENGTH_TUNER_TOOL::setTransitions(), ROUTER_TOOL::setTransitions(), BOARD_EDITOR_CONTROL::setTransitions(), setTransitions(), BOARD_REANNOTATE_TOOL::setTransitions(), CONVERT_TOOL::setTransitions(), DRAWING_TOOL::setTransitions(), DRC_TOOL::setTransitions(), EDIT_TOOL::setTransitions(), FOOTPRINT_EDITOR_CONTROL::setTransitions(), GLOBAL_EDIT_TOOL::setTransitions(), GROUP_TOOL::setTransitions(), PAD_TOOL::setTransitions(), PCB_CONTROL::setTransitions(), PCB_PICKER_TOOL::setTransitions(), PCB_POINT_EDITOR::setTransitions(), PCB_SELECTION_TOOL::setTransitions(), PCB_VIEWER_TOOLS::setTransitions(), ALIGN_DISTRIBUTE_TOOL::setTransitions(), POSITION_RELATIVE_TOOL::setTransitions(), PROPERTIES_TOOL::setTransitions(), and ZONE_FILLER_TOOL::setTransitions().

◆ goInternal()

void TOOL_INTERACTIVE::goInternal ( TOOL_STATE_FUNC aState,
const TOOL_EVENT_LIST aConditions 
)
privateinherited

Definition at line 70 of file tool_interactive.cpp.

71{
72 m_toolMgr->ScheduleNextState( this, aState, aConditions );
73}
void ScheduleNextState(TOOL_BASE *aTool, TOOL_STATE_FUNC &aHandler, const TOOL_EVENT_LIST &aConditions)
Define a state transition.

References TOOL_BASE::m_toolMgr, and TOOL_MANAGER::ScheduleNextState().

Referenced by TOOL_INTERACTIVE::Go().

◆ HideLocalRatsnest()

int BOARD_INSPECTION_TOOL::HideLocalRatsnest ( const TOOL_EVENT aEvent)

Show local ratsnest of a component.

Definition at line 1666 of file board_inspection_tool.cpp.

1667{
1668 getModel<BOARD>()->GetConnectivity()->ClearLocalRatsnest();
1669 delete m_dynamicData;
1670 m_dynamicData = nullptr;
1671
1672 return 0;
1673}

References m_dynamicData.

Referenced by setTransitions().

◆ HideNetInRatsnest()

int BOARD_INSPECTION_TOOL::HideNetInRatsnest ( const TOOL_EVENT aEvent)

Show the ratsnest for a given net.

Definition at line 1798 of file board_inspection_tool.cpp.

1799{
1800 doHideRatsnestNet( aEvent.Parameter<intptr_t>(), true );
1801 return 0;
1802}
T Parameter() const
Return a non-standard parameter assigned to the event.
Definition: tool_event.h:442

References doHideRatsnestNet(), and TOOL_EVENT::Parameter().

Referenced by setTransitions().

◆ HighlightItem()

int BOARD_INSPECTION_TOOL::HighlightItem ( const TOOL_EVENT aEvent)

Update ratsnest for selected items.

Definition at line 1319 of file board_inspection_tool.cpp.

1320{
1321 BOARD_ITEM* item = aEvent.Parameter<BOARD_ITEM*>();
1322
1323 m_frame->m_probingSchToPcb = true; // recursion guard
1324 {
1326
1327 if( item )
1328 m_toolMgr->RunAction( PCB_ACTIONS::selectItem, true, (void*) item );
1329 }
1330 m_frame->m_probingSchToPcb = false;
1331
1332 bool request3DviewRedraw = frame()->GetPcbNewSettings()->m_Display.m_Live3DRefresh;
1333
1334 if( item && item->Type() != PCB_FOOTPRINT_T )
1335 request3DviewRedraw = false;
1336
1337 // Update 3D viewer highlighting
1338 if( request3DviewRedraw )
1339 m_frame->Update3DView( false, true );
1340
1341 return 0;
1342}
static TOOL_ACTION selectItem
Select an item (specified as the event parameter).
Definition: pcb_actions.h:62
virtual void Update3DView(bool aMarkDirty, bool aRefresh, const wxString *aTitle=nullptr)
Update the 3D view, if the viewer is opened by this frame.

References PCB_TOOL_BASE::frame(), PCB_BASE_FRAME::GetPcbNewSettings(), PCBNEW_SETTINGS::m_Display, m_frame, PCBNEW_SETTINGS::DISPLAY_OPTIONS::m_Live3DRefresh, PCB_EDIT_FRAME::m_probingSchToPcb, TOOL_BASE::m_toolMgr, TOOL_EVENT::Parameter(), PCB_FOOTPRINT_T, TOOL_MANAGER::RunAction(), PCB_ACTIONS::selectionClear, PCB_ACTIONS::selectItem, EDA_ITEM::Type(), and PCB_BASE_FRAME::Update3DView().

Referenced by setTransitions().

◆ HighlightNet()

int BOARD_INSPECTION_TOOL::HighlightNet ( const TOOL_EVENT aEvent)

Clear all board highlights.

Definition at line 1491 of file board_inspection_tool.cpp.

1492{
1493 int netcode = aEvent.Parameter<intptr_t>();
1495 const std::set<int>& highlighted = settings->GetHighlightNetCodes();
1496
1497 if( netcode > 0 )
1498 {
1499 m_lastHighlighted = highlighted;
1500 settings->SetHighlight( true, netcode );
1502 m_currentlyHighlighted.clear();
1503 m_currentlyHighlighted.insert( netcode );
1504 }
1505 else if( aEvent.IsAction( &PCB_ACTIONS::highlightNetSelection ) )
1506 {
1507 // Highlight selection (cursor position will be ignored)
1508 highlightNet( getViewControls()->GetMousePosition(), true );
1509 }
1510 else if( aEvent.IsAction( &PCB_ACTIONS::toggleLastNetHighlight ) )
1511 {
1512 std::set<int> temp = highlighted;
1513 settings->SetHighlight( m_lastHighlighted );
1516 m_lastHighlighted = temp;
1517 }
1518 else if( aEvent.IsAction( &PCB_ACTIONS::toggleNetHighlight ) )
1519 {
1520 bool turnOn = highlighted.empty() && !m_currentlyHighlighted.empty();
1521 settings->SetHighlight( m_currentlyHighlighted, turnOn );
1523 }
1524 else // Highlight the net belonging to the item under the cursor
1525 {
1526 highlightNet( getViewControls()->GetMousePosition(), false );
1527 }
1528
1529 return 0;
1530}
bool highlightNet(const VECTOR2D &aPosition, bool aUseSelection)
Look for a BOARD_CONNECTED_ITEM in a given spot and if one is found - it enables highlight for its ne...
const std::set< int > & GetHighlightNetCodes() const
Return the netcode of currently highlighted net.
static TOOL_ACTION toggleNetHighlight
Definition: pcb_actions.h:499
static TOOL_ACTION toggleLastNetHighlight
Definition: pcb_actions.h:498
static TOOL_ACTION highlightNetSelection
Definition: pcb_actions.h:500
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:81

References KIGFX::RENDER_SETTINGS::GetHighlightNetCodes(), KIGFX::VIEW::GetPainter(), KIGFX::PAINTER::GetSettings(), TOOL_MANAGER::GetView(), TOOL_BASE::getViewControls(), highlightNet(), PCB_ACTIONS::highlightNetSelection, TOOL_EVENT::IsAction(), m_currentlyHighlighted, m_lastHighlighted, TOOL_BASE::m_toolMgr, TOOL_EVENT::Parameter(), PCB_ACTIONS::toggleLastNetHighlight, PCB_ACTIONS::toggleNetHighlight, and KIGFX::VIEW::UpdateAllLayersColor().

Referenced by setTransitions().

◆ highlightNet()

bool BOARD_INSPECTION_TOOL::highlightNet ( const VECTOR2D aPosition,
bool  aUseSelection 
)
private

Look for a BOARD_CONNECTED_ITEM in a given spot and if one is found - it enables highlight for its net.

Parameters
aPositionis the point where an item is expected (world coordinates).
aUseSelectionis true if we should use the current selection to pick the netcode

Definition at line 1345 of file board_inspection_tool.cpp.

1346{
1347 BOARD* board = static_cast<BOARD*>( m_toolMgr->GetModel() );
1350
1351 int net = -1;
1352 bool enableHighlight = false;
1353
1354 if( aUseSelection )
1355 {
1356 const PCB_SELECTION& selection = selectionTool->GetSelection();
1357 std::set<int> netcodes;
1358
1359 for( EDA_ITEM* item : selection )
1360 {
1361 if( BOARD_CONNECTED_ITEM* ci = dynamic_cast<BOARD_CONNECTED_ITEM*>( item ) )
1362 netcodes.insert( ci->GetNetCode() );
1363 }
1364
1365 enableHighlight = !netcodes.empty();
1366
1367 if( enableHighlight && netcodes.size() > 1 )
1368 {
1369 // If we are doing a multi-highlight, cross-probing back and other stuff is not
1370 // yet supported
1371 settings->SetHighlight( netcodes );
1373
1374 for( int multiNet : netcodes )
1375 board->SetHighLightNet( multiNet, true );
1376
1377 board->HighLightON();
1379 m_currentlyHighlighted = netcodes;
1380 return true;
1381 }
1382 else if( enableHighlight )
1383 {
1384 net = *netcodes.begin();
1385 }
1386 }
1387
1388 // If we didn't get a net to highlight from the selection, use the cursor
1389 if( net < 0 )
1390 {
1392 guide.SetIgnoreZoneFills( false );
1393
1394 PCB_LAYER_ID activeLayer = static_cast<PCB_LAYER_ID>( view()->GetTopLayer() );
1395 guide.SetPreferredLayer( activeLayer );
1396
1397 GENERAL_COLLECTOR collector;
1398 collector.Collect( board, { PCB_PAD_T, PCB_VIA_T, PCB_TRACE_T, PCB_ARC_T }, aPosition,
1399 guide );
1400
1401 if( collector.GetCount() == 0 )
1402 collector.Collect( board, { PCB_ZONE_T, PCB_FP_ZONE_T }, aPosition, guide );
1403
1404 // Apply the active selection filter, except we want to allow picking locked items for
1405 // highlighting even if the user has disabled them for selection
1406 SELECTION_FILTER_OPTIONS& filter = selectionTool->GetFilter();
1407
1408 bool saved = filter.lockedItems;
1409 filter.lockedItems = true;
1410
1411 selectionTool->FilterCollectedItems( collector, true );
1412
1413 filter.lockedItems = saved;
1414
1415 // Clear the previous highlight
1416 //m_frame->SendMessageToEESCHEMA( nullptr );
1417
1418 bool highContrast = settings->GetHighContrast();
1419 PCB_LAYER_ID contrastLayer = settings->GetPrimaryHighContrastLayer();
1420
1421 for( int i = collector.GetCount() - 1; i >= 0; i-- )
1422 {
1423 LSET itemLayers = collector[i]->GetLayerSet();
1424
1425 if( ( itemLayers & LSET::AllCuMask() ).none() ||
1426 ( highContrast && !itemLayers.Contains( contrastLayer ) ) )
1427 {
1428 collector.Remove( i );
1429 continue;
1430 }
1431 }
1432
1433 enableHighlight = ( collector.GetCount() > 0 );
1434
1435 // Obtain net code for the clicked item
1436 if( enableHighlight )
1437 {
1438 BOARD_CONNECTED_ITEM* targetItem = static_cast<BOARD_CONNECTED_ITEM*>( collector[0] );
1439
1440 if( targetItem->Type() == PCB_PAD_T )
1441 m_frame->SendCrossProbeItem( targetItem );
1442
1443 net = targetItem->GetNetCode();
1444 }
1445 }
1446
1447 const std::set<int>& netcodes = settings->GetHighlightNetCodes();
1448
1449 // Toggle highlight when the same net was picked
1450 if( netcodes.count( net ) )
1451 enableHighlight = !settings->IsHighlightEnabled();
1452
1453 if( enableHighlight != settings->IsHighlightEnabled() || !netcodes.count( net ) )
1454 {
1455 if( !netcodes.empty() )
1456 m_lastHighlighted = netcodes;
1457
1458 settings->SetHighlight( enableHighlight, net );
1460 }
1461
1462 // Store the highlighted netcode in the current board (for dialogs for instance)
1463 if( enableHighlight && net >= 0 )
1464 {
1465 m_currentlyHighlighted = netcodes;
1466 board->SetHighLightNet( net );
1467 board->HighLightON();
1468
1469 NETINFO_ITEM* netinfo = board->FindNet( net );
1470
1471 if( netinfo )
1472 {
1473 std::vector<MSG_PANEL_ITEM> items;
1474 netinfo->GetMsgPanelInfo( m_frame, items );
1475 m_frame->SetMsgPanel( items );
1477 }
1478 }
1479 else
1480 {
1481 m_currentlyHighlighted.clear();
1485 }
1486
1487 return true;
1488}
void SetHighLightNet(int aNetCode, bool aMulti=false)
Select the netcode to be highlighted.
Definition: board.cpp:2092
NETINFO_ITEM * FindNet(int aNetcode) const
Search for a net with the given netcode.
Definition: board.cpp:1478
void HighLightON(bool aValue=true)
Enable or disable net highlighting.
Definition: board.cpp:2105
int GetCount() const
Return the number of objects in the list.
Definition: collector.h:81
void Remove(int aIndex)
Remove the item at aIndex (first position is 0).
Definition: collector.h:109
A general implementation of a COLLECTORS_GUIDE.
Definition: collectors.h:326
void SetIgnoreZoneFills(bool ignore)
Definition: collectors.h:480
void SetPreferredLayer(PCB_LAYER_ID aLayer)
Definition: collectors.h:391
Used when the right click button is pressed, or when the select tool is in effect.
Definition: collectors.h:204
void Collect(BOARD_ITEM *aItem, const std::vector< KICAD_T > &aScanList, const VECTOR2I &aRefPos, const COLLECTORS_GUIDE &aGuide)
Scan a BOARD_ITEM using this class's Inspector method, which does the collection.
Definition: collectors.cpp:596
PCB_LAYER_ID GetPrimaryHighContrastLayer() const
Return the board layer which is in high-contrast mode.
bool IsHighlightEnabled() const
Return current highlight setting.
bool GetHighContrast() const
virtual int GetTopLayer() const
Definition: view.cpp:816
LSET is a set of PCB_LAYER_IDs.
Definition: layer_ids.h:532
bool Contains(PCB_LAYER_ID aLayer)
See if the layer set contains a PCB layer.
Definition: layer_ids.h:602
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
Definition: lset.cpp:773
Handle the data for a net.
Definition: netinfo.h:67
const wxString & GetNetname() const
Definition: netinfo.h:125
void GetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList) override
Return the information about the NETINFO_ITEM in aList to display in the message panel.
GENERAL_COLLECTORS_GUIDE GetCollectorsGuide()
void SendCrossProbeItem(BOARD_ITEM *aSyncItem)
Send a message to the schematic editor so that it may move its cursor to an item with the same refere...
void FilterCollectedItems(GENERAL_COLLECTOR &aCollector, bool aMultiSelect)
Apply the SELECTION_FITLER_OPTIONS to the collector.
SELECTION_FILTER_OPTIONS & GetFilter()
Set up handlers for various events.
PCB_LAYER_ID
A quick note on layer IDs:
Definition: layer_ids.h:59
This file contains data structures that are saved in the project file or project local settings file ...
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
Definition: typeinfo.h:102
@ PCB_ZONE_T
class ZONE, a copper pour area
Definition: typeinfo.h:112
@ PCB_FP_ZONE_T
class ZONE, managed by a footprint
Definition: typeinfo.h:100
@ PCB_PAD_T
class PAD, a pad in a footprint
Definition: typeinfo.h:87
@ PCB_ARC_T
class PCB_ARC, an arc track segment on a copper layer
Definition: typeinfo.h:103
@ PCB_TRACE_T
class PCB_TRACK, a track segment (segment on a copper layer)
Definition: typeinfo.h:101

References LSET::AllCuMask(), PCB_TOOL_BASE::board(), GENERAL_COLLECTOR::Collect(), LSET::Contains(), filter, PCB_SELECTION_TOOL::FilterCollectedItems(), PCB_BASE_FRAME::GetCollectorsGuide(), COLLECTOR::GetCount(), PCB_SELECTION_TOOL::GetFilter(), KIGFX::RENDER_SETTINGS::GetHighContrast(), TOOL_MANAGER::GetModel(), BOARD_CONNECTED_ITEM::GetNetCode(), KIGFX::VIEW::GetPainter(), KIGFX::RENDER_SETTINGS::GetPrimaryHighContrastLayer(), PCB_SELECTION_TOOL::GetSelection(), KIGFX::PAINTER::GetSettings(), TOOL_MANAGER::GetTool(), KIGFX::VIEW::GetTopLayer(), TOOL_BASE::getView(), TOOL_MANAGER::GetView(), BOARD::HighLightON(), m_currentlyHighlighted, m_frame, TOOL_BASE::m_toolMgr, PCB_ARC_T, PCB_FP_ZONE_T, PCB_PAD_T, PCB_TRACE_T, PCB_VIA_T, PCB_ZONE_T, BOARD::ResetNetHighLight(), PCB_TOOL_BASE::selection(), PCB_EDIT_FRAME::SendCrossProbeItem(), KIGFX::RENDER_SETTINGS::SetHighlight(), BOARD::SetHighLightNet(), GENERAL_COLLECTORS_GUIDE::SetIgnoreZoneFills(), GENERAL_COLLECTORS_GUIDE::SetPreferredLayer(), EDA_ITEM::Type(), KIGFX::VIEW::UpdateAllLayersColor(), and PCB_TOOL_BASE::view().

Referenced by HighlightNet().

◆ Init()

bool BOARD_INSPECTION_TOOL::Init ( )
overridevirtual

Init() is called once upon a registration of the tool.

Returns
True if the initialization went fine, false - otherwise.

Reimplemented from PCB_TOOL_BASE.

Definition at line 76 of file board_inspection_tool.cpp.

77{
79
80 std::shared_ptr<NET_CONTEXT_MENU> netSubMenu = std::make_shared<NET_CONTEXT_MENU>();
81 netSubMenu->SetTool( this );
82
83 static std::vector<KICAD_T> connectedTypes = { PCB_TRACE_T,
87 PCB_ZONE_T };
88
89 CONDITIONAL_MENU& menu = selectionTool->GetToolMenu().GetMenu();
90
91 selectionTool->GetToolMenu().RegisterSubMenu( netSubMenu );
92
93 menu.AddMenu( netSubMenu.get(), SELECTION_CONDITIONS::OnlyTypes( connectedTypes ), 100 );
94
95 return true;
96}
void AddMenu(ACTION_MENU *aMenu, const SELECTION_CONDITION &aCondition=SELECTION_CONDITIONS::ShowAlways, int aOrder=ANY_ORDER)
Add a submenu to the menu.
static SELECTION_CONDITION OnlyTypes(std::vector< KICAD_T > aTypes)
Create a functor that tests if the selected items are only of given types.
TOOL_MENU & GetToolMenu()
CONDITIONAL_MENU & GetMenu()
Definition: tool_menu.cpp:44
void RegisterSubMenu(std::shared_ptr< ACTION_MENU > aSubMenu)
Store a submenu of this menu model.
Definition: tool_menu.cpp:50
static std::vector< KICAD_T > connectedTypes

References CONDITIONAL_MENU::AddMenu(), connectedTypes, TOOL_MENU::GetMenu(), TOOL_MANAGER::GetTool(), TOOL_INTERACTIVE::GetToolMenu(), TOOL_BASE::m_toolMgr, SELECTION_CONDITIONS::OnlyTypes(), PCB_ARC_T, PCB_PAD_T, PCB_TRACE_T, PCB_VIA_T, PCB_ZONE_T, and TOOL_MENU::RegisterSubMenu().

◆ InspectClearance()

int BOARD_INSPECTION_TOOL::InspectClearance ( const TOOL_EVENT aEvent)

Definition at line 547 of file board_inspection_tool.cpp.

548{
550 const PCB_SELECTION& selection = selTool->GetSelection();
551
552 if( selection.Size() != 2 )
553 {
554 m_frame->ShowInfoBarError( _( "Select two items for a clearance resolution report." ) );
555 return 0;
556 }
557
558 BOARD_ITEM* a = static_cast<BOARD_ITEM*>( selection.GetItem( 0 ) );
559 BOARD_ITEM* b = static_cast<BOARD_ITEM*>( selection.GetItem( 1 ) );
560
561 wxCHECK( a && b, 0 );
562
563 if( a->Type() == PCB_GROUP_T )
564 {
565 PCB_GROUP* ag = static_cast<PCB_GROUP*>( a );
566
567 if( ag->GetItems().empty() )
568 {
569 m_frame->ShowInfoBarError( _( "Cannot generate clearance report on empty group." ) );
570 return 0;
571 }
572
573 a = *ag->GetItems().begin();
574 }
575
576 if( b->Type() == PCB_GROUP_T )
577 {
578 PCB_GROUP* bg = static_cast<PCB_GROUP*>( b );
579
580 if( bg->GetItems().empty() )
581 {
582 m_frame->ShowInfoBarError( _( "Cannot generate clearance report on empty group." ) );
583 return 0;
584 }
585
586 b = *bg->GetItems().begin();
587 }
588
589 // a and b could be null after group tests above.
590 wxCHECK( a && b, 0 );
591
592 if( m_inspectClearanceDialog == nullptr )
593 {
594 m_inspectClearanceDialog = std::make_unique<DIALOG_CONSTRAINTS_REPORTER>( m_frame );
595 m_inspectClearanceDialog->SetTitle( _( "Clearance Report" ) );
596
597 m_inspectClearanceDialog->Connect( wxEVT_CLOSE_WINDOW,
599 nullptr, this );
600 }
601
602 m_inspectClearanceDialog->DeleteAllPages();
603
604 if( a->Type() != PCB_ZONE_T && b->Type() == PCB_ZONE_T )
605 std::swap( a, b );
606 else if( !a->IsConnected() && b->IsConnected() )
607 std::swap( a, b );
608
609 WX_HTML_REPORT_BOX* r = nullptr;
611 LSET layerIntersection = a->GetLayerSet() & b->GetLayerSet();
612 LSET copperIntersection = layerIntersection & LSET::AllCuMask();
613 BOARD_CONNECTED_ITEM* ac = dynamic_cast<BOARD_CONNECTED_ITEM*>( a );
614 BOARD_CONNECTED_ITEM* bc = dynamic_cast<BOARD_CONNECTED_ITEM*>( b );
615 ZONE* zone = dynamic_cast<ZONE*>( a );
616 PAD* pad = dynamic_cast<PAD*>( b );
617 FOOTPRINT* aFP = dynamic_cast<FOOTPRINT*>( a );
618 FOOTPRINT* bFP = dynamic_cast<FOOTPRINT*>( b );
619
620 bool compileError = false;
621 DRC_ENGINE drcEngine = makeDRCEngine( &compileError );
622 DRC_CONSTRAINT constraint;
623 int clearance = 0;
624
625 if( copperIntersection.any() && zone && pad && zone->GetNetCode() == pad->GetNetCode() )
626 {
628
629 if( zone->IsOnLayer( active ) )
630 layer = active;
631 else if( zone->GetLayerSet().count() > 0 )
632 layer = zone->GetLayerSet().Seq().front();
633
634 r = m_inspectClearanceDialog->AddPage( _( "Zone" ) );
635 reportHeader( _( "Zone connection resolution for:" ), a, b, layer, r );
636
637 constraint = drcEngine.EvalZoneConnection( pad, zone, layer, r );
638
640 {
641 r->Report( "" );
642 r->Report( "" );
643 reportHeader( _( "Thermal relief gap resolution for:" ), a, b, layer, r );
644
645 constraint = drcEngine.EvalRules( THERMAL_RELIEF_GAP_CONSTRAINT, pad, zone, layer, r );
646 int gap = constraint.m_Value.Min();
647
648 if( compileError )
650
651 r->Report( "" );
652 r->Report( wxString::Format( _( "Resolved thermal relief gap: %s." ),
653 m_frame->StringFromValue( gap, true ) ) );
654
655 r->Report( "" );
656 r->Report( "" );
657 reportHeader( _( "Spoke width resolution for:" ), a, b, layer, r );
658
659 constraint = drcEngine.EvalRules( THERMAL_SPOKE_WIDTH_CONSTRAINT, pad, zone, layer, r );
660 int width = constraint.m_Value.Opt();
661
662 if( compileError )
664
665 r->Report( "" );
666 r->Report( wxString::Format( _( "Resolved thermal relief spoke width: %s." ),
667 m_frame->StringFromValue( width, true ) ) );
668
669 r->Report( "" );
670 r->Report( "" );
671 reportHeader( _( "Spoke count resolution for:" ), a, b, layer, r );
672
673 constraint = drcEngine.EvalRules( MIN_RESOLVED_SPOKES_CONSTRAINT, pad, zone, layer, r );
674 int minSpokes = constraint.m_Value.Min();
675
676 if( compileError )
678
679 r->Report( "" );
680 r->Report( wxString::Format( _( "Resolved min thermal relief spoke count: %d." ),
681 minSpokes ) );
682
683 std::shared_ptr<CONNECTIVITY_DATA> connectivity = pad->GetBoard()->GetConnectivity();
684 }
685 else if( constraint.m_ZoneConnection == ZONE_CONNECTION::NONE )
686 {
687 r->Report( "" );
688 r->Report( "" );
689 reportHeader( _( "Zone clearance resolution for:" ), a, b, layer, r );
690
691 clearance = zone->GetLocalClearance();
692 r->Report( "" );
693 r->Report( wxString::Format( _( "Zone clearance: %s." ),
694 m_frame->StringFromValue( clearance, true ) ) );
695
696 constraint = drcEngine.EvalRules( PHYSICAL_CLEARANCE_CONSTRAINT, pad, zone, layer, r );
697
698 if( constraint.m_Value.Min() > clearance )
699 {
700 clearance = constraint.m_Value.Min();
701
702 r->Report( "" );
703 r->Report( wxString::Format( _( "Overridden by larger physical clearance from %s;"
704 "clearance: %s." ),
705 EscapeHTML( constraint.GetName() ),
706 m_frame->StringFromValue( clearance, true ) ) );
707 }
708
709 if( !pad->FlashLayer( layer ) )
710 {
711 constraint = drcEngine.EvalRules( PHYSICAL_HOLE_CLEARANCE_CONSTRAINT, pad, zone,
712 layer, r );
713
714 if( constraint.m_Value.Min() > clearance )
715 {
716 clearance = constraint.m_Value.Min();
717
718 r->Report( "" );
719 r->Report( wxString::Format( _( "Overridden by larger physical hole clearance from %s;"
720 "clearance: %s." ),
721 EscapeHTML( constraint.GetName() ),
722 m_frame->StringFromValue( clearance, true ) ) );
723 }
724 }
725
726 if( compileError )
728
729 r->Report( "" );
730 r->Report( wxString::Format( _( "Resolved clearance: %s." ),
731 m_frame->StringFromValue( clearance, true ) ) );
732 }
733 else
734 {
735 r->Report( "" );
736 r->Report( "" );
737 reportHeader( _( "Zone clearance resolution for:" ), a, b, layer, r );
738
739 if( compileError )
741
742 // Report a 0 clearance for solid connections
743 r->Report( "" );
744 r->Report( wxString::Format( _( "Resolved clearance: %s." ),
745 m_frame->StringFromValue( 0, true ) ) );
746 }
747
748 r->Flush();
749 }
750 else if( copperIntersection.any() && !aFP && !bFP )
751 {
752 PCB_LAYER_ID layer = active;
753
754 if( !copperIntersection.test( layer ) )
755 layer = copperIntersection.Seq().front();
756
757 r = m_inspectClearanceDialog->AddPage( m_frame->GetBoard()->GetLayerName( layer ) );
758 reportHeader( _( "Clearance resolution for:" ), a, b, layer, r );
759
760 if( ac && bc && ac->GetNetCode() > 0 && ac->GetNetCode() == bc->GetNetCode() )
761 {
762 // Same nets....
763 r->Report( _( "Items belong to the same net. Clearance is 0." ) );
764 }
765 else
766 {
767 // Different nets (or one or both unconnected)....
768 constraint = drcEngine.EvalRules( CLEARANCE_CONSTRAINT, a, b, layer, r );
769 clearance = constraint.m_Value.Min();
770
771 if( compileError )
773
774 r->Report( "" );
775
776 if( clearance < 0 )
777 {
778 r->Report( wxString::Format( _( "Resolved clearance: %s; clearance will not be tested." ),
779 m_frame->StringFromValue( clearance, true ) ) );
780 }
781 else
782 {
783 r->Report( wxString::Format( _( "Resolved clearance: %s." ),
784 m_frame->StringFromValue( clearance, true ) ) );
785 }
786 }
787
788 r->Flush();
789 }
790
791 if( ac && bc )
792 {
793 NETINFO_ITEM* refNet = ac->GetNet();
794 wxString coupledNet;
795 wxString dummy;
796
797 if( DRC_ENGINE::MatchDpSuffix( refNet->GetNetname(), coupledNet, dummy )
798 && bc->GetNetname() == coupledNet )
799 {
800 r = m_inspectClearanceDialog->AddPage( _( "Diff Pair" ) );
801 reportHeader( _( "Diff pair gap resolution for:" ), ac, bc, active, r );
802
803 constraint = drcEngine.EvalRules( DIFF_PAIR_GAP_CONSTRAINT, ac, bc, active, r );
804
805 r->Report( "" );
806 r->Report( wxString::Format( _( "Resolved gap constraints: min %s; opt %s; max %s." ),
807 reportMin( m_frame, constraint ),
808 reportOpt( m_frame, constraint ),
809 reportMax( m_frame, constraint ) ) );
810
811 r->Report( "" );
812 r->Report( "" );
813 r->Report( "" );
814 reportHeader( _( "Diff pair max uncoupled length resolution for:" ), ac, bc, active, r );
815
817 {
818 r->Report( "" );
819 r->Report( _( "No 'diff_pair_uncoupled' constraints defined." ) );
820 }
821 else
822 {
823 constraint = drcEngine.EvalRules( DIFF_PAIR_MAX_UNCOUPLED_CONSTRAINT, ac, bc,
824 active, r );
825
826 r->Report( "" );
827 r->Report( wxString::Format( _( "Resolved max uncoupled length: %s." ),
828 reportMax( m_frame, constraint ) ) );
829 }
830 r->Flush();
831 }
832 }
833
834 auto isOnCorrespondingLayer=
835 [&]( BOARD_ITEM* aItem, PCB_LAYER_ID aLayer, wxString* aWarning )
836 {
837 if( aItem->IsOnLayer( aLayer ) )
838 return true;
839
840 PCB_LAYER_ID correspondingMask = IsFrontLayer( aLayer ) ? F_Mask : B_Mask;
841 PCB_LAYER_ID correspondingCopper = IsFrontLayer( aLayer ) ? F_Cu : B_Cu;
842
843 if( aItem->IsOnLayer( aLayer ) )
844 return true;
845
846 if( aItem->IsOnLayer( correspondingMask ) )
847 return true;
848
849 if( aItem->IsTented() && aItem->IsOnLayer( correspondingCopper ) )
850 {
851 *aWarning = wxString::Format( _( "Note: %s is tented; clearance will only be "
852 "applied to holes." ),
853 getItemDescription( aItem ) );
854 return true;
855 }
856
857 return false;
858 };
859
860 for( PCB_LAYER_ID layer : { F_SilkS, B_SilkS } )
861 {
862 wxString warning;
863
864 if( ( a->IsOnLayer( layer ) && isOnCorrespondingLayer( b, layer, &warning ) )
865 || ( b->IsOnLayer( layer ) && isOnCorrespondingLayer( a, layer, &warning ) ) )
866 {
867 r = m_inspectClearanceDialog->AddPage( m_frame->GetBoard()->GetLayerName( layer ) );
868 reportHeader( _( "Silkscreen clearance resolution for:" ), a, b, layer, r );
869
870 constraint = drcEngine.EvalRules( SILK_CLEARANCE_CONSTRAINT, a, b, layer, r );
871 clearance = constraint.m_Value.Min();
872
873 if( compileError )
875
876 r->Report( "" );
877
878 if( !warning.IsEmpty() )
879 r->Report( warning );
880
881 r->Report( wxString::Format( _( "Resolved clearance: %s." ),
882 m_frame->StringFromValue( clearance, true ) ) );
883
884 r->Flush();
885 }
886 }
887
888 for( PCB_LAYER_ID layer : { F_CrtYd, B_CrtYd } )
889 {
890 bool aCourtyard = aFP && !aFP->GetCourtyard( layer ).IsEmpty();
891 bool bCourtyard = bFP && !bFP->GetCourtyard( layer ).IsEmpty();
892
893 if( aCourtyard && bCourtyard )
894 {
895 r = m_inspectClearanceDialog->AddPage( m_frame->GetBoard()->GetLayerName( layer ) );
896 reportHeader( _( "Courtyard clearance resolution for:" ), a, b, layer, r );
897
898 constraint = drcEngine.EvalRules( COURTYARD_CLEARANCE_CONSTRAINT, a, b, layer, r );
899 clearance = constraint.m_Value.Min();
900
901 if( compileError )
903
904 r->Report( "" );
905 r->Report( wxString::Format( _( "Resolved clearance: %s." ),
906 m_frame->StringFromValue( clearance, true ) ) );
907
908 r->Flush();
909 }
910 }
911
912 if( a->HasHole() || b->HasHole() )
913 {
915 bool pageAdded = false;
916
917 if( a->HasHole() && b->IsOnLayer( active ) && IsCopperLayer( active ) )
918 layer = active;
919 else if( b->HasHole() && a->IsOnLayer( active ) && IsCopperLayer( active ) )
920 layer = active;
921 else if( a->HasHole() && b->IsOnCopperLayer() )
922 layer = b->GetLayer();
923 else if( b->HasHole() && b->IsOnCopperLayer() )
924 layer = a->GetLayer();
925
926 if( layer >= 0 )
927 {
928 if( !pageAdded )
929 {
930 r = m_inspectClearanceDialog->AddPage( _( "Hole" ) );
931 pageAdded = true;
932 }
933 else
934 {
935 r->Report( "" );
936 r->Report( "" );
937 r->Report( "" );
938 }
939
940 reportHeader( _( "Hole clearance resolution for:" ), a, b, layer, r );
941
942 constraint = drcEngine.EvalRules( HOLE_CLEARANCE_CONSTRAINT, a, b, layer, r );
943 clearance = constraint.m_Value.Min();
944
945 if( compileError )
947
948 r->Report( "" );
949 r->Report( wxString::Format( _( "Resolved clearance: %s." ),
950 m_frame->StringFromValue( clearance, true ) ) );
951
952 r->Flush();
953 }
954
955 if( a->HasHole() && b->HasHole() )
956 {
957 if( !pageAdded )
958 {
959 r = m_inspectClearanceDialog->AddPage( _( "Hole" ) );
960 pageAdded = true;
961 }
962 else
963 {
964 r->Report( "" );
965 r->Report( "" );
966 r->Report( "" );
967 }
968
969 reportHeader( _( "Hole to hole clearance resolution for:" ), a, b, r );
970
971 constraint = drcEngine.EvalRules( HOLE_TO_HOLE_CONSTRAINT, a, b, UNDEFINED_LAYER, r );
972 clearance = constraint.m_Value.Min();
973
974 if( compileError )
976
977 r->Report( "" );
978 r->Report( wxString::Format( _( "Resolved clearance: %s." ),
979 m_frame->StringFromValue( clearance, true ) ) );
980
981 r->Flush();
982 }
983 }
984
985 for( PCB_LAYER_ID edgeLayer : { Edge_Cuts, Margin } )
986 {
988
989 if( a->IsOnLayer( edgeLayer ) && b->Type() != PCB_FOOTPRINT_T )
990 {
991 if( b->IsOnLayer( active ) && IsCopperLayer( active ) )
992 layer = active;
993 else if( IsCopperLayer( b->GetLayer() ) )
994 layer = b->GetLayer();
995 }
996 else if( b->IsOnLayer( edgeLayer ) && a->Type() != PCB_FOOTPRINT_T )
997 {
998 if( a->IsOnLayer( active ) && IsCopperLayer( active ) )
999 layer = active;
1000 else if( IsCopperLayer( a->GetLayer() ) )
1001 layer = a->GetLayer();
1002 }
1003
1004 if( layer >= 0 )
1005 {
1006 wxString layerName = m_frame->GetBoard()->GetLayerName( edgeLayer );
1007 r = m_inspectClearanceDialog->AddPage( layerName + wxS( " " ) + _( "Clearance" ) );
1008 reportHeader( _( "Edge clearance resolution for:" ), a, b, layer, r );
1009
1010 constraint = drcEngine.EvalRules( EDGE_CLEARANCE_CONSTRAINT, a, b, layer, r );
1011 clearance = constraint.m_Value.Min();
1012
1013 if( compileError )
1014 reportCompileError( r );
1015
1016 r->Report( "" );
1017 r->Report( wxString::Format( _( "Resolved clearance: %s." ),
1018 m_frame->StringFromValue( clearance, true ) ) );
1019
1020 r->Flush();
1021 }
1022 }
1023
1024 r = m_inspectClearanceDialog->AddPage( _( "Physical Clearances" ) );
1025
1026 auto reportPhysicalClearance =
1027 [&]( PCB_LAYER_ID aLayer )
1028 {
1029 reportHeader( _( "Physical clearance resolution for:" ), a, b, aLayer, r );
1030
1031 constraint = drcEngine.EvalRules( PHYSICAL_CLEARANCE_CONSTRAINT, a, b, aLayer, r );
1032 clearance = constraint.m_Value.Min();
1033
1034 if( compileError )
1035 {
1036 reportCompileError( r );
1037 }
1039 {
1040 r->Report( "" );
1041 r->Report( _( "No 'physical_clearance' constraints defined." ) );
1042 }
1043 else
1044 {
1045 r->Report( "" );
1046 r->Report( wxString::Format( _( "Resolved clearance: %s." ),
1047 m_frame->StringFromValue( clearance, true ) ) );
1048 }
1049
1050 r->Report( "" );
1051 r->Report( "" );
1052 r->Report( "" );
1053 };
1054
1055 if( layerIntersection.any() )
1056 {
1057 PCB_LAYER_ID layer = active;
1058
1059 if( !layerIntersection.test( layer ) )
1060 layer = layerIntersection.Seq().front();
1061
1062 reportPhysicalClearance( layer );
1063 }
1064
1065 if( aFP && b->IsOnLayer( Edge_Cuts ) )
1066 {
1067 if( !aFP->GetCourtyard( F_CrtYd ).IsEmpty() )
1068 reportPhysicalClearance( F_CrtYd );
1069
1070 if( !aFP->GetCourtyard( B_CrtYd ).IsEmpty() )
1071 reportPhysicalClearance( B_CrtYd );
1072 }
1073 else if( bFP && a->IsOnLayer( Edge_Cuts ) )
1074 {
1075 if( !bFP->GetCourtyard( F_CrtYd ).IsEmpty() )
1076 reportPhysicalClearance( F_CrtYd );
1077
1078 if( !bFP->GetCourtyard( B_CrtYd ).IsEmpty() )
1079 reportPhysicalClearance( B_CrtYd );
1080 }
1081
1082 if( a->HasHole() || b->HasHole() )
1083 {
1084 PCB_LAYER_ID layer;
1085
1086 if( a->HasHole() && b->IsOnLayer( active ) )
1087 layer = active;
1088 else if( b->HasHole() && a->IsOnLayer( active ) )
1089 layer = active;
1090 else if( a->HasHole() )
1091 layer = b->GetLayer();
1092 else
1093 layer = a->GetLayer();
1094
1095 reportHeader( _( "Physical hole clearance resolution for:" ), a, b, layer, r );
1096
1097 constraint = drcEngine.EvalRules( PHYSICAL_HOLE_CLEARANCE_CONSTRAINT, a, b, layer, r );
1098 clearance = constraint.m_Value.Min();
1099
1100 if( compileError )
1101 {
1102 reportCompileError( r );
1103 }
1105 {
1106 r->Report( "" );
1107 r->Report( _( "No 'physical_hole_clearance' constraints defined." ) );
1108 }
1109 else
1110 {
1111 r->Report( "" );
1112 r->Report( wxString::Format( _( "Resolved clearance: %s." ),
1113 m_frame->StringFromValue( clearance, true ) ) );
1114 }
1115 }
1116
1117 r->Flush();
1118
1119 m_inspectClearanceDialog->Raise();
1120 m_inspectClearanceDialog->Show( true );
1121 return 0;
1122}
wxString reportMax(PCB_BASE_FRAME *aFrame, DRC_CONSTRAINT &aConstraint)
wxString reportMin(PCB_BASE_FRAME *aFrame, DRC_CONSTRAINT &aConstraint)
wxString reportOpt(PCB_BASE_FRAME *aFrame, DRC_CONSTRAINT &aConstraint)
NETINFO_ITEM * GetNet() const
Return #NET_INFO object for a given item.
void reportCompileError(REPORTER *r)
wxString getItemDescription(BOARD_ITEM *aItem)
void reportHeader(const wxString &aTitle, BOARD_ITEM *a, REPORTER *r)
DRC_ENGINE makeDRCEngine(bool *aCompileError, bool *aCourtyardError=nullptr)
void onInspectClearanceDialogClosed(wxCommandEvent &aEvent)
std::unique_ptr< DIALOG_CONSTRAINTS_REPORTER > m_inspectClearanceDialog
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition: board_item.h:192
virtual bool IsTented() const
Definition: board_item.h:145
virtual LSET GetLayerSet() const
Return a std::bitset of all layers on which the item physically resides.
Definition: board_item.h:197
virtual bool IsOnLayer(PCB_LAYER_ID aLayer, bool aIncludeCourtyards=false) const
Test to see if this object is on the given layer.
Definition: board_item.h:257
virtual bool IsOnCopperLayer() const
Definition: board_item.h:135
virtual bool HasHole() const
Definition: board_item.h:140
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Return the name of a aLayer.
Definition: board.cpp:474
wxString GetName() const
Definition: drc_rule.h:149
ZONE_CONNECTION m_ZoneConnection
Definition: drc_rule.h:174
MINOPTMAX< int > m_Value
Definition: drc_rule.h:172
Design Rule Checker object that performs all the DRC tests.
Definition: drc_engine.h:83
bool HasRulesForConstraintType(DRC_CONSTRAINT_T constraintID)
DRC_CONSTRAINT EvalRules(DRC_CONSTRAINT_T aConstraintType, const BOARD_ITEM *a, const BOARD_ITEM *b, PCB_LAYER_ID aLayer, REPORTER *aReporter=nullptr)
Definition: drc_engine.cpp:669
DRC_CONSTRAINT EvalZoneConnection(const BOARD_ITEM *a, const BOARD_ITEM *b, PCB_LAYER_ID aLayer, REPORTER *aReporter=nullptr)
Definition: drc_engine.cpp:612
static int MatchDpSuffix(const wxString &aNetName, wxString &aComplementNet, wxString &aBaseDpName)
Check if the given net is a diff pair, returning its polarity and complement if so.
void ShowInfoBarError(const wxString &aErrorMsg, bool aShowCloseButton=false, WX_INFOBAR::MESSAGE_TYPE aType=WX_INFOBAR::MESSAGE_TYPE::GENERIC)
Show the WX_INFOBAR displayed on the top of the canvas with a message and an error icon on the left o...
const SHAPE_POLY_SET & GetCourtyard(PCB_LAYER_ID aLayer) const
Used in DRC to test the courtyard area (a complex polygon).
Definition: footprint.cpp:2233
LSEQ Seq(const PCB_LAYER_ID *aWishListSequence, unsigned aCount) const
Return an LSEQ from the union of this LSET and a desired sequence.
Definition: lset.cpp:411
T Min() const
Definition: minoptmax.h:33
T Opt() const
Definition: minoptmax.h:35
virtual PCB_LAYER_ID GetActiveLayer() const
BOARD * GetBoard() const
std::unordered_set< BOARD_ITEM * > & GetItems()
Definition: pcb_group.h:68
virtual KIGFX::VIEW_ITEM * GetItem(unsigned int aIdx) const override
Definition: selection.cpp:75
int Size() const
Returns the number of selected parts.
Definition: selection.h:115
bool IsEmpty() const
wxString StringFromValue(double aValue, bool aAddUnitLabel=false, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
Converts aValue in internal units into a united string.
A slimmed down version of WX_HTML_REPORT_PANEL.
REPORTER & Report(const wxString &aText, SEVERITY aSeverity=RPT_SEVERITY_UNDEFINED) override
Report a string with a given severity.
void Flush()
Build the HTML messages page.
Handle a list of polygons defining a copper zone.
Definition: zone.h:57
virtual bool IsOnLayer(PCB_LAYER_ID, bool aIncludeCourtyards=false) const override
Test to see if this object is on the given layer.
Definition: zone.cpp:323
int GetLocalClearance(wxString *aSource) const override
Return any local clearances set in the "classic" (ie: pre-rule) system.
Definition: zone.cpp:476
virtual LSET GetLayerSet() const override
Return a std::bitset of all layers on which the item physically resides.
Definition: zone.h:122
@ COURTYARD_CLEARANCE_CONSTRAINT
Definition: drc_rule.h:52
@ DIFF_PAIR_MAX_UNCOUPLED_CONSTRAINT
Definition: drc_rule.h:67
@ DIFF_PAIR_GAP_CONSTRAINT
Definition: drc_rule.h:66
@ SILK_CLEARANCE_CONSTRAINT
Definition: drc_rule.h:53
@ EDGE_CLEARANCE_CONSTRAINT
Definition: drc_rule.h:50
@ MIN_RESOLVED_SPOKES_CONSTRAINT
Definition: drc_rule.h:61
@ PHYSICAL_HOLE_CLEARANCE_CONSTRAINT
Definition: drc_rule.h:71
@ CLEARANCE_CONSTRAINT
Definition: drc_rule.h:47
@ THERMAL_SPOKE_WIDTH_CONSTRAINT
Definition: drc_rule.h:60
@ THERMAL_RELIEF_GAP_CONSTRAINT
Definition: drc_rule.h:59
@ HOLE_CLEARANCE_CONSTRAINT
Definition: drc_rule.h:48
@ PHYSICAL_CLEARANCE_CONSTRAINT
Definition: drc_rule.h:70
@ HOLE_TO_HOLE_CONSTRAINT
Definition: drc_rule.h:49
bool IsFrontLayer(PCB_LAYER_ID aLayerId)
Layer classification: check if it's a front layer.
Definition: layer_ids.h:901
bool IsCopperLayer(int aLayerId)
Tests whether a layer is a copper layer.
Definition: layer_ids.h:827
@ F_CrtYd
Definition: layer_ids.h:117
@ Edge_Cuts
Definition: layer_ids.h:113
@ B_Mask
Definition: layer_ids.h:106
@ B_Cu
Definition: layer_ids.h:95
@ F_Mask
Definition: layer_ids.h:107
@ Margin
Definition: layer_ids.h:114
@ F_SilkS
Definition: layer_ids.h:104
@ B_CrtYd
Definition: layer_ids.h:116
@ UNDEFINED_LAYER
Definition: layer_ids.h:60
@ B_SilkS
Definition: layer_ids.h:103
@ F_Cu
Definition: layer_ids.h:64
std::vector< FAB_LAYER_COLOR > dummy
wxString EscapeHTML(const wxString &aString)
Return a new wxString escaped for embedding in HTML.
@ THERMAL
Use thermal relief for pads.
@ NONE
Pads are not covered.

References _, LSET::AllCuMask(), B_CrtYd, B_Cu, B_Mask, B_SilkS, CLEARANCE_CONSTRAINT, COURTYARD_CLEARANCE_CONSTRAINT, DIFF_PAIR_GAP_CONSTRAINT, DIFF_PAIR_MAX_UNCOUPLED_CONSTRAINT, dummy, EDGE_CLEARANCE_CONSTRAINT, Edge_Cuts, EscapeHTML(), DRC_ENGINE::EvalRules(), DRC_ENGINE::EvalZoneConnection(), F_CrtYd, F_Cu, F_Mask, F_SilkS, WX_HTML_REPORT_BOX::Flush(), Format(), PCB_BASE_FRAME::GetActiveLayer(), PCB_BASE_FRAME::GetBoard(), FOOTPRINT::GetCourtyard(), SELECTION::GetItem(), getItemDescription(), PCB_GROUP::GetItems(), BOARD_ITEM::GetLayer(), BOARD::GetLayerName(), BOARD_ITEM::GetLayerSet(), ZONE::GetLayerSet(), ZONE::GetLocalClearance(), DRC_CONSTRAINT::GetName(), BOARD_CONNECTED_ITEM::GetNet(), BOARD_CONNECTED_ITEM::GetNetCode(), BOARD_CONNECTED_ITEM::GetNetname(), NETINFO_ITEM::GetNetname(), PCB_SELECTION_TOOL::GetSelection(), TOOL_MANAGER::GetTool(), BOARD_ITEM::HasHole(), DRC_ENGINE::HasRulesForConstraintType(), HOLE_CLEARANCE_CONSTRAINT, HOLE_TO_HOLE_CONSTRAINT, BOARD_ITEM::IsConnected(), IsCopperLayer(), SHAPE_POLY_SET::IsEmpty(), IsFrontLayer(), BOARD_ITEM::IsOnCopperLayer(), BOARD_ITEM::IsOnLayer(), ZONE::IsOnLayer(), BOARD_ITEM::IsTented(), m_frame, m_inspectClearanceDialog, TOOL_BASE::m_toolMgr, DRC_CONSTRAINT::m_Value, DRC_CONSTRAINT::m_ZoneConnection, makeDRCEngine(), Margin, DRC_ENGINE::MatchDpSuffix(), MINOPTMAX< T >::Min(), MIN_RESOLVED_SPOKES_CONSTRAINT, NONE, onInspectClearanceDialogClosed(), MINOPTMAX< T >::Opt(), pad, PCB_FOOTPRINT_T, PCB_GROUP_T, PCB_ZONE_T, PHYSICAL_CLEARANCE_CONSTRAINT, PHYSICAL_HOLE_CLEARANCE_CONSTRAINT, WX_HTML_REPORT_BOX::Report(), reportCompileError(), reportHeader(), reportMax(), reportMin(), reportOpt(), PCB_TOOL_BASE::selection(), LSET::Seq(), EDA_BASE_FRAME::ShowInfoBarError(), SILK_CLEARANCE_CONSTRAINT, SELECTION::Size(), UNITS_PROVIDER::StringFromValue(), THERMAL, THERMAL_RELIEF_GAP_CONSTRAINT, THERMAL_SPOKE_WIDTH_CONSTRAINT, EDA_ITEM::Type(), and UNDEFINED_LAYER.

Referenced by setTransitions().

◆ InspectConstraints()

int BOARD_INSPECTION_TOOL::InspectConstraints ( const TOOL_EVENT aEvent)

Definition at line 1125 of file board_inspection_tool.cpp.

1126{
1127#define EVAL_RULES( constraint, a, b, layer, r ) drcEngine.EvalRules( constraint, a, b, layer, r )
1128
1130 const PCB_SELECTION& selection = selTool->GetSelection();
1131
1132 if( selection.Size() != 1 )
1133 {
1134 m_frame->ShowInfoBarError( _( "Select an item for a constraints resolution report." ) );
1135 return 0;
1136 }
1137
1138 if( m_inspectConstraintsDialog == nullptr )
1139 {
1140 m_inspectConstraintsDialog = std::make_unique<DIALOG_CONSTRAINTS_REPORTER>( m_frame );
1141 m_inspectConstraintsDialog->SetTitle( _( "Constraints Report" ) );
1142
1143 m_inspectConstraintsDialog->Connect( wxEVT_CLOSE_WINDOW,
1145 nullptr, this );
1146 }
1147
1148 m_inspectConstraintsDialog->DeleteAllPages();
1149
1150 BOARD_ITEM* item = static_cast<BOARD_ITEM*>( selection.GetItem( 0 ) );
1151 bool compileError = false;
1152 bool courtyardError = false;
1153 DRC_ENGINE drcEngine = makeDRCEngine( &compileError, &courtyardError );
1154 DRC_CONSTRAINT constraint;
1155
1156 WX_HTML_REPORT_BOX* r = nullptr;
1157
1158 if( item->Type() == PCB_TRACE_T )
1159 {
1160 r = m_inspectConstraintsDialog->AddPage( _( "Track Width" ) );
1161 reportHeader( _( "Track width resolution for:" ), item, r );
1162
1163 constraint = EVAL_RULES( TRACK_WIDTH_CONSTRAINT, item, nullptr, item->GetLayer(), r );
1164
1165 if( compileError )
1166 reportCompileError( r );
1167
1168 r->Report( "" );
1169 r->Report( wxString::Format( _( "Width constraints: min %s; opt %s; max %s." ),
1170 reportMin( m_frame, constraint ),
1171 reportOpt( m_frame, constraint ),
1172 reportMax( m_frame, constraint ) ) );
1173
1174 r->Flush();
1175 }
1176
1177 if( item->Type() == PCB_VIA_T )
1178 {
1179 r = m_inspectConstraintsDialog->AddPage( _( "Via Diameter" ) );
1180 reportHeader( _( "Via diameter resolution for:" ), item, r );
1181
1182 // PADSTACKS TODO: once we have padstacks we'll need to run this per-layer....
1183 constraint = EVAL_RULES( VIA_DIAMETER_CONSTRAINT, item, nullptr, UNDEFINED_LAYER, r );
1184
1185 if( compileError )
1186 reportCompileError( r );
1187
1188 r->Report( "" );
1189 r->Report( wxString::Format( _( "Diameter constraints: min %s; opt %s; max %s." ),
1190 reportMin( m_frame, constraint ),
1191 reportOpt( m_frame, constraint ),
1192 reportMax( m_frame, constraint ) ) );
1193
1194 r->Flush();
1195
1196 r = m_inspectConstraintsDialog->AddPage( _( "Via Annular Width" ) );
1197 reportHeader( _( "Via annular width resolution for:" ), item, r );
1198
1199 // PADSTACKS TODO: once we have padstacks we'll need to run this per-layer....
1200 constraint = EVAL_RULES( ANNULAR_WIDTH_CONSTRAINT, item, nullptr, UNDEFINED_LAYER, r );
1201
1202 if( compileError )
1203 reportCompileError( r );
1204
1205 r->Report( "" );
1206 r->Report( wxString::Format( _( "Annular width constraints: min %s; opt %s; max %s." ),
1207 reportMin( m_frame, constraint ),
1208 reportOpt( m_frame, constraint ),
1209 reportMax( m_frame, constraint ) ) );
1210
1211 r->Flush();
1212 }
1213
1214 if( ( item->Type() == PCB_PAD_T && static_cast<PAD*>( item )->GetDrillSize().x > 0 )
1215 || item->Type() == PCB_VIA_T )
1216 {
1217 r = m_inspectConstraintsDialog->AddPage( _( "Hole Size" ) );
1218 reportHeader( _( "Hole diameter resolution for:" ), item, r );
1219
1220 // PADSTACKS TODO: once we have padstacks we'll need to run this per-layer....
1221 constraint = EVAL_RULES( HOLE_SIZE_CONSTRAINT, item, nullptr, UNDEFINED_LAYER, r );
1222
1223 if( compileError )
1224 reportCompileError( r );
1225
1226 r->Report( "" );
1227 r->Report( wxString::Format( _( "Diameter constraints: min %s; opt %s; max %s." ),
1228 reportMin( m_frame, constraint ),
1229 reportOpt( m_frame, constraint ),
1230 reportMax( m_frame, constraint ) ) );
1231
1232 r->Flush();
1233 }
1234
1235 if( item->Type() == PCB_TEXT_T
1236 || item->Type() == PCB_TEXTBOX_T
1237 || item->Type() == PCB_FP_TEXT_T )
1238 {
1239 r = m_inspectConstraintsDialog->AddPage( _( "Text Size" ) );
1240 reportHeader( _( "Text height resolution for:" ), item, r );
1241
1242 constraint = EVAL_RULES( TEXT_HEIGHT_CONSTRAINT, item, nullptr, UNDEFINED_LAYER, r );
1243
1244 if( compileError )
1245 reportCompileError( r );
1246
1247 r->Report( "" );
1248 r->Report( wxString::Format( _( "Text height constraints: min %s; opt %s; max %s." ),
1249 reportMin( m_frame, constraint ),
1250 reportOpt( m_frame, constraint ),
1251 reportMax( m_frame, constraint ) ) );
1252
1253 r->Report( "" );
1254 r->Report( "" );
1255 r->Report( "" );
1256 reportHeader( _( "Text thickness resolution for:" ), item, r );
1257
1258 constraint = EVAL_RULES( TEXT_THICKNESS_CONSTRAINT, item, nullptr, UNDEFINED_LAYER, r );
1259
1260 if( compileError )
1261 reportCompileError( r );
1262
1263 r->Report( "" );
1264 r->Report( wxString::Format( _( "Text thickness constraints: min %s; opt %s; max %s." ),
1265 reportMin( m_frame, constraint ),
1266 reportOpt( m_frame, constraint ),
1267 reportMax( m_frame, constraint ) ) );
1268
1269 r->Flush();
1270 }
1271
1272 r = m_inspectConstraintsDialog->AddPage( _( "Keepouts" ) );
1273 reportHeader( _( "Keepout resolution for:" ), item, r );
1274
1275 constraint = EVAL_RULES( DISALLOW_CONSTRAINT, item, nullptr, item->GetLayer(), r );
1276
1277 if( compileError )
1278 reportCompileError( r );
1279
1280 if( courtyardError )
1281 {
1282 r->Report( "" );
1283 r->Report( _( "Report may be incomplete: some footprint courtyards are malformed." )
1284 + wxT( " <a href='drc'>" ) + _( "Run DRC for a full analysis." ) + wxT( "</a>" ) );
1285 }
1286
1287 r->Report( "" );
1288
1289 if( constraint.m_DisallowFlags )
1290 r->Report( _( "Item <b>disallowed</b> at current location." ) );
1291 else
1292 r->Report( _( "Item allowed at current location." ) );
1293
1294 r->Flush();
1295
1296 r = m_inspectConstraintsDialog->AddPage( _( "Assertions" ) );
1297 reportHeader( _( "Assertions for:" ), item, r );
1298
1299 if( compileError )
1300 reportCompileError( r );
1301
1302 if( courtyardError )
1303 {
1304 r->Report( "" );
1305 r->Report( _( "Report may be incomplete: some footprint courtyards are malformed." )
1306 + wxT( " <a href='drc'>" ) + _( "Run DRC for a full analysis." ) + wxT( "</a>" ) );
1307 }
1308
1309 drcEngine.ProcessAssertions( item, []( const DRC_CONSTRAINT* c ){}, r );
1310 r->Flush();
1311
1312 m_inspectConstraintsDialog->FinishInitialization();
1314 m_inspectConstraintsDialog->Show( true );
1315 return 0;
1316}
#define EVAL_RULES(constraint, a, b, layer, r)
std::unique_ptr< DIALOG_CONSTRAINTS_REPORTER > m_inspectConstraintsDialog
void onInspectConstraintsDialogClosed(wxCommandEvent &aEvent)
int m_DisallowFlags
Definition: drc_rule.h:173
void ProcessAssertions(const BOARD_ITEM *a, std::function< void(const DRC_CONSTRAINT *)> aFailureHandler, REPORTER *aReporter=nullptr)
const VECTOR2I & GetDrillSize() const
Definition: pad.h:268
@ ANNULAR_WIDTH_CONSTRAINT
Definition: drc_rule.h:57
@ VIA_DIAMETER_CONSTRAINT
Definition: drc_rule.h:63
@ DISALLOW_CONSTRAINT
Definition: drc_rule.h:62
@ TRACK_WIDTH_CONSTRAINT
Definition: drc_rule.h:56
@ TEXT_THICKNESS_CONSTRAINT
Definition: drc_rule.h:55
@ HOLE_SIZE_CONSTRAINT
Definition: drc_rule.h:51
@ TEXT_HEIGHT_CONSTRAINT
Definition: drc_rule.h:54
@ PCB_TEXTBOX_T
class PCB_TEXTBOX, wrapped text on a layer
Definition: typeinfo.h:91
@ PCB_TEXT_T
class PCB_TEXT, text on a layer
Definition: typeinfo.h:90
@ PCB_FP_TEXT_T
class FP_TEXT, text in a footprint
Definition: typeinfo.h:92

References _, ANNULAR_WIDTH_CONSTRAINT, DISALLOW_CONSTRAINT, EVAL_RULES, WX_HTML_REPORT_BOX::Flush(), Format(), PAD::GetDrillSize(), SELECTION::GetItem(), BOARD_ITEM::GetLayer(), PCB_SELECTION_TOOL::GetSelection(), TOOL_MANAGER::GetTool(), HOLE_SIZE_CONSTRAINT, DRC_CONSTRAINT::m_DisallowFlags, m_frame, m_inspectConstraintsDialog, TOOL_BASE::m_toolMgr, makeDRCEngine(), onInspectConstraintsDialogClosed(), PCB_FP_TEXT_T, PCB_PAD_T, PCB_TEXT_T, PCB_TEXTBOX_T, PCB_TRACE_T, PCB_VIA_T, DRC_ENGINE::ProcessAssertions(), WX_HTML_REPORT_BOX::Report(), reportCompileError(), reportHeader(), reportMax(), reportMin(), reportOpt(), PCB_TOOL_BASE::selection(), EDA_BASE_FRAME::ShowInfoBarError(), SELECTION::Size(), TEXT_HEIGHT_CONSTRAINT, TEXT_THICKNESS_CONSTRAINT, TRACK_WIDTH_CONSTRAINT, EDA_ITEM::Type(), UNDEFINED_LAYER, VIA_DIAMETER_CONSTRAINT, and VECTOR2< T >::x.

Referenced by setTransitions().

◆ InspectDRCError()

void BOARD_INSPECTION_TOOL::InspectDRCError ( const std::shared_ptr< RC_ITEM > &  aDRCItem)

Show the clearance resolution for two selected items.

Definition at line 235 of file board_inspection_tool.cpp.

236{
237 BOARD_ITEM* a = m_frame->GetBoard()->GetItem( aDRCItem->GetMainItemID() );
238 BOARD_ITEM* b = m_frame->GetBoard()->GetItem( aDRCItem->GetAuxItemID() );
239 BOARD_CONNECTED_ITEM* ac = dynamic_cast<BOARD_CONNECTED_ITEM*>( a );
240 BOARD_CONNECTED_ITEM* bc = dynamic_cast<BOARD_CONNECTED_ITEM*>( b );
242
243 if( m_inspectClearanceDialog == nullptr )
244 {
245 m_inspectClearanceDialog = std::make_unique<DIALOG_CONSTRAINTS_REPORTER>( m_frame );
246 m_inspectClearanceDialog->SetTitle( _( "Violation Report" ) );
247
248 m_inspectClearanceDialog->Connect( wxEVT_CLOSE_WINDOW,
250 nullptr, this );
251 }
252
253 WX_HTML_REPORT_BOX* r = nullptr;
254 bool compileError = false;
255 DRC_ENGINE drcEngine = makeDRCEngine( &compileError );
256 DRC_CONSTRAINT constraint;
257 int clearance = 0;
258 wxString clearanceStr;
259
260 switch( aDRCItem->GetErrorCode() )
261 {
263 {
264 for( KIID id : aDRCItem->GetIDs() )
265 {
266 bc = dynamic_cast<BOARD_CONNECTED_ITEM*>( m_frame->GetBoard()->GetItem( id ) );
267
268 if( ac && bc && ac->GetNetCode() != bc->GetNetCode() )
269 break;
270 }
271
272 r = m_inspectClearanceDialog->AddPage( _( "Uncoupled Length" ) );
273 reportHeader( _( "Diff pair uncoupled length resolution for:" ), ac, bc, r );
274
275 if( compileError )
277
278 constraint = drcEngine.EvalRules( DIFF_PAIR_MAX_UNCOUPLED_CONSTRAINT, a, b, layer, r );
279
280 r->Report( "" );
281 r->Report( wxString::Format( _( "Resolved max uncoupled length: %s." ),
282 reportMax( m_frame, constraint ) ) );
283 break;
284 }
285
286 case DRCE_TEXT_HEIGHT:
287 r = m_inspectClearanceDialog->AddPage( _( "Text Height" ) );
288 reportHeader( _( "Text height resolution for:" ), a, r );
289
290 if( compileError )
292
293 constraint = drcEngine.EvalRules( TEXT_HEIGHT_CONSTRAINT, a, b, layer, r );
294
295 r->Report( "" );
296 r->Report( wxString::Format( _( "Resolved height constraints: min %s; max %s." ),
297 reportMin( m_frame, constraint ),
298 reportMax( m_frame, constraint ) ) );
299 break;
300
302 r = m_inspectClearanceDialog->AddPage( _( "Text Thickness" ) );
303 reportHeader( _( "Text thickness resolution for:" ), a, r );
304
305 if( compileError )
307
308 constraint = drcEngine.EvalRules( TEXT_THICKNESS_CONSTRAINT, a, b, layer, r );
309
310 r->Report( "" );
311 r->Report( wxString::Format( _( "Resolved thickness constraints: min %s; max %s." ),
312 reportMin( m_frame, constraint ),
313 reportMax( m_frame, constraint ) ) );
314 break;
315
316 case DRCE_TRACK_WIDTH:
317 r = m_inspectClearanceDialog->AddPage( _( "Track Width" ) );
318 reportHeader( _( "Track width resolution for:" ), a, r );
319
320 if( compileError )
322
323 constraint = drcEngine.EvalRules( TRACK_WIDTH_CONSTRAINT, a, b, layer, r );
324
325 r->Report( "" );
326 r->Report( wxString::Format( _( "Resolved width constraints: min %s; max %s." ),
327 reportMin( m_frame, constraint ),
328 reportMax( m_frame, constraint ) ) );
329 break;
330
332 r = m_inspectClearanceDialog->AddPage( _( "Connection Width" ) );
333 reportHeader( _( "Connection width resolution for:" ), a, b, r );
334
335 if( compileError )
337
338 constraint = drcEngine.EvalRules( CONNECTION_WIDTH_CONSTRAINT, a, b, layer, r );
339
340 r->Report( "" );
341 r->Report( wxString::Format( _( "Resolved min connection width constraint: %s." ),
342 reportMin( m_frame, constraint ) ) );
343 break;
344
346 r = m_inspectClearanceDialog->AddPage( _( "Via Diameter" ) );
347 reportHeader( _( "Via diameter resolution for:" ), a, r );
348
349 if( compileError )
351
352 constraint = drcEngine.EvalRules( VIA_DIAMETER_CONSTRAINT, a, b, layer, r );
353
354 r->Report( "" );
355 r->Report( wxString::Format( _( "Resolved diameter constraints: min %s; max %s." ),
356 reportMin( m_frame, constraint ),
357 reportMax( m_frame, constraint ) ) );
358 break;
359
361 r = m_inspectClearanceDialog->AddPage( _( "Via Annulus" ) );
362 reportHeader( _( "Via annular width resolution for:" ), a, r );
363
364 if( compileError )
366
367 constraint = drcEngine.EvalRules( ANNULAR_WIDTH_CONSTRAINT, a, b, layer, r );
368
369 r->Report( "" );
370 r->Report( wxString::Format( _( "Resolved annular width constraints: min %s; max %s." ),
371 reportMin( m_frame, constraint ),
372 reportMax( m_frame, constraint ) ) );
373 break;
374
377 r = m_inspectClearanceDialog->AddPage( _( "Hole Size" ) );
378 reportHeader( _( "Hole diameter resolution for:" ), a, r );
379
380 if( compileError )
382
383 constraint = drcEngine.EvalRules( HOLE_SIZE_CONSTRAINT, a, b, layer, r );
384
385 r->Report( "" );
386 r->Report( wxString::Format( _( "Resolved diameter constraints: min %s; max %s." ),
387 reportMin( m_frame, constraint ),
388 reportMax( m_frame, constraint ) ) );
389 break;
390
392 r = m_inspectClearanceDialog->AddPage( _( "Hole Clearance" ) );
393 reportHeader( _( "Hole clearance resolution for:" ), a, b, r );
394
395 if( compileError )
397
398 if( ac && bc && ac->GetNetCode() == bc->GetNetCode() )
399 {
400 r->Report( "" );
401 r->Report( _( "Items belong to the same net. Clearance is 0." ) );
402 }
403 else
404 {
405 constraint = drcEngine.EvalRules( HOLE_CLEARANCE_CONSTRAINT, a, b, layer, r );
406 clearance = constraint.m_Value.Min();
407 clearanceStr = m_frame->StringFromValue( clearance, true );
408
409 r->Report( "" );
410 r->Report( wxString::Format( _( "Resolved clearance: %s." ), clearanceStr ) );
411 }
412
413 r->Report( "" );
414 r->Report( "" );
415 r->Report( "" );
416 reportHeader( _( "Physical hole clearance resolution for:" ), a, b, layer, r );
417
418 constraint = drcEngine.EvalRules( PHYSICAL_HOLE_CLEARANCE_CONSTRAINT, a, b, layer, r );
419 clearance = constraint.m_Value.Min();
420 clearanceStr = m_frame->StringFromValue( clearance, true );
421
423 {
424 r->Report( "" );
425 r->Report( _( "No 'physical_hole_clearance' constraints defined." ) );
426 }
427 else
428 {
429 r->Report( "" );
430 r->Report( wxString::Format( _( "Resolved clearance: %s." ), clearanceStr ) );
431 }
432
433 break;
434
436 r = m_inspectClearanceDialog->AddPage( _( "Hole to Hole" ) );
437 reportHeader( _( "Hole to hole clearance resolution for:" ), a, b, r );
438
439 if( compileError )
441
442 constraint = drcEngine.EvalRules( HOLE_TO_HOLE_CONSTRAINT, a, b, UNDEFINED_LAYER, r );
443 clearance = constraint.m_Value.Min();
444 clearanceStr = m_frame->StringFromValue( clearance, true );
445
446 r->Report( "" );
447 r->Report( wxString::Format( _( "Resolved clearance: %s." ), clearanceStr ) );
448 break;
449
451 r = m_inspectClearanceDialog->AddPage( _( "Edge Clearance" ) );
452 reportHeader( _( "Edge clearance resolution for:" ), a, b, r );
453
454 if( compileError )
456
457 constraint = drcEngine.EvalRules( EDGE_CLEARANCE_CONSTRAINT, a, b, layer, r );
458 clearance = constraint.m_Value.Min();
459 clearanceStr = m_frame->StringFromValue( clearance, true );
460
461 r->Report( "" );
462 r->Report( wxString::Format( _( "Resolved clearance: %s." ), clearanceStr ) );
463 break;
464
465 case DRCE_CLEARANCE:
466 if( a->Type() == PCB_TRACE_T || a->Type() == PCB_ARC_T )
467 {
468 layer = a->GetLayer();
469 }
470 else if( b->Type() == PCB_TRACE_T || b->Type() == PCB_ARC_T )
471 {
472 layer = b->GetLayer();
473 }
474 else if( a->Type() == PCB_PAD_T && static_cast<PAD*>( a )->GetAttribute() == PAD_ATTRIB::SMD )
475 {
476 PAD* pad = static_cast<PAD*>( a );
477
478 if( pad->IsOnLayer( F_Cu ) )
479 layer = F_Cu;
480 else
481 layer = B_Cu;
482 }
483 else if( b->Type() == PCB_PAD_T && static_cast<PAD*>( a )->GetAttribute() == PAD_ATTRIB::SMD )
484 {
485 PAD* pad = static_cast<PAD*>( b );
486
487 if( pad->IsOnLayer( F_Cu ) )
488 layer = F_Cu;
489 else
490 layer = B_Cu;
491 }
492
493 r = m_inspectClearanceDialog->AddPage( _( "Clearance" ) );
494 reportHeader( _( "Clearance resolution for:" ), a, b, layer, r );
495
496 if( compileError )
498
499 if( ac && bc && ac->GetNetCode() == bc->GetNetCode() )
500 {
501 r->Report( "" );
502 r->Report( _( "Items belong to the same net. Clearance is 0." ) );
503 }
504 else
505 {
506 constraint = drcEngine.EvalRules( CLEARANCE_CONSTRAINT, a, a, layer, r );
507 clearance = constraint.m_Value.Min();
508 clearanceStr = m_frame->StringFromValue( clearance, true );
509
510 r->Report( "" );
511 r->Report( wxString::Format( _( "Resolved clearance: %s." ), clearanceStr ) );
512 }
513
514 r->Report( "" );
515 r->Report( "" );
516 r->Report( "" );
517 reportHeader( _( "Physical clearance resolution for:" ), a, b, layer, r );
518
519 constraint = drcEngine.EvalRules( PHYSICAL_CLEARANCE_CONSTRAINT, a, b, layer, r );
520 clearance = constraint.m_Value.Min();
521 clearanceStr = m_frame->StringFromValue( clearance, true );
522
524 {
525 r->Report( "" );
526 r->Report( _( "No 'physical_clearance' constraints defined." ) );
527 }
528 else
529 {
530 r->Report( "" );
531 r->Report( wxString::Format( _( "Resolved clearance: %s." ), clearanceStr ) );
532 }
533
534 break;
535
536 default:
537 return;
538 }
539
540 r->Flush();
541
543 m_inspectClearanceDialog->Show( true );
544}
BOARD_ITEM * GetItem(const KIID &aID) const
Definition: board.cpp:1019
Definition: kiid.h:48
PAD_ATTRIB GetAttribute() const
Definition: pad.h:401
@ DRCE_HOLE_CLEARANCE
Definition: drc_item.h:53
@ DRCE_VIA_DIAMETER
Definition: drc_item.h:58
@ DRCE_TRACK_WIDTH
Definition: drc_item.h:54
@ DRCE_DRILL_OUT_OF_RANGE
Definition: drc_item.h:57
@ DRCE_EDGE_CLEARANCE
Definition: drc_item.h:45
@ DRCE_CLEARANCE
Definition: drc_item.h:43
@ DRCE_DRILLED_HOLES_TOO_CLOSE
Definition: drc_item.h:51
@ DRCE_DIFF_PAIR_UNCOUPLED_LENGTH_TOO_LONG
Definition: drc_item.h:99
@ DRCE_MICROVIA_DRILL_OUT_OF_RANGE
Definition: drc_item.h:60
@ DRCE_TEXT_HEIGHT
Definition: drc_item.h:91
@ DRCE_TEXT_THICKNESS
Definition: drc_item.h:92
@ DRCE_CONNECTION_WIDTH
Definition: drc_item.h:56
@ DRCE_ANNULAR_WIDTH
Definition: drc_item.h:55
@ CONNECTION_WIDTH_CONSTRAINT
Definition: drc_rule.h:73
@ SMD
Smd pad, appears on the solder paste layer (default)

References _, ANNULAR_WIDTH_CONSTRAINT, B_Cu, CLEARANCE_CONSTRAINT, CONNECTION_WIDTH_CONSTRAINT, DIFF_PAIR_MAX_UNCOUPLED_CONSTRAINT, DRCE_ANNULAR_WIDTH, DRCE_CLEARANCE, DRCE_CONNECTION_WIDTH, DRCE_DIFF_PAIR_UNCOUPLED_LENGTH_TOO_LONG, DRCE_DRILL_OUT_OF_RANGE, DRCE_DRILLED_HOLES_TOO_CLOSE, DRCE_EDGE_CLEARANCE, DRCE_HOLE_CLEARANCE, DRCE_MICROVIA_DRILL_OUT_OF_RANGE, DRCE_TEXT_HEIGHT, DRCE_TEXT_THICKNESS, DRCE_TRACK_WIDTH, DRCE_VIA_DIAMETER, EDGE_CLEARANCE_CONSTRAINT, DRC_ENGINE::EvalRules(), F_Cu, WX_HTML_REPORT_BOX::Flush(), Format(), PCB_BASE_FRAME::GetActiveLayer(), PAD::GetAttribute(), PCB_BASE_FRAME::GetBoard(), BOARD::GetItem(), BOARD_ITEM::GetLayer(), BOARD_CONNECTED_ITEM::GetNetCode(), DRC_ENGINE::HasRulesForConstraintType(), HOLE_CLEARANCE_CONSTRAINT, HOLE_SIZE_CONSTRAINT, HOLE_TO_HOLE_CONSTRAINT, m_frame, m_inspectClearanceDialog, DRC_CONSTRAINT::m_Value, makeDRCEngine(), MINOPTMAX< T >::Min(), onInspectClearanceDialogClosed(), pad, PCB_ARC_T, PCB_PAD_T, PCB_TRACE_T, PHYSICAL_CLEARANCE_CONSTRAINT, PHYSICAL_HOLE_CLEARANCE_CONSTRAINT, WX_HTML_REPORT_BOX::Report(), reportCompileError(), reportHeader(), reportMax(), reportMin(), SMD, UNITS_PROVIDER::StringFromValue(), TEXT_HEIGHT_CONSTRAINT, TEXT_THICKNESS_CONSTRAINT, TRACK_WIDTH_CONSTRAINT, EDA_ITEM::Type(), UNDEFINED_LAYER, and VIA_DIAMETER_CONSTRAINT.

Referenced by DIALOG_DRC::OnDRCItemRClick().

◆ Is45Limited()

bool PCB_TOOL_BASE::Is45Limited ( ) const
virtualinherited

Should the tool use its 45° mode option?

Returns
True if set to use 45°

Definition at line 332 of file pcb_tool_base.cpp.

333{
334 SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager();
335
336 if( frame()->IsType( FRAME_PCB_EDITOR ) )
337 return mgr.GetAppSettings<PCBNEW_SETTINGS>()->m_Use45DegreeLimit;
338 else
339 return mgr.GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>()->m_Use45Limit;
340}
T * GetAppSettings(bool aLoadNow=true)
Returns a handle to the a given settings by type If the settings have already been loaded,...
@ FRAME_PCB_EDITOR
Definition: frame_type.h:40
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:111

References PCB_TOOL_BASE::frame(), FRAME_PCB_EDITOR, SETTINGS_MANAGER::GetAppSettings(), and Pgm().

Referenced by DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::drawShape(), DRAWING_TOOL::DrawZone(), and ZONE_CREATE_HELPER::OnFirstPoint().

◆ IsBoardEditor()

bool PCB_TOOL_BASE::IsBoardEditor ( ) const
inlineinherited

Definition at line 109 of file pcb_tool_base.h.

109{ return m_isBoardEditor; }

References PCB_TOOL_BASE::m_isBoardEditor.

Referenced by BOARD_COMMIT::BOARD_COMMIT().

◆ IsFootprintEditor()

◆ IsNetHighlightSet()

bool BOARD_INSPECTION_TOOL::IsNetHighlightSet ( ) const
inline
Returns
true if a net or nets to highlight have been set

Definition at line 94 of file board_inspection_tool.h.

95 {
96 return !m_currentlyHighlighted.empty();
97 }

References m_currentlyHighlighted.

Referenced by PCB_EDIT_FRAME::setupUIConditions().

◆ IsToolActive()

bool TOOL_BASE::IsToolActive ( ) const
inherited

Definition at line 31 of file tool_base.cpp.

32{
34}
bool IsToolActive(TOOL_ID aId) const
Return true if a tool with given id is active (executing)

References TOOL_MANAGER::IsToolActive(), TOOL_BASE::m_toolId, and TOOL_BASE::m_toolMgr.

Referenced by EDIT_TOOL::Drag(), ROUTER_TOOL::handleLayerSwitch(), PCB_SELECTION_TOOL::Main(), BOARD_EDITOR_CONTROL::TrackWidthDec(), and BOARD_EDITOR_CONTROL::TrackWidthInc().

◆ ListNets()

int BOARD_INSPECTION_TOOL::ListNets ( const TOOL_EVENT aEvent)

Hide the ratsnest for a given net.

Definition at line 1739 of file board_inspection_tool.cpp.

1740{
1741 if( m_listNetsDialog == nullptr )
1742 {
1744 std::make_unique<DIALOG_NET_INSPECTOR>( m_frame, m_listNetsDialogSettings );
1745
1746 m_listNetsDialog->Connect( wxEVT_CLOSE_WINDOW,
1747 wxCommandEventHandler( BOARD_INSPECTION_TOOL::onListNetsDialogClosed ), nullptr,
1748 this );
1749
1750 m_listNetsDialog->Connect( wxEVT_BUTTON,
1751 wxCommandEventHandler( BOARD_INSPECTION_TOOL::onListNetsDialogClosed ), nullptr,
1752 this );
1753 }
1754
1755 m_listNetsDialog->Raise();
1756 m_listNetsDialog->Show( true );
1757 return 0;
1758}
DIALOG_NET_INSPECTOR::SETTINGS m_listNetsDialogSettings
std::unique_ptr< DIALOG_NET_INSPECTOR > m_listNetsDialog
void onListNetsDialogClosed(wxCommandEvent &aEvent)

References m_frame, m_listNetsDialog, m_listNetsDialogSettings, and onListNetsDialogClosed().

Referenced by setTransitions().

◆ LocalRatsnestTool()

int BOARD_INSPECTION_TOOL::LocalRatsnestTool ( const TOOL_EVENT aEvent)

Definition at line 1550 of file board_inspection_tool.cpp.

1551{
1553 BOARD* board = getModel<BOARD>();
1554
1555 // Deactivate other tools; particularly important if another PICKER is currently running
1556 Activate();
1557
1558 picker->SetCursor( KICURSOR::BULLSEYE );
1559
1560 picker->SetClickHandler(
1561 [this, board]( const VECTOR2D& pt ) -> bool
1562 {
1564
1567 PCB_SELECTION& selection = selectionTool->GetSelection();
1568
1569 if( selection.Empty() )
1570 {
1573 selection = selectionTool->GetSelection();
1574 }
1575
1576 if( selection.Empty() )
1577 {
1578 // Clear the previous local ratsnest if we click off all items
1579 for( FOOTPRINT* fp : board->Footprints() )
1580 {
1581 for( PAD* pad : fp->Pads() )
1582 pad->SetLocalRatsnestVisible( displayOptions().m_ShowGlobalRatsnest );
1583 }
1584 }
1585 else
1586 {
1587 for( EDA_ITEM* item : selection )
1588 {
1589 if( PAD* pad = dyn_cast<PAD*>( item) )
1590 {
1591 pad->SetLocalRatsnestVisible( !pad->GetLocalRatsnestVisible() );
1592 }
1593 else if( FOOTPRINT* fp = dyn_cast<FOOTPRINT*>( item) )
1594 {
1595 if( !fp->Pads().empty() )
1596 {
1597 bool enable = !fp->Pads()[0]->GetLocalRatsnestVisible();
1598
1599 for( PAD* childPad : fp->Pads() )
1600 childPad->SetLocalRatsnestVisible( enable );
1601 }
1602 }
1603 }
1604 }
1605
1607
1608 return true;
1609 } );
1610
1611 picker->SetFinalizeHandler(
1612 [this, board]( int aCondition )
1613 {
1614 if( aCondition != PCB_PICKER_TOOL::END_ACTIVATE )
1615 {
1616 for( FOOTPRINT* fp : board->Footprints() )
1617 {
1618 for( PAD* pad : fp->Pads() )
1619 pad->SetLocalRatsnestVisible( displayOptions().m_ShowGlobalRatsnest );
1620 }
1621 }
1622 } );
1623
1625
1626 return 0;
1627}
static TOOL_ACTION pickerTool
Definition: actions.h:159
FOOTPRINTS & Footprints()
Definition: board.h:311
static void PadFilter(const VECTOR2I &, GENERAL_COLLECTOR &aCollector, PCB_SELECTION_TOOL *sTool)
A selection filter which prunes the selection to contain only items of type PCB_PAD_T.
Definition: edit_tool.cpp:2362
static void FootprintFilter(const VECTOR2I &, GENERAL_COLLECTOR &aCollector, PCB_SELECTION_TOOL *sTool)
A selection filter which prunes the selection to contain only items of type #PCB_MODULE_T.
Definition: edit_tool.cpp:2375
void MarkTargetDirty(int aTarget)
Set or clear target 'dirty' flag.
Definition: view.h:617
static TOOL_ACTION selectionCursor
Select a single item under the cursor position.
Definition: pcb_actions.h:56
Generic tool for picking an item.
void SetClickHandler(CLICK_HANDLER aHandler)
Set a handler for mouse click event.
Definition: picker_tool.h:71
void SetCursor(KICURSOR aCursor)
Definition: picker_tool.h:62
void SetFinalizeHandler(FINALIZE_HANDLER aHandler)
Set a handler for the finalize event.
Definition: picker_tool.h:102
@ TARGET_OVERLAY
Items that may change while the view stays the same (noncached)
Definition: definitions.h:50

References TOOL_INTERACTIVE::Activate(), PCB_TOOL_BASE::board(), BULLSEYE, PCB_TOOL_BASE::displayOptions(), SELECTION::Empty(), PICKER_TOOL_BASE::END_ACTIVATE, EDIT_TOOL::FootprintFilter(), BOARD::Footprints(), PCB_SELECTION_TOOL::GetSelection(), TOOL_MANAGER::GetTool(), TOOL_MANAGER::GetView(), TOOL_BASE::m_toolMgr, KIGFX::VIEW::MarkTargetDirty(), pad, EDIT_TOOL::PadFilter(), ACTIONS::pickerTool, TOOL_MANAGER::RunAction(), PCB_TOOL_BASE::selection(), PCB_ACTIONS::selectionClear, PCB_ACTIONS::selectionCursor, PICKER_TOOL_BASE::SetClickHandler(), PICKER_TOOL_BASE::SetCursor(), PICKER_TOOL_BASE::SetFinalizeHandler(), and KIGFX::TARGET_OVERLAY.

Referenced by setTransitions().

◆ makeDRCEngine()

DRC_ENGINE BOARD_INSPECTION_TOOL::makeDRCEngine ( bool *  aCompileError,
bool *  aCourtyardError = nullptr 
)
private

Definition at line 113 of file board_inspection_tool.cpp.

114{
116
117 try
118 {
119 engine.InitEngine( m_frame->GetDesignRulesPath() );
120 }
121 catch( PARSE_ERROR& )
122 {
123 if( aCompileError )
124 *aCompileError = true;
125 }
126
127 for( ZONE* zone : m_frame->GetBoard()->Zones() )
128 zone->CacheBoundingBox();
129
131 {
132 for( ZONE* zone : footprint->Zones() )
133 zone->CacheBoundingBox();
134
136
137 if( aCourtyardError && ( footprint->GetFlags() & MALFORMED_COURTYARDS ) != 0 )
138 *aCourtyardError = true;
139 }
140
141 return engine;
142}
ZONES & Zones()
Definition: board.h:317
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Definition: board.cpp:704
void BuildCourtyardCaches(OUTLINE_ERROR_HANDLER *aErrorHandler=nullptr)
Build complex polygons of the courtyard areas from graphic items on the courtyard layers.
Definition: footprint.cpp:2245
FP_ZONES & Zones()
Definition: footprint.h:176
wxString GetDesignRulesPath()
Return the absolute path to the design rules file for the currently-loaded board.
FOOTPRINT * footprint() const
#define MALFORMED_COURTYARDS
A filename or source description, a problem input line, a line number, a byte offset,...
Definition: ki_exception.h:119

References FOOTPRINT::BuildCourtyardCaches(), PCB_TOOL_BASE::footprint(), BOARD::Footprints(), PCB_BASE_FRAME::GetBoard(), PCB_BASE_EDIT_FRAME::GetDesignRulesPath(), BOARD::GetDesignSettings(), EDA_ITEM::GetFlags(), DRC_ENGINE::InitEngine(), m_frame, MALFORMED_COURTYARDS, BOARD::Zones(), and FOOTPRINT::Zones().

Referenced by InspectClearance(), InspectConstraints(), and InspectDRCError().

◆ onInspectClearanceDialogClosed()

void BOARD_INSPECTION_TOOL::onInspectClearanceDialogClosed ( wxCommandEvent &  aEvent)
private

Definition at line 1776 of file board_inspection_tool.cpp.

1777{
1778 m_inspectClearanceDialog->Disconnect( wxEVT_CLOSE_WINDOW,
1780 nullptr, this );
1781
1782 m_inspectClearanceDialog->Destroy();
1783 m_inspectClearanceDialog.release();
1784}

References m_inspectClearanceDialog, and onInspectClearanceDialogClosed().

Referenced by InspectClearance(), InspectDRCError(), and onInspectClearanceDialogClosed().

◆ onInspectConstraintsDialogClosed()

void BOARD_INSPECTION_TOOL::onInspectConstraintsDialogClosed ( wxCommandEvent &  aEvent)
private

Definition at line 1787 of file board_inspection_tool.cpp.

1788{
1789 m_inspectConstraintsDialog->Disconnect( wxEVT_CLOSE_WINDOW,
1791 nullptr, this );
1792
1793 m_inspectConstraintsDialog->Destroy();
1795}

References m_inspectConstraintsDialog, and onInspectConstraintsDialogClosed().

Referenced by InspectConstraints(), and onInspectConstraintsDialogClosed().

◆ onListNetsDialogClosed()

void BOARD_INSPECTION_TOOL::onListNetsDialogClosed ( wxCommandEvent &  aEvent)
private

Definition at line 1761 of file board_inspection_tool.cpp.

1762{
1764
1765 m_listNetsDialog->Disconnect( wxEVT_CLOSE_WINDOW,
1766 wxCommandEventHandler( BOARD_INSPECTION_TOOL::onListNetsDialogClosed ), nullptr, this );
1767
1768 m_listNetsDialog->Disconnect( wxEVT_BUTTON,
1769 wxCommandEventHandler( BOARD_INSPECTION_TOOL::onListNetsDialogClosed ), nullptr, this );
1770
1771 m_listNetsDialog->Destroy();
1772 m_listNetsDialog.release();
1773}

References m_listNetsDialog, m_listNetsDialogSettings, and onListNetsDialogClosed().

Referenced by ListNets(), and onListNetsDialogClosed().

◆ reportCompileError()

void BOARD_INSPECTION_TOOL::reportCompileError ( REPORTER r)
private

Definition at line 172 of file board_inspection_tool.cpp.

173{
174 r->Report( "" );
175 r->Report( _( "Report incomplete: could not compile custom design rules. " )
176 + wxT( "<a href='boardsetup'>" ) + _( "Show design rules." ) + wxT( "</a>" ) );
177}
virtual REPORTER & Report(const wxString &aText, SEVERITY aSeverity=RPT_SEVERITY_UNDEFINED)=0
Report a string with a given severity.

References _, and REPORTER::Report().

Referenced by InspectClearance(), InspectConstraints(), and InspectDRCError().

◆ reportHeader() [1/3]

void BOARD_INSPECTION_TOOL::reportHeader ( const wxString &  aTitle,
BOARD_ITEM a,
BOARD_ITEM b,
PCB_LAYER_ID  aLayer,
REPORTER r 
)
private

Definition at line 196 of file board_inspection_tool.cpp.

198{
199 wxString layerStr = _( "Layer" ) + wxS( " " ) + m_frame->GetBoard()->GetLayerName( aLayer );
200
201 r->Report( wxT( "<h7>" ) + EscapeHTML( aTitle ) + wxT( "</h7>" ) );
202 r->Report( wxT( "<ul><li>" ) + EscapeHTML( layerStr ) + wxT( "</li>" )
203 + wxT( "<li>" ) + EscapeHTML( getItemDescription( a ) ) + wxT( "</li>" )
204 + wxT( "<li>" ) + EscapeHTML( getItemDescription( b ) ) + wxT( "</li></ul>" ) );
205}

References _, EscapeHTML(), PCB_BASE_FRAME::GetBoard(), getItemDescription(), BOARD::GetLayerName(), m_frame, and REPORTER::Report().

◆ reportHeader() [2/3]

void BOARD_INSPECTION_TOOL::reportHeader ( const wxString &  aTitle,
BOARD_ITEM a,
BOARD_ITEM b,
REPORTER r 
)
private

Definition at line 187 of file board_inspection_tool.cpp.

189{
190 r->Report( wxT( "<h7>" ) + EscapeHTML( aTitle ) + wxT( "</h7>" ) );
191 r->Report( wxT( "<ul><li>" ) + EscapeHTML( getItemDescription( a ) ) + wxT( "</li>" )
192 + wxT( "<li>" ) + EscapeHTML( getItemDescription( b ) ) + wxT( "</li></ul>" ) );
193}

References EscapeHTML(), getItemDescription(), and REPORTER::Report().

◆ reportHeader() [3/3]

void BOARD_INSPECTION_TOOL::reportHeader ( const wxString &  aTitle,
BOARD_ITEM a,
REPORTER r 
)
private

Definition at line 180 of file board_inspection_tool.cpp.

181{
182 r->Report( wxT( "<h7>" ) + EscapeHTML( aTitle ) + wxT( "</h7>" ) );
183 r->Report( wxT( "<ul><li>" ) + EscapeHTML( getItemDescription( a ) ) + wxT( "</li></ul>" ) );
184}

References EscapeHTML(), getItemDescription(), and REPORTER::Report().

Referenced by InspectClearance(), InspectConstraints(), and InspectDRCError().

◆ Reset()

void BOARD_INSPECTION_TOOL::Reset ( RESET_REASON  aReason)
overridevirtual

Bring the tool to a known, initial state.

If the tool claimed anything from the model or the view, it must release it when its reset.

Parameters
aReasoncontains information about the reason of tool reset.

Reimplemented from PCB_TOOL_BASE.

Definition at line 99 of file board_inspection_tool.cpp.

100{
101 m_frame = getEditFrame<PCB_EDIT_FRAME>();
102}

References m_frame.

◆ resetTransitions()

void TOOL_INTERACTIVE::resetTransitions ( )
privateinherited

Clear the current transition map and restores the default one created by setTransitions().

Definition at line 63 of file tool_interactive.cpp.

64{
67}
virtual void setTransitions()=0
This method is meant to be overridden in order to specify handlers for events.
void ClearTransitions(TOOL_BASE *aTool)
Clear the state transition map for a tool.

References TOOL_MANAGER::ClearTransitions(), TOOL_BASE::m_toolMgr, and TOOL_INTERACTIVE::setTransitions().

◆ RunMainStack()

void TOOL_INTERACTIVE::RunMainStack ( std::function< void()>  aFunc)
inherited

Call a function using the main stack.

Parameters
aFuncis the function to be calls.

Definition at line 87 of file tool_interactive.cpp.

88{
89 m_toolMgr->RunMainStack( this, std::move( aFunc ) );
90}
void RunMainStack(TOOL_BASE *aTool, std::function< void()> aFunc)

References TOOL_BASE::m_toolMgr, and TOOL_MANAGER::RunMainStack().

Referenced by DRAWING_TOOL::PlaceText().

◆ selection() [1/2]

PCB_SELECTION & PCB_TOOL_BASE::selection ( )
protectedinherited

Definition at line 324 of file pcb_tool_base.cpp.

325{
327
328 return selTool->GetSelection();
329}

References PCB_SELECTION_TOOL::GetSelection(), TOOL_MANAGER::GetTool(), and TOOL_BASE::m_toolMgr.

◆ selection() [2/2]

const PCB_SELECTION & PCB_TOOL_BASE::selection ( ) const
protectedinherited

Definition at line 316 of file pcb_tool_base.cpp.

317{
319
320 return selTool->GetSelection();
321}

References PCB_SELECTION_TOOL::GetSelection(), TOOL_MANAGER::GetTool(), and TOOL_BASE::m_toolMgr.

Referenced by BOARD_EDITOR_CONTROL::AssignNetclass(), AUTOPLACE_TOOL::autoplaceSelected(), calculateSelectionRatsnest(), ROUTER_TOOL::CanInlineDrag(), EDIT_TOOL::ChangeTrackWidth(), PAD_TOOL::copyPadSettings(), EDIT_TOOL::copyToClipboard(), EDIT_TOOL::CreateArray(), DRC_TOOL::CrossProbe(), BOARD_EDITOR_CONTROL::doCrossProbePcbToSch(), doHideRatsnestNet(), PCB_TOOL_BASE::doInteractiveItemPlacement(), EDIT_TOOL::doMoveSelection(), EDIT_TOOL::Drag(), EDIT_TOOL::DragArcTrack(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::drawShape(), DRAWING_TOOL::DrawZone(), EDIT_TOOL::Duplicate(), BOARD_EDITOR_CONTROL::EditFpInFpEditor(), PAD_TOOL::EditPad(), GROUP_TOOL::EnterGroup(), PAD_TOOL::EnumeratePads(), GLOBAL_EDIT_TOOL::ExchangeFootprints(), EDIT_TOOL::FilletLines(), EDIT_TOOL::FilletTracks(), EDIT_TOOL::Flip(), DRAWING_TOOL::getSourceZoneForAction(), GROUP_TOOL::Group(), highlightNet(), ROUTER_TOOL::InlineBreakTrack(), ROUTER_TOOL::InlineDrag(), InspectClearance(), InspectConstraints(), DRAWING_TOOL::InteractivePlaceWithPreview(), LocalRatsnestTool(), LENGTH_TUNER_TOOL::MainLoop(), ROUTER_TOOL::MainLoop(), EDIT_TOOL::Mirror(), BOARD_EDITOR_CONTROL::modifyLockSelected(), EDIT_TOOL::MoveExact(), PCB_POINT_EDITOR::OnSelectionChange(), EDIT_TOOL::PackAndMoveFootprints(), PAD_TOOL::pastePadProperties(), ROUTER_TOOL::performDragging(), ROUTER_TOOL::performRouting(), LENGTH_TUNER_TOOL::performTuning(), PCB_CONTROL::placeBoardItems(), BOARD_EDITOR_CONTROL::PlaceFootprint(), DRAWING_TOOL::PlaceImportedGraphics(), DRAWING_TOOL::PlaceText(), POSITION_RELATIVE_TOOL::PositionRelative(), EDIT_TOOL::Properties(), PAD_TOOL::pushPadSettings(), BOARD_REANNOTATE_TOOL::ReannotateDuplicatesInSelection(), GROUP_TOOL::RemoveFromGroup(), GLOBAL_EDIT_TOOL::RemoveUnusedPads(), EDIT_TOOL::Rotate(), ROUTER_TOOL::RouteSelected(), DRAWING_TOOL::SetAnchor(), EDIT_TOOL::Swap(), BOARD_EDITOR_CONTROL::TrackWidthDec(), BOARD_EDITOR_CONTROL::TrackWidthInc(), GROUP_TOOL::Ungroup(), UpdateLocalRatsnest(), PCB_CONTROL::UpdateMessagePanel(), BOARD_EDITOR_CONTROL::ViaSizeDec(), BOARD_EDITOR_CONTROL::ViaSizeInc(), BOARD_EDITOR_CONTROL::ZoneDuplicate(), ZONE_FILLER_TOOL::ZoneFill(), BOARD_EDITOR_CONTROL::ZoneMerge(), and ZONE_FILLER_TOOL::ZoneUnfill().

◆ SetContextMenu()

void TOOL_INTERACTIVE::SetContextMenu ( ACTION_MENU aMenu,
CONTEXT_MENU_TRIGGER  aTrigger = CMENU_BUTTON 
)
inherited

Assign a context menu and tells when it should be activated.

Parameters
aMenuis the menu to be assigned.
aTriggerdetermines conditions upon which the context menu is activated.

Definition at line 76 of file tool_interactive.cpp.

77{
78 if( aMenu )
79 aMenu->SetTool( this );
80 else
81 aTrigger = CMENU_OFF;
82
83 m_toolMgr->ScheduleContextMenu( this, aMenu, aTrigger );
84}
void SetTool(TOOL_INTERACTIVE *aTool)
Set a tool that is the creator of the menu.
void ScheduleContextMenu(TOOL_BASE *aTool, ACTION_MENU *aMenu, CONTEXT_MENU_TRIGGER aTrigger)
Set behavior of the tool's context popup menu.
@ CMENU_OFF
Definition: tool_event.h:149

References CMENU_OFF, TOOL_BASE::m_toolMgr, TOOL_MANAGER::ScheduleContextMenu(), and ACTION_MENU::SetTool().

Referenced by SELECTION_TOOL::doSelectionMenu(), TOOL_MENU::ShowContextMenu(), and SCH_LINE_WIRE_BUS_TOOL::UnfoldBus().

◆ SetIsBoardEditor()

void PCB_TOOL_BASE::SetIsBoardEditor ( bool  aEnabled)
inlineinherited

Definition at line 108 of file pcb_tool_base.h.

108{ m_isBoardEditor = aEnabled; }

References PCB_TOOL_BASE::m_isBoardEditor.

◆ SetIsFootprintEditor()

void PCB_TOOL_BASE::SetIsFootprintEditor ( bool  aEnabled)
inlineinherited

Function SetIsFootprintEditor()

Toggles edit footprint mode. When enabled, one may select parts of footprints individually (graphics, pads, etc.), so they can be modified.

Parameters
aEnableddecides if the mode should be enabled.

Definition at line 105 of file pcb_tool_base.h.

105{ m_isFootprintEditor = aEnabled; }

References PCB_TOOL_BASE::m_isFootprintEditor.

◆ setTransitions()

void BOARD_INSPECTION_TOOL::setTransitions ( )
overrideprivatevirtual

This method is meant to be overridden in order to specify handlers for events.

It is called every time tool is reset or finished.

Reimplemented from PCB_TOOL_BASE.

Definition at line 1846 of file board_inspection_tool.cpp.

1847{
1851
1856
1863
1866}
int HighlightNet(const TOOL_EVENT &aEvent)
Clear all board highlights.
int ShowBoardStatistics(const TOOL_EVENT &aEvent)
Show dialog with board statistics.
int ListNets(const TOOL_EVENT &aEvent)
Hide the ratsnest for a given net.
int LocalRatsnestTool(const TOOL_EVENT &aEvent)
int ShowNetInRatsnest(const TOOL_EVENT &aEvent)
int ClearHighlight(const TOOL_EVENT &aEvent)
Perform the appropriate action in response to an Eeschema cross-probe.
int HideNetInRatsnest(const TOOL_EVENT &aEvent)
Show the ratsnest for a given net.
int InspectConstraints(const TOOL_EVENT &aEvent)
int InspectClearance(const TOOL_EVENT &aEvent)
int UpdateLocalRatsnest(const TOOL_EVENT &aEvent)
Hide ratsnest for selected items. Called when there are no items selected.
int HideLocalRatsnest(const TOOL_EVENT &aEvent)
Show local ratsnest of a component.
int HighlightItem(const TOOL_EVENT &aEvent)
Update ratsnest for selected items.
static TOOL_ACTION highlightItem
Definition: pcb_actions.h:501
static TOOL_ACTION listNets
Definition: pcb_actions.h:383
static TOOL_ACTION highlightNet
Definition: pcb_actions.h:497
static TOOL_ACTION hideNetInRatsnest
Definition: pcb_actions.h:504
static TOOL_ACTION hideLocalRatsnest
Definition: pcb_actions.h:507
static TOOL_ACTION showNetInRatsnest
Definition: pcb_actions.h:505
static TOOL_ACTION inspectConstraints
Definition: pcb_actions.h:493
static TOOL_ACTION clearHighlight
Definition: pcb_actions.h:496
static TOOL_ACTION inspectClearance
Definition: pcb_actions.h:492
static TOOL_ACTION updateLocalRatsnest
Definition: pcb_actions.h:508
static TOOL_ACTION boardStatistics
Definition: pcb_actions.h:488
static TOOL_ACTION localRatsnestTool
Definition: pcb_actions.h:506
void Go(int(T::*aStateFunc)(const TOOL_EVENT &), const TOOL_EVENT_LIST &aConditions=TOOL_EVENT(TC_ANY, TA_ANY))
Define which state (aStateFunc) to go when a certain event arrives (aConditions).

References PCB_ACTIONS::boardStatistics, ClearHighlight(), PCB_ACTIONS::clearHighlight, TOOL_INTERACTIVE::Go(), HideLocalRatsnest(), PCB_ACTIONS::hideLocalRatsnest, HideNetInRatsnest(), PCB_ACTIONS::hideNetInRatsnest, HighlightItem(), PCB_ACTIONS::highlightItem, HighlightNet(), PCB_ACTIONS::highlightNet, PCB_ACTIONS::highlightNetSelection, InspectClearance(), PCB_ACTIONS::inspectClearance, InspectConstraints(), PCB_ACTIONS::inspectConstraints, ListNets(), PCB_ACTIONS::listNets, LocalRatsnestTool(), PCB_ACTIONS::localRatsnestTool, ShowBoardStatistics(), ShowNetInRatsnest(), PCB_ACTIONS::showNetInRatsnest, PCB_ACTIONS::toggleLastNetHighlight, PCB_ACTIONS::toggleNetHighlight, UpdateLocalRatsnest(), and PCB_ACTIONS::updateLocalRatsnest.

◆ ShowBoardStatistics()

int BOARD_INSPECTION_TOOL::ShowBoardStatistics ( const TOOL_EVENT aEvent)

Show dialog with board statistics.

Highlight net belonging to the item under the cursor.

Definition at line 105 of file board_inspection_tool.cpp.

106{
108 dialog.ShowModal();
109 return 0;
110}
Dialog to show common board info.

References m_frame.

Referenced by setTransitions().

◆ ShowNetInRatsnest()

int BOARD_INSPECTION_TOOL::ShowNetInRatsnest ( const TOOL_EVENT aEvent)

Definition at line 1805 of file board_inspection_tool.cpp.

1806{
1807 doHideRatsnestNet( aEvent.Parameter<intptr_t>(), false );
1808 return 0;
1809}

References doHideRatsnestNet(), and TOOL_EVENT::Parameter().

Referenced by setTransitions().

◆ UpdateLocalRatsnest()

int BOARD_INSPECTION_TOOL::UpdateLocalRatsnest ( const TOOL_EVENT aEvent)

Hide ratsnest for selected items. Called when there are no items selected.

Definition at line 1630 of file board_inspection_tool.cpp.

1631{
1633
1634 // If we have passed the simple move vector, we can update without recalculation
1635 if( aEvent.Parameter<VECTOR2I*>() )
1636 {
1637 delta = *aEvent.Parameter<VECTOR2I*>();
1638 delete aEvent.Parameter<VECTOR2I*>();
1639 }
1640 else
1641 {
1642 // We can delete the existing map to force a recalculation
1643 delete m_dynamicData;
1644 m_dynamicData = nullptr;
1645 }
1646
1647 auto selectionTool = m_toolMgr->GetTool<PCB_SELECTION_TOOL>();
1648 auto& selection = selectionTool->GetSelection();
1649 auto connectivity = getModel<BOARD>()->GetConnectivity();
1650
1651 if( selection.Empty() )
1652 {
1653 connectivity->ClearLocalRatsnest();
1654 delete m_dynamicData;
1655 m_dynamicData = nullptr;
1656 }
1657 else
1658 {
1660 }
1661
1662 return 0;
1663}
void calculateSelectionRatsnest(const VECTOR2I &aDelta)
< Recalculate dynamic ratsnest for the current selection.
constexpr int delta

References calculateSelectionRatsnest(), delta, SELECTION::Empty(), TOOL_MANAGER::GetTool(), m_dynamicData, TOOL_BASE::m_toolMgr, TOOL_EVENT::Parameter(), and PCB_TOOL_BASE::selection().

Referenced by setTransitions().

◆ view()

◆ Wait()

TOOL_EVENT * TOOL_INTERACTIVE::Wait ( const TOOL_EVENT_LIST aEventList = TOOL_EVENTTC_ANYTA_ANY ))
inherited

Suspend execution of the tool until an event specified in aEventList arrives.

No parameters means waiting for any event.

Definition at line 57 of file tool_interactive.cpp.

58{
59 return m_toolMgr->ScheduleWait( this, aEventList );
60}
TOOL_EVENT * ScheduleWait(TOOL_BASE *aTool, const TOOL_EVENT_LIST &aConditions)
Pause execution of a given tool until one or more events matching aConditions arrives.

References TOOL_BASE::m_toolMgr, and TOOL_MANAGER::ScheduleWait().

Referenced by SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), PCB_TOOL_BASE::doInteractiveItemPlacement(), EDIT_TOOL::doMoveSelection(), SELECTION_TOOL::doSelectionMenu(), EDIT_TOOL::DragArcTrack(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), SCH_DRAWING_TOOLS::DrawShape(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), PL_DRAWING_TOOLS::DrawShape(), DRAWING_TOOL::drawShape(), SCH_DRAWING_TOOLS::DrawSheet(), DRAWING_TOOL::DrawZone(), PAD_TOOL::EnumeratePads(), ROUTER_TOOL::InlineDrag(), DRAWING_TOOL::InteractivePlaceWithPreview(), EDA_3D_CONTROLLER::Main(), CVPCB_CONTROL::Main(), CVPCB_FOOTPRINT_VIEWER_SELECTION_TOOL::Main(), EE_POINT_EDITOR::Main(), EE_SELECTION_TOOL::Main(), SCH_MOVE_TOOL::Main(), SYMBOL_EDITOR_MOVE_TOOL::Main(), GERBVIEW_SELECTION_TOOL::Main(), PICKER_TOOL::Main(), ZOOM_TOOL::Main(), PL_EDIT_TOOL::Main(), PL_POINT_EDITOR::Main(), PL_SELECTION_TOOL::Main(), PCB_PICKER_TOOL::Main(), PCB_SELECTION_TOOL::Main(), LENGTH_TUNER_TOOL::MainLoop(), ROUTER_TOOL::MainLoop(), GERBVIEW_INSPECTION_TOOL::MeasureTool(), PCB_VIEWER_TOOLS::MeasureTool(), PCB_POINT_EDITOR::OnSelectionChange(), ROUTER_TOOL::performDragging(), ROUTER_TOOL::performRouting(), LENGTH_TUNER_TOOL::performTuning(), EDIT_TOOL::pickReferencePoint(), SYMBOL_EDITOR_DRAWING_TOOLS::PlaceAnchor(), BOARD_EDITOR_CONTROL::PlaceFootprint(), SCH_DRAWING_TOOLS::PlaceImage(), DRAWING_TOOL::PlaceImage(), DRAWING_TOOL::PlaceImportedGraphics(), PL_DRAWING_TOOLS::PlaceItem(), SCH_DRAWING_TOOLS::PlaceSymbol(), DRAWING_TOOL::PlaceText(), EE_SELECTION_TOOL::selectMultiple(), PL_SELECTION_TOOL::selectMultiple(), PCB_SELECTION_TOOL::selectMultiple(), PCB_SELECTION_TOOL::selectPoint(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), ZOOM_TOOL::selectRegion(), DRAWING_TOOL::SetAnchor(), SCH_DRAWING_TOOLS::SingleClickPlace(), SCH_DRAWING_TOOLS::TwoClickPlace(), SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace(), and SCH_LINE_WIRE_BUS_TOOL::UnfoldBus().

Member Data Documentation

◆ m_currentlyHighlighted

std::set<int> BOARD_INSPECTION_TOOL::m_currentlyHighlighted
private

◆ m_dynamicData

CONNECTIVITY_DATA* BOARD_INSPECTION_TOOL::m_dynamicData
private

◆ m_frame

◆ m_inspectClearanceDialog

std::unique_ptr<DIALOG_CONSTRAINTS_REPORTER> BOARD_INSPECTION_TOOL::m_inspectClearanceDialog
private

◆ m_inspectConstraintsDialog

std::unique_ptr<DIALOG_CONSTRAINTS_REPORTER> BOARD_INSPECTION_TOOL::m_inspectConstraintsDialog
private

◆ m_isBoardEditor

bool PCB_TOOL_BASE::m_isBoardEditor
protectedinherited

◆ m_isFootprintEditor

◆ m_lastHighlighted

std::set<int> BOARD_INSPECTION_TOOL::m_lastHighlighted
private

Definition at line 135 of file board_inspection_tool.h.

Referenced by ClearHighlight(), and HighlightNet().

◆ m_listNetsDialog

std::unique_ptr<DIALOG_NET_INSPECTOR> BOARD_INSPECTION_TOOL::m_listNetsDialog
private

Definition at line 139 of file board_inspection_tool.h.

Referenced by ListNets(), and onListNetsDialogClosed().

◆ m_listNetsDialogSettings

DIALOG_NET_INSPECTOR::SETTINGS BOARD_INSPECTION_TOOL::m_listNetsDialogSettings
private

Definition at line 140 of file board_inspection_tool.h.

Referenced by ListNets(), and onListNetsDialogClosed().

◆ m_menu

TOOL_MENU TOOL_INTERACTIVE::m_menu
protectedinherited

The functions below are not yet implemented - their interface may change.

Definition at line 125 of file tool_interactive.h.

Referenced by SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), PCB_TOOL_BASE::doInteractiveItemPlacement(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), SCH_DRAWING_TOOLS::DrawShape(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), PL_DRAWING_TOOLS::DrawShape(), DRAWING_TOOL::drawShape(), SCH_DRAWING_TOOLS::DrawSheet(), DRAWING_TOOL::DrawZone(), PAD_TOOL::EnumeratePads(), TOOL_INTERACTIVE::GetToolMenu(), EDA_3D_CONTROLLER::Init(), CVPCB_FOOTPRINT_VIEWER_SELECTION_TOOL::Init(), EE_SELECTION_TOOL::Init(), EE_TOOL_BASE< T >::Init(), SCH_DRAWING_TOOLS::Init(), SCH_EDIT_TOOL::Init(), SCH_LINE_WIRE_BUS_TOOL::Init(), SYMBOL_EDITOR_CONTROL::Init(), SYMBOL_EDITOR_DRAWING_TOOLS::Init(), GERBVIEW_SELECTION_TOOL::Init(), PICKER_TOOL::Init(), ZOOM_TOOL::Init(), PL_DRAWING_TOOLS::Init(), PL_EDIT_TOOL::Init(), PL_SELECTION_TOOL::Init(), LENGTH_TUNER_TOOL::Init(), ROUTER_TOOL::Init(), BOARD_EDITOR_CONTROL::Init(), DRAWING_TOOL::Init(), FOOTPRINT_EDITOR_CONTROL::Init(), PAD_TOOL::Init(), PCB_SELECTION_TOOL::Init(), PCB_TOOL_BASE::Init(), PCB_VIEWER_TOOLS::Init(), DRAWING_TOOL::InteractivePlaceWithPreview(), EDA_3D_CONTROLLER::Main(), CVPCB_FOOTPRINT_VIEWER_SELECTION_TOOL::Main(), EE_SELECTION_TOOL::Main(), SCH_MOVE_TOOL::Main(), SYMBOL_EDITOR_MOVE_TOOL::Main(), GERBVIEW_SELECTION_TOOL::Main(), PICKER_TOOL::Main(), ZOOM_TOOL::Main(), PL_EDIT_TOOL::Main(), PL_SELECTION_TOOL::Main(), PCB_PICKER_TOOL::Main(), PCB_SELECTION_TOOL::Main(), LENGTH_TUNER_TOOL::MainLoop(), ROUTER_TOOL::MainLoop(), GERBVIEW_INSPECTION_TOOL::MeasureTool(), PCB_VIEWER_TOOLS::MeasureTool(), ROUTER_TOOL::performDragging(), ROUTER_TOOL::performRouting(), LENGTH_TUNER_TOOL::performTuning(), SYMBOL_EDITOR_DRAWING_TOOLS::PlaceAnchor(), BOARD_EDITOR_CONTROL::PlaceFootprint(), SCH_DRAWING_TOOLS::PlaceImage(), DRAWING_TOOL::PlaceImage(), DRAWING_TOOL::PlaceImportedGraphics(), PL_DRAWING_TOOLS::PlaceItem(), SCH_DRAWING_TOOLS::PlaceSymbol(), DRAWING_TOOL::PlaceText(), DRAWING_TOOL::SetAnchor(), SCH_DRAWING_TOOLS::SingleClickPlace(), SCH_DRAWING_TOOLS::TwoClickPlace(), and SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace().

◆ m_toolId

TOOL_ID TOOL_BASE::m_toolId
protectedinherited

Name of the tool.

Names are expected to obey the format application.ToolName (eg. pcbnew.InteractiveSelection).

Definition at line 210 of file tool_base.h.

Referenced by TOOL_INTERACTIVE::Activate(), TOOL_BASE::GetId(), and TOOL_BASE::IsToolActive().

◆ m_toolMgr

TOOL_MANAGER* TOOL_BASE::m_toolMgr
protectedinherited

Definition at line 215 of file tool_base.h.

Referenced by TOOL_INTERACTIVE::Activate(), SELECTION_TOOL::AddItemsToSel(), SELECTION_TOOL::AddItemToSel(), SCH_MOVE_TOOL::AlignElements(), SCH_EDITOR_CONTROL::AssignNetclass(), BOARD_EDITOR_CONTROL::AssignNetclass(), CVPCB_ASSOCIATION_TOOL::Associate(), TOOL_BASE::attachManager(), SCH_EDIT_TOOL::AutoplaceFields(), EE_SELECTION_TOOL::autostartEvent(), SCH_EDIT_TOOL::BreakWire(), calculateSelectionRatsnest(), ROUTER_TOOL::CanInlineDrag(), SCH_EDITOR_CONTROL::ChangeLineMode(), SCH_EDIT_TOOL::ChangeTextType(), EDIT_TOOL::ChangeTrackWidth(), SCH_EDIT_TOOL::CleanupSheetPins(), GERBVIEW_CONTROL::ClearAllLayers(), SCH_EDITOR_CONTROL::ClearHighlight(), ClearHighlight(), GERBVIEW_SELECTION_TOOL::clearSelection(), PL_SELECTION_TOOL::ClearSelection(), EE_SELECTION_TOOL::ClearSelection(), PCB_SELECTION_TOOL::ClearSelection(), SCH_EDIT_TOOL::ConvertDeMorgan(), SYMBOL_EDITOR_EDIT_TOOL::Copy(), PL_EDIT_TOOL::Copy(), PAD_TOOL::copyPadSettings(), EDIT_TOOL::copyToClipboard(), EDIT_TOOL::CreateArray(), MICROWAVE_TOOL::createInductorBetween(), EE_INSPECTION_TOOL::CrossProbe(), DRC_TOOL::CrossProbe(), COMMON_TOOLS::CursorControl(), SCH_EDITOR_CONTROL::Cut(), SCH_EDIT_TOOL::DeleteItemCursor(), SYMBOL_EDITOR_EDIT_TOOL::DeleteItemCursor(), PL_EDIT_TOOL::DeleteItemCursor(), PCB_CONTROL::DeleteItemCursor(), EDIT_TOOL::DeleteItems(), SCH_EDITOR_CONTROL::doCopy(), BOARD_EDITOR_CONTROL::doCrossProbePcbToSch(), SCH_EDITOR_CONTROL::doCrossProbeSchToPcb(), SCH_EDIT_TOOL::DoDelete(), SYMBOL_EDITOR_EDIT_TOOL::DoDelete(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), doHideRatsnestNet(), PCB_TOOL_BASE::doInteractiveItemPlacement(), EDIT_TOOL::doMoveSelection(), PCB_SELECTION_TOOL::doSyncSelection(), SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus(), COMMON_TOOLS::doZoomInOut(), COMMON_TOOLS::doZoomToPreset(), EDIT_TOOL::Drag(), DRAWING_TOOL::DrawArc(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawCircle(), DRAWING_TOOL::DrawDimension(), DRAWING_TOOL::DrawRectangle(), SCH_LINE_WIRE_BUS_TOOL::DrawSegments(), SCH_DRAWING_TOOLS::DrawShape(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), PL_DRAWING_TOOLS::DrawShape(), DRAWING_TOOL::drawShape(), SCH_DRAWING_TOOLS::DrawSheet(), DRAWING_TOOL::DrawZone(), BOARD_EDITOR_CONTROL::DrillOrigin(), SYMBOL_EDITOR_EDIT_TOOL::Duplicate(), EDIT_TOOL::Duplicate(), SCH_EDIT_TOOL::EditField(), SCH_EDIT_TOOL::editFieldText(), BOARD_EDITOR_CONTROL::EditFpInFpEditor(), PAD_TOOL::EditPad(), SYMBOL_EDITOR_EDIT_TOOL::editShapeProperties(), SYMBOL_EDITOR_EDIT_TOOL::editSymbolProperties(), SCH_EDITOR_CONTROL::EditWithSymbolEditor(), PCB_SELECTION_TOOL::EnterGroup(), GROUP_TOOL::EnterGroup(), SCH_NAVIGATE_TOOL::EnterSheet(), PAD_TOOL::EnumeratePads(), EE_INSPECTION_TOOL::ExcludeMarker(), PCB_SELECTION_TOOL::ExitGroup(), PCB_SELECTION_TOOL::expandConnection(), PAD_TOOL::explodePad(), PCB_SELECTION_TOOL::filterSelection(), PCB_SELECTION_TOOL::FindItem(), SCH_EDITOR_CONTROL::FindSymbolAndItem(), SCH_LINE_WIRE_BUS_TOOL::finishSegments(), EDIT_TOOL::Flip(), EDIT_TOOL::GetAndPlace(), TOOL_BASE::GetManager(), TOOL_BASE::getModelInt(), DRAWING_TOOL::getSourceZoneForAction(), TOOL_BASE::getToolHolderInt(), TOOL_BASE::getView(), TOOL_BASE::getViewControls(), TOOL_INTERACTIVE::goInternal(), PCB_SELECTION_TOOL::grabUnconnected(), COMMON_TOOLS::GridNext(), COMMON_TOOLS::GridPreset(), COMMON_TOOLS::GridPrev(), PCB_CONTROL::GridSetOrigin(), GROUP_TOOL::Group(), GERBVIEW_CONTROL::HighlightControl(), HighlightItem(), SCH_EDITOR_CONTROL::HighlightNet(), HighlightNet(), highlightNet(), SCH_EDITOR_CONTROL::HighlightNetCursor(), PL_EDIT_TOOL::ImportDrawingSheetContent(), FOOTPRINT_EDITOR_CONTROL::ImportFootprint(), EE_TOOL_BASE< T >::Init(), SCH_EDIT_TOOL::Init(), SYMBOL_EDITOR_CONTROL::Init(), SYMBOL_EDITOR_EDIT_TOOL::Init(), PL_DRAWING_TOOLS::Init(), PL_EDIT_TOOL::Init(), PL_POINT_EDITOR::Init(), ROUTER_TOOL::Init(), BOARD_EDITOR_CONTROL::Init(), Init(), BOARD_REANNOTATE_TOOL::Init(), CONVERT_TOOL::Init(), DRAWING_TOOL::Init(), EDIT_TOOL::Init(), GLOBAL_EDIT_TOOL::Init(), GROUP_TOOL::Init(), PAD_TOOL::Init(), PCB_POINT_EDITOR::Init(), PCB_SELECTION_TOOL::Init(), ALIGN_DISTRIBUTE_TOOL::Init(), POSITION_RELATIVE_TOOL::Init(), ROUTER_TOOL::InlineBreakTrack(), ROUTER_TOOL::InlineDrag(), InspectClearance(), InspectConstraints(), DRAWING_TOOL::InteractivePlaceWithPreview(), EDIT_TOOL::invokeInlineRouter(), EDIT_TOOL::isRouterActive(), TOOL_BASE::IsToolActive(), GROUP_TOOL::LeaveGroup(), LocalRatsnestTool(), EDA_3D_CONTROLLER::Main(), CVPCB_CONTROL::Main(), CVPCB_FOOTPRINT_VIEWER_SELECTION_TOOL::Main(), EE_SELECTION_TOOL::Main(), SCH_MOVE_TOOL::Main(), SYMBOL_EDITOR_MOVE_TOOL::Main(), GERBVIEW_SELECTION_TOOL::Main(), PL_EDIT_TOOL::Main(), PL_SELECTION_TOOL::Main(), PCB_PICKER_TOOL::Main(), PCB_SELECTION_TOOL::Main(), LENGTH_TUNER_TOOL::MainLoop(), ROUTER_TOOL::MainLoop(), PCB_VIEWER_TOOLS::MeasureTool(), SCH_EDIT_TOOL::Mirror(), SYMBOL_EDITOR_EDIT_TOOL::Mirror(), EDIT_TOOL::Mirror(), BOARD_EDITOR_CONTROL::modifyLockSelected(), EDIT_TOOL::MoveExact(), SCH_EDITOR_CONTROL::NextLineMode(), SYMBOL_EDITOR_CONTROL::OnDeMorgan(), SELECTION_TOOL::onDisambiguationExpire(), COMMON_TOOLS::OnGridChanged(), PCB_POINT_EDITOR::OnSelectionChange(), SCH_EDITOR_CONTROL::Paste(), SYMBOL_EDITOR_EDIT_TOOL::Paste(), PL_EDIT_TOOL::Paste(), PAD_TOOL::pastePadProperties(), ROUTER_TOOL::performDragging(), ROUTER_TOOL::performRouting(), GROUP_TOOL::PickNewMember(), EDIT_TOOL::pickReferencePoint(), SYMBOL_EDITOR_EDIT_TOOL::PinTable(), PCB_CONTROL::placeBoardItems(), BOARD_EDITOR_CONTROL::PlaceFootprint(), SCH_DRAWING_TOOLS::PlaceImage(), DRAWING_TOOL::PlaceImage(), DRAWING_TOOL::PlaceImportedGraphics(), PL_DRAWING_TOOLS::PlaceItem(), SCH_DRAWING_TOOLS::PlaceSymbol(), DRAWING_TOOL::PlaceText(), GERBVIEW_CONTROL::Print(), PCB_CONTROL::Print(), SCH_EDIT_TOOL::Properties(), SYMBOL_EDITOR_EDIT_TOOL::Properties(), EDIT_TOOL::Properties(), PAD_TOOL::pushPadSettings(), EDIT_TOOL::rebuildConnectivity(), ZONE_FILLER_TOOL::rebuildConnectivity(), EE_SELECTION_TOOL::RebuildSelection(), PAD_TOOL::RecombinePad(), SCH_EDITOR_CONTROL::Redo(), SYMBOL_EDITOR_EDIT_TOOL::Redo(), POSITION_RELATIVE_TOOL::RelativeItemSelectionMove(), EDIT_TOOL::Remove(), PCB_POINT_EDITOR::removeCorner(), GROUP_TOOL::RemoveFromGroup(), SELECTION_TOOL::RemoveItemFromSel(), SELECTION_TOOL::RemoveItemsFromSel(), SCH_EDIT_TOOL::RepeatDrawItem(), SYMBOL_EDITOR_DRAWING_TOOLS::RepeatDrawItem(), PCB_SELECTION_TOOL::RequestSelection(), EE_SELECTION_TOOL::RequestSelection(), EDA_3D_CONTROLLER::Reset(), COMMON_TOOLS::Reset(), PNS::TOOL_BASE::Reset(), PAD_TOOL::Reset(), COMMON_TOOLS::ResetLocalCoords(), TOOL_INTERACTIVE::resetTransitions(), SCH_EDITOR_CONTROL::Revert(), SCH_EDIT_TOOL::Rotate(), SYMBOL_EDITOR_EDIT_TOOL::Rotate(), EDIT_TOOL::Rotate(), ROUTER_TOOL::RouteSelected(), TOOL_INTERACTIVE::RunMainStack(), DRC_TOOL::RunTests(), EE_SELECTION_TOOL::Selectable(), EE_SELECTION_TOOL::SelectAll(), PCB_SELECTION_TOOL::SelectAll(), EE_SELECTION_TOOL::SelectConnection(), PCB_TOOL_BASE::selection(), COMMON_TOOLS::SelectionTool(), GERBVIEW_SELECTION_TOOL::SelectItem(), GERBVIEW_SELECTION_TOOL::SelectItems(), EE_SELECTION_TOOL::selectMultiple(), PL_SELECTION_TOOL::selectMultiple(), PCB_SELECTION_TOOL::selectMultiple(), PCB_SELECTION_TOOL::selectNet(), GERBVIEW_SELECTION_TOOL::selectPoint(), PL_SELECTION_TOOL::SelectPoint(), PCB_SELECTION_TOOL::selectPoint(), EE_SELECTION_TOOL::selectPoint(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), PCB_SELECTION_TOOL::selectSameSheet(), PCB_SELECTION_TOOL::selectSheetContents(), DRAWING_TOOL::SetAnchor(), TOOL_INTERACTIVE::SetContextMenu(), EDA_3D_CONTROLLER::SetMaterial(), DRC_TOOL::ShowDRCDialog(), SCH_DRAWING_TOOLS::SingleClickPlace(), SCH_EDIT_TOOL::Swap(), EE_SELECTION_TOOL::SyncSelection(), COMMON_TOOLS::ToggleCursor(), COMMON_TOOLS::ToggleCursorStyle(), EDA_3D_CONTROLLER::ToggleVisibility(), BOARD_EDITOR_CONTROL::TrackWidthDec(), BOARD_EDITOR_CONTROL::TrackWidthInc(), SCH_MOVE_TOOL::trimDanglingLines(), SCH_DRAWING_TOOLS::TwoClickPlace(), SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace(), SCH_EDITOR_CONTROL::Undo(), SYMBOL_EDITOR_EDIT_TOOL::Undo(), GROUP_TOOL::Ungroup(), PCB_SELECTION_TOOL::unrouteSelected(), GERBVIEW_SELECTION_TOOL::UnselectItem(), GERBVIEW_SELECTION_TOOL::UnselectItems(), PNS::TOOL_BASE::updateEndItem(), UpdateLocalRatsnest(), EE_INSPECTION_TOOL::UpdateMessagePanel(), GERBVIEW_CONTROL::UpdateMessagePanel(), PL_EDITOR_CONTROL::UpdateMessagePanel(), PCB_CONTROL::UpdateMessagePanel(), EDIT_TOOL::updateModificationPoint(), EE_POINT_EDITOR::updateParentItem(), PNS::TOOL_BASE::updateStartItem(), BOARD_EDITOR_CONTROL::ViaSizeDec(), BOARD_EDITOR_CONTROL::ViaSizeInc(), TOOL_INTERACTIVE::Wait(), BOARD_EDITOR_CONTROL::ZoneDuplicate(), and BOARD_EDITOR_CONTROL::ZoneMerge().

◆ m_toolName

std::string TOOL_BASE::m_toolName
protectedinherited

Definition at line 214 of file tool_base.h.

Referenced by TOOL_BASE::GetName().

◆ m_type

TOOL_TYPE TOOL_BASE::m_type
protectedinherited

Unique identifier for the tool, assigned by a TOOL_MANAGER instance.

Definition at line 207 of file tool_base.h.

Referenced by TOOL_BASE::GetType().


The documentation for this class was generated from the following files: