import 'package:fis_measure/interfaces/process/calculators/values.dart'; import 'package:fis_measure/interfaces/process/items/terms.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/two_length.dart'; import 'package:vid/us/vid_us_unit.dart'; import '../primitives/straightline.dart'; import 'calculator.dart'; class VerticalDistanceCal extends Calculator { VerticalDistanceCal(StraightLine ref) : super(ref); @override void calculate() { if (ref.feature == null) return; final feature = ref.feature!; final viewport = feature.hostVisualArea!.viewport!; final p1 = feature.startPoint; final p2 = feature.endPoint; final pp1 = viewport.convert(p1); final pp2 = viewport.convert(p2); final value = (pp2.y - pp1.y).abs(); // updateFloatValue(value); final ouput = ref.meta.outputs.first; feature.updateFloatValue( ouput, roundDouble(value, ouput.fractionalDigits), VidUsUnit.cm); } } class TimeSpanCal extends Calculator { TimeSpanCal(StraightLine ref) : super(ref); @override void calculate() { if (ref.feature == null) return; final feature = ref.feature!; final viewport = feature.hostVisualArea!.viewport!; final p1 = feature.startPoint; final p2 = feature.endPoint; final pp1 = viewport.convert(p1); final pp2 = viewport.convert(p2); final value = (pp2.x - pp1.x).abs(); updateFloatValue(value); } } class StenosisCal extends Calculator { StenosisCal(TwoLengthAbstract ref) : super(ref); @override void calculate() { if (ref.feature == null) return; final a1 = _pickChildValue(ref.child1); final a2 = _pickChildValue(ref.child2); final feature = ref.feature!; final viewport = feature.hostVisualArea!.viewport!; if (a1 != null && a2 != null) { final value = GeneralFormulas.countStenosis( a1, a2, ); updateFloatValue(value); } } double? _pickChildValue(MeasureItem item) { if (item.calculator == null) return null; ValueBase? value; if (item.measuredFeatures.isNotEmpty) { value = item.measuredFeatures.first.value; } else if (item.feature != null) { value = item.feature!.value; } if (value != null) { return (value as FloatValue).value ?? 0; } return null; } } class SlopeCal extends Calculator { SlopeCal(StraightLine ref) : super(ref); @override void calculate() { if (ref.feature == null) return; final feature = ref.feature!; final viewport = feature.hostVisualArea!.viewport!; final p1 = feature.startPoint; final p2 = feature.endPoint; final pp1 = viewport.convert(p1); final pp2 = viewport.convert(p2); final distance = (pp2.y - pp1.y).abs(); final time = (pp2.x - pp1.x).abs(); for (var output in ref.meta.outputs) { if (output.name == MeasureTerms.Slope) { var slope = GeneralFormulas.countSlope(pp1, pp2); feature.updateFloatValue(output, slope, output.unit); } else if (output.name == MeasureTerms.Timespan) { feature.updateFloatValue(output, time, output.unit); } else if (output.name == MeasureTerms.Distance) { feature.updateFloatValue(output, distance, output.unit); } } } } class SlopeDopplerCal extends Calculator { SlopeDopplerCal(StraightLine ref) : super(ref); @override void calculate() { if (ref.feature == null) return; final feature = ref.feature!; final viewport = feature.hostVisualArea!.viewport!; final p1 = feature.startPoint; final p2 = feature.endPoint; final pp1 = viewport.convert(p1); final pp2 = viewport.convert(p2); final distance = (pp2.y - pp1.y).abs(); final time = (pp2.x - pp1.x).abs(); for (var output in ref.meta.outputs) { if (output.name == MeasureTerms.Slope) { var slope = GeneralFormulas.countSlope(pp2, pp1); feature.updateFloatValue(output, slope, output.unit); } else if (output.name == MeasureTerms.Timespan) { feature.updateFloatValue(output, time, output.unit); } else if (output.name == MeasureTerms.Distance) { feature.updateFloatValue(output, distance, output.unit); } } } }