/**********************************************************/ /* Routines d'affichage de parametres et caracteristiques */ /**********************************************************/ #include "fctsys.h" #include "gr_basic.h" #include "common.h" #include "pcbnew.h" #include "autorout.h" #include "3d_struct.h" #include "protos.h" /* Routines locales */ /*****************************************************************************/ void Affiche_Infos_PCB_Texte(WinEDA_BasePcbFrame * frame, TEXTE_PCB* pt_texte) /*****************************************************************************/ /* Affiche en bas d'ecran les caract du texte sur PCB Entree : pointeur de la description du texte */ { wxString msg; frame->MsgPanel->EraseMsgBox(); if ( pt_texte == NULL ) return; if( pt_texte->m_StructType == TYPECOTATION ) Affiche_1_Parametre(frame, 1,_("COTATION"),pt_texte->m_Text, DARKGREEN); else Affiche_1_Parametre(frame, 1,_("PCB Text"),pt_texte->m_Text, DARKGREEN); Affiche_1_Parametre(frame, 28,_("Layer"), ReturnPcbLayerName(pt_texte->m_Layer), g_DesignSettings.m_LayerColor[pt_texte->m_Layer] & MASKCOLOR); Affiche_1_Parametre(frame, 36,_("Mirror"),wxEmptyString,GREEN) ; if( (pt_texte->m_Miroir & 1) ) Affiche_1_Parametre(frame, -1,wxEmptyString,_("No"), DARKGREEN) ; else Affiche_1_Parametre(frame, -1,wxEmptyString,_("Yes"), DARKGREEN) ; msg.Printf( wxT("%.1f"),(float)pt_texte->m_Orient/10 ); Affiche_1_Parametre(frame, 43,_("Orient"),msg, DARKGREEN) ; valeur_param(pt_texte->m_Width, msg) ; Affiche_1_Parametre(frame, 50,_("Width"),msg,MAGENTA) ; valeur_param(pt_texte->m_Size.x, msg) ; Affiche_1_Parametre(frame, 60, _("H Size"),msg,RED) ; valeur_param(pt_texte->m_Size.y, msg); Affiche_1_Parametre(frame, 70,_("V Size"),msg,RED) ; } /************************************************************************/ void Affiche_Infos_E_Texte(WinEDA_BasePcbFrame * frame, MODULE* Module, TEXTE_MODULE* pt_texte) /************************************************************************/ /* Affiche en bas d'ecran les caract du texte sur empreinte Entree : pointeur de description sur le module pointeur de la description du texte */ { wxString text_type_msg[3] = {_("Ref."),_("Value"),_("Text")}; wxString msg, Line; int ii; frame->MsgPanel->EraseMsgBox(); Line = Module->m_Reference->m_Text; Affiche_1_Parametre(frame, 1, _("Module"), Line, DARKCYAN) ; Line = pt_texte->m_Text; Affiche_1_Parametre(frame, 10,_("Text"),Line,YELLOW) ; ii = pt_texte->m_Type; if (ii > 2) ii = 2; Affiche_1_Parametre(frame, 20,_("Type"),text_type_msg[ii], DARKGREEN) ; Affiche_1_Parametre(frame, 25,_("Display"),wxEmptyString, DARKGREEN); if(pt_texte->m_NoShow) Affiche_1_Parametre(frame, -1,wxEmptyString, _("No"), DARKGREEN); else Affiche_1_Parametre(frame, -1,wxEmptyString, _("Yes"), DARKGREEN); ii = pt_texte->m_Layer; if ( ii <= 28) Affiche_1_Parametre(frame, 28,_("Layer"),ReturnPcbLayerName(ii), DARKGREEN); else { msg.Printf( wxT("%d"), ii); Affiche_1_Parametre(frame, 28,_("Layer"), msg, DARKGREEN) ; } msg = wxT(" Yes"); if( (pt_texte->m_Miroir & 1) ) msg = wxT(" No"); Affiche_1_Parametre(frame, 36,_("Mirror"),msg, DARKGREEN) ; msg.Printf( wxT("%.1f"),(float)pt_texte->m_Orient / 10 ); Affiche_1_Parametre(frame, 42,_("Orient"),msg, DARKGREEN) ; valeur_param(pt_texte->m_Width, msg) ; Affiche_1_Parametre(frame, 48,_("Width"),msg, DARKGREEN) ; valeur_param(pt_texte->m_Size.x,msg) ; Affiche_1_Parametre(frame, 56,_("H Size"),msg,RED) ; valeur_param(pt_texte->m_Size.y,msg); Affiche_1_Parametre(frame, 64,_("V Size"),msg,RED) ; } /*********************************************************************/ void Affiche_Infos_Piste(WinEDA_BasePcbFrame * frame, TRACK * pt_piste) /********************************************************************/ /* Affiche les caract principales d'un segment de piste en bas d'ecran */ { wxString msg; int text_pos; frame->MsgPanel->EraseMsgBox(); switch(pt_piste->m_StructType) { case TYPEVIA: msg = g_ViaType_Name[pt_piste->m_Shape & 255]; break; case TYPETRACK: msg = _("Track") ; break; case TYPEZONE: msg = _("Zone"); break; default: msg = wxT("????"); break; } text_pos = 1; Affiche_1_Parametre(frame, text_pos,_("Type"),msg, DARKCYAN); /* Affiche NetName pour les segments de piste type cuivre */ text_pos += 15; if( ( pt_piste->m_StructType == TYPETRACK ) || ( pt_piste->m_StructType == TYPEZONE ) || ( pt_piste->m_StructType == TYPEVIA ) ) { EQUIPOT * equipot = GetEquipot( frame->m_Pcb, pt_piste->m_NetCode); if ( equipot ) { msg = equipot->m_Netname; } else msg = wxT(""); Affiche_1_Parametre(frame, text_pos,_("NetName"),msg,RED) ; /* Affiche net code :*/ msg.Printf( wxT("%d .%d"),pt_piste->m_NetCode, pt_piste->m_Sous_Netcode); text_pos += 18; Affiche_1_Parametre(frame, text_pos,_("NetCode"),msg,RED) ; } else { Affiche_1_Parametre(frame, text_pos, _("Segment"),wxEmptyString,RED) ; if(pt_piste->m_Shape == S_CIRCLE) Affiche_1_Parametre(frame, -1,wxEmptyString,_("Circle"),RED) ; else Affiche_1_Parametre(frame, -1,wxEmptyString,_("Standard"),RED) ; } /* Affiche les flags Status piste */ msg = wxT(". . "); if(pt_piste->GetState(SEGM_FIXE) ) msg[0] = 'F'; if(pt_piste->GetState(SEGM_AR) ) msg[2] = 'A'; text_pos = 42; Affiche_1_Parametre(frame, text_pos,_("Stat"), msg,MAGENTA); /* Affiche Layer(s) */ if ( pt_piste->m_StructType == TYPEVIA) { SEGVIA * Via = (SEGVIA *) pt_piste; int top_layer, bottom_layer; Via->ReturnLayerPair(&top_layer, &bottom_layer); msg = ReturnPcbLayerName(top_layer, TRUE) + wxT("/") + ReturnPcbLayerName(bottom_layer, TRUE); } else msg = ReturnPcbLayerName(pt_piste->m_Layer); text_pos += 5; Affiche_1_Parametre(frame, text_pos, _("Layer"), msg, BROWN) ; /* Affiche Epaisseur */ valeur_param((unsigned)(pt_piste->m_Width), msg) ; text_pos += 11; if (pt_piste->m_StructType == TYPEVIA ) // Display Diam and Drill values { Affiche_1_Parametre(frame, text_pos,_("Diam"), msg, DARKCYAN); int drill_value = (pt_piste->m_Drill >= 0 ) ? pt_piste->m_Drill : g_DesignSettings.m_ViaDrill; valeur_param((unsigned)drill_value, msg); text_pos += 8; wxString title = _("Drill"); if ( g_DesignSettings.m_ViaDrill >= 0 ) title += wxT("*"); Affiche_1_Parametre(frame, text_pos,_("Drill"),msg, RED); } else Affiche_1_Parametre(frame, text_pos,_("Width"),msg, DARKCYAN) ; } /************************************************************/ void Affiche_Infos_DrawSegment(WinEDA_BasePcbFrame * frame, DRAWSEGMENT * DrawSegment) /************************************************************/ /* Affiche les caract principales d'un segment type drawind PCB en bas d'ecran */ { int itype; wxString msg; frame->MsgPanel->EraseMsgBox(); itype = DrawSegment->m_Type & 0x0F; msg = wxT("DRAWING"); if( DrawSegment->m_StructType == TYPECOTATION ) msg = wxT("COTATION"); Affiche_1_Parametre(frame, 1,_("Type"),msg, DARKCYAN) ; Affiche_1_Parametre(frame, 16,_("Shape"),wxEmptyString,RED) ; if(DrawSegment->m_Shape == S_CIRCLE) Affiche_1_Parametre(frame, -1,wxEmptyString,_("Circle"),RED) ; else if (DrawSegment->m_Shape == S_ARC) { Affiche_1_Parametre(frame, -1,wxEmptyString, _(" Arc "),RED) ; msg.Printf( wxT("%d"),DrawSegment->m_Angle); Affiche_1_Parametre(frame, 32, wxT(" l.arc "), msg,RED) ; } else Affiche_1_Parametre(frame, -1, wxEmptyString, _("Segment"),RED) ; Affiche_1_Parametre(frame, 48, _("Layer"),ReturnPcbLayerName(DrawSegment->m_Layer),BROWN) ; /* Affiche Epaisseur */ valeur_param((unsigned)(DrawSegment->m_Width), msg) ; Affiche_1_Parametre(frame, 60,_("Width"), msg, DARKCYAN) ; } /*****************************************************************************/ void Affiche_Infos_Segment_Module(WinEDA_BasePcbFrame * frame, MODULE* Module,EDGE_MODULE* pt_edge) /*****************************************************************************/ /* Affiche en bas d'ecran les caract du Segment contour d'un module Les parametres du module doivent etre a jour*/ { wxString bufcar; if(Module == NULL) return; frame->MsgPanel->EraseMsgBox(); Affiche_1_Parametre(frame, 1,_("Seg"),wxEmptyString, DARKCYAN) ; Affiche_1_Parametre(frame, 5 ,_("Module"),Module->m_Reference->m_Text, DARKCYAN) ; Affiche_1_Parametre(frame, 14,_("Value"),Module->m_Value->m_Text, BLUE) ; bufcar.Printf( wxT("%8.8lX"), Module->m_TimeStamp) ; Affiche_1_Parametre(frame, 24,_("TimeStamp"),bufcar,BROWN) ; Affiche_1_Parametre(frame, 34,_("Mod Layer"),ReturnPcbLayerName(Module->m_Layer),RED); Affiche_1_Parametre(frame, 44,_("Seg Layer"), ReturnPcbLayerName(Module->m_Layer),RED) ; valeur_param(pt_edge->m_Width,bufcar); Affiche_1_Parametre(frame, 54,_("Width"), bufcar,BLUE); } /*********************************************************/ void Affiche_Infos_Status_Pcb(WinEDA_BasePcbFrame * frame) /*********************************************************/ /* Affiche l'etat du PCB : nb de pads, nets , connexions.. */ #define POS_AFF_NBPADS 1 #define POS_AFF_NBVIAS 8 #define POS_AFF_NBNODES 16 #define POS_AFF_NBLINKS 24 #define POS_AFF_NBNETS 32 #define POS_AFF_NBCONNECT 40 #define POS_AFF_NBNOCONNECT 48 { int nb_vias = 0, ii; EDA_BaseStruct * Struct; wxString txt; frame->MsgPanel->EraseMsgBox(); txt.Printf( wxT("%d"),frame->m_Pcb->m_NbPads); Affiche_1_Parametre(frame, POS_AFF_NBPADS,_("Pads"),txt, DARKGREEN) ; for( ii= 0, Struct = frame->m_Pcb->m_Track; Struct != NULL; Struct = Struct->Pnext) { ii++; if(Struct->m_StructType == TYPEVIA) nb_vias++ ; } txt.Printf( wxT("%d"),nb_vias); Affiche_1_Parametre(frame, POS_AFF_NBVIAS,_("Vias"),txt, DARKGREEN) ; txt.Printf( wxT("%d"),frame->m_Pcb->GetNumNodes() ); Affiche_1_Parametre(frame, POS_AFF_NBNODES,_("Nodes"),txt, DARKCYAN) ; txt.Printf( wxT("%d"),frame->m_Pcb->m_NbLinks); Affiche_1_Parametre(frame, POS_AFF_NBLINKS,_("Links"),txt, DARKGREEN) ; txt.Printf( wxT("%d"),frame->m_Pcb->m_NbNets); Affiche_1_Parametre(frame, POS_AFF_NBNETS,_("Nets"),txt,RED) ; txt.Printf( wxT("%d"),frame->m_Pcb->m_NbLinks - frame->m_Pcb->GetNumNoconnect()); Affiche_1_Parametre(frame, POS_AFF_NBCONNECT,_("Connect"),txt, DARKGREEN) ; txt.Printf( wxT("%d"),frame->m_Pcb->GetNumNoconnect()); Affiche_1_Parametre(frame, POS_AFF_NBNOCONNECT,_("NoConn"),txt,BLUE) ; } /*******************************************************************/ void Affiche_Infos_Equipot(int netcode, WinEDA_BasePcbFrame * frame) /*******************************************************************/ /* Affiche les infos relatives a une equipot: nb de pads, nets , connexions.. */ { int nb_vias = 0, ii; EDA_BaseStruct * Struct; wxString txt; MODULE * module; D_PAD * pad; EQUIPOT * equipot; frame->MsgPanel->EraseMsgBox(); equipot = GetEquipot(frame->m_Pcb, netcode); if ( equipot ) Affiche_1_Parametre(frame, 1,_("Net Name"),equipot->m_Netname,RED) ; else Affiche_1_Parametre(frame, 1,_("No Net (not connected)"), wxEmptyString, RED) ; txt.Printf( wxT("%d"), netcode); Affiche_1_Parametre(frame, 30,_("Net Code"),txt,RED) ; for ( ii = 0, module = frame->m_Pcb->m_Modules; module != 0; module = (MODULE*)module->Pnext) { for ( pad = module->m_Pads;pad != 0; pad = (D_PAD*) pad->Pnext) { if ( pad->m_NetCode == netcode ) ii++; } } txt.Printf( wxT("%d"),ii); Affiche_1_Parametre(frame, 40,_("Pads"),txt, DARKGREEN) ; for( ii= 0, Struct = frame->m_Pcb->m_Track; Struct != NULL; Struct = Struct->Pnext) { ii++; if( Struct->m_StructType == TYPEVIA ) if ( ((SEGVIA*)Struct)->m_NetCode == netcode ) nb_vias++ ; } txt.Printf( wxT("%d"),nb_vias); Affiche_1_Parametre(frame, 50,_("Vias"),txt, BLUE) ; }