|
@@ -1,4 +1,3 @@
|
|
|
-import 'dart:convert';
|
|
|
import 'dart:ui';
|
|
|
|
|
|
import 'package:fis_jsonrpc/rpc.dart';
|
|
@@ -10,6 +9,7 @@ import 'package:fis_measure/interfaces/process/workspace/application.dart';
|
|
|
import 'package:fis_measure/interfaces/process/workspace/measure_3d_view_controller.dart';
|
|
|
import 'package:fis_measure/process/workspace/measure_3d_view_controller.dart';
|
|
|
import 'package:fis_measure/process/workspace/measure_data_controller.dart';
|
|
|
+import 'package:fis_measure/process/workspace/measure_handler.dart';
|
|
|
import 'package:fis_measure/process/workspace/third_part/application.dart';
|
|
|
import 'package:fis_measure/process/workspace/third_part/calibration_controller.dart';
|
|
|
import 'package:fis_measure/utils/canvas.dart';
|
|
@@ -23,7 +23,7 @@ import 'package:fis_measure/view/paint/ai_patint_result.dart';
|
|
|
import 'package:fis_measure/view/result/results_panel.dart';
|
|
|
import 'package:fis_measure/view/standard_line/calibration_canvas.dart';
|
|
|
import 'package:fis_measure/view/standard_line/calibration_gesture.dart';
|
|
|
-import 'package:fis_ui/define.dart';
|
|
|
+import 'package:fis_ui/index.dart';
|
|
|
import 'package:flutter/material.dart';
|
|
|
import 'package:flutter/rendering.dart';
|
|
|
import 'package:get/get.dart';
|
|
@@ -48,6 +48,7 @@ class _MeasureMainViewState extends State<MeasureMainView> {
|
|
|
|
|
|
late final playerController = Get.find<IPlayerController>();
|
|
|
late final measure3DViewController = Get.find<Measure3DViewController>();
|
|
|
+ late final measureHandler = Get.find<MeasureHandler>();
|
|
|
|
|
|
/// 测量数据
|
|
|
final measureData = Get.find<MeasureDataController>();
|
|
@@ -56,6 +57,7 @@ class _MeasureMainViewState extends State<MeasureMainView> {
|
|
|
|
|
|
late bool enableCarotid2DMeasure = false;
|
|
|
bool isCaptureState = false;
|
|
|
+ late double calibrationLine = 4;
|
|
|
|
|
|
/// 是否显示进度条
|
|
|
bool ifShowProgressBar = true;
|
|
@@ -148,9 +150,9 @@ class _MeasureMainViewState extends State<MeasureMainView> {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /// 保存图片
|
|
|
void capturePng() async {
|
|
|
isCaptureState = true;
|
|
|
-
|
|
|
setState(() {});
|
|
|
await Future.delayed(const Duration(milliseconds: 10), () async {
|
|
|
final RenderRepaintBoundary? boundary =
|
|
@@ -160,36 +162,28 @@ class _MeasureMainViewState extends State<MeasureMainView> {
|
|
|
final image = await boundary.toImage();
|
|
|
final byteData = await image.toByteData(format: ImageByteFormat.png);
|
|
|
final pngBytes = byteData!.buffer.asUint8List();
|
|
|
- final base64 = base64Encode(pngBytes);
|
|
|
+ Get.dialog(
|
|
|
+ CaptureImage(
|
|
|
+ bytes: pngBytes,
|
|
|
+ ),
|
|
|
+ transitionCurve: Curves.bounceInOut,
|
|
|
+ );
|
|
|
await measureData.saveImage.call(
|
|
|
pngBytes,
|
|
|
measureData.measureImageData.patientCode ?? '',
|
|
|
measureData.measureImageData.recordCode ?? '',
|
|
|
measureData.measureImageData.remedicalCode ?? '',
|
|
|
);
|
|
|
- print('data:image/png;base64,' + base64);
|
|
|
isCaptureState = false;
|
|
|
- Get.dialog(
|
|
|
- CaptureImage(
|
|
|
- bytes: pngBytes,
|
|
|
- ),
|
|
|
- transitionDuration: const Duration(milliseconds: 600),
|
|
|
- transitionCurve: Curves.bounceInOut,
|
|
|
- );
|
|
|
Future.delayed(
|
|
|
const Duration(
|
|
|
- milliseconds: 1600,
|
|
|
+ milliseconds: 600,
|
|
|
),
|
|
|
() {
|
|
|
Get.back();
|
|
|
},
|
|
|
);
|
|
|
setState(() {});
|
|
|
- ScaffoldMessenger.of(context).showSnackBar(
|
|
|
- const SnackBar(
|
|
|
- content: Text("Success! See console."),
|
|
|
- ),
|
|
|
- );
|
|
|
}
|
|
|
});
|
|
|
}
|
|
@@ -210,15 +204,83 @@ class _MeasureMainViewState extends State<MeasureMainView> {
|
|
|
Object sender, StandardLineCalibrationEditState e) {
|
|
|
setState(() {
|
|
|
if (e == StandardLineCalibrationEditState.drawn) {
|
|
|
- //TODO: 弹窗输入
|
|
|
- Future.delayed(const Duration(seconds: 1), () {
|
|
|
- standardLineCalibrationController!.confirmEdit(4);
|
|
|
- // standardLineCalibrationController!.cancelEdit();
|
|
|
- });
|
|
|
+ Get.dialog(buildCalibrationLine());
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ /// TODO 翻译
|
|
|
+ FWidget buildCalibrationLine() {
|
|
|
+ return FSimpleDialog(
|
|
|
+ title: const FText(
|
|
|
+ '参考线校准',
|
|
|
+ style: TextStyle(
|
|
|
+ color: Colors.white,
|
|
|
+ fontSize: 18,
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ isDefault: true,
|
|
|
+ onOk: () {
|
|
|
+ standardLineCalibrationController!.confirmEdit(calibrationLine);
|
|
|
+ Get.back();
|
|
|
+ },
|
|
|
+ onCancel: () {
|
|
|
+ standardLineCalibrationController!.cancelEdit();
|
|
|
+ Get.back();
|
|
|
+ },
|
|
|
+ children: [
|
|
|
+ buildCalibrationLineItem(
|
|
|
+ '长度',
|
|
|
+ FTextField(
|
|
|
+ decoration: InputDecoration(
|
|
|
+ hintText: '请输入',
|
|
|
+ hintStyle: const TextStyle(
|
|
|
+ fontSize: 16,
|
|
|
+ ),
|
|
|
+ enabledBorder: OutlineInputBorder(
|
|
|
+ borderSide: BorderSide(
|
|
|
+ color: Colors.white.withOpacity(0.5),
|
|
|
+ width: 0.5,
|
|
|
+ style: BorderStyle.solid,
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ focusedBorder: const OutlineInputBorder(
|
|
|
+ borderSide: BorderSide(
|
|
|
+ color: Colors.blue,
|
|
|
+ width: 0.5,
|
|
|
+ style: BorderStyle.solid,
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ filled: true,
|
|
|
+ ),
|
|
|
+ onChanged: (val) => calibrationLine = double.parse(val),
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ buildCalibrationLineItem(
|
|
|
+ '单位',
|
|
|
+ const FText('cm'),
|
|
|
+ ),
|
|
|
+ ],
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ FWidget buildCalibrationLineItem(String name, FWidget itemWidget) {
|
|
|
+ return FContainer(
|
|
|
+ padding: const EdgeInsets.symmetric(vertical: 15, horizontal: 25),
|
|
|
+ child: FRow(
|
|
|
+ children: [
|
|
|
+ FContainer(
|
|
|
+ width: 60,
|
|
|
+ child: FText(name),
|
|
|
+ ),
|
|
|
+ FExpanded(
|
|
|
+ child: itemWidget,
|
|
|
+ ),
|
|
|
+ ],
|
|
|
+ ),
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
@override
|
|
|
Widget build(BuildContext context) {
|
|
|
MeasureCanvasExt.setFontFamily(
|
|
@@ -301,7 +363,7 @@ class _MeasureMainViewState extends State<MeasureMainView> {
|
|
|
),
|
|
|
),
|
|
|
),
|
|
|
- if (canShowAI) ...[
|
|
|
+ if (canShowAI && !measureHandler.fullScreenState) ...[
|
|
|
SizedBox(
|
|
|
width: 200,
|
|
|
child: AIPaintInfoReslut(
|