Procházet zdrojové kódy

Fix several AI edit relevant bugs

Jimmy před 1 rokem
rodič
revize
b28b5bc2fd

+ 2 - 4
lib/process/workspace/measure_data_controller.dart

@@ -404,10 +404,8 @@ class MeasureDataController implements IMeasureDataController {
   MeasureImageData get measureImageData => _measureImageData;
   @override
   set measureImageData(MeasureImageData value) {
-    if (value != _measureImageData) {
-      _measureImageData = value;
-      _onMeasureImageDataChanged();
-    }
+    _measureImageData = value;
+    _onMeasureImageDataChanged();
   }
 
   @override

+ 14 - 7
lib/view/ai_result_modifier/controller.dart

@@ -561,14 +561,18 @@ class AiResultModifierController extends GetxController {
         PromptBox.toast(i18nBook.user.saveFailed.t);
         return;
       }
-      bool hasRemedicalAISelectedInfoCode = measureData
+      //该逻辑是为了判断当前是否是编辑状态
+      //如果AIEditCode为空,说明当前模式为从源Vid里新建单帧Vid进行AI信息的update操作
+      //否则,则是在一个编辑过的Vid上面进行AI信息的update操作
+      bool isAIEditMode = measureData
           .measureImageData.remedicalAISelectedInfoCode.isNotNullOrEmpty;
+
       final result =
           await rpcHelper.rpc.remedical.saveRemedicalAISelectedInfoAsync(
         SaveRemedicalAISelectedInfoRequest(
           token: rpcHelper.userToken,
-          remedicalCode: hasRemedicalAISelectedInfoCode ? null : remedicalCode,
-          code: hasRemedicalAISelectedInfoCode
+          remedicalCode: remedicalCode,
+          code: isAIEditMode
               ? measureData.measureImageData.remedicalAISelectedInfoCode
               : null,
           frameIndex: currFrameIndex,
@@ -595,10 +599,13 @@ class AiResultModifierController extends GetxController {
   /// 加载AI结果并调用绘制
   Future<void> _initAIResult() async {
     try {
+      var existAIResult = jsonDecode(measureData.aiResults);
+      //当aiResult==1时,为具有单帧AI结果图像,无论是编辑过的还是原vid的单帧图像
+      //均可用此从measureData里读取,不受影响,因此该处无需区分图像源是AI编辑还是普通VID
       if (measureData
-          .measureImageData.remedicalAISelectedInfoCode.isNotNullOrEmpty) {
-        resultDTO = AIDiagnosisPerImageDTO.fromJson(
-            jsonDecode(measureData.aiResults)[0]);
+              .measureImageData.remedicalAISelectedInfoCode.isNotNullOrEmpty &&
+          existAIResult.length == 1) {
+        resultDTO = AIDiagnosisPerImageDTO.fromJson(existAIResult[0]);
       } else {
         final result =
             await rpcHelper.rpc.remedical.getRemedicalDiagnosisDataAsync(
@@ -608,9 +615,9 @@ class AiResultModifierController extends GetxController {
             frameIndex: currFrameIndex,
           ),
         );
+
         resultDTO = AIDiagnosisPerImageDTO.fromJson(jsonDecode(result));
       }
-
       modifiedDataDTO = resultDTO;
       contours = resultDTO.diagResultsForEachOrgan![0]
               .detectedObjects![currentAiDetectedObjectIndex].contours ??