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 { 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 bool get finishAfterUnactive => true; @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 { 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); } }