import 'package:fis_measure/interfaces/process/calculators/output.dart'; import 'package:fis_measure/interfaces/process/calculators/values.dart'; import 'package:fis_measure/process/calcuators/formulas/general.dart'; import 'package:fis_measure/process/items/item.dart'; import 'package:fis_measure/process/primitives/combos/lwh_straightline.dart'; import 'package:fis_measure/process/primitives/ellipse.dart'; import 'package:fis_measure/process/primitives/straightline.dart'; import 'package:vid/us/vid_us_unit.dart'; import 'calculator.dart'; import 'formulas/cardiac.dart'; import 'formulas/obstetrics.dart'; class VolumeThreeDistanceCal extends Calculator { VolumeThreeDistanceCal(LWHStraightLine ref) : super(ref); @override void calculate() { if (ref.feature == null) return; final l = pickChildFloatValue(ref.l); final w = pickChildFloatValue(ref.w); final h = pickChildFloatValue(ref.h); final feature = ref.feature!; final viewport = feature.hostVisualArea!.viewport!; if (l != null && w != null && h != null) { final value = GeneralFormulas.volumeWithCoefficient( l, w, h, GeneralFormulas.VolumeCofficient, ); updateFloatValue(value); } } } class ThreeDistMeanCalculator extends Calculator { ThreeDistMeanCalculator(LWHStraightLine ref) : super(ref); @override void calculate() { if (ref.feature == null) return; final l = pickChildFloatValue(ref.l); final w = pickChildFloatValue(ref.w); final h = pickChildFloatValue(ref.h); if (l != null && w != null && h != null) { final value = ObstetricsFormulas.gsMean(l, w, h); updateFloatValue(value); } } } class ThreeDistMaxCalculator extends Calculator { ThreeDistMaxCalculator(LWHStraightLine ref) : super(ref); @override void calculate() { if (ref.feature == null) return; final l = findChildFeature(ref.l); final w = findChildFeature(ref.w); final h = findChildFeature(ref.h); if (l == null && w == null && h == null) return; double lineL = 0; double lineW = 0; double lineH = 0; if (l != null) lineL = l.value?.pickFloat() ?? 0; if (w != null) lineW = w.value?.pickFloat() ?? 0; if (h != null) lineH = h.value?.pickFloat() ?? 0; double gs = ObstetricsFormulas.gsMax(lineL, lineW, lineH); updateFloatValue(gs, unit: VidUsUnit.cm, useRound: true); } } class PercentMAMCalculator extends Calculator { PercentMAMCalculator(LWHStraightLine ref) : super(ref); @override void calculate() { if (ref.feature == null) return; final feature = ref.feature!; final l = findChildFeature(ref.l); final w = findChildFeature(ref.w); final h = findChildFeature(ref.h); if (l == null && w == null && h == null) return; updateStringValue(""); double? mapse; double? lvidd; double? lvids; if (l != null) mapse = l.value?.pickFloat() ?? 0; if (w != null) lvidd = w.value?.pickFloat() ?? 0; if (h != null) lvids = h.value?.pickFloat() ?? 0; if (mapse != null && lvidd != null && lvids != null) { double mam = CardiacFormulas.mamPercent(mapse, lvidd, lvids); // updateFloatValue(mam, unit: VidUsUnit.percent); final outputMeta = ref.meta.outputs.first.copyWith(unit: VidUsUnit.percent); feature.updateFloatValue(outputMeta, mam, VidUsUnit.percent); } } }