urm_sharp_copy.dart 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import 'package:fis_common/event/event_type.dart';
  2. import 'package:fis_measure/interfaces/date_types/point.dart';
  3. enum UrmSharpCopyDataType {
  4. rect,
  5. trace,
  6. ellipse,
  7. rim,
  8. }
  9. class UrmSharpCopyActiveState {
  10. final UrmSharpCopyDataType type;
  11. final int index;
  12. UrmSharpCopyActiveState(this.type, this.index);
  13. }
  14. class UrmSharpCopyBoard {
  15. UrmSharpCopyBoard._();
  16. static final _ins = UrmSharpCopyBoard._();
  17. static UrmSharpCopyActiveState? activeState;
  18. static final typeCacheChanged = FEventHandler<UrmSharpCopyDataType>();
  19. static final activeStateChanged = FEventHandler<UrmSharpCopyActiveState?>();
  20. static final _cacheMap = <UrmSharpCopyDataType, List<UrmSharpCopyData>>{};
  21. static List<UrmSharpCopyData> getCachedList(UrmSharpCopyDataType type) {
  22. final list = _findCacheListByType(type);
  23. return list;
  24. }
  25. static void recordSharp(UrmSharpCopyDataType type, List<DPoint> points) {
  26. final arr = points.map((e) => e.clone()).toList();
  27. UrmSharpCopyData data = UrmSharpCopyData.create(type, arr);
  28. final list = _findCacheListByType(type);
  29. if (list.length == 2) {
  30. final left = list.last;
  31. list.clear();
  32. list.add(left);
  33. }
  34. list.add(data);
  35. typeCacheChanged.emit(_ins, type);
  36. }
  37. static List<UrmSharpCopyData> _findCacheListByType(
  38. UrmSharpCopyDataType type) {
  39. if (!_cacheMap.containsKey(type)) {
  40. _cacheMap[type] = [];
  41. }
  42. return _cacheMap[type]!;
  43. }
  44. static switchActiveState(UrmSharpCopyActiveState? state) {
  45. activeState = state;
  46. activeStateChanged.emit(_ins, state);
  47. }
  48. }
  49. class RectUrmSharpCopyData extends UrmSharpCopyData {
  50. RectUrmSharpCopyData(super.type, super.points);
  51. }
  52. class TraceUrmSharpCopyData extends UrmSharpCopyData {
  53. TraceUrmSharpCopyData(super.type, super.points);
  54. }
  55. class EllipseUrmSharpCopyData extends UrmSharpCopyData {
  56. EllipseUrmSharpCopyData(super.type, super.points);
  57. }
  58. class RimUrmSharpCopyData extends UrmSharpCopyData {
  59. RimUrmSharpCopyData(super.type, super.points);
  60. }
  61. class UrmSharpCopyData {
  62. final UrmSharpCopyDataType type;
  63. final List<DPoint> points;
  64. UrmSharpCopyData(this.type, this.points);
  65. static UrmSharpCopyData create(
  66. UrmSharpCopyDataType type, List<DPoint> points) {
  67. switch (type) {
  68. case UrmSharpCopyDataType.rect:
  69. return RectUrmSharpCopyData(type, points);
  70. case UrmSharpCopyDataType.trace:
  71. return TraceUrmSharpCopyData(type, points);
  72. case UrmSharpCopyDataType.ellipse:
  73. return EllipseUrmSharpCopyData(type, points);
  74. case UrmSharpCopyDataType.rim:
  75. return RimUrmSharpCopyData(type, points);
  76. }
  77. }
  78. }