urm_trace.dart 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import 'package:fis_measure/interfaces/enums/items.dart';
  2. import 'package:fis_measure/interfaces/process/items/item.dart';
  3. import 'package:fis_measure/interfaces/process/items/item_metas.dart';
  4. import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
  5. import 'package:fis_measure/process/primitives/trace.dart';
  6. import 'package:fis_measure/utils/prompt_box.dart';
  7. class URMTrace extends Trace {
  8. URMTrace(ItemMeta meta, IMeasureItem? parent) : super(meta, parent);
  9. static URMTrace createURMTrace(ItemMeta meta, [IMeasureItem? parent]) {
  10. URMTrace trace = URMTrace(meta, parent);
  11. // trace.calculator = URMTraceCal(trace, type: meta.name);
  12. trace.isClosed = false;
  13. return trace;
  14. }
  15. @override
  16. bool onExecuteMouse(PointInfo args) {
  17. if (waitingResult) return false;
  18. if (state == ItemStates.finished) {
  19. if (args.pointType == PointInfoType.mouseDown) {
  20. state = ItemStates.waiting;
  21. }
  22. }
  23. if (state == ItemStates.waiting) {
  24. if (args.pointType == PointInfoType.mouseDown) {
  25. handleMouseDownWhileWaiting(args);
  26. }
  27. } else if (state == ItemStates.running) {
  28. if (args.pointType == PointInfoType.mouseUp) return false;
  29. feature?.adopt(args);
  30. if (args.pointType == PointInfoType.mouseDown) {
  31. handleFinish();
  32. } else {
  33. checkAutoSnap(args);
  34. }
  35. }
  36. return true;
  37. }
  38. bool waitingResult = false;
  39. void handleFinish() async {
  40. feature!.isActive = false;
  41. waitingResult = true;
  42. await doCalculateAsync();
  43. doFeatureFinish();
  44. doFeatureUpdate(); // 若不执行,子测量将无法自动切换
  45. PromptBox.dismiss();
  46. waitingResult = false;
  47. }
  48. }