KiCad PCB EDA Suite
class_netinfo_item.cpp
Go to the documentation of this file.
1 
5 /*
6  * This program source code file is part of KiCad, a free EDA CAD application.
7  *
8  * Copyright (C) 2012 Jean-Pierre Charras, jean-pierre.charras@ujf-grenoble.fr
9  * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
10  * Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors.
11  *
12  * This program is free software; you can redistribute it and/or
13  * modify it under the terms of the GNU General Public License
14  * as published by the Free Software Foundation; either version 2
15  * of the License, or (at your option) any later version.
16  *
17  * This program is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20  * GNU General Public License for more details.
21  *
22  * You should have received a copy of the GNU General Public License
23  * along with this program; if not, you may find one here:
24  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
25  * or you may search the http://www.gnu.org website for the version 2 license,
26  * or you may write to the Free Software Foundation, Inc.,
27  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
28  */
29 
30 #include <fctsys.h>
31 #include <gr_basic.h>
32 #include <class_drawpanel.h>
33 #include <wxBasePcbFrame.h>
34 #include <common.h>
35 #include <kicad_string.h>
36 #include <pcbnew.h>
37 #include <richio.h>
38 #include <macros.h>
39 #include <msgpanel.h>
40 #include <base_units.h>
41 
42 #include <class_board.h>
43 #include <class_module.h>
44 #include <class_track.h>
45 
46 
47 /*********************************************************/
48 /* class NETINFO_ITEM: handle data relative to a given net */
49 /*********************************************************/
50 
51 NETINFO_ITEM::NETINFO_ITEM( BOARD* aParent, const wxString& aNetName, int aNetCode ) :
52  BOARD_ITEM( aParent, PCB_NETINFO_T ),
53  m_NetCode( aNetCode ), m_Netname( aNetName ), m_ShortNetname( m_Netname.AfterLast( '/' ) )
54 {
55  m_parent = aParent;
56 
57  if( aParent )
59  else
60  m_NetClass = std::make_shared<NETCLASS>( "<invalid>" );
61 }
62 
63 
65 {
66  // m_NetClass is not owned by me.
67 }
68 
69 
74  wxDC* DC,
75  GR_DRAWMODE aDrawMode,
76  const wxPoint& aOffset )
77 {
78 }
79 
80 
81 void NETINFO_ITEM::SetClass( NETCLASSPTR aNetClass )
82 {
83  wxCHECK( m_parent, /* void */ );
84  m_NetClass = aNetClass ? aNetClass : m_parent->GetDesignSettings().m_NetClasses.GetDefault();
85 }
86 
87 
88 void NETINFO_ITEM::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
89 {
90  wxString txt;
91  double lengthnet = 0.0; // This is the length of tracks on pcb
92  double lengthPadToDie = 0.0; // this is the length of internal ICs connections
93 
94  aList.push_back( MSG_PANEL_ITEM( _( "Net Name" ), GetNetname(), RED ) );
95 
96  txt.Printf( wxT( "%d" ), GetNet() );
97  aList.push_back( MSG_PANEL_ITEM( _( "Net Code" ), txt, RED ) );
98 
99  // Warning: for netcode == NETINFO_LIST::ORPHANED, the parent or the board
100  // can be NULL
101  BOARD * board = m_parent ? m_parent->GetBoard() : NULL;
102 
103  if( board == NULL )
104  return;
105 
106  int count = 0;
107  for( auto mod : board->Modules() )
108  {
109  for( auto pad : mod->Pads() )
110  {
111  if( pad->GetNetCode() == GetNet() )
112  {
113  count++;
114  lengthPadToDie += pad->GetPadToDieLength();
115  }
116  }
117  }
118 
119  txt.Printf( wxT( "%d" ), count );
120  aList.push_back( MSG_PANEL_ITEM( _( "Pads" ), txt, DARKGREEN ) );
121 
122  count = 0;
123 
124  for( const TRACK *track = board->m_Track; track != NULL; track = track->Next() )
125  {
126  if( track->Type() == PCB_VIA_T )
127  {
128  if( track->GetNetCode() == GetNet() )
129  count++;
130  }
131 
132  if( track->Type() == PCB_TRACE_T )
133  {
134  if( track->GetNetCode() == GetNet() )
135  lengthnet += track->GetLength();
136  }
137  }
138 
139  txt.Printf( wxT( "%d" ), count );
140  aList.push_back( MSG_PANEL_ITEM( _( "Vias" ), txt, BLUE ) );
141 
142  // Displays the full net length (tracks on pcb + internal ICs connections ):
143  txt = ::LengthDoubleToString( lengthnet + lengthPadToDie );
144  aList.push_back( MSG_PANEL_ITEM( _( "Net Length" ), txt, RED ) );
145 
146  // Displays the net length of tracks only:
147  txt = ::LengthDoubleToString( lengthnet );
148  aList.push_back( MSG_PANEL_ITEM( _( "On Board" ), txt, RED ) );
149 
150  // Displays the net length of internal ICs connections (wires inside ICs):
151  txt = ::LengthDoubleToString( lengthPadToDie );
152  aList.push_back( MSG_PANEL_ITEM( _( "In Package" ), txt, RED ) );
153 }
Definition: colors.h:57
NETCLASSPTR m_NetClass
Definition: class_netinfo.h:81
Implementation of conversion functions that require both schematic and board internal units...
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
Class BOARD to handle a board.
BOARD * m_parent
The parent board the net belongs to.
Definition: class_netinfo.h:83
void GetMsgPanelInfo(std::vector< MSG_PANEL_ITEM > &aList) override
Function GetMsgPanelInfo returns the information about the NETINFO_ITEM in aList to display in the me...
void SetClass(NETCLASSPTR aNetClass)
Function SetClass sets aNetclass into this NET.
Functions relatives to tracks, vias and segments used to fill zones.
class TRACK, a track segment (segment on a copper layer)
Definition: typeinfo.h:107
This file contains miscellaneous commonly used macros and functions.
void Draw(EDA_DRAW_PANEL *panel, wxDC *DC, GR_DRAWMODE aDrawMode, const wxPoint &offset) override
Function Draw.
Classes used in Pcbnew, CvPcb and GerbView.
DLIST_ITERATOR_WRAPPER< MODULE > Modules()
Definition: class_board.h:250
GR_DRAWMODE
Drawmode. Compositing mode plus a flag or two.
Definition: gr_basic.h:41
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Function GetDesignSettings.
Definition: class_board.h:532
wxString LengthDoubleToString(double aValue, bool aConvertToMils)
Function LengthDoubleToString is a helper to convert the double length aValue to a string in inches...
Definition: base_units.cpp:122
Definition: colors.h:60
int GetNet() const
Function GetNet.
NETINFO_ITEM(BOARD *aParent, const wxString &aNetName=wxEmptyString, int aNetCode=-1)
NETINFO_ITEM class, to handle info on nets: netnames, net constraints.
TRACK * Next() const
Definition: class_track.h:98
Class BOARD holds information pertinent to a Pcbnew printed circuit board.
Definition: class_board.h:169
class NETINFO_ITEM, a description of a net
Definition: typeinfo.h:116
The common library.
virtual BOARD * GetBoard() const
Function GetBoard returns the BOARD in which this BOARD_ITEM resides, or NULL if none.
class VIA, a via (like a track segment on a copper layer)
Definition: typeinfo.h:108
DLIST< TRACK > m_Track
Definition: class_board.h:246
Module description (excepted pads)
const wxString & GetNetname() const
Function GetNetname.
Class EDA_MSG_ITEM is used EDA_MSG_PANEL as the item type for displaying messages.
Definition: msgpanel.h:53
Message panel definition file.
#define mod(a, n)
Definition: greymap.cpp:24
NETCLASSPTR & GetDefault() const
Function GetDefault.
NETCLASSES m_NetClasses
List of current netclasses. There is always the default netclass.