Half number of ticks according to window size
This commit is contained in:
parent
377ffb00b0
commit
27048ad4d2
|
@ -674,6 +674,7 @@ void mpScaleX::recalculateTicks( wxDC& dc, mpWindow& w )
|
|||
|
||||
double minErr = 1000000000000.0;
|
||||
double bestStep = 1.0;
|
||||
int m_scrX = w.GetXScreen();
|
||||
|
||||
for( int i = 10; i <= 20; i += 2 )
|
||||
{
|
||||
|
@ -689,6 +690,17 @@ void mpScaleX::recalculateTicks( wxDC& dc, mpWindow& w )
|
|||
}
|
||||
}
|
||||
|
||||
double numberSteps = floor( ( maxVvis - minVvis ) / bestStep );
|
||||
|
||||
// Half the number of ticks according to window size.
|
||||
// The value 96 is used to have only 4 ticks when m_scrX is 268.
|
||||
// For each 96 device context units, is possible to add a new tick.
|
||||
while( numberSteps - 2 >= m_scrX/96 )
|
||||
{
|
||||
bestStep *= 2;
|
||||
numberSteps = floor( ( maxVvis - minVvis ) / bestStep );
|
||||
}
|
||||
|
||||
double v = floor( minVvis / bestStep ) * bestStep;
|
||||
double zeroOffset = 100000000.0;
|
||||
|
||||
|
@ -851,6 +863,7 @@ void mpScaleY::recalculateTicks( wxDC& dc, mpWindow& w )
|
|||
|
||||
double minErr = 1000000000000.0;
|
||||
double bestStep = 1.0;
|
||||
int m_scrY = w.GetYScreen();
|
||||
|
||||
for( int i = 10; i <= 20; i += 2 )
|
||||
{
|
||||
|
@ -866,6 +879,16 @@ void mpScaleY::recalculateTicks( wxDC& dc, mpWindow& w )
|
|||
}
|
||||
}
|
||||
|
||||
double numberSteps = floor( ( maxVvis - minVvis ) / bestStep );
|
||||
|
||||
// Half the number of ticks according to window size.
|
||||
// For each 32 device context units, is possible to add a new tick.
|
||||
while( numberSteps >= m_scrY/32 )
|
||||
{
|
||||
bestStep *= 2;
|
||||
numberSteps = floor( ( maxVvis - minVvis ) / bestStep );
|
||||
}
|
||||
|
||||
double v = floor( minVvis / bestStep ) * bestStep;
|
||||
double zeroOffset = 100000000.0;
|
||||
const int iterLimit = 1000;
|
||||
|
@ -922,6 +945,8 @@ void mpScaleXLog::recalculateTicks( wxDC& dc, mpWindow& w )
|
|||
double minDecade = pow( 10, floor( log10( minV ) ) );
|
||||
double maxDecade = pow( 10, ceil( log10( maxV ) ) );
|
||||
double visibleDecades = log( maxVvis / minVvis ) / log( 10 );
|
||||
double step = 10.0;
|
||||
int m_scrX = w.GetXScreen();
|
||||
|
||||
double d;
|
||||
|
||||
|
@ -931,12 +956,20 @@ void mpScaleXLog::recalculateTicks( wxDC& dc, mpWindow& w )
|
|||
if( minDecade == 0.0 )
|
||||
return;
|
||||
|
||||
// Half the number of ticks according to window size.
|
||||
// The value 96 is used to have only 4 ticks when m_scrX is 268.
|
||||
// For each 96 device context units, is possible to add a new tick.
|
||||
while( visibleDecades - 2 >= m_scrX / 96 )
|
||||
{
|
||||
step *= 10.0;
|
||||
visibleDecades = log( maxVvis / minVvis ) / log( step );
|
||||
}
|
||||
|
||||
for( d = minDecade; d<=maxDecade; d *= 10.0 )
|
||||
for( d = minDecade; d<=maxDecade; d *= step )
|
||||
{
|
||||
m_tickLabels.emplace_back( d );
|
||||
|
||||
for( double dd = d; dd < d * 10; dd += d )
|
||||
for( double dd = d; dd < d * step; dd += d )
|
||||
{
|
||||
if( visibleDecades < 2 )
|
||||
m_tickLabels.emplace_back( dd );
|
||||
|
|
Loading…
Reference in New Issue