|
@@ -39,7 +39,11 @@ class MeasureRecorder implements IMeasureRecorder {
|
|
|
/// 撤销一次操作
|
|
|
bool undoOnce() {
|
|
|
_finishLast();
|
|
|
- return _undoOnce();
|
|
|
+ _cleanMeasureList();
|
|
|
+
|
|
|
+ final result = _undoOnce();
|
|
|
+ _checkReactive();
|
|
|
+ return result;
|
|
|
}
|
|
|
|
|
|
/// 清除所有记录
|
|
@@ -47,11 +51,13 @@ class MeasureRecorder implements IMeasureRecorder {
|
|
|
if (_records.isEmpty) return;
|
|
|
|
|
|
_finishLast();
|
|
|
+ _cleanMeasureList();
|
|
|
|
|
|
final len = _records.length;
|
|
|
for (var i = 0; i < len; i++) {
|
|
|
_undoOnce();
|
|
|
}
|
|
|
+ _checkReactive();
|
|
|
_resetId();
|
|
|
}
|
|
|
|
|
@@ -76,11 +82,11 @@ class MeasureRecorder implements IMeasureRecorder {
|
|
|
}
|
|
|
|
|
|
bool _undoOnceMeasure(_MeasureModel record) {
|
|
|
- final matchs =
|
|
|
- _application.measureItems.where((e) => e.meta.name == record.name);
|
|
|
- if (matchs.isEmpty) return false;
|
|
|
+ final index = _application.measureItems
|
|
|
+ .lastIndexWhere((e) => e.meta.name == record.name);
|
|
|
+ if (index < 0) return false;
|
|
|
|
|
|
- final item = matchs.last;
|
|
|
+ final item = _application.measureItems[index];
|
|
|
if (item is ITopMeasureItem) {
|
|
|
_application.measureItems.remove(item);
|
|
|
} else {
|
|
@@ -90,15 +96,35 @@ class MeasureRecorder implements IMeasureRecorder {
|
|
|
item.measuredFeatures.removeLast();
|
|
|
}
|
|
|
if (item.measuredFeatures.isEmpty) {
|
|
|
- _application.measureItems.remove(item);
|
|
|
+ _application.measureItems.removeAt(index);
|
|
|
}
|
|
|
}
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ void _checkReactive() {
|
|
|
if (_application.measureItems.isEmpty) {
|
|
|
if (_application.activeMeasureItem != null) {
|
|
|
_application.switchItem(_application.activeMeasureItem!.meta);
|
|
|
}
|
|
|
}
|
|
|
- return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ void _cleanMeasureList() {
|
|
|
+ int len = _application.measureItems.length;
|
|
|
+ final needRemoveIdxArr = <int>[];
|
|
|
+ for (int i = 0; i < len; i++) {
|
|
|
+ final item = _application.measureItems[i];
|
|
|
+ if (item.feature == null && item.measuredFeatures.isEmpty) {
|
|
|
+ needRemoveIdxArr.add(i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (needRemoveIdxArr.isNotEmpty) {
|
|
|
+ final arr = needRemoveIdxArr.reversed;
|
|
|
+ for (var i in arr) {
|
|
|
+ _application.measureItems.removeAt(i);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
bool _undoOnceAnnotation(_AnnotationModel record) {
|