|
@@ -4,15 +4,23 @@ import 'package:fis_measure/interfaces/date_types/point.dart';
|
|
|
import 'package:fis_measure/interfaces/enums/items.dart';
|
|
|
import 'package:fis_measure/interfaces/process/items/item.dart';
|
|
|
import 'package:fis_measure/interfaces/process/items/item_metas.dart';
|
|
|
+import 'package:fis_measure/interfaces/process/items/terms.dart';
|
|
|
+import 'package:fis_measure/interfaces/process/items/types.dart';
|
|
|
import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
|
|
|
+import 'package:fis_measure/process/calcuators/time_motion.dart';
|
|
|
import 'package:fis_measure/process/items/item.dart';
|
|
|
import 'package:fis_measure/utils/canvas.dart';
|
|
|
+import 'package:fis_measure/view/gesture/cross_position_indicator.dart';
|
|
|
+import 'package:fis_measure/view/gesture/positioned_cursor.dart';
|
|
|
+import 'package:get/get.dart';
|
|
|
+import 'package:vid/us/vid_us_mode.dart';
|
|
|
|
|
|
import '../calcuators/distance.dart';
|
|
|
import '../items/item_feature.dart';
|
|
|
|
|
|
/// 直线
|
|
|
class StraightLine extends MeasureItem<StraightLineFeature> {
|
|
|
+ late final mouseState = Get.find<IMouseState>();
|
|
|
StraightLine(ItemMeta meta, IMeasureItem? parent) : super(meta, parent);
|
|
|
|
|
|
static StraightLine createDistance(ItemMeta meta, [IMeasureItem? parent]) {
|
|
@@ -21,6 +29,19 @@ class StraightLine extends MeasureItem<StraightLineFeature> {
|
|
|
return sraightLine;
|
|
|
}
|
|
|
|
|
|
+ static StraightLine createVerticalDistance(ItemMeta meta,
|
|
|
+ [IMeasureItem? parent]) {
|
|
|
+ StraightLine sraightLine = StraightLine(meta, parent);
|
|
|
+ sraightLine.calculator = VerticalDistanceCal(sraightLine);
|
|
|
+ return sraightLine;
|
|
|
+ }
|
|
|
+
|
|
|
+ static StraightLine createTimeSpan(ItemMeta meta, [IMeasureItem? parent]) {
|
|
|
+ StraightLine sraightLine = StraightLine(meta, parent);
|
|
|
+ sraightLine.calculator = TimeSpanCal(sraightLine);
|
|
|
+ return sraightLine;
|
|
|
+ }
|
|
|
+
|
|
|
@override
|
|
|
bool onExecuteMouse(PointInfo args) {
|
|
|
if (state == ItemStates.finished) {
|
|
@@ -40,6 +61,10 @@ class StraightLine extends MeasureItem<StraightLineFeature> {
|
|
|
doCalculate();
|
|
|
if (args.pointType == PointInfoType.mouseDown) {
|
|
|
doFeatureFinish();
|
|
|
+
|
|
|
+ ///重置十字样式
|
|
|
+ mouseState.crossIndicatorStyleChanged
|
|
|
+ .emit(this, CrossIndicatorStyle.nomal);
|
|
|
}
|
|
|
}
|
|
|
return true;
|
|
@@ -83,12 +108,35 @@ class StraightLine extends MeasureItem<StraightLineFeature> {
|
|
|
// TODO: 判断是否当前area
|
|
|
// 转换为Area逻辑位置
|
|
|
final point = args.toAreaLogicPoint();
|
|
|
- feature = StraightLineFeature(this, point, point);
|
|
|
+ // feature = StraightLineFeature(this, point, point);
|
|
|
if (args.hostVisualArea != null) {
|
|
|
+ handleTissueTM(args.hostVisualArea!.mode.modeType, point);
|
|
|
feature!.hostVisualArea = args.hostVisualArea;
|
|
|
}
|
|
|
state = ItemStates.running;
|
|
|
}
|
|
|
+
|
|
|
+ /// 处理TissueTimeMotion模式
|
|
|
+ void handleTissueTM(VidUsModeType mode, DPoint point) {
|
|
|
+ if (mode == VidUsModeType.TissueTM) {
|
|
|
+ switch (meta.measureType) {
|
|
|
+ case MeasureTypes.TimeSpan:
|
|
|
+ feature = StraightLineTimeMotionFeature(this, point, point,
|
|
|
+ ifHorizontal: false);
|
|
|
+ mouseState.crossIndicatorStyleChanged
|
|
|
+ .emit(this, CrossIndicatorStyle.vertical);
|
|
|
+ break;
|
|
|
+ case MeasureTypes.VerticalDistance:
|
|
|
+ feature = StraightLineTimeMotionFeature(this, point, point);
|
|
|
+ mouseState.crossIndicatorStyleChanged
|
|
|
+ .emit(this, CrossIndicatorStyle.horizontal);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ feature = StraightLineFeature(this, point, point);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
class StraightLineFeature extends MeasureItemFeature {
|
|
@@ -127,3 +175,28 @@ class StraightLineFeature extends MeasureItemFeature {
|
|
|
drawVertex(canvas, endOffset, isActive);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+class StraightLineTimeMotionFeature extends StraightLineFeature {
|
|
|
+ StraightLineTimeMotionFeature(
|
|
|
+ IMeasureItem refItem, DPoint startPoint, DPoint endPoint,
|
|
|
+ {this.ifHorizontal = true})
|
|
|
+ : super(refItem, startPoint, endPoint);
|
|
|
+ final bool ifHorizontal;
|
|
|
+ @override
|
|
|
+ void paint(Canvas canvas, Size size) {
|
|
|
+ if (startPoint == endPoint) return;
|
|
|
+ var idText = '$id';
|
|
|
+ drawId(canvas, size, idText);
|
|
|
+
|
|
|
+ final startOffset = convert2ViewPoint(size, startPoint).toOffset();
|
|
|
+ final endOffset = convert2ViewPoint(size, endPoint).toOffset();
|
|
|
+ if (ifHorizontal) {
|
|
|
+ drawMark(canvas, startOffset);
|
|
|
+ drawMark(canvas, Offset(startOffset.dx, endOffset.dy), isActive);
|
|
|
+ } else {
|
|
|
+ drawMark(canvas, startOffset, false, ifHorizontal);
|
|
|
+ drawMark(
|
|
|
+ canvas, Offset(endOffset.dx, startOffset.dy), isActive, ifHorizontal);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|