Sfoglia il codice sorgente

完善进制转换及其配置菜单

gavin.chen 1 anno fa
parent
commit
503f62a88b

+ 2 - 2
lib/process/calcuators/curve.dart

@@ -59,10 +59,10 @@ class AreaPerimeterCal extends Calculator<AreaItemAbstract, double> {
     for (var output in ref.meta.outputs) {
       if (output.name == MeasureTerms.Perimeter) {
         var value = roundDouble(perimeter, output.fractionalDigits);
-        feature.updateFloatValue(output, value, viewport.xUnit);
+        feature.updateFloatValue(output, value, output.unit);
       } else if (output.name == MeasureTerms.Area) {
         var value = roundDouble(area, output.fractionalDigits);
-        feature.updateFloatValue(output, value, viewport.xUnit);
+        feature.updateFloatValue(output, value, output.unit);
       }
     }
     // double value = clacArea(points);

+ 13 - 0
lib/process/unit/convert/area.dart

@@ -0,0 +1,13 @@
+import 'package:vid/us/vid_us_unit.dart';
+
+import 'abstract.dart';
+
+class AreaMap extends UnitMapBase {
+  AreaMap() : super(VidUsUnit.cm2);
+
+  @override
+  void initMap() {
+    add(VidUsUnit.mm2, 0.01);
+    add(VidUsUnit.m2, 10000);
+  }
+}

+ 4 - 0
lib/process/unit/convert/convert.dart

@@ -1,4 +1,6 @@
 import 'package:fis_measure/process/unit/convert/length.dart';
+import 'package:fis_measure/process/unit/convert/speed.dart';
+import 'package:fis_measure/process/unit/convert/area.dart';
 import 'package:fis_measure/process/unit/convert/time.dart';
 import 'package:vid/us/vid_us_unit.dart';
 
@@ -40,6 +42,8 @@ class UnitValueConverter {
   void _init() {
     _add(LengthMap());
     _add(TimeMap());
+    _add(SpeedMap());
+    _add(AreaMap());
   }
 
   void _add(UnitMapBase item) {

+ 13 - 0
lib/process/unit/convert/speed.dart

@@ -0,0 +1,13 @@
+import 'package:vid/us/vid_us_unit.dart';
+
+import 'abstract.dart';
+
+class SpeedMap extends UnitMapBase {
+  SpeedMap() : super(VidUsUnit.cms);
+
+  @override
+  void initMap() {
+    add(VidUsUnit.mms, 0.1);
+    add(VidUsUnit.ms, 100);
+  }
+}

+ 31 - 33
lib/view/measure/measure_config/widgets/measure_configuration_style.dart

@@ -6,13 +6,11 @@ import 'package:fis_jsonrpc/rpc.dart';
 import 'package:fis_measure/process/workspace/measure_data_controller.dart';
 import 'package:fis_measure/view/cursor.dart';
 import 'package:fis_measure/view/gesture/positioned_cursor.dart';
-import 'package:fis_theme/theme.dart';
 import 'package:fis_ui/index.dart';
 import 'package:fis_ui/interface/interactive_container.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
-
-part './measure_configuration_style_components.dart';
+import 'package:fis_measure/view/measure/measure_config/widgets/measure_configuration_style_components.dart';
 
 /// 字体大小下拉选择的类
 class MeasureSelectModel {
@@ -244,20 +242,20 @@ class _PatternBodyState extends FState<PatternBody> {
     return FListView(
       shrinkWrap: true,
       children: [
-        _PatternBodyItem(
+        PatternBodyItem(
           patternBodyItemTitle: i18nBook.measure.ruler.t,
           patternBodyItem: FColumn(
             children: [
               //卡尺类型
-              _PatternItem(
+              PatternItem(
                 title: i18nBook.measure.rulerType.t,
-                item: _PatternItemRadio(
+                item: PatternItemRadio(
                     tabList: C_MEASURE_CURSOR_TYPE,
                     businessParent: widget.businessParent,
                     value: getMeasureSystemSettingCursorType(
                       widget.measureSystemSetting.cursorType,
                     ),
-                    isDefaultType: false,
+                    type: PatternValueType.cursor,
                     onChangeState: (value) {
                       setState(
                         () {
@@ -268,9 +266,9 @@ class _PatternBodyState extends FState<PatternBody> {
                     }),
               ),
               //卡尺大小 (光标大小)
-              _PatternItem(
+              PatternItem(
                 title: i18nBook.measure.rulerSize.t,
-                item: _PatternItemRadio(
+                item: PatternItemRadio(
                   tabList: C_MEASURE_CURSOR_SIZE,
                   businessParent: widget.businessParent,
                   value: widget.measureSystemSetting.cursorSize,
@@ -282,9 +280,9 @@ class _PatternBodyState extends FState<PatternBody> {
                 ),
               ),
               //测量时卡尺大小 (标记点大小)
-              _PatternItem(
+              PatternItem(
                 title: i18nBook.measure.measureRulerSize.t,
-                item: _PatternItemRadio(
+                item: PatternItemRadio(
                   tabList: C_MEASURE_MARK_SIZE,
                   value: widget.measureSystemSetting.shapeCursorSize,
                   businessParent: widget.businessParent,
@@ -298,14 +296,14 @@ class _PatternBodyState extends FState<PatternBody> {
             ],
           ),
         ),
-        _PatternBodyItem(
+        PatternBodyItem(
           patternBodyItemTitle: i18nBook.measure.resultWindowConfig.t,
           patternBodyItem: FColumn(
             children: [
               //显示结果窗口
-              _PatternItem(
+              PatternItem(
                 title: i18nBook.measure.showResultWindow.t,
-                item: _PatternItemSwitch(
+                item: PatternItemSwitch(
                   onChanged: (value) {
                     setState(() {
                       measureData.measureSystemSetting.showResultWindow = value;
@@ -315,9 +313,9 @@ class _PatternBodyState extends FState<PatternBody> {
                 ),
               ),
               //窗口位置
-              _PatternItem(
+              PatternItem(
                 title: i18nBook.measure.panelPosition.t,
-                item: _PatternItemSelect(
+                item: PatternItemSelect(
                   itemList: C_PANEL_POSITION,
                   value:
                       widget.measureSystemSetting.showResultLocation.toString(),
@@ -334,9 +332,9 @@ class _PatternBodyState extends FState<PatternBody> {
                 ),
               ),
               //字体大小
-              _PatternItem(
+              PatternItem(
                 title: i18nBook.measure.fontSize.t,
-                item: _PatternItemSelect(
+                item: PatternItemSelect(
                   itemList: C_RESULT_TEXT_SIZE
                       .map((e) =>
                           MeasureSelectModel(name: e.toString(), value: e))
@@ -357,15 +355,15 @@ class _PatternBodyState extends FState<PatternBody> {
             ],
           ),
         ),
-        _PatternBodyItem(
+        PatternBodyItem(
           patternBodyItemTitle: i18nBook.measure.display.t,
           isEnd: true,
           patternBodyItem: FColumn(
             children: [
               //显示卡尺线
-              _PatternItem(
+              PatternItem(
                 title: i18nBook.measure.showRulerLine.t,
-                item: _PatternItemSwitch(
+                item: PatternItemSwitch(
                   onChanged: (value) {
                     setState(() {
                       measureData.measureSystemSetting.showCursorLine = value;
@@ -376,9 +374,9 @@ class _PatternBodyState extends FState<PatternBody> {
                 ),
               ),
               //显示深度测量线
-              _PatternItem(
+              PatternItem(
                 title: i18nBook.measure.showDepthMeasureLine.t,
-                item: _PatternItemSwitch(
+                item: PatternItemSwitch(
                   onChanged: (value) {
                     setState(() {
                       measureData.measureSystemSetting.showDepthGuideline =
@@ -389,9 +387,9 @@ class _PatternBodyState extends FState<PatternBody> {
                 ),
               ),
               //显示简洁注释
-              _PatternItem(
+              PatternItem(
                 title: i18nBook.measure.showSimpleAnnotation.t,
-                item: _PatternItemSwitch(
+                item: PatternItemSwitch(
                   onChanged: (value) {
                     setState(() {
                       measureData.measureSystemSetting.showBriefAnnotation =
@@ -402,9 +400,9 @@ class _PatternBodyState extends FState<PatternBody> {
                 ),
               ),
               //微距测量自动调整光标
-              _PatternItem(
+              PatternItem(
                 title: i18nBook.measure.autoAdjustCursor.t,
-                item: _PatternItemSelect(
+                item: PatternItemSelect(
                   itemList: C_DISTANCE_THRESHOLD,
                   value: widget.measureSystemSetting.minCursorDistance ??
                       C_DISTANCE_THRESHOLD[0].value.toString(),
@@ -417,9 +415,9 @@ class _PatternBodyState extends FState<PatternBody> {
                 ),
               ),
               //测量自动捕捉范围
-              _PatternItem(
+              PatternItem(
                 title: i18nBook.measure.autoCaptureRange.t,
-                item: _PatternItemSelect(
+                item: PatternItemSelect(
                   itemList: C_DISTANCE_THRESHOLD,
                   value: widget.measureSystemSetting.autoSnapDistance ??
                       C_DISTANCE_THRESHOLD[0].value.toString(),
@@ -431,9 +429,9 @@ class _PatternBodyState extends FState<PatternBody> {
                 ),
               ),
               //注释字体大小
-              _PatternItem(
+              PatternItem(
                 title: i18nBook.measure.annotationFontSize.t,
-                item: _PatternItemSelect(
+                item: PatternItemSelect(
                   itemList: C_ANNOTATION_TEXT_SIZE
                       .map((e) =>
                           MeasureSelectModel(name: e.toString(), value: e))
@@ -453,9 +451,9 @@ class _PatternBodyState extends FState<PatternBody> {
                 ),
               ),
               //显示测量注释 [中文翻译值]
-              _PatternItem(
+              PatternItem(
                 title: i18nBook.measure.showMeasureAnnotation.t,
-                item: _PatternItemSwitch(
+                item: PatternItemSwitch(
                   onChanged: (value) {
                     if (value !=
                         measureData.measureSystemSetting.showAnnotation) {

+ 75 - 31
lib/view/measure/measure_config/widgets/measure_configuration_style_components.dart

@@ -1,10 +1,17 @@
-part of 'measure_configuration_style.dart';
+import 'package:fis_i18n/i18n.dart';
+import 'package:fis_measure/values/unit_desc.dart';
+import 'package:fis_measure/view/cursor.dart';
+import 'package:fis_measure/view/measure/measure_config/widgets/measure_configuration_style.dart';
+import 'package:fis_ui/index.dart';
+import 'package:fis_ui/interface/interactive_container.dart';
+import 'package:flutter/material.dart';
+import 'package:fis_theme/theme.dart';
 
-class _PatternBodyItem extends FStatelessWidget {
+class PatternBodyItem extends FStatelessWidget {
   final String patternBodyItemTitle;
   final FWidget patternBodyItem;
   final bool? isEnd;
-  const _PatternBodyItem({
+  const PatternBodyItem({
     Key? key,
     required this.patternBodyItemTitle,
     required this.patternBodyItem,
@@ -44,10 +51,10 @@ class _PatternBodyItem extends FStatelessWidget {
   }
 }
 
-class _PatternItem extends FStatelessWidget {
+class PatternItem extends FStatelessWidget {
   final String title;
   final FWidget item;
-  const _PatternItem({required this.title, required this.item, Key? key})
+  const PatternItem({required this.title, required this.item, Key? key})
       : super(key: key);
   @override
   FWidget build(BuildContext context) {
@@ -74,21 +81,21 @@ class _PatternItem extends FStatelessWidget {
   }
 }
 
-class _PatternItemRadio extends FStatelessWidget {
+class PatternItemRadio extends FStatelessWidget {
   final List<dynamic> tabList;
-  final bool? isDefaultType;
+  final PatternValueType? type;
   final dynamic value;
   final ValueCallback onChangeState;
 
   ///父级节点
   final FInteractiveContainer businessParent;
-  const _PatternItemRadio({
+  const PatternItemRadio({
     Key? key,
     required this.businessParent,
     required this.tabList,
     required this.value,
     required this.onChangeState,
-    this.isDefaultType = true,
+    this.type = PatternValueType.size,
   }) : super(key: key);
 
   @override
@@ -105,23 +112,40 @@ class _PatternItemRadio extends FStatelessWidget {
           tabList.length,
           (index) {
             final FWidget child;
-            if (isDefaultType!) {
-              child = FText(
-                MeasureTextSize(tabList[index]).toString(),
-                style: tabList[index] != value
-                    ? const TextStyle(
-                        color: Colors.black,
-                      )
-                    : const TextStyle(
-                        color: Colors.white,
-                      ),
-              );
-            } else {
-              child = MeasureCursor(
-                size: 10,
-                type: tabList[index],
-                color: tabList[index] != value ? Colors.black : Colors.white,
-              );
+            switch (type) {
+              case PatternValueType.size:
+                child = FText(
+                  MeasureTextSize(tabList[index]).toString(),
+                  style: tabList[index] != value
+                      ? const TextStyle(
+                          color: Colors.black,
+                        )
+                      : const TextStyle(
+                          color: Colors.white,
+                        ),
+                );
+                break;
+              case PatternValueType.unit:
+                child = FText(
+                  UnitDescriptionMap.getDesc(tabList[index]),
+                  style: tabList[index] != value
+                      ? const TextStyle(
+                          color: Colors.black,
+                        )
+                      : const TextStyle(
+                          color: Colors.white,
+                        ),
+                );
+                break;
+              case PatternValueType.cursor:
+                child = MeasureCursor(
+                  size: 10,
+                  type: tabList[index],
+                  color: tabList[index] != value ? Colors.black : Colors.white,
+                );
+                break;
+              default:
+                child = const FText("");
             }
             var tab = tabList[index];
             return FElevatedButton(
@@ -140,7 +164,7 @@ class _PatternItemRadio extends FStatelessWidget {
                       ),
               ),
               child: FContainer(
-                width: isDefaultType! ? 50 : 20,
+                width: getIconButtonWidth(type),
                 height: 20,
                 child: FCenter(
                   child: child,
@@ -152,10 +176,29 @@ class _PatternItemRadio extends FStatelessWidget {
       ),
     );
   }
+
+  double getIconButtonWidth(PatternValueType? type) {
+    switch (type) {
+      case PatternValueType.size:
+        return 50;
+      case PatternValueType.unit:
+        return 46;
+      case PatternValueType.cursor:
+        return 20;
+      default:
+        return 50;
+    }
+  }
+}
+
+enum PatternValueType {
+  size,
+  unit,
+  cursor,
 }
 
-class _PatternItemSwitch extends FStatelessWidget {
-  const _PatternItemSwitch({
+class PatternItemSwitch extends FStatelessWidget {
+  const PatternItemSwitch({
     Key? key,
     required this.onChanged,
     required this.value,
@@ -177,8 +220,9 @@ class _PatternItemSwitch extends FStatelessWidget {
   }
 }
 
-class _PatternItemSelect extends StatelessWidget implements FWidget {
-  const _PatternItemSelect({
+class PatternItemSelect extends StatelessWidget implements FWidget {
+  const PatternItemSelect({
+    super.key,
     required this.onChanged,
     required this.value,
     required this.itemList,

+ 1 - 1
lib/view/measure/measure_view_controller.dart

@@ -46,7 +46,7 @@ class MeasureMetaController extends GetxController {
   }
 
   void setAvailableModes(String name) {
-    var models = measureData.availableModes;
+    List<MeasureModeDTO> models = measureData.availableModes;
     measureData.currentMode = name;
     if (models.isNotEmpty) {
       ///群组列表

+ 4 - 2
lib/view/result/converter.dart

@@ -80,7 +80,7 @@ class FeatureValueDescConverter {
 
   String _pickValueStr(ValueBase value) {
     if (value is FloatValue) {
-      final floatVal = _roundDouble(value.value!, value.meta.fractionalDigits);
+      final floatVal = _roundDouble(value.value!, 6);
       if (floatVal.isNaN) {
         return '';
       }
@@ -88,8 +88,10 @@ class FeatureValueDescConverter {
       final unit = value.unit;
       final targetUnit = value.targetUnit;
       final targetVal = UnitValueConverter.convert(unit, targetUnit, floatVal);
+      final targetValRound =
+          _roundDouble(targetVal, value.meta.fractionalDigits);
       final unitStr = UnitDescriptionMap.getDesc(targetUnit);
-      return '$targetVal $unitStr';
+      return '$targetValRound $unitStr';
     } else if (value is StringValue) {
       return value.value!;
     }