import 'package:fis_measure/interfaces/process/items/terms.dart'; import 'package:fis_measure/process/primitives/single_straightline.dart'; import 'calculator.dart'; class HeartRateCal extends Calculator { HeartRateCal(SingleStraightLine ref) : super(ref); @override void calculate() { if (ref.feature == null) return; if (ref.feature!.innerPoints.length < 2) return; final feature = ref.feature! as StraightLineHeartRateFeature; if (feature.startPoint == feature.endPoint) return; final heartCycle = feature.heartCycle; final viewport = feature.hostVisualArea!.viewport!; final p1 = feature.startPoint; final p2 = feature.endPoint; final pp1 = viewport.convert(p1); final pp2 = viewport.convert(p2); final time = (pp2.x - pp1.x).abs(); double hr = (heartCycle / time) * 60; if (time == 0) hr = 0; for (var output in ref.meta.outputs) { if (output.name == MeasureTerms.HeartRate) { feature.updateFloatValue(output, hr, output.unit); } else if (output.name == "Heart Cycle") { feature.updateFloatValue(output, heartCycle.toDouble(), output.unit); } else if (output.name == MeasureTerms.Timespan) { feature.updateFloatValue(output, time, output.unit); } } } }