Browse Source

1、完成灌注图的自动测量

guanxinyi 9 months ago
parent
commit
b912387777

+ 0 - 1
lib/process/calcuators/urm_calcuators/urm_trace_perfusion.dart

@@ -50,7 +50,6 @@ class URMTracePerfusionCal extends URMTraceMeasureCal {
         if (outresult.perfusionImgBase64 != null) {
           feature.perfusionImg =
               await loadImageFromBase64(outresult.perfusionImgBase64!);
-          // feature.perfusionPiexlRect = outresult.perfusionPiexlRect;
           feature.perfusionScaleDRect =
               urmApplication.viewToLocalRect(outresult.perfusionScaleDRect!);
         }

+ 43 - 0
lib/process/primitives/urm_measure/urm_trace_measure.dart

@@ -16,6 +16,8 @@ import 'package:fis_measure/utils/prompt_box.dart';
 import 'package:flutter/material.dart';
 import 'dart:ui' as ui;
 
+import 'package:flutter/services.dart';
+
 class URMTraceMeasure extends Trace {
   URMTraceMeasure(super.meta, super.parent);
   static bool needPerfusion = false;
@@ -133,6 +135,47 @@ class URMTraceMeasure extends Trace {
     PromptBox.dismiss();
     waitingResult = false;
   }
+
+  /// 自动结束检测
+  @override
+  bool checkAutoSnap(PointInfo current, [bool autoFinishFeature = true]) {
+    if (feature == null || feature!.innerPoints.length < 3) {
+      isSmartMove = false;
+      return _syncState(false);
+    }
+
+    // final viewport = feature!.hostVisualArea!.viewport!;
+
+    if (isAutoSnap == false) return false;
+    final pixelSize = application.displaySize;
+
+    final p1 = feature!.innerPoints.first.scale2Size(pixelSize);
+    final p2 = current.scale2Size(pixelSize);
+    final length = (p1 - p2).length;
+    if (length > snapThreshold * 2.0 && !isSmartMove) {
+      isSmartMove = true;
+    }
+    if (length < snapThreshold && isSmartMove) {
+      feature!.innerPoints.last = feature!.innerPoints.first.clone();
+
+      /// 此处的最后一个点,方便计算,但是绘制时要剔除
+      // feature!.innerPoints.removeLast();
+
+      HapticFeedback.heavyImpact();
+      if (autoFinishFeature) {
+        handleFinish();
+      }
+      isSmartMove = false;
+      return _syncState(true);
+    } else {
+      return _syncState(false);
+    }
+  }
+
+  bool _syncState(bool isSnap) {
+    snapState = isSnap;
+    return snapState;
+  }
 }
 
 class TracePerfusionImageFeature extends TraceFeature {