linear_tissue.dart 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import 'package:fis_measure/interfaces/date_types/point.dart';
  2. import 'package:fis_measure/interfaces/date_types/skew_transform.dart';
  3. import 'package:fis_measure/interfaces/process/physical_coordinates/physical_coordinate.dart';
  4. import 'package:vid/us/vid_us_visual_area_type.dart';
  5. /// 二维线阵物理坐标系
  6. class LinearTissuePhysicalCoordinate implements ITissuePhysicalCoordinate {
  7. // ignore: non_constant_identifier_names
  8. static final DPoint C_INVALID_POINT = DPoint(double.nan, double.nan);
  9. late final double _depthStart;
  10. late final double _depthEnd;
  11. late final double _width;
  12. late final double _beamPosition;
  13. late final double _steer;
  14. late final DSkewTransform _logicalToPhysicalConvert;
  15. late final DSkewTransform _logicalToPhysicalConvertBack;
  16. LinearTissuePhysicalCoordinate(
  17. double depthStart,
  18. double depthEnd,
  19. double width,
  20. double beamPosition,
  21. double steer,
  22. ) {
  23. _depthStart = depthStart;
  24. _depthEnd = depthEnd;
  25. _width = width;
  26. _beamPosition = beamPosition;
  27. _steer = steer;
  28. _logicalToPhysicalConvertBack =
  29. DSkewTransform(steer, 0, 0, (depthEnd - depthStart) / 2);
  30. _logicalToPhysicalConvert = _logicalToPhysicalConvertBack.inverse;
  31. }
  32. @override
  33. VidUsVisualAreaType get areaType => VidUsVisualAreaType.Tissue;
  34. @override
  35. double get depthEnd => _depthEnd;
  36. @override
  37. double get depthStart => _depthStart;
  38. @override
  39. double get width => _width;
  40. @override
  41. double get beamPosition => _beamPosition;
  42. /// 图像顺时针旋转的y轴旋转角度
  43. ///
  44. /// 单位:degrees
  45. double get steer => _steer;
  46. @override
  47. DPoint convert(DPoint pointInLogical) {
  48. return _logicalToPhysicalConvert.transform(pointInLogical);
  49. }
  50. @override
  51. DPoint convertBack(DPoint pointInPhysical) {
  52. return _logicalToPhysicalConvertBack.transform(pointInPhysical);
  53. }
  54. }