/** * Function highlightNet() * Looks for a BOARD_CONNECTED_ITEM in a given spot, and if one is found - it enables * highlight for its net. * @param aPoint is the point where an item is expected (world coordinates). */ static bool highlightNet( TOOL_MANAGER* aToolMgr, const VECTOR2D& aPosition ) { KIGFX::RENDER_SETTINGS* render = aToolMgr->GetView()->GetPainter()->GetSettings(); GENERAL_COLLECTORS_GUIDE guide = static_cast<PCB_BASE_FRAME*>( aToolMgr->GetEditFrame() )->GetCollectorsGuide(); BOARD* board = static_cast<BOARD*>( aToolMgr->GetModel() ); GENERAL_COLLECTOR collector; int net = -1; // Find a connected item for which we are going to highlight a net collector.Collect( board, GENERAL_COLLECTOR::PadsTracksOrZones, wxPoint( aPosition.x, aPosition.y ), guide ); bool enableHighlight = ( collector.GetCount() > 0 ); // Obtain net code for the clicked item if( enableHighlight ) net = static_cast<BOARD_CONNECTED_ITEM*>( collector[0] )->GetNetCode(); // Toggle highlight when the same net was picked if( net > 0 && net == render->GetHighlightNetCode() ) enableHighlight = !render->IsHighlightEnabled(); if( enableHighlight != render->IsHighlightEnabled() || net != render->GetHighlightNetCode() ) { render->SetHighlight( enableHighlight, net ); aToolMgr->GetView()->UpdateAllLayersColor(); } return true; }
int PCB_EDITOR_CONTROL::HighlightNet( const TOOL_EVENT& aEvent ) { int netcode = aEvent.Parameter<intptr_t>(); if( netcode > 0 ) { KIGFX::RENDER_SETTINGS* render = m_toolMgr->GetView()->GetPainter()->GetSettings(); render->SetHighlight( true, netcode ); m_toolMgr->GetView()->UpdateAllLayersColor(); } else { // No net code specified, pick the net code belonging to the item under the cursor highlightNet( m_toolMgr, getView()->ToWorld( getViewControls()->GetMousePosition() ) ); } return 0; }
void SELECTION_TOOL::highlightNet( const VECTOR2I& aPoint ) { KIGFX::RENDER_SETTINGS* render = getView()->GetPainter()->GetSettings(); GENERAL_COLLECTORS_GUIDE guide = m_frame->GetCollectorsGuide(); GENERAL_COLLECTOR collector; int net = -1; // Find a connected item for which we are going to highlight a net collector.Collect( getModel<BOARD>(), GENERAL_COLLECTOR::PadsTracksOrZones, wxPoint( aPoint.x, aPoint.y ), guide ); bool enableHighlight = ( collector.GetCount() > 0 ); // Obtain net code for the clicked item if( enableHighlight ) net = static_cast<BOARD_CONNECTED_ITEM*>( collector[0] )->GetNetCode(); if( enableHighlight != render->GetHighlight() || net != render->GetHighlightNetCode() ) { render->SetHighlight( enableHighlight, net ); getView()->UpdateAllLayersColor(); } }