/* * Update the status bar information. */ void PCB_BASE_FRAME::UpdateStatusBar() { EDA_DRAW_FRAME::UpdateStatusBar(); PCB_SCREEN* screen = GetScreen(); if( !screen ) return; int dx; int dy; double dXpos; double dYpos; wxString line; wxString locformatter; if( DisplayOpt.DisplayPolarCood ) // display polar coordinates { double theta, ro; dx = screen->GetCrossHairPosition().x - screen->m_O_Curseur.x; dy = screen->GetCrossHairPosition().y - screen->m_O_Curseur.y; if( dx==0 && dy==0 ) theta = 0.0; else theta = atan2( (double) -dy, (double) dx ); theta = theta * 180.0 / M_PI; ro = sqrt( ( (double) dx * dx ) + ( (double) dy * dy ) ); wxString formatter; switch( g_UserUnit ) { #if defined( USE_PCBNEW_NANOMETRE ) case INCHES: formatter = wxT( "Ro %.6f Th %.1f" ); break; case MILLIMETRES: formatter = wxT( "Ro %.6f Th %.1f" ); break; #else case INCHES: formatter = wxT( "Ro %.4f Th %.1f" ); break; case MILLIMETRES: formatter = wxT( "Ro %.3f Th %.1f" ); break; #endif case UNSCALED_UNITS: formatter = wxT( "Ro %f Th %f" ); break; } line.Printf( formatter, To_User_Unit( g_UserUnit, ro ), theta ); SetStatusText( line, 3 ); } // Display absolute coordinates: dXpos = To_User_Unit( g_UserUnit, screen->GetCrossHairPosition().x ); dYpos = To_User_Unit( g_UserUnit, screen->GetCrossHairPosition().y ); if ( g_UserUnit == MILLIMETRES ) { dXpos = RoundTo0( dXpos, 1000.0 ); dYpos = RoundTo0( dYpos, 1000.0 ); } // The following sadly is an if Eeschema/if Pcbnew wxString absformatter; switch( g_UserUnit ) { #if defined( USE_PCBNEW_NANOMETRES ) case INCHES: absformatter = wxT( "X %.6f Y %.6f" ); locformatter = wxT( "dx %.6f dy %.6f d %.6f" ); break; case MILLIMETRES: absformatter = wxT( "X %.6f Y %.6f" ); locformatter = wxT( "dx %.6f dy %.6f d %.6f" ); break; #else case INCHES: absformatter = wxT( "X %.4f Y %.4f" ); locformatter = wxT( "dx %.4f dy %.4f d %.4f" ); break; case MILLIMETRES: absformatter = wxT( "X %.3f Y %.3f" ); locformatter = wxT( "dx %.3f dy %.3f d %.3f" ); break; #endif case UNSCALED_UNITS: absformatter = wxT( "X %f Y %f" ); locformatter = wxT( "dx %f dy %f d %f" ); break; } line.Printf( absformatter, dXpos, dYpos ); SetStatusText( line, 2 ); if( !DisplayOpt.DisplayPolarCood ) // display relative cartesian coordinates { // Display relative coordinates: dx = screen->GetCrossHairPosition().x - screen->m_O_Curseur.x; dy = screen->GetCrossHairPosition().y - screen->m_O_Curseur.y; dXpos = To_User_Unit( g_UserUnit, dx ); dYpos = To_User_Unit( g_UserUnit, dy ); if ( g_UserUnit == MILLIMETRES ) { dXpos = RoundTo0( dXpos, 1000.0 ); dYpos = RoundTo0( dYpos, 1000.0 ); } // We already decided the formatter above line.Printf( locformatter, dXpos, dYpos, sqrt( dXpos * dXpos + dYpos * dYpos ) ); SetStatusText( line, 3 ); } }
void SCH_BASE_FRAME::UpdateStatusBar() { wxString line; int dx, dy; BASE_SCREEN* screen = GetScreen(); if( !screen ) return; EDA_DRAW_FRAME::UpdateStatusBar(); // Display absolute coordinates: double dXpos = To_User_Unit( g_UserUnit, GetCrossHairPosition().x ); double dYpos = To_User_Unit( g_UserUnit, GetCrossHairPosition().y ); if ( g_UserUnit == MILLIMETRES ) { dXpos = RoundTo0( dXpos, 100.0 ); dYpos = RoundTo0( dYpos, 100.0 ); } wxString absformatter; wxString locformatter; switch( g_UserUnit ) { case INCHES: absformatter = wxT( "X %.3f Y %.3f" ); locformatter = wxT( "dx %.3f dy %.3f d %.3f" ); break; case MILLIMETRES: absformatter = wxT( "X %.2f Y %.2f" ); locformatter = wxT( "dx %.2f dy %.2f d %.2f" ); break; case UNSCALED_UNITS: absformatter = wxT( "X %f Y %f" ); locformatter = wxT( "dx %f dy %f d %f" ); break; } line.Printf( absformatter, dXpos, dYpos ); SetStatusText( line, 2 ); // Display relative coordinates: dx = GetCrossHairPosition().x - screen->m_O_Curseur.x; dy = GetCrossHairPosition().y - screen->m_O_Curseur.y; dXpos = To_User_Unit( g_UserUnit, dx ); dYpos = To_User_Unit( g_UserUnit, dy ); if( g_UserUnit == MILLIMETRES ) { dXpos = RoundTo0( dXpos, 100.0 ); dYpos = RoundTo0( dYpos, 100.0 ); } // We already decided the formatter above line.Printf( locformatter, dXpos, dYpos, hypot( dXpos, dYpos ) ); SetStatusText( line, 3 ); // refresh units display DisplayUnitsMsg(); }