Forráskód Böngészése

fix(measure): 修正颈动脉2D visuals 加载方式

gavin.chen 2 éve
szülő
commit
7b536361d9

+ 3 - 0
lib/interfaces/process/workspace/application.dart

@@ -123,6 +123,9 @@ abstract class IApplication {
   /// [frame] vid单帧数据
   void loadFrame(VidUsImage frame, [bool clearable = true]);
 
+  /// 加载颈动脉单帧visuals
+  void loadCarotidVisuals(VidUsImage frame);
+
   /// 转换为相对坐标点(百分比:0-1)
   ///
   /// [offset] 坐标位置

+ 25 - 15
lib/process/workspace/application.dart

@@ -1,3 +1,4 @@
+import 'package:fis_common/logger/logger.dart';
 import 'package:fis_measure/interfaces/date_types/rect_region.dart';
 import 'package:fis_measure/interfaces/enums/annotation.dart';
 import 'package:fis_measure/interfaces/enums/operate.dart';
@@ -5,8 +6,6 @@ import 'package:fis_measure/interfaces/process/annotations/annotation.dart';
 import 'package:fis_measure/interfaces/process/items/item.dart';
 import 'package:fis_measure/interfaces/process/items/item_feature.dart';
 import 'package:fis_measure/interfaces/process/items/item_metas.dart';
-import 'package:fis_measure/interfaces/process/items/terms.dart';
-import 'package:fis_measure/interfaces/process/items/types.dart';
 import 'package:fis_measure/interfaces/process/visuals/visual_area.dart';
 import 'package:fis_measure/interfaces/process/visuals/visual.dart';
 import 'package:fis_measure/interfaces/process/viewports/viewport.dart';
@@ -19,13 +18,10 @@ import 'package:fis_measure/process/annotations/arrow_annotation.dart';
 import 'package:fis_measure/process/annotations/input_annotation.dart';
 import 'package:fis_measure/process/annotations/label_annotation.dart';
 import 'package:fis_measure/process/items/factory.dart';
-import 'package:fis_measure/process/primitives/carotid_imt.dart';
-import 'package:fis_measure/process/primitives/detection.dart';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/painting.dart';
 import 'package:vid/us/vid_us_image.dart';
 import 'package:vid/us/vid_us_probe.dart';
-import 'package:vid/us/vid_us_unit.dart';
 import 'dart:math';
 import 'recorder.dart';
 import 'visual_loader.dart';
@@ -262,10 +258,13 @@ class Application implements IApplication {
     bool isSameIndex = _frame?.index == frame.index;
     _frame = frame;
     if (isSameIndex == false) {
-      if (clearable) _clearFrameCache();
-      if (canMeasure) {
-        loadVisuals();
+      if (clearable) {
+        _clearFrameCache();
+        if (canMeasure) {
+          loadVisuals();
+        }
       }
+      //如果clearable为false,需要手动调用loadCarotidVisuals加载visuals
     }
   }
 
@@ -368,14 +367,17 @@ class Application implements IApplication {
   @override
   void switchVisual(int indicator) {
     if (_visuals == null) return;
-
-    for (var i = 0; i < _visuals!.length; i++) {
-      final v = _visuals![i];
-      if (i == indicator) {
-        v.visualAreas.first.isActive = true;
-      } else {
-        v.setUnAcitve();
+    try {
+      for (var i = 0; i < _visuals!.length; i++) {
+        final v = _visuals![i];
+        if (i == indicator) {
+          v.visualAreas.first.isActive = true;
+        } else {
+          v.setUnAcitve();
+        }
       }
+    } catch (e) {
+      logger.e('switch error: $e');
     }
   }
 
@@ -463,6 +465,14 @@ class Application implements IApplication {
     visualsLoaded.emit(this, null);
   }
 
+  @override
+  void loadCarotidVisuals(VidUsImage carotidVid) {
+    _clearVisuals();
+    _visuals = VisualsLoader(carotidVid.visuals).load();
+    switchVisual(0);
+    visualsLoaded.emit(this, null);
+  }
+
   void _clearVisuals() {
     _visuals = [];
   }

+ 10 - 0
lib/process/workspace/visual_loader.dart

@@ -20,6 +20,8 @@ class VisualsLoader {
       loadTwoVisual();
     } else if (visualDatas.length == 4) {
       loadFourVisual();
+    } else {
+      loadNoVisual();
     }
     return _visuals;
   }
@@ -39,6 +41,14 @@ class VisualsLoader {
     _visuals.add(visual);
   }
 
+  //适用于,例如:颈动脉2D下无visuals的情况
+  void loadNoVisual() {
+    loadVisual(
+      VidUs2DVisual(),
+      RectRegion.fill(0, 0, 1, 1),
+    );
+  }
+
   void loadSingleVisual() {
     loadVisual(
       visualDatas.first,

+ 4 - 0
lib/view/3d_view/carotid_player.dart

@@ -34,10 +34,14 @@ class _CarotidPlayerState extends State<CarotidPlayer> {
   @override
   void initState() {
     final stdSize = widget.measure3DViewController.stdSize;
+
+    ///载入虚拟frame
     application.loadFrame(
         VidUsImage(1, stdSize.width.toInt(), stdSize.height.toInt(),
             Uint8List.fromList([0])),
         false);
+    application
+        .loadCarotidVisuals(widget.measure3DViewController.image4Measure!);
     application.carotid2DSize = Size(
         widget.measure3DViewController.image4Measure!.width.toDouble(),
         widget.measure3DViewController.image4Measure!.height.toDouble());