cross_frame.dart 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import 'package:fis_common/event/event_type.dart';
  2. import 'package:fis_measure/interfaces/process/items/item.dart';
  3. import 'package:fis_measure/interfaces/process/workspace/cross_frame.dart';
  4. import 'package:vid/us/vid_us_image.dart';
  5. import 'package:vid/us/vid_us_probe.dart';
  6. class CrossFrameContext implements ICrossFrameContext {
  7. late final String _originUrl;
  8. late final VidUsImage _originFrame;
  9. late final IMeasureItem _measureItem;
  10. final Map<String, List<VidUsImage>> _imageFrameCache = {};
  11. late VidUsImage? _currentFrame;
  12. late String _currentUrl;
  13. bool _isOver = false;
  14. CrossFrameContext(String url, VidUsImage frame, IMeasureItem item) {
  15. measureAutoOver = FEventHandler<void>();
  16. _currentUrl = _originUrl = url;
  17. _currentFrame = _originFrame = frame;
  18. _imageFrameCache[url] = [frame];
  19. _measureItem = item;
  20. }
  21. int? imageCount;
  22. VidUsProbe? probe;
  23. @override
  24. String get originUrl => _originUrl;
  25. @override
  26. String get currentUrl => _currentUrl;
  27. @override
  28. VidUsImage? get currentFrame => _currentFrame;
  29. @override
  30. int get originIndex => _originFrame.index;
  31. @override
  32. int? get currentIndex => _currentFrame?.index;
  33. @override
  34. IMeasureItem get measureItem => _measureItem;
  35. @override
  36. List<int> get recordIndexList =>
  37. _imageFrameCache[_currentUrl]!.map((e) => e.index).toList();
  38. @override
  39. bool get isOver => _isOver;
  40. @override
  41. late final FEventHandler<void> measureAutoOver;
  42. @override
  43. bool switchImage(String url) {
  44. if (url == _currentUrl) {
  45. return true;
  46. }
  47. _currentUrl = url;
  48. _currentFrame = null;
  49. if (!_imageFrameCache.containsKey(url)) {
  50. // if (_imageFrameCache.keys.length > 1) {
  51. // TODO [melon][lvstudy] 暂时屏蔽跨图支持
  52. if (_imageFrameCache.keys.isNotEmpty) {
  53. // 结束测量
  54. finish();
  55. measureAutoOver.emit(this, null);
  56. return false;
  57. }
  58. _imageFrameCache[url] = [];
  59. }
  60. return true;
  61. }
  62. @override
  63. void switchFrame(VidUsImage frame) {
  64. if (frame == _currentFrame) {
  65. return;
  66. }
  67. _currentFrame = frame;
  68. }
  69. @override
  70. bool recordFrame(int index) {
  71. if (_currentFrame == null) {
  72. return false;
  73. }
  74. final records = _imageFrameCache[_currentUrl]!;
  75. if (records.contains(_currentFrame)) {
  76. return false;
  77. } else {
  78. records.add(_currentFrame!);
  79. }
  80. return true;
  81. }
  82. @override
  83. void finish() {
  84. _isOver = true;
  85. }
  86. }