|
@@ -0,0 +1,86 @@
|
|
|
+import 'package:fis_measure/interfaces/process/items/item.dart';
|
|
|
+import 'package:fis_measure/interfaces/process/items/item_metas.dart';
|
|
|
+import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
|
|
|
+import 'package:fis_measure/process/calcuators/calculator.dart';
|
|
|
+import 'package:fis_measure/process/items/top_item.dart';
|
|
|
+import 'package:fis_measure/process/items/top_item_feature.dart';
|
|
|
+import 'package:fis_measure/process/primitives/straightline.dart';
|
|
|
+import 'package:vid/us/vid_us_unit.dart';
|
|
|
+
|
|
|
+class Afi extends TopMeasureItem<AfiFeature> {
|
|
|
+ static const String _lineQ1Key = "Q1";
|
|
|
+ static const String _lineQ2Key = "Q2";
|
|
|
+ static const String _lineQ3Key = "Q3";
|
|
|
+ static const String _lineQ4Key = "Q4";
|
|
|
+
|
|
|
+ late final StraightLine q1;
|
|
|
+ late final StraightLine q2;
|
|
|
+ late final StraightLine q3;
|
|
|
+ late final StraightLine q4;
|
|
|
+
|
|
|
+ Afi(ItemMeta meta) : super(meta) {
|
|
|
+ final metaQ1 = meta.getChildByName(_lineQ1Key)!;
|
|
|
+ final metaQ2 = meta.getChildByName(_lineQ2Key)!;
|
|
|
+ final metaQ3 = meta.getChildByName(_lineQ3Key)!;
|
|
|
+ final metaQ4 = meta.getChildByName(_lineQ4Key)!;
|
|
|
+ q1 = StraightLine.createDistance(metaQ1, this);
|
|
|
+ q2 = StraightLine.createDistance(metaQ2, this);
|
|
|
+ q3 = StraightLine.createDistance(metaQ3, this);
|
|
|
+ q4 = StraightLine.createDistance(metaQ4, this);
|
|
|
+ childItems.add(q1);
|
|
|
+ childItems.add(q2);
|
|
|
+ childItems.add(q3);
|
|
|
+ childItems.add(q4);
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ AfiFeature buildFeature() => AfiFeature(this);
|
|
|
+
|
|
|
+ static Afi createAfi(ItemMeta meta, [IMeasureItem? parent]) {
|
|
|
+ final afi = Afi(meta);
|
|
|
+ afi.calculator = AfiSumCal(afi);
|
|
|
+ return afi;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+class AfiFeature extends TopMeasureItemFeature {
|
|
|
+ AfiFeature(Afi refItem) : super(refItem);
|
|
|
+}
|
|
|
+
|
|
|
+class AfiSumCal extends Calculator<Afi, double> {
|
|
|
+ AfiSumCal(Afi ref) : super(ref);
|
|
|
+
|
|
|
+ @override
|
|
|
+ void calculate() {
|
|
|
+ if (ref.feature == null) return;
|
|
|
+
|
|
|
+ final vQ1 = findChildFeature(ref.q1)?.value;
|
|
|
+ final vQ2 = findChildFeature(ref.q2)?.value;
|
|
|
+ final vQ3 = findChildFeature(ref.q3)?.value;
|
|
|
+ final vQ4 = findChildFeature(ref.q4)?.value;
|
|
|
+
|
|
|
+ double q1 = 0;
|
|
|
+ double q2 = 0;
|
|
|
+ double q3 = 0;
|
|
|
+ double q4 = 0;
|
|
|
+ VidUsUnit unit = VidUsUnit.None;
|
|
|
+ if (vQ1 != null) {
|
|
|
+ q1 = vQ1.pickFloat()!;
|
|
|
+ unit = vQ1.unit;
|
|
|
+ }
|
|
|
+ if (vQ2 != null) {
|
|
|
+ q2 = vQ2.pickFloat()!;
|
|
|
+ unit = vQ2.unit;
|
|
|
+ }
|
|
|
+ if (vQ3 != null) {
|
|
|
+ q3 = vQ3.pickFloat()!;
|
|
|
+ unit = vQ3.unit;
|
|
|
+ }
|
|
|
+ if (vQ4 != null) {
|
|
|
+ q4 = vQ4.pickFloat()!;
|
|
|
+ unit = vQ4.unit;
|
|
|
+ }
|
|
|
+ final afi = q1 + q2 + q3 + q4;
|
|
|
+ updateFloatValue(afi, unit: unit, useRound: true);
|
|
|
+ }
|
|
|
+}
|