|
@@ -4,8 +4,9 @@ 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/types.dart';
|
|
|
import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
|
|
|
-import 'package:fis_measure/process/calcuators/vertical_distance.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';
|
|
@@ -34,6 +35,12 @@ class StraightLine extends MeasureItem<StraightLineFeature> {
|
|
|
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) {
|
|
@@ -100,17 +107,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) {
|
|
|
- if (args.hostVisualArea!.mode.modeType == VidUsModeType.TissueTM) {
|
|
|
- feature = StraightLineTimeMotionFeature(this, point, point);
|
|
|
- mouseState.crossIndicatorStyleChanged
|
|
|
- .emit(this, CrossIndicatorStyle.horizontal);
|
|
|
- }
|
|
|
+ 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.TimeSpen:
|
|
|
+ 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 {
|
|
@@ -152,10 +177,10 @@ class StraightLineFeature extends MeasureItemFeature {
|
|
|
|
|
|
class StraightLineTimeMotionFeature extends StraightLineFeature {
|
|
|
StraightLineTimeMotionFeature(
|
|
|
- IMeasureItem refItem,
|
|
|
- DPoint startPoint,
|
|
|
- DPoint endPoint,
|
|
|
- ) : super(refItem, startPoint, endPoint);
|
|
|
+ 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;
|
|
@@ -163,9 +188,14 @@ class StraightLineTimeMotionFeature extends StraightLineFeature {
|
|
|
drawId(canvas, size, idText);
|
|
|
|
|
|
final startOffset = convert2ViewPoint(size, startPoint).toOffset();
|
|
|
- drawMark(canvas, startOffset);
|
|
|
-
|
|
|
final endOffset = convert2ViewPoint(size, endPoint).toOffset();
|
|
|
- drawMark(canvas, Offset(startOffset.dx, endOffset.dy), isActive);
|
|
|
+ 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);
|
|
|
+ }
|
|
|
}
|
|
|
}
|