Commit 69c5bdea authored by dickelbeck's avatar dickelbeck
Browse files

highlight tool HitTest()ing prefers pads over tracks

parent 0760976f
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -5,6 +5,17 @@ Please add newer entries at the top, list the date and your name with
email address.


2007-Dec-13 UPDATE   Dick Hollenbeck <dick@softplc.com>
================================================================================
+pcbnew
  * surbrill.cpp's int WinEDA_PcbFrame::Select_High_Light( wxDC* DC )
    was re-written to use the GENERAL_COLLECTOR, and the scanList is set to
    give pads a higher search priority than tracks, vias or pads.
    The objective was to use the pad if possible, rather than a track on a pad,
    so the pad can be sent to eeschema.  Finding the track only (even though
    on a pad) would not send anything to eeschema.


2007-Dec-12 UPDATE   Dick Hollenbeck <dick@softplc.com>
================================================================================
+pcbnew
+10 −0
Original line number Diff line number Diff line
@@ -92,6 +92,16 @@ const KICAD_T GENERAL_COLLECTOR::PadsOrModules[] = {
    EOT 
};


const KICAD_T GENERAL_COLLECTOR::PadsOrTracks[] = { 
    TYPEPAD, 
    TYPEVIA,
    TYPETRACK,
    TYPEZONE,
    EOT 
};


const KICAD_T GENERAL_COLLECTOR::ModulesAndTheirItems[] = { 
    TYPETEXTEMODULE,
    TYPEEDGEMODULE,
+6 −0
Original line number Diff line number Diff line
@@ -226,6 +226,12 @@ public:
     */
    static const KICAD_T PadsOrModules[];

    /**
     * A scan list for PADs, TRACKs, VIAs, or ZONEs
     */
    static const KICAD_T PadsOrTracks[];

    
    /**
     * A scan list for MODULEs and their items (for Modedit)
     */
+28 −18
Original line number Diff line number Diff line
@@ -9,6 +9,8 @@
#include "pcbnew.h"

#include "protos.h"
#include "collectors.h"


#define Pad_fill (Pad_Fill_Item.State == RUN)

@@ -88,32 +90,40 @@ int WinEDA_PcbFrame::Select_High_Light( wxDC* DC )
/* Localise track ou pad et met en surbrillance le net correspondant
 *  Retourne le netcode, ou -1 si pas de net localis�*/
{
    TRACK* pt_piste;
    D_PAD* pt_pad;
    int    masquelayer = g_TabOneLayerMask[GetScreen()->m_Active_Layer];
    int    code = -1;

    if( g_HightLigt_Status )
        Hight_Light( DC );
    
    pt_piste = Locate_Pistes( m_Pcb->m_Track, masquelayer, CURSEUR_OFF_GRILLE );
    if( pt_piste )
    {
        code = g_HightLigth_NetCode = pt_piste->GetNet();
        Hight_Light( DC );
    }
    else
    // use this scheme because of pad is higher priority than tracks in the
    // search, and finding a pad, instead of a track on a pad,
    // allows us to fire a message to eescema.

    GENERAL_COLLECTORS_GUIDE guide = GetCollectorsGuide();

    // tweak the collector 
    
    m_Collector->Collect( m_Pcb, GENERAL_COLLECTOR::PadsOrTracks, 
                         GetScreen()->RefPos( true ), guide );

    BOARD_ITEM* item = (*m_Collector)[0];
    
    if( item )
    {
        pt_pad = Locate_Any_Pad( m_Pcb, CURSEUR_OFF_GRILLE );
        if( pt_pad != NULL )
        switch( item->Type() )
        {
            code = g_HightLigth_NetCode = pt_pad->GetNet();
        case TYPEPAD:
            g_HightLigth_NetCode = ((D_PAD*)item)->GetNet();
            Hight_Light( DC );
            SendMessageToEESCHEMA( item );
            return g_HightLigth_NetCode;
            
        default:
            g_HightLigth_NetCode = ((TRACK*)item)->GetNet();
            Hight_Light( DC );
            SendMessageToEESCHEMA( pt_pad );
            return g_HightLigth_NetCode;
        }
    }
    
    return code;
    return -1;      // HitTest() failed.
}