depth2baseline.dart 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import 'package:fis_measure/interfaces/date_types/matrix.dart';
  2. import 'package:fis_measure/process/primitives/combos/depth2baseline.dart';
  3. import 'package:fis_measure/process/primitives/location.dart';
  4. import 'package:fis_measure/process/primitives/ray.dart';
  5. import 'package:vid/us/vid_us_unit.dart';
  6. import 'calculator.dart';
  7. class DistanceToRayCal extends Calculator<DepthToBaseLine, double> {
  8. DistanceToRayCal(DepthToBaseLine ref) : super(ref);
  9. @override
  10. void calculate() {
  11. if (ref.feature == null) return;
  12. final feature = ref.feature!;
  13. final depthFeature = findBaselineFeatue<LocationFeature>(ref.depth);
  14. final baselineFeature = findBaselineFeatue<RayFeature>(ref.baseline);
  15. if (depthFeature == null || baselineFeature == null) return;
  16. final depthLocation = depthFeature.point;
  17. final baseLinePoint = baselineFeature.point;
  18. final baseLineAngle = baselineFeature.angle;
  19. var matrix = DMatrix();
  20. matrix.rotateAt(
  21. (baselineFeature.isReverse ? 1 : -1) * baseLineAngle,
  22. baseLinePoint.x,
  23. baseLinePoint.y,
  24. );
  25. var pt = matrix.transformWidthPoint(depthLocation);
  26. var distance = pt.y - baseLinePoint.y;
  27. feature.updateFloatValue(ref.meta.outputs.first, distance, VidUsUnit.cm);
  28. }
  29. }