converter.dart 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. import 'package:fis_measure/interfaces/process/calculators/values.dart';
  2. import 'package:fis_measure/interfaces/process/items/item.dart';
  3. import 'package:fis_measure/interfaces/process/items/item_feature.dart';
  4. import 'package:fis_measure/interfaces/process/items/item_metas.dart';
  5. import 'package:fis_measure/process/unit/convert/convert.dart';
  6. import 'package:fis_measure/values/unit_desc.dart';
  7. import 'package:fis_measure/view/result/results_panel.dart';
  8. class FeatureValueDescConverter {
  9. final IMeasureItemFeature feature;
  10. FeatureValueDescConverter(this.feature);
  11. String idPlaceStr = ' ';
  12. String idStr = ' ';
  13. List<ResultLine> generate(int idLength) {
  14. idPlaceStr = ' '.padRight(idLength, ' ');
  15. idStr = feature.id.toString().padRight(idLength, ' ');
  16. final List<ResultLine> arr = [];
  17. final mainLines = _findFeatureLines(feature);
  18. arr.addAll(mainLines);
  19. final ref = feature.refItem;
  20. if (ref is ITopMeasureItem) {
  21. for (var child in ref.childItems) {
  22. for (var feature in child.measuredFeatures) {
  23. final str = _findChildLine(feature);
  24. if (str != null && str.isNotEmpty) {
  25. arr.add(str);
  26. }
  27. }
  28. if (child.feature != null) {
  29. final str = _findChildLine(child.feature!);
  30. if (str != null && str.isNotEmpty) {
  31. arr.add(str);
  32. }
  33. }
  34. }
  35. }
  36. return arr;
  37. }
  38. ResultLine? _findChildLine(IMeasureItemFeature feature) {
  39. if (feature.value == null) return null;
  40. final value = feature.value!;
  41. final valueStr = _pickValueStr(value);
  42. final name = feature.refItem.description;
  43. return ResultLine(label: ' $idPlaceStr $name', value: valueStr);
  44. }
  45. List<ResultLine> _findFeatureLines(IMeasureItemFeature feature) {
  46. final count = feature.values.length;
  47. final itemName = _findMetaDisplayName(
  48. feature.refItem.meta, feature.featureStyle.showBriefAnnotation);
  49. if (count == 0) {
  50. return [ResultLine(label: '$idStr $itemName')];
  51. }
  52. List<ResultLine> arr = [];
  53. for (var i = 0; i < count; i++) {
  54. final val = feature.values[i];
  55. final meta = val.meta;
  56. final valueStr = _pickValueStr(val);
  57. if (i == 0) {
  58. arr.add(ResultLine(label: "$idStr $itemName", value: valueStr));
  59. } else {
  60. final name = _findOutputMetaDisplayName(
  61. meta, feature.featureStyle.showBriefAnnotation);
  62. arr.add(ResultLine(label: "$idPlaceStr $name", value: valueStr));
  63. }
  64. }
  65. return arr;
  66. }
  67. String _pickValueStr(ValueBase value) {
  68. if (value is FloatValue) {
  69. final floatVal = _roundDouble(value.value!, 6);
  70. if (floatVal.isNaN) {
  71. return '';
  72. }
  73. final unit = value.unit;
  74. final targetUnit = value.targetUnit;
  75. final targetVal = UnitValueConverter.convert(unit, targetUnit, floatVal);
  76. final targetValRound =
  77. _roundDouble(targetVal, value.meta.fractionalDigits);
  78. final unitStr = UnitDescriptionMap.getDesc(targetUnit);
  79. return '$targetValRound $unitStr';
  80. } else if (value is StringValue) {
  81. return value.value!;
  82. }
  83. return '';
  84. }
  85. String _findMetaDisplayName(ItemMeta meta,
  86. [bool showBriefAnnotation = false]) {
  87. if (showBriefAnnotation) {
  88. if (meta.briefAnnotation.isNotEmpty) {
  89. return meta.briefAnnotation;
  90. }
  91. }
  92. return meta.description;
  93. }
  94. String _findOutputMetaDisplayName(ItemOutputMeta meta,
  95. [bool showBriefAnnotation = false]) {
  96. if (showBriefAnnotation) {
  97. if (meta.briefAnnotation != null && meta.briefAnnotation!.isNotEmpty) {
  98. return meta.briefAnnotation!;
  99. }
  100. }
  101. return meta.description;
  102. }
  103. double _roundDouble(double value, [int digits = 2]) {
  104. final digitsStr = value.toStringAsFixed(digits);
  105. final result = double.parse(digitsStr);
  106. return result;
  107. }
  108. }