factory.dart 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import 'package:fis_measure/interfaces/process/items/item.dart';
  2. import 'package:fis_measure/interfaces/process/items/item_metas.dart';
  3. import 'package:fis_measure/interfaces/process/items/types.dart';
  4. import 'package:fis_measure/process/items/item.dart';
  5. import 'package:fis_measure/process/primitives/combos/lwh_straightline.dart';
  6. import 'package:fis_measure/process/primitives/combos/two_area.dart';
  7. import 'package:fis_measure/process/primitives/combos/two_straightline.dart';
  8. import 'package:fis_measure/process/primitives/ellipse.dart';
  9. import 'package:fis_measure/process/primitives/location.dart';
  10. import 'package:fis_measure/process/primitives/polyline.dart';
  11. import 'package:fis_measure/process/primitives/polyline_angle.dart';
  12. import 'package:fis_measure/process/primitives/spline.dart';
  13. import 'package:fis_measure/process/primitives/straightline.dart';
  14. import 'package:fis_measure/process/primitives/trace.dart';
  15. /// 测量项创建器
  16. ///
  17. /// [meta] 测量项元信息
  18. ///
  19. /// [parent] 父项
  20. typedef MeasureItemCreator = MeasureItem Function(
  21. ItemMeta meta,
  22. IMeasureItem? parent,
  23. );
  24. /// 测量项工厂
  25. class MeasureItemFactory {
  26. MeasureItemFactory._();
  27. static MeasureItemFactory? _singletonInstance;
  28. static MeasureItemFactory get _singleton {
  29. if (_singletonInstance == null) {
  30. _singletonInstance = MeasureItemFactory._();
  31. _registerItemCreators();
  32. }
  33. return _singletonInstance!;
  34. }
  35. final _itemCreatorMap = <String, MeasureItemCreator>{};
  36. void _register(String typeName, MeasureItemCreator creator) {
  37. final key = typeName;
  38. _itemCreatorMap[key] = creator;
  39. }
  40. MeasureItemCreator? _findCreator(String typeName) {
  41. final key = typeName;
  42. if (_itemCreatorMap.containsKey(key)) {
  43. return _itemCreatorMap[key];
  44. }
  45. return null;
  46. }
  47. /// 创建测量项
  48. ///
  49. /// [meta] 元信息
  50. ///
  51. /// [parent] 父项
  52. static MeasureItem? createItem(ItemMeta meta, [IMeasureItem? parent]) {
  53. if (meta.measureType.isEmpty) return null;
  54. final creator = _singleton._findCreator(meta.measureType);
  55. if (creator == null) return null;
  56. final item = creator.call(meta, parent);
  57. return item;
  58. }
  59. static void _registerItemCreators() {
  60. _singleton._register(MeasureTypes.Distance, StraightLine.createDistance);
  61. _singleton._register(MeasureTypes.Depth, Location.createTissueDepth);
  62. // Three StraightLine
  63. _singleton._register(
  64. MeasureTypes.VolumeThreeDistance, LWHStraightLine.createVolume);
  65. _singleton._register(MeasureTypes.VolumeEllipse, Ellipse.createVolume);
  66. // Two Area
  67. _singleton._register(MeasureTypes.StenosisTwoArea, TwoArea.crateStenosis);
  68. _singleton._register(MeasureTypes.AbRatioTwoArea, TwoArea.crateABRatio);
  69. // Two StraightLine
  70. _singleton._register(MeasureTypes.ResidualUrine, TwoStraightLine.createRUV);
  71. // Angle
  72. _singleton._register(
  73. MeasureTypes.PolyLineAngle, PolylineAngle.createPolyAngle);
  74. // Area Perimeter
  75. _singleton._register(
  76. MeasureTypes.AreaPerimeterEllipse, Ellipse.createAreaPerimeter);
  77. _singleton._register(
  78. MeasureTypes.AreaPerimeterPolyline, Polyline.createAreaPerimeter);
  79. _singleton._register(
  80. MeasureTypes.AreaPerimeterSpline, Spline.createAreaPerimeter);
  81. _singleton._register(
  82. MeasureTypes.AreaPerimeterTrace, Trace.createAreaPerimeter);
  83. }
  84. }