|
@@ -10,7 +10,6 @@ import 'package:fis_measure/interfaces/process/workspace/exam_info.dart';
|
|
|
import 'package:fis_measure/process/workspace/measure_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/view/measure/measure_view_controller.dart';
|
|
|
import 'package:fis_measure/view/menu_button_group/menu_button_group.dart';
|
|
|
import 'package:fis_measure/view/player/controller.dart';
|
|
@@ -18,7 +17,6 @@ import 'package:fis_ui/base_define/page.dart';
|
|
|
import 'package:fis_ui/index.dart';
|
|
|
import 'package:flutter/material.dart';
|
|
|
import 'package:get/get.dart';
|
|
|
-import 'package:get/get_connect/http/src/utils/utils.dart';
|
|
|
import 'package:vid/us/vid_us_image.dart';
|
|
|
|
|
|
/// 测量工具 注释工具 切换按钮
|
|
@@ -44,6 +42,8 @@ class OperateTypeChangeButtonState extends State<OperateTypeChangeButton>
|
|
|
// late TabController tabController;
|
|
|
late final measureData = Get.find<MeasureDataController>();
|
|
|
bool isShowMeasureButton = true;
|
|
|
+ bool is3rdVideoTappedMeasure = false; // 三方视频是否进入(or请求)过测量
|
|
|
+ bool isWaitingDrawStandardLine = false;
|
|
|
OperateButtonState operateButtonState = OperateButtonState.isMeasure;
|
|
|
|
|
|
/// 全部图片list
|
|
@@ -80,13 +80,23 @@ class OperateTypeChangeButtonState extends State<OperateTypeChangeButton>
|
|
|
operateButtonState = OperateButtonState.isAnnotation;
|
|
|
});
|
|
|
} else {
|
|
|
- _enterMeasure(() {
|
|
|
+ if (isWaitingDrawStandardLine) return;
|
|
|
+
|
|
|
+ if (application.checkIs3rdAndEmptyStandardLine()) {
|
|
|
+ // 第三方图像参考信息是空的,先关闭测量
|
|
|
measureHandler.toolPanelState = false;
|
|
|
measureHandler.canMeasureDrawing = false;
|
|
|
setState(() {
|
|
|
operateButtonState = OperateButtonState.allClose;
|
|
|
});
|
|
|
- });
|
|
|
+ } else {
|
|
|
+ changeTypeTo(MeasureOperateType.measure);
|
|
|
+ measureHandler.toolPanelState = true;
|
|
|
+ measureHandler.canMeasureDrawing = true;
|
|
|
+ setState(() {
|
|
|
+ operateButtonState = OperateButtonState.isMeasure;
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -124,6 +134,32 @@ class OperateTypeChangeButtonState extends State<OperateTypeChangeButton>
|
|
|
playerController.firstFrameLoaded.addListener(_onFrameLoadedAfterFirst);
|
|
|
}
|
|
|
|
|
|
+ /// 处理自动进入测量状态
|
|
|
+ void handleAutoTapInMeasure() {
|
|
|
+ if (isShowMeasureButton == false) {
|
|
|
+ enterAnnotation();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ final application = Get.find<IApplication>();
|
|
|
+ bool canEnterMeasure = true;
|
|
|
+ if (application.checkIs3rdAndEmptyStandardLine() &&
|
|
|
+ application.isSingleFrame == false &&
|
|
|
+ is3rdVideoTappedMeasure == true) {
|
|
|
+ // 校准信息为空,但不是首次进入,不再自动进入测量
|
|
|
+ canEnterMeasure = false;
|
|
|
+ }
|
|
|
+ if (canEnterMeasure) {
|
|
|
+ enterMeasure();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// 处理自动退出测量状态
|
|
|
+ void handleAutoExitMeasure() {
|
|
|
+ if (Get.find<IApplication>().checkIs3rdAndEmptyStandardLine()) {
|
|
|
+ closeAll();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@override
|
|
|
void didUpdateWidget(covariant OperateTypeChangeButton oldWidget) {
|
|
|
super.didUpdateWidget(oldWidget);
|
|
@@ -131,37 +167,57 @@ class OperateTypeChangeButtonState extends State<OperateTypeChangeButton>
|
|
|
|
|
|
onTapMeasure() {
|
|
|
if (operateButtonState == OperateButtonState.isMeasure) {
|
|
|
- measureHandler.toolPanelState = false;
|
|
|
- measureHandler.canMeasureDrawing = false;
|
|
|
- setState(() {
|
|
|
- operateButtonState = OperateButtonState.allClose;
|
|
|
- });
|
|
|
+ closeAll();
|
|
|
} else {
|
|
|
- final rollbackFn = _generateStatesRollbackFn();
|
|
|
- _enterMeasure(rollbackFn);
|
|
|
+ enterMeasure();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
onTapAnnotation() {
|
|
|
if (operateButtonState == OperateButtonState.isAnnotation) {
|
|
|
- measureHandler.toolPanelState = false;
|
|
|
- measureHandler.canMeasureDrawing = false;
|
|
|
- setState(() {
|
|
|
- operateButtonState = OperateButtonState.allClose;
|
|
|
- });
|
|
|
+ closeAll();
|
|
|
} else {
|
|
|
- measureHandler.toolPanelState = true;
|
|
|
- measureHandler.canMeasureDrawing = true;
|
|
|
- changeTypeTo(MeasureOperateType.annotation);
|
|
|
- setState(() {
|
|
|
- operateButtonState = OperateButtonState.isAnnotation;
|
|
|
- });
|
|
|
+ enterAnnotation();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /// 进入注释
|
|
|
+ void enterAnnotation() {
|
|
|
+ measureHandler.toolPanelState = true;
|
|
|
+ measureHandler.canMeasureDrawing = true;
|
|
|
+ changeTypeTo(MeasureOperateType.annotation);
|
|
|
+ setState(() {
|
|
|
+ operateButtonState = OperateButtonState.isAnnotation;
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
/// 进入测量
|
|
|
- Future<void> _enterMeasure(VoidCallback rejectCallback) async {
|
|
|
- _setEnterMeasureState(false); // 预进入
|
|
|
+ void enterMeasure() {
|
|
|
+ if (Get.find<IApplication>().checkIs3rdAndEmptyStandardLine()) {
|
|
|
+ VoidCallback rollbackFn;
|
|
|
+ if (operateButtonState == OperateButtonState.isAnnotation) {
|
|
|
+ rollbackFn = onTapAnnotation;
|
|
|
+ } else {
|
|
|
+ rollbackFn = closeAll;
|
|
|
+ }
|
|
|
+ _tryEnterMeasure(rollbackFn);
|
|
|
+ } else {
|
|
|
+ _tryEnterMeasure(() {});
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ closeAll() {
|
|
|
+ measureHandler.toolPanelState = false;
|
|
|
+ measureHandler.canMeasureDrawing = false;
|
|
|
+ setState(() {
|
|
|
+ operateButtonState = OperateButtonState.allClose;
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ /// 进入测量
|
|
|
+ Future<void> _tryEnterMeasure(VoidCallback rejectCallback) async {
|
|
|
+ isWaitingDrawStandardLine = true;
|
|
|
+ _setEnterMeasureState(); // 预进入
|
|
|
|
|
|
final checked = await _checkMeasureCanEnter();
|
|
|
if (checked) {
|
|
@@ -169,19 +225,18 @@ class OperateTypeChangeButtonState extends State<OperateTypeChangeButton>
|
|
|
} else {
|
|
|
rejectCallback();
|
|
|
}
|
|
|
+ isWaitingDrawStandardLine = false;
|
|
|
}
|
|
|
|
|
|
/// 检查是否可进入测量
|
|
|
Future<bool> _checkMeasureCanEnter() {
|
|
|
final application = Get.find<IApplication>();
|
|
|
- if (application.isThirdPart) {
|
|
|
- final standardLine = (application as ThirdPartApplication).standardLine;
|
|
|
- if (standardLine.currentPixelSpacing.isEmpty) {
|
|
|
- // 第三方图像 像素比信息空,需要通过校准线校准
|
|
|
- return _waitStandardLineDone();
|
|
|
- }
|
|
|
+ if (application.checkIs3rdAndEmptyStandardLine()) {
|
|
|
+ // 第三方图像 像素比信息空,需要通过校准线校准
|
|
|
+ return _waitStandardLineDone();
|
|
|
+ } else {
|
|
|
+ return Future.value(true);
|
|
|
}
|
|
|
- return Future.value(true);
|
|
|
}
|
|
|
|
|
|
/// 等待校准线完成
|