a_b_ratio.dart 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import 'package:fis_common/index.dart';
  2. import 'package:fis_measure/interfaces/process/calculators/output.dart';
  3. import 'package:fis_measure/interfaces/process/calculators/values.dart';
  4. import 'package:fis_measure/interfaces/process/items/item_metas.dart';
  5. import 'package:fis_measure/process/calcuators/formulas/general.dart';
  6. import 'package:fis_measure/process/items/item.dart';
  7. import 'package:fis_measure/process/primitives/combos/sv.dart';
  8. import 'package:fis_measure/process/primitives/combos/two_area.dart';
  9. import 'package:fis_measure/process/primitives/combos/two_length.dart';
  10. import 'package:fis_measure/process/primitives/trace.dart';
  11. import 'calculator.dart';
  12. class ABRatioCal extends Calculator<TwoLengthAbstract, double> {
  13. ABRatioCal(TwoLengthAbstract ref) : super(ref);
  14. @override
  15. void calculate() {
  16. if (ref.feature == null) return;
  17. final a1 = _pickChildValue(ref.child1);
  18. final a2 = _pickChildValue(ref.child2);
  19. final feature = ref.feature!;
  20. final viewport = feature.hostVisualArea!.viewport!;
  21. if (a1 != null && a2 != null) {
  22. final value = ratioCal(
  23. a1,
  24. a2,
  25. );
  26. updateFloatValue(value);
  27. }
  28. }
  29. static double ratioCal(double d1, double d2) {
  30. return d1 / d2;
  31. }
  32. double? _pickChildValue(MeasureItem item) {
  33. if (item.calculator == null) return null;
  34. ValueBase? value;
  35. if (item.measuredFeatures.isNotEmpty) {
  36. value = item.measuredFeatures.first.value;
  37. } else if (item.feature != null) {
  38. value = item.feature!.value;
  39. }
  40. if (value != null) {
  41. if (value is FloatValue) {
  42. return value.value ?? 0;
  43. }
  44. }
  45. return null;
  46. }
  47. }
  48. class QpQsCal extends ABRatioCal {
  49. QpQsCal(super.ref);
  50. @override
  51. void calculate() {
  52. final mianVal = _getQpQsValue();
  53. if (mianVal == null) {
  54. updateStringValue("");
  55. }
  56. super.calculate();
  57. if (ref.feature == null) return;
  58. final feature = ref.feature!;
  59. final qp = ref.child1 as Sv;
  60. final qs = ref.child2 as Sv;
  61. final qpValues = qp.feature?.values;
  62. final qsValues = qs.feature?.values;
  63. if (qpValues != null) {
  64. for (var val in qpValues) {
  65. if (val.name != qp.meta.name) {
  66. if (val is FloatValue) {
  67. final meta = val.meta;
  68. final output = ItemOutputMeta(
  69. "${meta.name}(ROVT)", meta.description, meta.unit);
  70. feature.updateFloatValue(output, val.value!, val.unit);
  71. }
  72. }
  73. }
  74. }
  75. if (qsValues != null) {
  76. for (var val in qsValues) {
  77. if (val.name != qs.meta.name) {
  78. if (val is FloatValue) {
  79. final meta = val.meta;
  80. final output = ItemOutputMeta(
  81. "${meta.name}(LOVT)", meta.description, meta.unit);
  82. feature.updateFloatValue(output, val.value!, val.unit);
  83. }
  84. }
  85. }
  86. }
  87. }
  88. ValueBase? _getQpQsValue() {
  89. final values = ref.feature?.values;
  90. if (values == null || values.isEmpty) {
  91. return null;
  92. }
  93. final matchValue =
  94. values.firstWhereNullable((e) => e.name == ref.meta.name);
  95. if (matchValue != null && matchValue is FloatValue) {
  96. return matchValue;
  97. }
  98. return null;
  99. }
  100. }