Browse Source

1、测量库ai编辑功能完善

bakamaka.guan 1 year ago
parent
commit
ae6768b716

+ 1 - 0
lib/measure_page_test.dart

@@ -36,6 +36,7 @@ class MeasureDataTester {
   static Future<RemedicalInfoDTO?> getImageInfo(
     String remedicalCode,
     String token,
+    String? remedicalAISelectedInfoCode,
   ) async {
     return null;
   }

+ 1 - 1
lib/process/workspace/measure_data_controller.dart

@@ -459,7 +459,7 @@ class MeasureDataController implements IMeasureDataController {
       getRemedicalList;
 
   ///参数1:remedicalCode,参数2:token
-  Future<RemedicalInfoDTO?> Function(String, String) getImageInfo;
+  Future<RemedicalInfoDTO?> Function(String, String, String?) getImageInfo;
 
   ///参数1:测量模式参数
   Future<MeasureApplicationDTO?> Function(MeasureModeSelection)

+ 16 - 5
lib/view/measure/measure_view.dart

@@ -32,6 +32,7 @@ class MeasureMainPage extends StatefulWidget
     this.needRouterBack,
     this.enableLoopPlayback = false,
     this.onLoopPlaybackEnableChanged,
+    this.remedicalAISelectedInfoCode,
     Key? key,
   }) : super(key: key);
 
@@ -42,6 +43,7 @@ class MeasureMainPage extends StatefulWidget
   final bool? needRouterBack; // 需要返回按钮【一版用于返回到报告编辑】
   final bool enableLoopPlayback;
   final ValueCallback<bool>? onLoopPlaybackEnableChanged;
+  final String? remedicalAISelectedInfoCode;
 
   @override
   final String pageName = 'MeasureMainPage';
