|
@@ -4,12 +4,11 @@ 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/visuals/visual_area.dart';
|
|
|
import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
|
|
|
+import 'package:fis_measure/process/calcuators/trace.dart';
|
|
|
import 'package:fis_measure/process/items/item.dart';
|
|
|
import 'package:fis_measure/process/items/item_feature.dart';
|
|
|
import 'package:fis_measure/utils/canvas.dart';
|
|
|
-import 'package:path_drawing/path_drawing.dart';
|
|
|
|
|
|
/// 手势轨迹图形
|
|
|
class MultiTrace extends TraceItemAbstract {
|
|
@@ -85,7 +84,6 @@ class MultiTrace extends TraceItemAbstract {
|
|
|
if (args.pointType == PointInfoType.touchMove) {
|
|
|
feature?.adopt(args);
|
|
|
doCalculate();
|
|
|
- // checkAutoSnap(args);
|
|
|
}
|
|
|
}
|
|
|
return true;
|
|
@@ -96,8 +94,7 @@ class MultiTrace extends TraceItemAbstract {
|
|
|
IMeasureItem? parent,
|
|
|
]) {
|
|
|
MultiTrace trace = MultiTrace(meta, parent);
|
|
|
- // trace.calculator = CurveLengthCal(trace);
|
|
|
- trace.isFinished = false;
|
|
|
+ trace.calculator = TraceCal(trace);
|
|
|
return trace;
|
|
|
}
|
|
|
}
|
|
@@ -164,36 +161,65 @@ abstract class TraceItemFeatureAbstract extends MeasureItemFeature {
|
|
|
DPoint get startPoint => innerPoints.first;
|
|
|
DPoint get endPoint => innerPoints.last;
|
|
|
|
|
|
+ bool ifRightSide = true;
|
|
|
+
|
|
|
/// 接收新坐标
|
|
|
void adopt(DPoint point) {
|
|
|
if (innerPoints.isEmpty) {
|
|
|
innerPoints.add(point);
|
|
|
}
|
|
|
- if (point.x < innerPoints.last.x) {
|
|
|
- clearRight(point.x);
|
|
|
+ if (point.x > startPoint.x) {
|
|
|
+ handleChangeSide(point);
|
|
|
+ if (point.x < innerPoints.last.x) {
|
|
|
+ clearRight(point.x);
|
|
|
+ } else {
|
|
|
+ innerPoints.add(point);
|
|
|
+ }
|
|
|
} else {
|
|
|
- innerPoints.add(point);
|
|
|
+ handleChangeSide(point);
|
|
|
+ if (point.x > innerPoints.last.x) {
|
|
|
+ clearLeft(point.x);
|
|
|
+ } else {
|
|
|
+ innerPoints.add(point);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void clearRight(double X) {
|
|
|
if (innerPoints.isEmpty) return;
|
|
|
for (var i = innerPoints.length - 1; i >= 0; i--) {
|
|
|
- if (innerPoints[i].x > X) {
|
|
|
+ if (innerPoints[i].x >= X) {
|
|
|
innerPoints.removeAt(i);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-}
|
|
|
|
|
|
-abstract class TraceItemAbstract extends MeasureItem<TraceItemFeatureAbstract> {
|
|
|
- bool _isFinished = false;
|
|
|
- TraceItemAbstract(ItemMeta meta, IMeasureItem? parent) : super(meta, parent);
|
|
|
+ void clearLeft(double X) {
|
|
|
+ if (innerPoints.isEmpty) return;
|
|
|
+ for (var i = innerPoints.length - 1; i >= 0; i--) {
|
|
|
+ if (innerPoints[i].x <= X) {
|
|
|
+ innerPoints.removeAt(i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- bool get isFinished => _isFinished;
|
|
|
- set isFinished(bool val) {
|
|
|
- if (val != _isFinished) {
|
|
|
- _isFinished = val;
|
|
|
+ void handleChangeSide(point) {
|
|
|
+ if (ifRightSide) {
|
|
|
+ if (point.x < startPoint.x) {
|
|
|
+ ifRightSide = false;
|
|
|
+ innerPoints.clear();
|
|
|
+ innerPoints.add(point);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (point.x > startPoint.x) {
|
|
|
+ ifRightSide = true;
|
|
|
+ innerPoints.clear();
|
|
|
+ innerPoints.add(point);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+abstract class TraceItemAbstract extends MeasureItem<TraceItemFeatureAbstract> {
|
|
|
+ TraceItemAbstract(ItemMeta meta, IMeasureItem? parent) : super(meta, parent);
|
|
|
+}
|