! \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. */
| 6232 | Note that a returned sub tick count of e.g. 4 will split each tick interval into 5 sections. |
| 6233 | */ |
| 6234 | int QCPAxisTicker::getSubTickCount(double tickStep) |
| 6235 | { |
| 6236 | int result = 1; // default to 1, if no proper value can be found |
| 6237 | |
| 6238 | // separate integer and fractional part of mantissa: |
| 6239 | double epsilon = 0.01; |
| 6240 | double intPartf; |
| 6241 | int intPart; |
| 6242 | double fracPart = modf(getMantissa(tickStep), &intPartf); |
| 6243 | intPart = int(intPartf); |
| 6244 | |
| 6245 | // handle cases with (almost) integer mantissa: |
| 6246 | if (fracPart < epsilon || 1.0-fracPart < epsilon) |
| 6247 | { |
| 6248 | if (1.0-fracPart < epsilon) |
| 6249 | ++intPart; |
| 6250 | switch (intPart) |
| 6251 | { |
| 6252 | case 1: result = 4; break; // 1.0 -> 0.2 substep |
| 6253 | case 2: result = 3; break; // 2.0 -> 0.5 substep |
| 6254 | case 3: result = 2; break; // 3.0 -> 1.0 substep |
| 6255 | case 4: result = 3; break; // 4.0 -> 1.0 substep |
| 6256 | case 5: result = 4; break; // 5.0 -> 1.0 substep |
| 6257 | case 6: result = 2; break; // 6.0 -> 2.0 substep |
| 6258 | case 7: result = 6; break; // 7.0 -> 1.0 substep |
| 6259 | case 8: result = 3; break; // 8.0 -> 2.0 substep |
| 6260 | case 9: result = 2; break; // 9.0 -> 3.0 substep |
| 6261 | } |
| 6262 | } else |
| 6263 | { |
| 6264 | // handle cases with significantly fractional mantissa: |
| 6265 | if (qAbs(fracPart-0.5) < epsilon) // *.5 mantissa |
| 6266 | { |
| 6267 | switch (intPart) |
| 6268 | { |
| 6269 | case 1: result = 2; break; // 1.5 -> 0.5 substep |
| 6270 | case 2: result = 4; break; // 2.5 -> 0.5 substep |
| 6271 | case 3: result = 4; break; // 3.5 -> 0.7 substep |
| 6272 | case 4: result = 2; break; // 4.5 -> 1.5 substep |
| 6273 | case 5: result = 4; break; // 5.5 -> 1.1 substep (won't occur with default getTickStep from here on) |
| 6274 | case 6: result = 4; break; // 6.5 -> 1.3 substep |
| 6275 | case 7: result = 2; break; // 7.5 -> 2.5 substep |
| 6276 | case 8: result = 4; break; // 8.5 -> 1.7 substep |
| 6277 | case 9: result = 4; break; // 9.5 -> 1.9 substep |
| 6278 | } |
| 6279 | } |
| 6280 | // if mantissa fraction isn't 0.0 or 0.5, don't bother finding good sub tick marks, leave default |
| 6281 | } |
| 6282 | |
| 6283 | return result; |
| 6284 | } |
| 6285 | |
| 6286 | /*! \internal |
| 6287 |
nothing calls this directly
no outgoing calls
no test coverage detected