import 'package:fis_measure/interfaces/date_types/matrix.dart'; import 'package:fis_measure/process/primitives/combos/depth2baseline.dart'; import 'package:fis_measure/process/primitives/location.dart'; import 'package:fis_measure/process/primitives/ray.dart'; import 'package:vid/us/vid_us_unit.dart'; import 'calculator.dart'; class DistanceToRayCal extends Calculator { DistanceToRayCal(DepthToBaseLine ref) : super(ref); @override void calculate() { if (ref.feature == null) return; final feature = ref.feature!; final depthFeature = findChildFeature(ref.depth); final baselineFeature = findChildFeature(ref.baseline); if (depthFeature == null || baselineFeature == null) return; final depthLocation = depthFeature.point; final baseLinePoint = baselineFeature.point; final baseLineAngle = baselineFeature.angle; var matrix = DMatrix(); matrix.rotateAt( (baselineFeature.isReverse ? 1 : -1) * baseLineAngle, baseLinePoint.x, baseLinePoint.y, ); var pt = matrix.transformWidthPoint(depthLocation); var distance = pt.y - baseLinePoint.y; feature.updateFloatValue(ref.meta.outputs.first, distance, VidUsUnit.cm); } }