lwh_straightline.dart 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import 'dart:ui';
  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/items/types.dart';
  5. import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
  6. import 'package:fis_measure/process/calcuators/volume.dart';
  7. import 'package:fis_measure/process/items/item_feature.dart';
  8. import 'package:fis_measure/process/items/top_item.dart';
  9. import 'package:fis_measure/process/items/top_item_feature.dart';
  10. import 'package:fis_measure/process/primitives/straightline.dart';
  11. class LWHStraightLine extends TopMeasureItem<LWHStraightlineFeature> {
  12. static const String _lineLKey = "L";
  13. static const String _lineWKey = "W";
  14. static const String _lineHKey = "H";
  15. late final StraightLine l;
  16. late final StraightLine w;
  17. late final StraightLine h;
  18. LWHStraightLine(ItemMeta meta) : super(meta) {
  19. final metaL = meta.getChildByName(_lineLKey)!;
  20. final metaH = meta.getChildByName(_lineHKey)!;
  21. final metaW = meta.getChildByName(_lineWKey)!;
  22. l = StraightLine.createDistance(metaL, this);
  23. w = StraightLine.createDistance(metaW, this);
  24. h = StraightLine.createDistance(metaH, this);
  25. childItems.add(l);
  26. childItems.add(w);
  27. childItems.add(h);
  28. }
  29. @override
  30. bool onExecuteMouse(PointInfo args) {
  31. if (args.pointType == PointInfoType.mouseDown) {
  32. if (feature == null) {
  33. feature = LWHStraightlineFeature(this);
  34. listenChildrenUpdate();
  35. }
  36. if (childrenAllDone) {
  37. workingChild.clear();
  38. }
  39. }
  40. feature?.hostVisualArea = args.hostVisualArea;
  41. final result = workingChild.execute(args);
  42. doCalculate();
  43. return result;
  44. }
  45. @override
  46. bool onExecuteTouch(PointInfo args) {
  47. return workingChild.execute(args);
  48. }
  49. @override
  50. void onCancelingOnce() {}
  51. static LWHStraightLine createVolume(ItemMeta meta, [IMeasureItem? parent]) {
  52. if (meta.measureType != MeasureTypes.VolumeThreeDistance) {
  53. throw ArgumentError();
  54. }
  55. var lwh = LWHStraightLine(meta);
  56. lwh.calculator = VolumeThreeDistanceCal(lwh);
  57. return lwh;
  58. }
  59. }
  60. class LWHStraightlineFeature extends TopMeasureItemFeature {
  61. LWHStraightlineFeature(
  62. ITopMeasureItem refItem,
  63. ) : super(refItem);
  64. @override
  65. void paint(Canvas canvas, Size size) {
  66. for (var item in refItem.childItems) {
  67. for (var feature in item.measuredFeatures) {
  68. feature.paint(canvas, size);
  69. }
  70. item.feature?.paint(canvas, size);
  71. }
  72. }
  73. }