/* * Update the status bar information. */ void PCB_BASE_FRAME::UpdateStatusBar() { EDA_DRAW_FRAME::UpdateStatusBar(); if( DisplayOpt.DisplayPolarCood ) // display polar coordinates { PCB_SCREEN* screen = GetScreen(); if( !screen ) return; wxString Line; double theta, ro; int dx = screen->GetCrossHairPosition().x - screen->m_O_Curseur.x; int 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 ) { case INCHES: formatter = wxT( "Ro %.4f Th %.1f" ); break; case MILLIMETRES: formatter = wxT( "Ro %.3f Th %.1f" ); break; case UNSCALED_UNITS: formatter = wxT( "Ro %f Th %f" ); break; } Line.Printf( formatter, To_User_Unit( g_UserUnit, ro, m_internalUnits ), theta ); // overwrite the absolute cartesian coordinates SetStatusText( Line, 2 ); } }
/* * 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 ); } }