visual_area.dart 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import 'package:fis_measure/interfaces/date_types/rect_region.dart';
  2. import 'package:fis_measure/interfaces/enums/display_mode.dart';
  3. import 'package:fis_measure/interfaces/process/modes/mode.dart';
  4. import 'package:fis_measure/interfaces/enums/visual_area_type.dart';
  5. import 'package:fis_common/event/event_type.dart';
  6. import 'package:fis_measure/interfaces/process/viewports/viewport.dart';
  7. import 'package:fis_measure/interfaces/process/visuals/visual.dart';
  8. import 'package:fis_measure/interfaces/process/visuals/visual_area.dart';
  9. import 'package:fis_measure/process/layout/configuration.dart';
  10. import 'package:fis_measure/process/modes/mode_base.dart';
  11. import 'package:flutter/foundation.dart';
  12. import 'package:vid/us/vid_us_mode.dart';
  13. import 'package:vid/us/vid_us_visual_area_type.dart';
  14. abstract class VisualArea<T extends IViewPort> implements IVisualArea {
  15. bool _isActive = false;
  16. late final IVisual _visual;
  17. late final VidUsVisualAreaType _areaType;
  18. late final IMode _mode;
  19. IViewPort? _viewPort;
  20. RectRegion? _layoutRegion;
  21. RectRegion _displayRegion = RectRegion.fill(0, 0, 1, 1);
  22. VisualArea(
  23. IVisual visual,
  24. VidUsVisualAreaType areaType,
  25. VidUsModeType modeType,
  26. ) {
  27. _visual = visual;
  28. _areaType = areaType;
  29. _mode = matchAreaMode(modeType);
  30. loadData();
  31. }
  32. @override
  33. bool get isActive => _isActive;
  34. @override
  35. set isActive(bool value) {
  36. if (value != _isActive) {
  37. _isActive = value;
  38. isActiveChanged.emit(this, value);
  39. }
  40. }
  41. @override
  42. IMode get mode => _mode;
  43. @override
  44. IVisual get visual => _visual;
  45. @override
  46. IViewPort? get viewport => _viewPort;
  47. @override
  48. set viewport(IViewPort? value) {
  49. if (value != _viewPort) {
  50. _viewPort = value;
  51. }
  52. }
  53. @override
  54. RectRegion? get layoutRegion => _layoutRegion;
  55. @protected
  56. set layoutRegion(RectRegion? value) {
  57. if (value != _layoutRegion) {
  58. _layoutRegion = value;
  59. _updateDisplayRegion();
  60. }
  61. }
  62. set carotidLayoutRegioin(RectRegion? value) {
  63. if (value != _layoutRegion) {
  64. _layoutRegion = value;
  65. }
  66. }
  67. @override
  68. RectRegion get displayRegion => _displayRegion;
  69. @override
  70. VidUsVisualAreaType get visualAreaType => _areaType;
  71. @override
  72. var isActiveChanged = FEventHandler<bool>();
  73. /// 加载数据
  74. void loadData();
  75. @protected
  76. RectRegion findRegion(String section) {
  77. final displayMode =
  78. DisplayModeEnum.values[visual.visualData.displayMode.index];
  79. final rect = LayoutConfiguration.ins.getRect(
  80. section,
  81. VisualAreaTypeEnum.values[_areaType.index],
  82. displayMode,
  83. );
  84. final areaRegion = RectRegion.rect(rect);
  85. return areaRegion;
  86. }
  87. @protected
  88. ModeBase matchAreaMode(VidUsModeType type) {
  89. final modeInfo = visual.visualData.modes.firstWhere((e) => e.type == type);
  90. final mode = ModeBase(
  91. modeInfo.displayName,
  92. modeInfo.type,
  93. visual,
  94. );
  95. return mode;
  96. }
  97. void _updateDisplayRegion() {
  98. if (layoutRegion == null) {
  99. _displayRegion = RectRegion.fill(0, 0, 1, 1);
  100. }
  101. final parent = visual.region;
  102. final child = layoutRegion!;
  103. final x = parent.left + child.left * parent.width;
  104. final y = parent.top + child.top * parent.height;
  105. final width = child.width * parent.width;
  106. final height = child.height * parent.height;
  107. _displayRegion = RectRegion.fill(x, y, width, height);
  108. }
  109. }