| 136 | } |
| 137 | |
| 138 | void ComputeRange(double inRange[2], double outRange[2], int& numTicks, double& interval) |
| 139 | { |
| 140 | // Handle the range |
| 141 | double sRange[2]; |
| 142 | if (inRange[0] < inRange[1]) |
| 143 | { |
| 144 | sRange[0] = inRange[0]; |
| 145 | sRange[1] = inRange[1]; |
| 146 | } |
| 147 | else if (inRange[0] > inRange[1]) |
| 148 | { |
| 149 | sRange[1] = inRange[0]; |
| 150 | sRange[0] = inRange[1]; |
| 151 | } |
| 152 | else // they're equal, so perturb them by 1 percent |
| 153 | { |
| 154 | double perturb = 100.; |
| 155 | if (inRange[0] == 0.0) |
| 156 | { // if they are both zero, then just perturb about zero |
| 157 | sRange[0] = -1 / perturb; |
| 158 | sRange[1] = 1 / perturb; |
| 159 | } |
| 160 | else |
| 161 | { |
| 162 | sRange[0] = inRange[0] - inRange[0] / perturb; |
| 163 | sRange[1] = inRange[0] + inRange[0] / perturb; |
| 164 | } |
| 165 | } |
| 166 | |
| 167 | double root; |
| 168 | numTicks = vtkAxisActor2DComputeTicks(sRange, interval, root); |
| 169 | |
| 170 | // is the starting point reasonable? |
| 171 | if (fabs(sRange[0] / root - floor(sRange[0] / root)) < 0.01) |
| 172 | { |
| 173 | outRange[0] = sRange[0]; |
| 174 | outRange[1] = outRange[0] + (numTicks - 1.0) * interval; |
| 175 | } |
| 176 | else |
| 177 | { |
| 178 | // OK the starting point is not a good number, so we must widen the range |
| 179 | // First see if the current range will handle moving the start point |
| 180 | outRange[0] = floor(sRange[0] / root) * root; |
| 181 | if (outRange[0] + (numTicks - 1.0) * interval <= sRange[1]) |
| 182 | { |
| 183 | outRange[1] = outRange[0] + (numTicks - 1.0) * interval; |
| 184 | } |
| 185 | else |
| 186 | { |
| 187 | // Finally in this case we must switch to a larger range to |
| 188 | // have reasonable starting and ending values |
| 189 | sRange[0] = outRange[0]; |
| 190 | numTicks = vtkAxisActor2DComputeTicks(sRange, interval, root); |
| 191 | outRange[1] = outRange[0] + (numTicks - 1.0) * interval; |
| 192 | } |
| 193 | } |
| 194 | |
| 195 | // Adjust if necessary |
no test coverage detected