afi.dart 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import 'package:fis_measure/interfaces/process/items/item.dart';
  2. import 'package:fis_measure/interfaces/process/items/item_metas.dart';
  3. import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
  4. import 'package:fis_measure/process/calcuators/calculator.dart';
  5. import 'package:fis_measure/process/items/top_item.dart';
  6. import 'package:fis_measure/process/items/top_item_feature.dart';
  7. import 'package:fis_measure/process/primitives/straightline.dart';
  8. import 'package:vid/us/vid_us_unit.dart';
  9. class Afi extends TopMeasureItem<AfiFeature> {
  10. static const String _lineQ1Key = "Q1";
  11. static const String _lineQ2Key = "Q2";
  12. static const String _lineQ3Key = "Q3";
  13. static const String _lineQ4Key = "Q4";
  14. late final StraightLine q1;
  15. late final StraightLine q2;
  16. late final StraightLine q3;
  17. late final StraightLine q4;
  18. Afi(ItemMeta meta) : super(meta) {
  19. final metaQ1 = meta.getChildByName(_lineQ1Key)!;
  20. final metaQ2 = meta.getChildByName(_lineQ2Key)!;
  21. final metaQ3 = meta.getChildByName(_lineQ3Key)!;
  22. final metaQ4 = meta.getChildByName(_lineQ4Key)!;
  23. q1 = StraightLine.createDistance(metaQ1, this);
  24. q2 = StraightLine.createDistance(metaQ2, this);
  25. q3 = StraightLine.createDistance(metaQ3, this);
  26. q4 = StraightLine.createDistance(metaQ4, this);
  27. childItems.add(q1);
  28. childItems.add(q2);
  29. childItems.add(q3);
  30. childItems.add(q4);
  31. }
  32. @override
  33. AfiFeature buildFeature() => AfiFeature(this);
  34. static Afi createAfi(ItemMeta meta, [IMeasureItem? parent]) {
  35. final afi = Afi(meta);
  36. afi.calculator = AfiSumCal(afi);
  37. return afi;
  38. }
  39. }
  40. class AfiFeature extends TopMeasureItemFeature {
  41. AfiFeature(Afi refItem) : super(refItem);
  42. }
  43. class AfiSumCal extends Calculator<Afi, double> {
  44. AfiSumCal(Afi ref) : super(ref);
  45. @override
  46. void calculate() {
  47. if (ref.feature == null) return;
  48. final vQ1 = findChildFeature(ref.q1)?.value;
  49. final vQ2 = findChildFeature(ref.q2)?.value;
  50. final vQ3 = findChildFeature(ref.q3)?.value;
  51. final vQ4 = findChildFeature(ref.q4)?.value;
  52. double q1 = 0;
  53. double q2 = 0;
  54. double q3 = 0;
  55. double q4 = 0;
  56. VidUsUnit unit = VidUsUnit.None;
  57. if (vQ1 != null) {
  58. q1 = vQ1.pickFloat()!;
  59. unit = vQ1.unit;
  60. }
  61. if (vQ2 != null) {
  62. q2 = vQ2.pickFloat()!;
  63. unit = vQ2.unit;
  64. }
  65. if (vQ3 != null) {
  66. q3 = vQ3.pickFloat()!;
  67. unit = vQ3.unit;
  68. }
  69. if (vQ4 != null) {
  70. q4 = vQ4.pickFloat()!;
  71. unit = vQ4.unit;
  72. }
  73. final afi = q1 + q2 + q3 + q4;
  74. updateFloatValue(afi, unit: unit, useRound: true);
  75. }
  76. }