afi.dart 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. bool get finishAfterUnactive => true;
  34. @override
  35. AfiFeature buildFeature() => AfiFeature(this);
  36. static Afi createAfi(ItemMeta meta, [IMeasureItem? parent]) {
  37. final afi = Afi(meta);
  38. afi.calculator = AfiSumCal(afi);
  39. return afi;
  40. }
  41. }
  42. class AfiFeature extends TopMeasureItemFeature {
  43. AfiFeature(Afi refItem) : super(refItem);
  44. }
  45. class AfiSumCal extends Calculator<Afi, double> {
  46. AfiSumCal(Afi ref) : super(ref);
  47. @override
  48. void calculate() {
  49. if (ref.feature == null) return;
  50. final vQ1 = findChildFeature(ref.q1)?.value;
  51. final vQ2 = findChildFeature(ref.q2)?.value;
  52. final vQ3 = findChildFeature(ref.q3)?.value;
  53. final vQ4 = findChildFeature(ref.q4)?.value;
  54. double q1 = 0;
  55. double q2 = 0;
  56. double q3 = 0;
  57. double q4 = 0;
  58. VidUsUnit unit = VidUsUnit.None;
  59. if (vQ1 != null) {
  60. q1 = vQ1.pickFloat()!;
  61. unit = vQ1.unit;
  62. }
  63. if (vQ2 != null) {
  64. q2 = vQ2.pickFloat()!;
  65. unit = vQ2.unit;
  66. }
  67. if (vQ3 != null) {
  68. q3 = vQ3.pickFloat()!;
  69. unit = vQ3.unit;
  70. }
  71. if (vQ4 != null) {
  72. q4 = vQ4.pickFloat()!;
  73. unit = vQ4.unit;
  74. }
  75. final afi = q1 + q2 + q3 + q4;
  76. updateFloatValue(afi, unit: unit, useRound: true);
  77. }
  78. }