viewport.dart 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import 'package:fis_measure/interfaces/process/viewports/image_boundary.dart';
  2. import 'package:fis_measure/interfaces/process/physical_coordinates/physical_coordinate.dart';
  3. import 'package:fis_measure/interfaces/enums/uint.dart';
  4. import 'package:fis_measure/interfaces/date_types/rect_region.dart';
  5. import 'package:fis_measure/interfaces/date_types/point.dart';
  6. import 'package:fis_measure/interfaces/process/viewports/logical_coordinate.dart';
  7. import 'package:fis_measure/interfaces/process/viewports/viewport.dart';
  8. import 'package:fis_measure/interfaces/process/visuals/visual_area.dart';
  9. import 'package:flutter/foundation.dart';
  10. import 'package:vid/us/vid_us_unit.dart';
  11. abstract class ViewPort<TV extends IVisualArea, T extends IPhysicalCoordinate>
  12. implements IViewPort, ILogicalCoordinate {
  13. late final IVisualArea _area;
  14. late final VidUsUnit _xUnit;
  15. late final VidUsUnit _yUnit;
  16. late final bool _isFlipHorizontal;
  17. late final bool _isFlipVertical;
  18. late final IImageBoundary _imageBoundary;
  19. late final RectRegion _region;
  20. T? _physical;
  21. ViewPort(
  22. IVisualArea visualArea,
  23. VidUsUnit xUnit,
  24. VidUsUnit yUnit,
  25. bool isFlipHorizontal,
  26. bool isFlipVertical,
  27. RectRegion region,
  28. ) {
  29. _area = visualArea;
  30. _xUnit = xUnit;
  31. _yUnit = yUnit;
  32. _isFlipHorizontal = isFlipHorizontal;
  33. _isFlipVertical = isFlipVertical;
  34. _region = region;
  35. }
  36. @override
  37. IVisualArea get area => _area;
  38. @override
  39. IImageBoundary get imageBoundary => _imageBoundary;
  40. @protected
  41. set imageBoundary(IImageBoundary value) => _imageBoundary = value;
  42. @override
  43. bool get isFlipHorizontal => _isFlipHorizontal;
  44. @override
  45. bool get isFlipVertical => _isFlipVertical;
  46. @override
  47. T? get physical => _physical;
  48. @protected
  49. set physical(T? value) {
  50. if (value != _physical) {
  51. _physical = value;
  52. }
  53. }
  54. @override
  55. RectRegion get region => _region;
  56. @override
  57. VidUsUnit get xUnit => _xUnit;
  58. @override
  59. VidUsUnit get yUnit => _yUnit;
  60. @override
  61. DPoint convert(DPoint point) {
  62. double x = point.x * region.width;
  63. double y = point.y * region.height;
  64. x /= area.displayRegion.width;
  65. y /= area.displayRegion.height;
  66. return DPoint(x, y);
  67. // return DPoint(point.x * region.width, point.y * region.height);
  68. }
  69. @override
  70. DPoint convertBack(DPoint point) {
  71. double x = point.x / region.width;
  72. double y = point.y / region.height;
  73. x *= area.displayRegion.width;
  74. y *= area.displayRegion.height;
  75. return DPoint(x, y);
  76. // return DPoint(point.x / region.width, point.y / region.height);
  77. }
  78. }