412 lines
13 KiB
C++
412 lines
13 KiB
C++
/**********************************************************/
|
|
/* 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( "<noname>" );
|
|
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 );
|
|
}
|