From 31d668b996cbff7fc5572043eb1b427fbd0c2d6b Mon Sep 17 00:00:00 2001 From: Evgeny Redikultsev Date: Sun, 2 Jun 2024 16:56:44 +0500 Subject: [PATCH] Smart rounding was ajusted --- .../Entities/ColorMaps/IValueColorArray.cs | 13 ++ .../Entities/ColorMaps/IValueColorRange.cs | 23 +--- .../Entities/ColorMaps/ValueColorArray.cs | 33 +++++ .../Entities/ColorMaps/ValueColorRange.cs | 15 +-- .../Services/ColorServices/ColorOperations.cs | 17 ++- .../FieldViewerViewModel.cs | 36 ++++-- .../Windows/UserControls/VerticalLegend.xaml | 14 +-- FieldVisualizer/Windows/WndFieldViewer.xaml | 2 +- .../UI/Converters/Units/Area.cs | 2 +- .../UI/Converters/Units/CrackWidth.cs | 28 +++++ .../UI/Converters/Units/Curvature.cs | 2 +- .../UI/Converters/Units/Force.cs | 2 +- .../UI/Converters/Units/Length.cs | 3 +- .../UI/Converters/Units/Moment.cs | 2 +- .../UI/Converters/Units/PlainDouble.cs | 4 +- .../UI/Converters/Units/Stress.cs | 14 ++- .../UI/Converters/Units/UnitBase.cs | 51 +++++++- .../UI/Resources/Converters.xaml | 1 + .../Infrastructure/UI/Resources/Cracks.xaml | 2 +- .../ResultViewers/CrackResultFuncFactory.cs | 7 +- .../ResultViewers/ForceResultFuncFactory.cs | 9 +- .../ResultViewers/ShowIsoFieldResult.cs | 10 +- .../CalculatorsViews/CrackDiagramLogic.cs | 10 +- .../Cracks/CrackCalculatorInputDataView.xaml | 18 ++- .../CrackCalculatorInputDataViewModel.cs | 16 ++- .../Cracks/CrackResultView.xaml | 20 +-- .../CalculatorsViews/Cracks/Cracks.xaml | 2 +- .../Cracks/TupleCrackResultView.xaml | 26 ++-- .../Cracks/TupleCrackResultViewModel.cs | 2 +- .../ForceResultLogic/DiagramFactory.cs | 8 +- .../InteractionDiagramLogic.cs | 12 +- .../ForceResultLogic/LabelsFactory.cs | 8 +- .../ForcesResultsView.xaml | 2 +- .../UserControls/SurroundDataViewModel.cs | 7 +- .../ProgressViews/TraceDocumentView.xaml | 2 +- .../UserControls/MultiplyDouble.xaml.cs | 3 +- .../Parameters/IProcessValuePairLogic.cs | 7 ++ .../Models/Parameters/IValuePair.cs | 12 ++ .../Models/Parameters/IValueParameter.cs | 4 +- .../Parameters/ProcessDoublePairLogic.cs | 65 ++++++++++ .../Parameters/ValuePair.cs} | 7 +- .../Models/Parameters/ValueParameter.cs | 2 +- .../Services/DirectRoundLogic.cs | 16 +++ .../Services/FixedRoundLogic.cs | 25 ++++ .../Services/IDigitRoundLogic.cs | 7 ++ .../Services/IMathRoundLogic.cs | 7 ++ .../Services/SmartRoundLogic.cs | 30 +++++ .../Services/Units/CommonOperation.cs | 116 ------------------ .../Services/Units/ConvertUnitLogic.cs | 85 +++++++++++++ .../Services/Units/GetUnitLogic.cs | 50 ++++++++ .../Services/Units/IConvertUnitLogic.cs | 13 ++ .../Services/Units/IGetUnitLogic.cs | 9 ++ .../Services/Units/IStringDoublePair.cs | 14 --- .../Services/Units/ProcessString.cs | 25 ++++ .../Services/Units/UnitsFactory.cs | 8 +- .../ExportGeometryResultToCSVLogic.cs | 2 +- .../NdmPrimitives/TextParametersLogic.cs | 33 ++--- .../ParamTests/ProcessDoublePairTest.cs | 27 ++++ 58 files changed, 716 insertions(+), 274 deletions(-) create mode 100644 FieldVisualizer/Entities/ColorMaps/IValueColorArray.cs create mode 100644 FieldVisualizer/Entities/ColorMaps/ValueColorArray.cs create mode 100644 StructureHelper/Infrastructure/UI/Converters/Units/CrackWidth.cs create mode 100644 StructureHelperCommon/Models/Parameters/IProcessValuePairLogic.cs create mode 100644 StructureHelperCommon/Models/Parameters/IValuePair.cs create mode 100644 StructureHelperCommon/Models/Parameters/ProcessDoublePairLogic.cs rename StructureHelperCommon/{Services/Units/StringDoublePair.cs => Models/Parameters/ValuePair.cs} (53%) create mode 100644 StructureHelperCommon/Services/DirectRoundLogic.cs create mode 100644 StructureHelperCommon/Services/FixedRoundLogic.cs create mode 100644 StructureHelperCommon/Services/IDigitRoundLogic.cs create mode 100644 StructureHelperCommon/Services/IMathRoundLogic.cs create mode 100644 StructureHelperCommon/Services/SmartRoundLogic.cs delete mode 100644 StructureHelperCommon/Services/Units/CommonOperation.cs create mode 100644 StructureHelperCommon/Services/Units/ConvertUnitLogic.cs create mode 100644 StructureHelperCommon/Services/Units/GetUnitLogic.cs create mode 100644 StructureHelperCommon/Services/Units/IConvertUnitLogic.cs create mode 100644 StructureHelperCommon/Services/Units/IGetUnitLogic.cs delete mode 100644 StructureHelperCommon/Services/Units/IStringDoublePair.cs create mode 100644 StructureHelperCommon/Services/Units/ProcessString.cs create mode 100644 StructureHelperTests/UnitTests/ParamTests/ProcessDoublePairTest.cs diff --git a/FieldVisualizer/Entities/ColorMaps/IValueColorArray.cs b/FieldVisualizer/Entities/ColorMaps/IValueColorArray.cs new file mode 100644 index 0000000..1bed0b5 --- /dev/null +++ b/FieldVisualizer/Entities/ColorMaps/IValueColorArray.cs @@ -0,0 +1,13 @@ +using System.Windows.Media; + +namespace FieldVisualizer.Entities.ColorMaps +{ + public interface IValueColorArray + { + double AverageValue { get; set; } + Color BottomColor { get; set; } + double BottomValue { get; set; } + Color TopColor { get; set; } + double TopValue { get; set; } + } +} \ No newline at end of file diff --git a/FieldVisualizer/Entities/ColorMaps/IValueColorRange.cs b/FieldVisualizer/Entities/ColorMaps/IValueColorRange.cs index 395993c..85063a2 100644 --- a/FieldVisualizer/Entities/ColorMaps/IValueColorRange.cs +++ b/FieldVisualizer/Entities/ColorMaps/IValueColorRange.cs @@ -11,25 +11,8 @@ namespace FieldVisualizer.Entities.ColorMaps /// Flag of activity /// bool IsActive { get; set; } - /// - /// Minimum value of range - /// - double BottomValue { get; set; } - /// - /// Average value of range - /// - double AverageValue { get; set; } - /// - /// Maximum value of range - /// - double TopValue {get;set;} - /// - /// Color correspondent to minimum value - /// - Color BottomColor { get; set; } - /// - /// Color correspondent to maximum value - /// - Color TopColor { get; set; } + IValueColorArray ExactValues { get; } + IValueColorArray RoundedValues { get; } + } } diff --git a/FieldVisualizer/Entities/ColorMaps/ValueColorArray.cs b/FieldVisualizer/Entities/ColorMaps/ValueColorArray.cs new file mode 100644 index 0000000..66cd001 --- /dev/null +++ b/FieldVisualizer/Entities/ColorMaps/ValueColorArray.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Media; + +namespace FieldVisualizer.Entities.ColorMaps +{ + public class ValueColorArray : IValueColorArray + { + /// + /// Minimum value of range + /// + public double BottomValue { get; set; } + /// + /// Average value of range + /// + public double AverageValue { get; set; } + /// + /// Maximum value of range + /// + public double TopValue { get; set; } + /// + /// Color correspondent to minimum value + /// + public Color BottomColor { get; set; } + /// + /// Color correspondent to maximum value + /// + public Color TopColor { get; set; } + } +} diff --git a/FieldVisualizer/Entities/ColorMaps/ValueColorRange.cs b/FieldVisualizer/Entities/ColorMaps/ValueColorRange.cs index 695cca3..6813268 100644 --- a/FieldVisualizer/Entities/ColorMaps/ValueColorRange.cs +++ b/FieldVisualizer/Entities/ColorMaps/ValueColorRange.cs @@ -7,15 +7,10 @@ namespace FieldVisualizer.Entities.ColorMaps { /// public bool IsActive { get; set; } - /// - public double BottomValue { get; set; } - /// - public double AverageValue { get; set; } - /// - public double TopValue { get; set; } - /// - public Color BottomColor { get; set; } - /// - public Color TopColor { get; set; } + + public IValueColorArray ExactValues { get; private set; } = new ValueColorArray(); + + public IValueColorArray RoundedValues { get; private set; } = new ValueColorArray(); + } } diff --git a/FieldVisualizer/Services/ColorServices/ColorOperations.cs b/FieldVisualizer/Services/ColorServices/ColorOperations.cs index d436432..412f247 100644 --- a/FieldVisualizer/Services/ColorServices/ColorOperations.cs +++ b/FieldVisualizer/Services/ColorServices/ColorOperations.cs @@ -1,6 +1,7 @@ using FieldVisualizer.Entities.ColorMaps; using FieldVisualizer.Entities.Values; using StructureHelperCommon.Infrastructures.Exceptions; +using StructureHelperCommon.Services; using System; using System.Collections.Generic; using System.Text; @@ -11,6 +12,7 @@ namespace FieldVisualizer.Services.ColorServices public static class ColorOperations { const byte Alpha = 0xff; + static IMathRoundLogic roundLogic = new SmartRoundLogic(); /// /// /// @@ -23,15 +25,18 @@ namespace FieldVisualizer.Services.ColorServices var colorRanges = new List(); foreach (var valueRange in valueRanges) { - IValueColorRange valueColorRange = new ValueColorRange + var valueColorRange = new ValueColorRange { IsActive = true, - BottomValue = valueRange.BottomValue, - AverageValue = (valueRange.BottomValue + valueRange.TopValue) / 2, - TopValue = valueRange.TopValue }; - valueColorRange.BottomColor = GetColorByValue(fullRange, colorMap, valueColorRange.BottomValue); - valueColorRange.TopColor = GetColorByValue(fullRange, colorMap, valueColorRange.TopValue); + valueColorRange.ExactValues.BottomValue = valueRange.BottomValue; + valueColorRange.ExactValues.AverageValue = (valueRange.BottomValue + valueRange.TopValue) / 2; + valueColorRange.ExactValues.TopValue = valueRange.TopValue; + valueColorRange.ExactValues.BottomColor = GetColorByValue(fullRange, colorMap, valueColorRange.ExactValues.BottomValue); + valueColorRange.ExactValues.TopColor = GetColorByValue(fullRange, colorMap, valueColorRange.ExactValues.TopValue); + valueColorRange.RoundedValues.BottomValue = roundLogic.RoundValue(valueColorRange.ExactValues.BottomValue); + valueColorRange.RoundedValues.AverageValue = roundLogic.RoundValue(valueColorRange.ExactValues.AverageValue); + valueColorRange.RoundedValues.TopValue = roundLogic.RoundValue(valueColorRange.ExactValues.TopValue); colorRanges.Add(valueColorRange); } return colorRanges; diff --git a/FieldVisualizer/ViewModels/FieldViewerViewModels/FieldViewerViewModel.cs b/FieldVisualizer/ViewModels/FieldViewerViewModels/FieldViewerViewModel.cs index 540abf1..ca3b3a0 100644 --- a/FieldVisualizer/ViewModels/FieldViewerViewModels/FieldViewerViewModel.cs +++ b/FieldVisualizer/ViewModels/FieldViewerViewModels/FieldViewerViewModel.cs @@ -9,6 +9,7 @@ using FieldVisualizer.Services.ColorServices; using FieldVisualizer.Services.PrimitiveServices; using FieldVisualizer.Services.ValueRanges; using FieldVisualizer.Windows.UserControls; +using StructureHelperCommon.Services; using System; using System.Collections.Generic; using System.ComponentModel; @@ -22,6 +23,7 @@ namespace FieldVisualizer.ViewModels.FieldViewerViewModels { public class FieldViewerViewModel : ViewModelBase, IDataErrorInfo { + private IMathRoundLogic roundLogic = new SmartRoundLogic() { DigitQuant = 3 }; public ICommand RebuildCommand { get; } public ICommand ZoomInCommand { get; } public ICommand ZoomOutCommand { get; } @@ -159,8 +161,8 @@ namespace FieldVisualizer.ViewModels.FieldViewerViewModels private ColorMapsTypes _ColorMapType; private IColorMap _ColorMap; private IValueRange valueRange; - private IEnumerable _ValueRanges; - private IEnumerable _ValueColorRanges; + private IEnumerable valueRanges; + private IEnumerable valueColorRanges; private bool setMinValue; private bool setMaxValue; private double crossLineX; @@ -190,7 +192,7 @@ namespace FieldVisualizer.ViewModels.FieldViewerViewModels if ((PrimitiveSet is null) == false) { ProcessPrimitives(); - Legend.ValueColorRanges = _ValueColorRanges; + Legend.ValueColorRanges = valueColorRanges; Legend.Refresh(); } } @@ -257,14 +259,14 @@ namespace FieldVisualizer.ViewModels.FieldViewerViewModels { SolidColorBrush brush = new SolidColorBrush(); brush.Color = ColorOperations.GetColorByValue(valueRange, _ColorMap, valuePrimitive.Value); - foreach (var valueRange in _ValueColorRanges) + foreach (var valueRange in valueColorRanges) { - if (valuePrimitive.Value >= valueRange.BottomValue & valuePrimitive.Value <= valueRange.TopValue & (!valueRange.IsActive)) + if (valuePrimitive.Value >= valueRange.ExactValues.BottomValue & valuePrimitive.Value <= valueRange.ExactValues.TopValue & (!valueRange.IsActive)) { brush.Color = Colors.Gray; } } - shape.ToolTip = valuePrimitive.Value; + shape.ToolTip = roundLogic.RoundValue(valuePrimitive.Value); shape.Tag = valuePrimitive; shape.Fill = brush; Canvas.SetLeft(shape, valuePrimitive.CenterX - addX - dX); @@ -301,10 +303,24 @@ namespace FieldVisualizer.ViewModels.FieldViewerViewModels { UserValueRange.TopValue = UserValueRange.BottomValue; } - if (SetMinValue) { valueRange.BottomValue = UserValueRange.BottomValue; } else { UserValueRange.BottomValue = valueRange.BottomValue; } - if (SetMaxValue) { valueRange.TopValue = UserValueRange.TopValue; } else { UserValueRange.TopValue = valueRange.TopValue; } - _ValueRanges = ValueRangeOperations.DivideValueRange(valueRange, RangeNumber); - _ValueColorRanges = ColorOperations.GetValueColorRanges(valueRange, _ValueRanges, _ColorMap); + if (SetMinValue == true) + { + valueRange.BottomValue = UserValueRange.BottomValue; + } + else + { + UserValueRange.BottomValue = valueRange.BottomValue; + } + if (SetMaxValue == true) + { + valueRange.TopValue = UserValueRange.TopValue; + } + else + { + UserValueRange.TopValue = valueRange.TopValue; + } + valueRanges = ValueRangeOperations.DivideValueRange(valueRange, RangeNumber); + valueColorRanges = ColorOperations.GetValueColorRanges(valueRange, valueRanges, _ColorMap); } private void SetCrossLine(object commandParameter) { diff --git a/FieldVisualizer/Windows/UserControls/VerticalLegend.xaml b/FieldVisualizer/Windows/UserControls/VerticalLegend.xaml index 5116791..58c8315 100644 --- a/FieldVisualizer/Windows/UserControls/VerticalLegend.xaml +++ b/FieldVisualizer/Windows/UserControls/VerticalLegend.xaml @@ -20,23 +20,23 @@ - + - + - - + + - - + + - + diff --git a/FieldVisualizer/Windows/WndFieldViewer.xaml b/FieldVisualizer/Windows/WndFieldViewer.xaml index 7362c15..7a290d6 100644 --- a/FieldVisualizer/Windows/WndFieldViewer.xaml +++ b/FieldVisualizer/Windows/WndFieldViewer.xaml @@ -6,7 +6,7 @@ xmlns:FieldViewerControl="clr-namespace:FieldVisualizer.Windows.UserControls" xmlns:local="clr-namespace:FieldVisualizer.Windows" mc:Ignorable="d" - Title="FieldViewer" Height="800" Width="1200" WindowStartupLocation="CenterOwner"> + Title="FieldViewer" Height="800" Width="1200" MinHeight="400" MinWidth="800" MaxHeight="1000" MaxWidth="1500" WindowStartupLocation="CenterScreen" ShowInTaskbar="False"> diff --git a/StructureHelper/Infrastructure/UI/Converters/Units/Area.cs b/StructureHelper/Infrastructure/UI/Converters/Units/Area.cs index 383fb7f..74a112d 100644 --- a/StructureHelper/Infrastructure/UI/Converters/Units/Area.cs +++ b/StructureHelper/Infrastructure/UI/Converters/Units/Area.cs @@ -14,7 +14,7 @@ namespace StructureHelper.Infrastructure.UI.Converters.Units internal class Area : UnitBase { public override UnitTypes UnitType { get => UnitTypes.Area; } - public override IUnit CurrentUnit { get => CommonOperation.GetUnit(UnitType, "mm2"); } + public override IUnit CurrentUnit { get => UnitLogic.GetUnit(UnitType, "mm2"); } public override string UnitName { get => "Area"; } } } diff --git a/StructureHelper/Infrastructure/UI/Converters/Units/CrackWidth.cs b/StructureHelper/Infrastructure/UI/Converters/Units/CrackWidth.cs new file mode 100644 index 0000000..e520311 --- /dev/null +++ b/StructureHelper/Infrastructure/UI/Converters/Units/CrackWidth.cs @@ -0,0 +1,28 @@ +using StructureHelperCommon.Infrastructures.Enums; +using StructureHelperCommon.Services; +using StructureHelperCommon.Services.Units; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelper.Infrastructure.UI.Converters.Units +{ + internal class CrackWidth : UnitBase + { + public CrackWidth() + { + OperationLogic = new ConvertUnitLogic() + { + MathRoundLogic = new FixedRoundLogic() + { + DigitQuant = 3 + } + }; + } + public override UnitTypes UnitType { get => UnitTypes.Length; } + public override IUnit CurrentUnit { get => UnitLogic.GetUnit(UnitType, "mm"); } + public override string UnitName { get => "Length"; } + } +} diff --git a/StructureHelper/Infrastructure/UI/Converters/Units/Curvature.cs b/StructureHelper/Infrastructure/UI/Converters/Units/Curvature.cs index ec5a34b..1a34053 100644 --- a/StructureHelper/Infrastructure/UI/Converters/Units/Curvature.cs +++ b/StructureHelper/Infrastructure/UI/Converters/Units/Curvature.cs @@ -11,7 +11,7 @@ namespace StructureHelper.Infrastructure.UI.Converters.Units internal class Curvature : UnitBase { public override UnitTypes UnitType { get => UnitTypes.Curvature; } - public override IUnit CurrentUnit { get => CommonOperation.GetUnit(UnitType, "1/mm"); } + public override IUnit CurrentUnit { get => UnitLogic.GetUnit(UnitType, "1/mm"); } public override string UnitName { get => "Curvature"; } } } diff --git a/StructureHelper/Infrastructure/UI/Converters/Units/Force.cs b/StructureHelper/Infrastructure/UI/Converters/Units/Force.cs index 408660d..941f47d 100644 --- a/StructureHelper/Infrastructure/UI/Converters/Units/Force.cs +++ b/StructureHelper/Infrastructure/UI/Converters/Units/Force.cs @@ -13,7 +13,7 @@ namespace StructureHelper.Infrastructure.UI.Converters.Units internal class Force : UnitBase { public override UnitTypes UnitType { get => UnitTypes.Force; } - public override IUnit CurrentUnit { get => CommonOperation.GetUnit(UnitType, "kN"); } + public override IUnit CurrentUnit { get => UnitLogic.GetUnit(UnitType, "kN"); } public override string UnitName { get => "Force"; } } } diff --git a/StructureHelper/Infrastructure/UI/Converters/Units/Length.cs b/StructureHelper/Infrastructure/UI/Converters/Units/Length.cs index 5cac7d1..e4a01e1 100644 --- a/StructureHelper/Infrastructure/UI/Converters/Units/Length.cs +++ b/StructureHelper/Infrastructure/UI/Converters/Units/Length.cs @@ -5,8 +5,9 @@ namespace StructureHelper.Infrastructure.UI.Converters.Units { internal class Length : UnitBase { + public override UnitTypes UnitType { get => UnitTypes.Length; } - public override IUnit CurrentUnit { get => CommonOperation.GetUnit(UnitType, "mm"); } + public override IUnit CurrentUnit { get => UnitLogic.GetUnit(UnitType, "mm"); } public override string UnitName { get => "Length"; } } } diff --git a/StructureHelper/Infrastructure/UI/Converters/Units/Moment.cs b/StructureHelper/Infrastructure/UI/Converters/Units/Moment.cs index 76f8d6d..f260d7a 100644 --- a/StructureHelper/Infrastructure/UI/Converters/Units/Moment.cs +++ b/StructureHelper/Infrastructure/UI/Converters/Units/Moment.cs @@ -11,7 +11,7 @@ namespace StructureHelper.Infrastructure.UI.Converters.Units internal class Moment : UnitBase { public override UnitTypes UnitType { get => UnitTypes.Moment; } - public override IUnit CurrentUnit { get => CommonOperation.GetUnit(UnitType, "kNm"); } + public override IUnit CurrentUnit { get => UnitLogic.GetUnit(UnitType, "kNm"); } public override string UnitName { get => "Moment"; } } } diff --git a/StructureHelper/Infrastructure/UI/Converters/Units/PlainDouble.cs b/StructureHelper/Infrastructure/UI/Converters/Units/PlainDouble.cs index e4958d1..48cd0ac 100644 --- a/StructureHelper/Infrastructure/UI/Converters/Units/PlainDouble.cs +++ b/StructureHelper/Infrastructure/UI/Converters/Units/PlainDouble.cs @@ -12,6 +12,8 @@ namespace StructureHelper.Infrastructure.UI.Converters.Units { internal class PlainDouble : IValueConverter { + IConvertUnitLogic operationLogic = new ConvertUnitLogic(); + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { try @@ -28,7 +30,7 @@ namespace StructureHelper.Infrastructure.UI.Converters.Units { try { - return CommonOperation.ConvertToDoubleChangeComma((string)value); + return ProcessString.ConvertCommaToCultureSettings((string)value); } catch (Exception) { diff --git a/StructureHelper/Infrastructure/UI/Converters/Units/Stress.cs b/StructureHelper/Infrastructure/UI/Converters/Units/Stress.cs index eec20ab..f07de25 100644 --- a/StructureHelper/Infrastructure/UI/Converters/Units/Stress.cs +++ b/StructureHelper/Infrastructure/UI/Converters/Units/Stress.cs @@ -1,4 +1,5 @@ using StructureHelperCommon.Infrastructures.Enums; +using StructureHelperCommon.Services; using StructureHelperCommon.Services.Units; using System; using System.Collections.Generic; @@ -12,8 +13,19 @@ namespace StructureHelper.Infrastructure.UI.Converters.Units { internal class Stress : UnitBase { + public override UnitTypes UnitType { get => UnitTypes.Stress; } - public override IUnit CurrentUnit { get => CommonOperation.GetUnit(UnitType, "MPa"); } + public override IUnit CurrentUnit { get => UnitLogic.GetUnit(UnitType, "MPa"); } public override string UnitName { get => "Stress"; } + public Stress() + { + OperationLogic = new ConvertUnitLogic() + { + MathRoundLogic = new SmartRoundLogic() + { + DigitQuant = 3 + } + }; + } } } diff --git a/StructureHelper/Infrastructure/UI/Converters/Units/UnitBase.cs b/StructureHelper/Infrastructure/UI/Converters/Units/UnitBase.cs index ef778b0..4955cf1 100644 --- a/StructureHelper/Infrastructure/UI/Converters/Units/UnitBase.cs +++ b/StructureHelper/Infrastructure/UI/Converters/Units/UnitBase.cs @@ -1,4 +1,7 @@ using StructureHelperCommon.Infrastructures.Enums; +using StructureHelperCommon.Models.Calculators; +using StructureHelperCommon.Models.Parameters; +using StructureHelperCommon.Services; using StructureHelperCommon.Services.Units; using System; using System.Collections.Generic; @@ -14,19 +17,61 @@ namespace StructureHelper.Infrastructure.UI.Converters.Units { internal abstract class UnitBase : IValueConverter { + IMathRoundLogic roundLogic = new DirectRoundLogic(); + public IConvertUnitLogic OperationLogic { get; set; } = new ConvertUnitLogic(); + public IGetUnitLogic UnitLogic { get; set; } = new GetUnitLogic(); public abstract UnitTypes UnitType { get; } public abstract IUnit CurrentUnit { get; } public abstract string UnitName { get;} + /// + /// From variable to user + /// + /// + /// + /// + /// + /// public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { - return CommonOperation.Convert(CurrentUnit, UnitName, value); + var pair = OperationLogic.Convert(CurrentUnit, UnitName, value); + var result = pair.Value; + if (parameter is not null) + { + if (parameter is string paramString) + { + var logic = new ProcessDoublePairLogic() { DigitPlace = DigitPlace.Any }; + var paramPair = logic.GetValuePairByString(paramString); + string paramTextPart = paramPair.Text.ToLower(); + int paramValuePart = (int)paramPair.Value; + if (paramTextPart == "smart") + { + roundLogic = new SmartRoundLogic() { DigitQuant = paramValuePart }; + } + else if (paramTextPart == "fixed") + { + roundLogic = new FixedRoundLogic() { DigitQuant = paramValuePart }; + } + result = roundLogic.RoundValue(result); + } + } + string strValue = $"{result} {pair.Text}"; + return strValue; } - + /// + /// From user to variable + /// + /// + /// + /// + /// + /// public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { try { - return CommonOperation.ConvertBack(UnitType, CurrentUnit, value); + double result = OperationLogic.ConvertBack(UnitType, CurrentUnit, value); + + return result; } catch (Exception) { diff --git a/StructureHelper/Infrastructure/UI/Resources/Converters.xaml b/StructureHelper/Infrastructure/UI/Resources/Converters.xaml index cfda1fd..f02301e 100644 --- a/StructureHelper/Infrastructure/UI/Resources/Converters.xaml +++ b/StructureHelper/Infrastructure/UI/Resources/Converters.xaml @@ -12,5 +12,6 @@ + \ No newline at end of file diff --git a/StructureHelper/Infrastructure/UI/Resources/Cracks.xaml b/StructureHelper/Infrastructure/UI/Resources/Cracks.xaml index 0e11fa7..12f6a73 100644 --- a/StructureHelper/Infrastructure/UI/Resources/Cracks.xaml +++ b/StructureHelper/Infrastructure/UI/Resources/Cracks.xaml @@ -1,7 +1,7 @@  - +