@@ -55,6 +57,7 @@ class _MeasureMainPageState extends State<MeasureMainPage> {
   String _curPatientCode = '';
   String _curRemedicalCode = '';
   String _curRecordCode = '';
+  String? _curRemedicalAISelectedInfoCode = '';
   bool? _curNeedRouterBack;
 
   /// 数据
@@ -110,6 +113,8 @@ class _MeasureMainPageState extends State<MeasureMainPage> {
     _curPatientCode = parameters['patientCode'] ?? '';
     _curRemedicalCode = parameters['remedicalCode'] ?? '';
     _curRecordCode = parameters['recordCode'] ?? '';
+    _curRemedicalAISelectedInfoCode =
+        parameters['remedicalAISelectedInfoCode'] ?? '';
 
     if (needUpdate) {
       await LayoutConfiguration.ins.loadData();
@@ -117,11 +122,11 @@ class _MeasureMainPageState extends State<MeasureMainPage> {
       _initMouseModuel();
       _initCarotidModuel(remedicals);
       measureData.remedicalList = remedicals;
-      var remedicalInfo =
-          await measureData.getImageInfo.call(_curRemedicalCode, _curToken);
+      var remedicalInfo = await measureData.getImageInfo
+          .call(_curRemedicalCode, _curToken, _curRemedicalAISelectedInfoCode);
       if (remedicalInfo != null) {
         measureData.aiResults = remedicalInfo.diagnosisResult ?? '';
-
+        print('🍧');
         if (remedicalInfo.terminalImages != null) {
           _hideFullScreenLoading = true;
           measureData.itemCurrentImage =
@@ -139,6 +144,7 @@ class _MeasureMainPageState extends State<MeasureMainPage> {
 
   /// 将当前的图像信息同步到 measureData 中
   void _setCurImageData() {
+    print('🍪');
     measureData.measureImageData = MeasureImageData(
       patientCode: _curPatientCode,
       recordCode: _curRecordCode,
@@ -161,6 +167,7 @@ class _MeasureMainPageState extends State<MeasureMainPage> {
     _curRemedicalCode = widget.remedicalCode;
     _curRecordCode = widget.recordCode;
     _curNeedRouterBack = widget.needRouterBack;
+    _curRemedicalAISelectedInfoCode = widget.remedicalAISelectedInfoCode;
     _hideFullScreenLoading = false;
     _loadLayoutConfig();
     _setCurImageData();
@@ -320,8 +327,8 @@ class _MeasureMainPageState extends State<MeasureMainPage> {
     _initMouseModuel();
     _initCarotidModuel(remedicals);
     measureData.remedicalList = remedicals;
-    var remedicalInfo =
-        await measureData.getImageInfo.call(_curRemedicalCode, _curToken);
+    var remedicalInfo = await measureData.getImageInfo
+        .call(_curRemedicalCode, _curToken, _curRemedicalAISelectedInfoCode);
     if (remedicalInfo != null) {
       measureData.aiResults = remedicalInfo.diagnosisResult ?? '';
 
@@ -331,6 +338,8 @@ class _MeasureMainPageState extends State<MeasureMainPage> {
         measureData.itemCurrentImage = measureData.chooseImageUrl(imgInfo);
         getExamImageInfoList(remedicals);
       }
+
+      print('🥐');
     }
 
     measureController.imageLoaded.removeListener(_onImageLoaded);
@@ -382,7 +391,9 @@ class _MeasureMainPageState extends State<MeasureMainPage> {
       var remedicalInfo = await measureData.getImageInfo(
         currentImage.remedicalCode ?? '',
         _curToken,
+        _curRemedicalAISelectedInfoCode,
       );
+      print('🍇');
       if (remedicalInfo != null) {
         measureData.aiResults = remedicalInfo.diagnosisResult ?? '';
         measure3DViewController.initParams();

+ 9 - 4
lib/view/mobile_view/mobile_measure_view.dart

@@ -15,8 +15,8 @@ import 'package:flutter/services.dart';
 
 /// 测量主页面
 class MobileMeasureMainPage extends StatefulWidget implements FWidget {
-  const MobileMeasureMainPage(
-      this.token, this.recordCode, this.patientCode, this.remedicalCode,
+  const MobileMeasureMainPage(this.token, this.recordCode, this.patientCode,
+      this.remedicalCode, this.remedicalAISelectedInfoCode,
       {Key? key})
       : super(key: key);
 
@@ -24,6 +24,7 @@ class MobileMeasureMainPage extends StatefulWidget implements FWidget {
   final String patientCode;
   final String remedicalCode;
   final String recordCode;
+  final String? remedicalAISelectedInfoCode;
 
   @override
   State<StatefulWidget> createState() => _MobileMeasureMainPageState();
@@ -157,6 +158,7 @@ class _MobileMeasureMainPageState extends State<MobileMeasureMainPage> {
       var remedicalInfo = await measureData.getImageInfo(
         currentImage.remedicalCode ?? '',
         widget.token,
+        widget.remedicalAISelectedInfoCode,
       );
       if (remedicalInfo != null) {
         measureData.aiResults = remedicalInfo.diagnosisResult ?? '';
@@ -260,8 +262,11 @@ class _MobileMeasureMainPageState extends State<MobileMeasureMainPage> {
     // _getMeasureSystemSetting();
 
     measureData.remedicalList = remedicals;
-    var remedicalInfo =
-        await measureData.getImageInfo.call(widget.remedicalCode, widget.token);
+    var remedicalInfo = await measureData.getImageInfo.call(
+      widget.remedicalCode,
+      widget.token,
+      widget.remedicalAISelectedInfoCode,
+    );
     if (remedicalInfo != null) {
       measureData.aiResults = remedicalInfo.diagnosisResult ?? '';
 

+ 31 - 6
lib/view/paint/parts/dots.dart

@@ -5,6 +5,7 @@ import 'package:fis_measure/view/paint/ai_patint_state.dart';
 import 'package:fis_measure/view/paint/parts/index.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
+import 'package:path_drawing/path_drawing.dart';
 
 /// ai描点
 class PaintAIDots extends CustomPainter {
@@ -19,12 +20,36 @@ class PaintAIDots extends CustomPainter {
   bool get isSelected => aiResultIndex == aiDotsResults.aiResultsIndex;
   @override
   void paint(Canvas canvas, Size size) {
-    canvas.drawPoints(
-      ///PointMode的枚举类型有三个,points(点),lines(线,隔点连接),polygon(线,相邻连接)
-      PointMode.points,
-      aiDotsResults.aiResultsList,
-      isSelected ? aiPaintSelected : aiPaint,
-    );
+    final contoursPaint = Paint()
+      ..color = Colors.green
+      ..strokeCap = StrokeCap.round
+      ..strokeWidth = 3.0
+      ..style = PaintingStyle.stroke;
+
+    // 遍历 contoursPoints 绘制轮廓
+    if (aiDotsResults.aiResultsList.isNotEmpty) {
+      Path path = Path();
+      path.moveTo(
+          aiDotsResults.aiResultsList[0].dx, aiDotsResults.aiResultsList[0].dy);
+      for (int i = 1; i < aiDotsResults.aiResultsList.length; i++) {
+        path.lineTo(aiDotsResults.aiResultsList[i].dx,
+            aiDotsResults.aiResultsList[i].dy);
+      }
+      path.close();
+      canvas.drawPath(
+        dashPath(
+          path,
+          dashArray: CircularIntervalList<double>([1, 10]),
+        ),
+        isSelected ? aiPaintSelected : aiPaint,
+      );
+    }
+    // canvas.drawPoints(
+    //   ///PointMode的枚举类型有三个,points(点),lines(线,隔点连接),polygon(线,相邻连接)
+    //   PointMode.points,
+    //   aiDotsResults.aiResultsList,
+    //   isSelected ? aiPaintSelected : aiPaint,
+    // );
   }
 
   @override