item.dart 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import 'package:fis_common/event/event_type.dart';
  2. import 'package:fis_measure/interfaces/enums/items.dart';
  3. import '../calculators/calculator.dart';
  4. import '../workspace/point_info.dart';
  5. import 'item_feature.dart';
  6. import 'item_metas.dart';
  7. abstract class IMeasureItem {
  8. /// 标签信息
  9. ItemMeta get meta;
  10. /// 外显名称
  11. String get displayName;
  12. /// 描述
  13. String get description;
  14. /// 简短描述
  15. String get briefAnnotation;
  16. /// 测量快照
  17. IMeasureItemFeature? get feature;
  18. /// 已完成测量记录
  19. List<IMeasureItemFeature> get measuredFeatures;
  20. /// 计算器
  21. ICalculator? get calculator;
  22. /// 父级
  23. IMeasureItem? get parent;
  24. /// 测量状态
  25. ItemStates get state;
  26. /// 显示像素/图片像素 缩放比例
  27. double get scaleRatio;
  28. /// 失活(切换到其他)后取消当前操作还是完成一次测量
  29. bool get finishAfterUnactive;
  30. /// 完成一次测量后是否还能编辑(是否切换到下一次测量)
  31. bool get repeatableEditable;
  32. /// 处理输入
  33. bool execute(PointInfo args);
  34. /// 清空
  35. void clear();
  36. /// 完成一次测量
  37. void finishOnce();
  38. /// 取消一次测量
  39. void cancelOnce();
  40. /// 分配新序号
  41. int assignId();
  42. /// 触发一次刷新
  43. void update();
  44. /// 快照变化事件
  45. late final FEventHandler<IMeasureItemFeature?> featureUpdated;
  46. /// 快照变化事件
  47. late final FEventHandler<ItemStates?> onItemStatesChanged;
  48. }
  49. /// 组合(包含子项)测量项
  50. abstract class ITopMeasureItem implements IMeasureItem {
  51. /// 子项集合
  52. List<IMeasureItem> get childItems;
  53. /// 工作中子项
  54. IMeasureItem get workingChild;
  55. /// 工作中子项索引
  56. int get workingChildIndex;
  57. /// 是否跨帧测量模式
  58. bool get isCrossFrameMode;
  59. /// 是否允许子项自行输出
  60. bool get canChildOutputSelf;
  61. /// 是否跨区域测量模式
  62. bool get isCrossAreaMode;
  63. /// 工作子项变更事件
  64. late final FEventHandler<int> workingChildChanged;
  65. /// 切换制定子项为工作状态
  66. void switchChild(int index);
  67. /// 根据名称获取子项
  68. IMeasureItem findChildByName(String name);
  69. }