! \internal Takes the \a tickStep, i.e. the distance between two consecutive ticks, and returns an appropriate number of sub ticks for that specific tick step. Note that a returned sub tick count of e.g. 4 will split each tick interval into 5 sections. */
| 5605 | Note that a returned sub tick count of e.g. 4 will split each tick interval into 5 sections. |
| 5606 | */ |
| 5607 | int QCPAxisTicker::getSubTickCount(double tickStep) |
| 5608 | { |
| 5609 | int result = 1; // default to 1, if no proper value can be found |
| 5610 | |
| 5611 | // separate integer and fractional part of mantissa: |
| 5612 | double epsilon = 0.01; |
| 5613 | double intPartf; |
| 5614 | int intPart; |
| 5615 | double fracPart = modf(getMantissa(tickStep), &intPartf); |
| 5616 | intPart = intPartf; |
| 5617 | |
| 5618 | // handle cases with (almost) integer mantissa: |
| 5619 | if (fracPart < epsilon || 1.0-fracPart < epsilon) |
| 5620 | { |
| 5621 | if (1.0-fracPart < epsilon) |
| 5622 | ++intPart; |
| 5623 | switch (intPart) |
| 5624 | { |
| 5625 | case 1: result = 4; break; // 1.0 -> 0.2 substep |
| 5626 | case 2: result = 3; break; // 2.0 -> 0.5 substep |
| 5627 | case 3: result = 2; break; // 3.0 -> 1.0 substep |
| 5628 | case 4: result = 3; break; // 4.0 -> 1.0 substep |
| 5629 | case 5: result = 4; break; // 5.0 -> 1.0 substep |
| 5630 | case 6: result = 2; break; // 6.0 -> 2.0 substep |
| 5631 | case 7: result = 6; break; // 7.0 -> 1.0 substep |
| 5632 | case 8: result = 3; break; // 8.0 -> 2.0 substep |
| 5633 | case 9: result = 2; break; // 9.0 -> 3.0 substep |
| 5634 | } |
| 5635 | } else |
| 5636 | { |
| 5637 | // handle cases with significantly fractional mantissa: |
| 5638 | if (qAbs(fracPart-0.5) < epsilon) // *.5 mantissa |
| 5639 | { |
| 5640 | switch (intPart) |
| 5641 | { |
| 5642 | case 1: result = 2; break; // 1.5 -> 0.5 substep |
| 5643 | case 2: result = 4; break; // 2.5 -> 0.5 substep |
| 5644 | case 3: result = 4; break; // 3.5 -> 0.7 substep |
| 5645 | case 4: result = 2; break; // 4.5 -> 1.5 substep |
| 5646 | case 5: result = 4; break; // 5.5 -> 1.1 substep (won't occur with default getTickStep from here on) |
| 5647 | case 6: result = 4; break; // 6.5 -> 1.3 substep |
| 5648 | case 7: result = 2; break; // 7.5 -> 2.5 substep |
| 5649 | case 8: result = 4; break; // 8.5 -> 1.7 substep |
| 5650 | case 9: result = 4; break; // 9.5 -> 1.9 substep |
| 5651 | } |
| 5652 | } |
| 5653 | // if mantissa fraction isn't 0.0 or 0.5, don't bother finding good sub tick marks, leave default |
| 5654 | } |
| 5655 | |
| 5656 | return result; |
| 5657 | } |
| 5658 | |
| 5659 | /*! \internal |
| 5660 |
nothing calls this directly
no outgoing calls
no test coverage detected