Loading pcbnew/class_board_item.cpp +6 −5 Original line number Original line Diff line number Diff line Loading @@ -89,10 +89,8 @@ wxString BOARD_ITEM::GetLayerName() const std::string BOARD_ITEM::FormatInternalUnits( int aValue ) std::string BOARD_ITEM::FormatInternalUnits( int aValue ) { { char buf[50]; char buf[50]; double mm = aValue / IU_PER_MM; int len; int len; double mm = aValue / IU_PER_MM; if( mm != 0.0 && fabs( mm ) <= 0.0001 ) if( mm != 0.0 && fabs( mm ) <= 0.0001 ) { { Loading @@ -101,6 +99,9 @@ std::string BOARD_ITEM::FormatInternalUnits( int aValue ) while( --len > 0 && buf[len] == '0' ) while( --len > 0 && buf[len] == '0' ) buf[len] = '\0'; buf[len] = '\0'; if( buf[len] == '.' ) buf[len] = '\0'; else ++len; ++len; } } else else Loading pcbnew/kicad_plugin.cpp +47 −12 Original line number Original line Diff line number Diff line Loading @@ -64,27 +64,62 @@ static const wxString traceFootprintLibrary( wxT( "KicadFootprintLib" ) ); // Helper function to print a float number without using scientific notation // Helper function to print a float number without using scientific notation // and no trailing 0 // and no trailing 0 // For many reasons, S-expr does not accept scientific notation // for floating numbers, so we cannot use the %g format to print a fp number #if 0 // and %f leaves trailing 0. // Does not work for aValue < 0.0001 and > 0. // this helper function uses the %f format, and then removes trailing 0 // Will need to support exponents in DSNLEXER if we get exponents > 16, i.e. the "precision". std::string double2str( double aValue ) std::string double2str( double aValue ) { { char buf[50]; char buf[50]; int len = sprintf( buf, "%.16f", aValue ); int len; if( aValue != 0.0 && fabs( aValue ) <= 0.0001 ) { len = sprintf( buf, "%.10f", aValue ); while( --len > 0 && buf[len] == '0' ) while( --len > 0 && buf[len] == '0' ) buf[len] = '\0'; buf[len] = '\0'; // Remove useless separator: if( buf[len] == '.' ) if( buf[len] == '.' ) buf[len] = '\0'; buf[len--] = '\0'; else ++len; ++len; } else { len = sprintf( buf, "%.10g", mm ); } return std::string( buf, len ); return std::string( buf, len ); } } #else // this one handles 0.00001 ok, and 1.222222222222222 ok, previous did not. std::string double2str( double aValue ) { char buf[50]; int len; if( aValue != 0.0 && fabs( aValue ) <= 0.0001 ) { len = sprintf( buf, "%.16f", aValue ); while( --len > 0 && buf[len] == '0' ) buf[len] = '\0'; if( buf[len] == '.' ) buf[len] = '\0'; else ++len; } else { len = sprintf( buf, "%.16g", aValue ); } return std::string( buf, len );; } #endif /** /** Loading Loading
pcbnew/class_board_item.cpp +6 −5 Original line number Original line Diff line number Diff line Loading @@ -89,10 +89,8 @@ wxString BOARD_ITEM::GetLayerName() const std::string BOARD_ITEM::FormatInternalUnits( int aValue ) std::string BOARD_ITEM::FormatInternalUnits( int aValue ) { { char buf[50]; char buf[50]; double mm = aValue / IU_PER_MM; int len; int len; double mm = aValue / IU_PER_MM; if( mm != 0.0 && fabs( mm ) <= 0.0001 ) if( mm != 0.0 && fabs( mm ) <= 0.0001 ) { { Loading @@ -101,6 +99,9 @@ std::string BOARD_ITEM::FormatInternalUnits( int aValue ) while( --len > 0 && buf[len] == '0' ) while( --len > 0 && buf[len] == '0' ) buf[len] = '\0'; buf[len] = '\0'; if( buf[len] == '.' ) buf[len] = '\0'; else ++len; ++len; } } else else Loading
pcbnew/kicad_plugin.cpp +47 −12 Original line number Original line Diff line number Diff line Loading @@ -64,27 +64,62 @@ static const wxString traceFootprintLibrary( wxT( "KicadFootprintLib" ) ); // Helper function to print a float number without using scientific notation // Helper function to print a float number without using scientific notation // and no trailing 0 // and no trailing 0 // For many reasons, S-expr does not accept scientific notation // for floating numbers, so we cannot use the %g format to print a fp number #if 0 // and %f leaves trailing 0. // Does not work for aValue < 0.0001 and > 0. // this helper function uses the %f format, and then removes trailing 0 // Will need to support exponents in DSNLEXER if we get exponents > 16, i.e. the "precision". std::string double2str( double aValue ) std::string double2str( double aValue ) { { char buf[50]; char buf[50]; int len = sprintf( buf, "%.16f", aValue ); int len; if( aValue != 0.0 && fabs( aValue ) <= 0.0001 ) { len = sprintf( buf, "%.10f", aValue ); while( --len > 0 && buf[len] == '0' ) while( --len > 0 && buf[len] == '0' ) buf[len] = '\0'; buf[len] = '\0'; // Remove useless separator: if( buf[len] == '.' ) if( buf[len] == '.' ) buf[len] = '\0'; buf[len--] = '\0'; else ++len; ++len; } else { len = sprintf( buf, "%.10g", mm ); } return std::string( buf, len ); return std::string( buf, len ); } } #else // this one handles 0.00001 ok, and 1.222222222222222 ok, previous did not. std::string double2str( double aValue ) { char buf[50]; int len; if( aValue != 0.0 && fabs( aValue ) <= 0.0001 ) { len = sprintf( buf, "%.16f", aValue ); while( --len > 0 && buf[len] == '0' ) buf[len] = '\0'; if( buf[len] == '.' ) buf[len] = '\0'; else ++len; } else { len = sprintf( buf, "%.16g", aValue ); } return std::string( buf, len );; } #endif /** /** Loading