a_b_ratio.dart 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import 'package:fis_measure/interfaces/process/calculators/output.dart';
  2. import 'package:fis_measure/interfaces/process/calculators/values.dart';
  3. import 'package:fis_measure/process/calcuators/formulas/general.dart';
  4. import 'package:fis_measure/process/items/item.dart';
  5. import 'package:fis_measure/process/primitives/combos/two_area.dart';
  6. import 'package:fis_measure/process/primitives/combos/two_length.dart';
  7. import 'package:fis_measure/process/primitives/trace.dart';
  8. import 'calculator.dart';
  9. class ABRatioCal extends Calculator<TwoLengthAbstract, double> {
  10. ABRatioCal(TwoLengthAbstract ref) : super(ref);
  11. @override
  12. void calculate() {
  13. if (ref.feature == null) return;
  14. final a1 = _pickChildValue(ref.child1);
  15. final a2 = _pickChildValue(ref.child2);
  16. final feature = ref.feature!;
  17. final viewport = feature.hostVisualArea!.viewport!;
  18. if (a1 != null && a2 != null) {
  19. final value = ratioCal(
  20. a1,
  21. a2,
  22. );
  23. updateFloatValue(value);
  24. }
  25. }
  26. static double ratioCal(double d1, double d2) {
  27. return d1 / d2;
  28. }
  29. double? _pickChildValue(MeasureItem item) {
  30. if (item.calculator == null) return null;
  31. ValueBase? value;
  32. if (item.measuredFeatures.isNotEmpty) {
  33. value = item.measuredFeatures.first.value;
  34. } else if (item.feature != null) {
  35. value = item.feature!.value;
  36. }
  37. if (value != null) {
  38. return (value as FloatValue).value ?? 0;
  39. }
  40. return null;
  41. }
  42. }