void EDA_DRAW_PANEL_GAL::SetHighContrastLayer( LAYER_ID aLayer ) { // Set display settings for high contrast mode KIGFX::RENDER_SETTINGS* rSettings = m_view->GetPainter()->GetSettings(); SetTopLayer( aLayer ); rSettings->ClearActiveLayers(); rSettings->SetActiveLayer( aLayer ); m_view->UpdateAllLayersColor(); }
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; }
/** * 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; }
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(); } }
void PCB_DRAW_PANEL_GAL::SetHighContrastLayer( LAYER_ID aLayer ) { // Set display settings for high contrast mode KIGFX::RENDER_SETTINGS* rSettings = m_view->GetPainter()->GetSettings(); SetTopLayer( aLayer ); rSettings->ClearActiveLayers(); rSettings->SetActiveLayer( aLayer ); if( IsCopperLayer( aLayer ) ) { // Bring some other layers to the front in case of copper layers and make them colored // fixme do not like the idea of storing the list of layers here, // should be done in some other way I guess.. LAYER_NUM layers[] = { GetNetnameLayer( aLayer ), ITEM_GAL_LAYER( VIA_THROUGH_VISIBLE ), ITEM_GAL_LAYER( VIAS_HOLES_VISIBLE ), ITEM_GAL_LAYER( PADS_VISIBLE ), ITEM_GAL_LAYER( PADS_HOLES_VISIBLE ), NETNAMES_GAL_LAYER( PADS_NETNAMES_VISIBLE ), ITEM_GAL_LAYER( GP_OVERLAY ), ITEM_GAL_LAYER( RATSNEST_VISIBLE ) }; for( unsigned int i = 0; i < sizeof( layers ) / sizeof( LAYER_NUM ); ++i ) rSettings->SetActiveLayer( layers[i] ); // Pads should be shown too if( aLayer == B_Cu ) { rSettings->SetActiveLayer( ITEM_GAL_LAYER( PAD_BK_VISIBLE ) ); rSettings->SetActiveLayer( ITEM_GAL_LAYER( MOD_BK_VISIBLE ) ); rSettings->SetActiveLayer( NETNAMES_GAL_LAYER( PAD_BK_NETNAMES_VISIBLE ) ); } else if( aLayer == F_Cu ) { rSettings->SetActiveLayer( ITEM_GAL_LAYER( PAD_FR_VISIBLE ) ); rSettings->SetActiveLayer( ITEM_GAL_LAYER( MOD_FR_VISIBLE ) ); rSettings->SetActiveLayer( NETNAMES_GAL_LAYER( PAD_FR_NETNAMES_VISIBLE ) ); } } m_view->UpdateAllLayersColor(); }