From fa14d5b9fa80dd493f65b8661aa238d64e698384 Mon Sep 17 00:00:00 2001 From: Jonatan Liljedahl Date: Thu, 7 Nov 2019 23:18:26 +0100 Subject: [PATCH] Eeschema: simulator: more trace colors, smarter color allocation NEW: The simulator plot now avoids colors already in use, if possible. The palette is replaced with a larger one with less saturated colors. Fixes: lp:1851372 * https://bugs.launchpad.net/kicad/+bug/1851372 --- eeschema/sim/sim_plot_panel.cpp | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/eeschema/sim/sim_plot_panel.cpp b/eeschema/sim/sim_plot_panel.cpp index 70b1e05a75..729a15d265 100644 --- a/eeschema/sim/sim_plot_panel.cpp +++ b/eeschema/sim/sim_plot_panel.cpp @@ -369,8 +369,9 @@ SIM_PLOT_PANEL::SIM_PLOT_PANEL( SIM_TYPE aType, wxWindow* parent, wxWindowID id, LimitView( true ); SetMargins( 50, 80, 50, 80 ); - wxColour grey( 96, 96, 96 ); - SetColourTheme( *wxBLACK, *wxWHITE, grey ); + wxColour grey( 130, 130, 130 ); + wxColour dark( 10, 10, 10 ); + SetColourTheme( dark, *wxWHITE, grey ); EnableDoubleBuffer( true ); UpdateAll(); @@ -432,7 +433,7 @@ SIM_PLOT_PANEL::SIM_PLOT_PANEL( SIM_TYPE aType, wxWindow* parent, wxWindowID id, m_legend->SetVisible( false ); AddLayer( m_legend ); m_topLevel.push_back( m_legend ); - SetColourTheme( *wxBLACK, *wxWHITE, grey ); + SetColourTheme( dark, *wxWHITE, grey ); EnableDoubleBuffer( true ); UpdateAll(); @@ -632,7 +633,10 @@ wxColour SIM_PLOT_PANEL::generateColor() /// http://stanford.edu/~mwaskom/software/seaborn/tutorial/color_palettes.html /// https://github.com/Gnuplotting/gnuplot-palettes - const unsigned long colors[] = { 0x0000ff, 0x00ff00, 0xff0000, 0x00ffff, 0xff00ff, 0xffff000, 0xffffff }; + // const unsigned long colors[] = { 0x0000ff, 0x00ff00, 0xff0000, 0x00ffff, 0xff00ff, 0xffff000, 0xffffff }; + + const unsigned long colors[] = { 0xE41A1C, 0x377EB8, 0x4DAF4A, 0x984EA3, 0xFF7F00, 0xFFFF33, 0xA65628, 0xF781BF, + 0x66C2A5, 0xFC8D62, 0x8DA0CB, 0xE78AC3, 0xA6D854, 0xFFD92F, 0xE5C494, 0xB3B3B3 }; //const unsigned long colors[] = { 0xe3cea6, 0xb4781f, 0x8adfb2, 0x2ca033, 0x999afb, 0x1c1ae3, 0x6fbffd, 0x007fff, 0xd6b2ca, 0x9a3d6a }; @@ -644,8 +648,23 @@ wxColour SIM_PLOT_PANEL::generateColor() const unsigned int colorCount = sizeof(colors) / sizeof(unsigned long); - /// @todo generate shades to avoid repeating colors - return wxColour( colors[m_colorIdx++ % colorCount] ); + for( int i = 0; i < colorCount - 1; i++ ) + { + const wxColour color = wxColour( colors[i] ); + bool hasColor = false; + for( auto& t : m_traces ) + { + TRACE* trace = t.second; + if( trace->GetTraceColour() == color ) + { + hasColor = true; + break; + } + } + if( !hasColor ) + return color; + } + return wxColour( colors[m_traces.size() % colorCount] ); } wxDEFINE_EVENT( EVT_SIM_CURSOR_UPDATE, wxCommandEvent );