Fix zone cross-probing from DRC dialog.

This commit is contained in:
Alex Shvartzkop 2024-03-08 21:23:12 +03:00
parent 7944803f8c
commit aa68a3817a
1 changed files with 19 additions and 4 deletions

View File

@ -487,6 +487,8 @@ void DIALOG_DRC::OnDRCItemSelected( wxDataViewEvent& aEvent )
if( item->Type() == PCB_ZONE_T ) if( item->Type() == PCB_ZONE_T )
{ {
m_frame->FocusOnItem( item, principalLayer );
m_frame->GetBoard()->GetConnectivity()->RunOnUnconnectedEdges( m_frame->GetBoard()->GetConnectivity()->RunOnUnconnectedEdges(
[&]( CN_EDGE& edge ) [&]( CN_EDGE& edge )
{ {
@ -499,12 +501,25 @@ void DIALOG_DRC::OnDRCItemSelected( wxDataViewEvent& aEvent )
return true; return true;
if( edge.GetSourceNode()->Parent() == a if( edge.GetSourceNode()->Parent() == a
&& edge.GetTargetNode()->Parent() == b ) && edge.GetTargetNode()->Parent() == b )
{ {
if( item == a ) VECTOR2I focusPos;
m_frame->FocusOnLocation( edge.GetSourcePos() );
if( item == a && item == b )
{
focusPos = ( node->m_Type == RC_TREE_NODE::MAIN_ITEM )
? edge.GetSourcePos()
: edge.GetTargetPos();
}
else else
m_frame->FocusOnLocation( edge.GetTargetPos() ); {
focusPos = ( item == edge.GetSourceNode()->Parent() )
? edge.GetSourcePos()
: edge.GetTargetPos();
}
m_frame->FocusOnLocation( focusPos );
m_frame->RefreshCanvas();
return false; return false;
} }