converter.dart 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. import 'dart:developer';
  2. import 'package:fis_measure/interfaces/process/calculators/values.dart';
  3. import 'package:fis_measure/interfaces/process/items/item.dart';
  4. import 'package:fis_measure/interfaces/process/items/item_feature.dart';
  5. import 'package:fis_measure/interfaces/process/items/item_metas.dart';
  6. import 'package:fis_measure/process/unit/convert/convert.dart';
  7. import 'package:fis_measure/process/workspace/measure_data_controller.dart';
  8. import 'package:fis_measure/values/unit_desc.dart';
  9. import 'package:fis_measure/view/result/results_panel.dart';
  10. import 'package:get/get.dart';
  11. import 'package:vid/us/vid_us_unit.dart';
  12. class FeatureValueDescConverter {
  13. final IMeasureItemFeature feature;
  14. FeatureValueDescConverter(this.feature);
  15. String idPlaceStr = ' ';
  16. String idStr = ' ';
  17. List<ResultLine> generate(int idLength) {
  18. idPlaceStr = ' '.padRight(idLength, ' ');
  19. idStr = feature.id.toString().padRight(idLength, ' ');
  20. final List<ResultLine> arr = [];
  21. final mainLines = _findFeatureLines(feature);
  22. arr.addAll(mainLines);
  23. final ref = feature.refItem;
  24. if (ref is ITopMeasureItem) {
  25. for (var child in ref.childItems) {
  26. for (var feature in child.measuredFeatures) {
  27. final str = _findChildLine(feature);
  28. if (str != null && str.isNotEmpty) {
  29. arr.add(str);
  30. }
  31. }
  32. if (child.feature != null) {
  33. final str = _findChildLine(child.feature!);
  34. if (str != null && str.isNotEmpty) {
  35. arr.add(str);
  36. }
  37. }
  38. }
  39. }
  40. return arr;
  41. }
  42. ResultLine? _findChildLine(IMeasureItemFeature feature) {
  43. if (feature.value == null) return null;
  44. final value = feature.value!;
  45. final valueStr = _pickValueStr(value);
  46. final name = feature.refItem.description;
  47. return ResultLine(label: ' $idPlaceStr $name', value: valueStr);
  48. }
  49. List<ResultLine> _findFeatureLines(IMeasureItemFeature feature) {
  50. final count = feature.values.length;
  51. final itemName = _findMetaDisplayName(
  52. feature.refItem.meta, feature.featureStyle.showBriefAnnotation);
  53. if (count == 0) {
  54. return [ResultLine(label: '$idStr $itemName')];
  55. }
  56. List<ResultLine> arr = [];
  57. for (var i = 0; i < count; i++) {
  58. final val = feature.values[i];
  59. final meta = val.meta;
  60. final valueStr = _pickValueStr(val);
  61. if (i == 0) {
  62. arr.add(ResultLine(label: "$idStr $itemName", value: valueStr));
  63. } else {
  64. final name = _findOutputMetaDisplayName(
  65. meta, feature.featureStyle.showBriefAnnotation);
  66. arr.add(ResultLine(label: "$idPlaceStr $name", value: valueStr));
  67. }
  68. }
  69. return arr;
  70. }
  71. String _pickValueStr(ValueBase value) {
  72. if (value is FloatValue) {
  73. final floatVal = _roundDouble(value.value!, 6);
  74. if (floatVal.isNaN) {
  75. return '';
  76. }
  77. final unit = value.unit;
  78. final targetUnit = getUnitFromConfig(value.metaUnit);
  79. final targetVal = UnitValueConverter.convert(unit, targetUnit, floatVal);
  80. final targetValRound =
  81. _roundDoubleToString(targetVal, value.meta.fractionalDigits);
  82. final unitStr = UnitDescriptionMap.getDesc(targetUnit);
  83. return '$targetValRound $unitStr';
  84. } else if (value is StringValue) {
  85. return value.value!;
  86. }
  87. return '';
  88. }
  89. String _findMetaDisplayName(ItemMeta meta,
  90. [bool showBriefAnnotation = false]) {
  91. if (showBriefAnnotation) {
  92. if (meta.briefAnnotation.isNotEmpty) {
  93. return meta.briefAnnotation;
  94. }
  95. }
  96. return meta.description;
  97. }
  98. String _findOutputMetaDisplayName(ItemOutputMeta meta,
  99. [bool showBriefAnnotation = false]) {
  100. if (showBriefAnnotation) {
  101. if (meta.briefAnnotation != null && meta.briefAnnotation!.isNotEmpty) {
  102. return meta.briefAnnotation!;
  103. }
  104. }
  105. return meta.description;
  106. }
  107. double _roundDouble(double value, [int digits = 2]) {
  108. final digitsStr = value.toStringAsFixed(digits);
  109. final result = double.parse(digitsStr);
  110. return result;
  111. }
  112. String _roundDoubleToString(double value, [int digits = 2]) {
  113. final digitsStr = value.toStringAsFixed(digits);
  114. return digitsStr;
  115. }
  116. VidUsUnit getUnitFromConfig(VidUsUnit unit) {
  117. try {
  118. final measureData = Get.find<MeasureDataController>();
  119. if (distanceUnits.contains(unit)) {
  120. return VidUsUnitMap.getUnit(
  121. measureData.measureSystemSetting.distanceUnit.index);
  122. }
  123. if (areaUnits.contains(unit)) {
  124. return VidUsUnitMap.getUnit(
  125. measureData.measureSystemSetting.areaUnit.index);
  126. }
  127. if (velocityUnits.contains(unit)) {
  128. return VidUsUnitMap.getUnit(
  129. measureData.measureSystemSetting.velocityUnit.index);
  130. }
  131. if (timeUnits.contains(unit)) {
  132. return VidUsUnitMap.getUnit(
  133. measureData.measureSystemSetting.timeUnit.index);
  134. }
  135. return unit;
  136. } catch (e) {
  137. log('getUnitFromConfig error: $e');
  138. return unit;
  139. }
  140. }
  141. static final List<VidUsUnit> distanceUnits = [
  142. VidUsUnit.mm,
  143. VidUsUnit.cm,
  144. VidUsUnit.inch,
  145. VidUsUnit.ft,
  146. ];
  147. static final List<VidUsUnit> areaUnits = [
  148. VidUsUnit.mm2,
  149. VidUsUnit.cm2,
  150. VidUsUnit.m2,
  151. ];
  152. static final List<VidUsUnit> velocityUnits = [
  153. VidUsUnit.mms,
  154. VidUsUnit.cms,
  155. VidUsUnit.ms,
  156. ];
  157. static final List<VidUsUnit> timeUnits = [
  158. VidUsUnit.msec,
  159. VidUsUnit.s,
  160. ];
  161. }