urm_trace.dart 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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/calcuators/urm.dart';
  6. import 'package:fis_measure/process/primitives/trace.dart';
  7. import 'package:fis_measure/utils/prompt_box.dart';
  8. class URMTrace extends Trace {
  9. URMTrace(ItemMeta meta, IMeasureItem? parent) : super(meta, parent);
  10. static URMTrace createURMTrace(ItemMeta meta, [IMeasureItem? parent]) {
  11. URMTrace trace = URMTrace(meta, parent);
  12. trace.calculator = URMTraceCal(trace, type: meta.name);
  13. trace.isClosed = false;
  14. return trace;
  15. }
  16. @override
  17. bool onExecuteMouse(PointInfo args) {
  18. if (waitingResult) return false;
  19. if (state == ItemStates.finished) {
  20. if (args.pointType == PointInfoType.mouseDown) {
  21. state = ItemStates.waiting;
  22. }
  23. }
  24. if (state == ItemStates.waiting) {
  25. if (args.pointType == PointInfoType.mouseDown) {
  26. handleMouseDownWhileWaiting(args);
  27. }
  28. } else if (state == ItemStates.running) {
  29. if (args.pointType == PointInfoType.mouseUp) return false;
  30. feature?.adopt(args);
  31. if (args.pointType == PointInfoType.mouseDown) {
  32. handleFinish();
  33. } else {
  34. checkAutoSnap(args);
  35. }
  36. }
  37. return true;
  38. }
  39. bool waitingResult = false;
  40. void handleFinish() async {
  41. feature!.isActive = false;
  42. PromptBox.loading("分析中...");
  43. waitingResult = true;
  44. await doCalculateAsync();
  45. doFeatureFinish();
  46. PromptBox.dismiss();
  47. waitingResult = false;
  48. }
  49. }