Added net highlighting.

This commit is contained in:
Maciej Suminski 2014-04-04 17:40:00 +02:00
parent 9a84944fba
commit a6917280fe
3 changed files with 63 additions and 6 deletions

View File

@ -109,6 +109,26 @@ public:
return ( m_activeLayers.count( aLayerId ) > 0 ); return ( m_activeLayers.count( aLayerId ) > 0 );
} }
/**
* Function GetHighlight
* Returns current highlight setting.
* @return True if highlight is enabled, false otherwise.
*/
bool GetHighlight() const
{
return m_highlightEnabled;
}
/**
* Function GetHighlightNetCode
* Returns netcode of currently highlighted net.
* @return Netcode of currently highlighted net.
*/
int GetHighlightNetCode() const
{
return m_highlightNetcode;
}
/** /**
* Function SetHighlight * Function SetHighlight
* Turns on/off highlighting - it may be done for the active layer or the specified net. * Turns on/off highlighting - it may be done for the active layer or the specified net.
@ -119,8 +139,6 @@ public:
inline void SetHighlight( bool aEnabled, int aNetcode = -1 ) inline void SetHighlight( bool aEnabled, int aNetcode = -1 )
{ {
m_highlightEnabled = aEnabled; m_highlightEnabled = aEnabled;
if( aNetcode > 0 )
m_highlightNetcode = aNetcode; m_highlightNetcode = aNetcode;
} }

View File

@ -111,12 +111,19 @@ int SELECTION_TOOL::Main( TOOL_EVENT& aEvent )
// single click? Select single object // single click? Select single object
else if( evt->IsClick( BUT_LEFT ) ) else if( evt->IsClick( BUT_LEFT ) )
{
if( evt->Modifier( MD_CTRL ) )
{
highlightNet( evt->Position() );
}
else
{ {
if( !m_additive ) if( !m_additive )
clearSelection(); clearSelection();
selectSingle( evt->Position() ); selectSingle( evt->Position() );
} }
}
// right click? if there is any object - show the context menu // right click? if there is any object - show the context menu
else if( evt->IsClick( BUT_RIGHT ) ) else if( evt->IsClick( BUT_RIGHT ) )
@ -650,6 +657,30 @@ bool SELECTION_TOOL::selectionContains( const VECTOR2I& aPoint ) const
} }
void SELECTION_TOOL::highlightNet( const VECTOR2I& aPoint )
{
KIGFX::RENDER_SETTINGS* render = getView()->GetPainter()->GetSettings();
GENERAL_COLLECTORS_GUIDE guide = getEditFrame<PCB_EDIT_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>( PCB_T ), 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 SELECTION_TOOL::SELECTION::clear() void SELECTION_TOOL::SELECTION::clear()
{ {
items.ClearItemsList(); items.ClearItemsList();

View File

@ -221,6 +221,14 @@ private:
*/ */
bool selectionContains( const VECTOR2I& aPoint ) const; bool selectionContains( const VECTOR2I& aPoint ) const;
/**
* 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).
*/
void highlightNet( const VECTOR2I& aPoint );
/// Visual representation of selection box /// Visual representation of selection box
SELECTION_AREA* m_selArea; SELECTION_AREA* m_selArea;