/**********************************************************/ /* 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 msg, Line; int ii; static const wxString text_type_msg[3] = { _( "Ref." ), _( "Value" ), _( "Text" ) }; 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 ); }