| 231 | } |
| 232 | |
| 233 | view::dslDial* MathStack::get_vDial() |
| 234 | { |
| 235 | QVector<uint64_t> vValue; |
| 236 | QVector<QString> vUnit; |
| 237 | view::dslDial *dial1 = _dsoSig1->get_vDial(); |
| 238 | view::dslDial *dial2 = _dsoSig2->get_vDial(); |
| 239 | const uint64_t dial1_min = dial1->get_value(0); |
| 240 | const uint64_t dial1_max = dial1->get_value(dial1->get_count() - 1); |
| 241 | const uint64_t dial2_min = dial2->get_value(0); |
| 242 | const uint64_t dial2_max = dial2->get_value(dial2->get_count() - 1); |
| 243 | |
| 244 | switch(_type) { |
| 245 | case MATH_ADD: |
| 246 | case MATH_SUB: |
| 247 | for (int i = 0; i < vDialValueCount; i++) { |
| 248 | if (vDialValue[i] < min(dial1_min, dial2_min)) |
| 249 | continue; |
| 250 | vValue.append(vDialValue[i]); |
| 251 | if (vDialValue[i] > max(dial1_max, dial2_max)) |
| 252 | break; |
| 253 | } |
| 254 | for(int i = 0; i < vDialUnitCount; i++) |
| 255 | vUnit.append(vDialAddUnit[i]); |
| 256 | break; |
| 257 | case MATH_MUL: |
| 258 | for (int i = 0; i < vDialValueCount; i++) { |
| 259 | if (vDialValue[i] < dial1_min * dial2_min / 1000.0) |
| 260 | continue; |
| 261 | vValue.append(vDialValue[i]); |
| 262 | if (vDialValue[i] > dial1_max * dial2_max / 1000.0) |
| 263 | break; |
| 264 | } |
| 265 | for(int i = 0; i < vDialUnitCount; i++) |
| 266 | vUnit.append(vDialMulUnit[i]); |
| 267 | break; |
| 268 | case MATH_DIV: |
| 269 | for (int i = 0; i < vDialValueCount; i++) { |
| 270 | if (vDialValue[i] < min(dial1_min * 1000.0 / dial2_max, dial2_min * 1000.0 / dial1_max)) |
| 271 | continue; |
| 272 | vValue.append(vDialValue[i]); |
| 273 | if (vDialValue[i] > max(dial1_max * 1000.0 / dial2_min, dial2_max * 1000.0 / dial1_min)) |
| 274 | break; |
| 275 | } |
| 276 | for(int i = 0; i < vDialUnitCount; i++) |
| 277 | vUnit.append(vDialDivUnit[i]); |
| 278 | break; |
| 279 | } |
| 280 | |
| 281 | view::dslDial *vDial = new view::dslDial(vValue.count(), vDialValueStep, vValue, vUnit, true); |
| 282 | return vDial; |
| 283 | } |
| 284 | |
| 285 | QString MathStack::get_unit(int level) |
| 286 | { |
no test coverage detected