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/workspace/point_info.dart'; import 'package:fis_measure/process/primitives/location.dart'; import 'package:fis_measure/utils/prompt_box.dart'; class URMLoaction extends Location { URMLoaction(ItemMeta meta, IMeasureItem? parent) : super(meta, parent); static URMLoaction createURMLocation( ItemMeta meta, [ IMeasureItem? parent, ]) { URMLoaction location = URMLoaction(meta, parent); // location.calculator = URMLocationCal(location); return location; } @override bool onExecuteMouse(PointInfo args) { if (waitingResult) return false; if (state == ItemStates.finished || state == ItemStates.waiting) { if (args.pointType == PointInfoType.mouseMove) { handleMouseMoveWhileFinish(args); } } if (state == ItemStates.running) { if (args.pointType == PointInfoType.mouseUp) return false; feature?.point = args; if (args.pointType == PointInfoType.mouseDown) { handleFinish(); } } return true; } bool waitingResult = false; void handleFinish() async { feature!.isActive = false; waitingResult = true; await doCalculateAsync(); doFeatureFinish(); doFeatureUpdate(); // 若不执行,子测量将无法自动切换 PromptBox.dismiss(); waitingResult = false; } @override bool onExecuteTouch(PointInfo args) { if (state == ItemStates.finished || state == ItemStates.waiting) { if (args.pointType == PointInfoType.touchDown) { handleMouseMoveWhileFinish(args); } } if (state == ItemStates.running) { if (args.pointType == PointInfoType.touchDown) { feature?.point = args; doCalculate(); doFeatureFinish(); } } return true; } }