/****************************/ /* affichage des empreintes */ /****************************/ #include "fctsys.h" #include "gr_basic.h" #include "common.h" #include "pcbnew.h" #include "protos.h" #define Pad_fill (Pad_Fill_Item.State == RUN) static void Pad_Surbrillance(WinEDA_DrawPanel * panel, wxDC * DC, MODULE * Module, int NetCode); /* variables locales : */ static int draw_mode ; /*********************************************************/ void WinEDA_PcbFrame::Liste_Equipot(wxCommandEvent & event) /*********************************************************/ /* Display a filtered list of equipot names if an equipot is selected the corresponding tracks and pads are highlighted */ { EQUIPOT * Equipot ; wxString msg; WinEDA_TextFrame * List; int ii, jj; msg = wxT("*"); Get_Message(_("Filter for net names:"),msg, this); if ( msg.IsEmpty() ) return; List = new WinEDA_TextFrame(this, _("List Nets") ); Equipot = (EQUIPOT*) m_Pcb->m_Equipots; for ( ; Equipot != NULL; Equipot = (EQUIPOT*)Equipot->Pnext ) { wxString Line; /* calcul adr relative du nom de la pastille reference de la piste */ if( ! WildCompareString(msg, Equipot->m_Netname, FALSE ) ) continue ; Line.Printf( wxT("net_code = %3.3d [%.16s] "),Equipot->m_NetCode, Equipot->m_Netname.GetData()); List->Append(Line); } ii = List->ShowModal(); List->Destroy(); if (ii < 0) return; /* Recherche du numero de net rellement selectionné */ Equipot = (EQUIPOT*) m_Pcb->m_Equipots; for ( jj = 0; Equipot != NULL; Equipot = (EQUIPOT*)Equipot->Pnext ) { /* calcul adr relative du nom de la pastille reference de la piste */ if( ! WildCompareString(msg, Equipot->m_Netname, FALSE) ) continue ; if ( ii == jj ) { ii = Equipot->m_NetCode; break; } jj++; } wxClientDC dc(DrawPanel); DrawPanel->PrepareGraphicContext(&dc); if(g_HightLigt_Status) Hight_Light(&dc); g_HightLigth_NetCode = ii; Hight_Light(&dc); } /**************************************************/ 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->m_NetCode; Hight_Light(DC); } else { pt_pad = Locate_Any_Pad(m_Pcb, CURSEUR_OFF_GRILLE); if( pt_pad != NULL ) { code = g_HightLigth_NetCode = pt_pad->m_NetCode ; Hight_Light(DC) ; } } return code; } /*******************************************/ void WinEDA_PcbFrame::Hight_Light(wxDC * DC) /*******************************************/ /* fonction d'appel de Surbrillance a partir du menu Met ou supprime la surbrillance d'un net pointe par la souris */ { g_HightLigt_Status = !g_HightLigt_Status; DrawHightLight( DC, g_HightLigth_NetCode) ; } /****************************************************************/ void WinEDA_PcbFrame::DrawHightLight(wxDC * DC, int NetCode) /****************************************************************/ /* Turn On or OFF the HightLight for trcak and pads with the netcode "NetCode' */ { TRACK * pts ; MODULE * Module; if(g_HightLigt_Status ) draw_mode = GR_SURBRILL | GR_OR; else draw_mode = GR_AND | GR_SURBRILL; Module = m_Pcb->m_Modules; /* Redraw pads */ for( ; Module != NULL; Module = (MODULE*) Module->Pnext ) { Pad_Surbrillance(DrawPanel, DC, Module, NetCode) ; } /* Redraw track and vias: */ for ( pts = m_Pcb->m_Track; pts != NULL; pts = (TRACK*) pts->Pnext) { if( pts->m_NetCode == NetCode ) { pts->Draw(DrawPanel, DC, draw_mode); } } } /*******************************************************/ static void Pad_Surbrillance(WinEDA_DrawPanel * panel, wxDC * DC, MODULE * Module, int NetCode) /*******************************************************/ /* Mise en Surbrillance des Pads */ { D_PAD * pt_pad ; /* trace des pastilles */ for(pt_pad = Module->m_Pads; pt_pad != NULL; pt_pad = (D_PAD*)pt_pad->Pnext) { if ( pt_pad->m_NetCode == NetCode ) { pt_pad->Draw(panel, DC, wxPoint(0,0),draw_mode); } } }