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 @@
-
+