diff --git a/FieldVisualizer/Services/ColorServices/ColorOperations.cs b/FieldVisualizer/Services/ColorServices/ColorOperations.cs index 17f0386..dd4c7c7 100644 --- a/FieldVisualizer/Services/ColorServices/ColorOperations.cs +++ b/FieldVisualizer/Services/ColorServices/ColorOperations.cs @@ -12,16 +12,16 @@ namespace FieldVisualizer.Services.ColorServices const byte Alpha = 0xff; public static Color GetColorByValue(IValueRange range, IColorMap map, double val) { + if (range.TopValue == range.BottomValue || map.Colors.Count == 0) { return map.Colors[0]; } double minVal = range.BottomValue - 1e-15d*(Math.Abs(range.BottomValue)); double maxVal = range.TopValue + 1e-15d * (Math.Abs(range.TopValue)); - if (range.TopValue == minVal || map.Colors.Count == 0) { return map.Colors[0]; } if (val > maxVal || val < minVal) { return Colors.Gray; } if (val == minVal) { return map.Colors[0]; } if (val == maxVal) { return map.Colors[map.Colors.Count - 1]; } double valPerc = (val - minVal) / (maxVal - minVal);// value% - //if (valPerc == 1d) - //{ return map.Colors[map.Colors.Count - 1]; } + if (valPerc >= 1d) + { return map.Colors[map.Colors.Count - 1]; } double colorPerc = 1d / (map.Colors.Count - 1d); // % of each block of color. the last is the "100% Color" double blockOfColor = valPerc / colorPerc;// the integer part repersents how many block to skip int blockIdx = (int)Math.Truncate(blockOfColor);// Idx of diff --git a/FieldVisualizer/Services/PrimitiveServices/TestPrimitivesOperation.cs b/FieldVisualizer/Services/PrimitiveServices/TestPrimitivesOperation.cs new file mode 100644 index 0000000..2ebd1a1 --- /dev/null +++ b/FieldVisualizer/Services/PrimitiveServices/TestPrimitivesOperation.cs @@ -0,0 +1,49 @@ +using FieldVisualizer.Entities.Values.Primitives; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FieldVisualizer.Services.PrimitiveServices +{ + public static class TestPrimitivesOperation + { + public static List AddTestPrimitives() + { + List primitiveSets = new List(); + int imax = 100; + int jmax = 100; + PrimitiveSet primitiveSet = new PrimitiveSet(); + primitiveSets.Add(primitiveSet); + List primitives = new List(); + primitiveSet.ValuePrimitives = primitives; + IValuePrimitive primitive; + for (int i = 0; i < imax; i++) + { + for (int j = 0; j < jmax; j++) + { + primitive = new RectanglePrimitive() { Height = 10, Width = 20, CenterX = 20 * i, CenterY = 10 * j, Value = -(i + j) }; + primitives.Add(primitive); + } + } + for (int i = 0; i < 2; i++) + { + for (int j = 0; j < 2; j++) + { + primitive = new CirclePrimitive() { Diameter = 150, CenterX = -200 * i, CenterY = -100 * j, Value = i * 100 + j * 200 }; + primitives.Add(primitive); + } + } + primitiveSet = new PrimitiveSet(); + primitives = new List(); + primitive = new RectanglePrimitive() { Height = 100, Width = 200, CenterX = 0, CenterY = 0, Value = 100 }; + primitives.Add(primitive); + primitive = new CirclePrimitive() { Diameter = 50, CenterX = 0, CenterY = 0, Value = -100 }; + primitives.Add(primitive); + primitiveSet.ValuePrimitives = primitives; + primitiveSets.Add(primitiveSet); + return primitiveSets; + } + } +} diff --git a/FieldVisualizer/Windows/UserControls/FieldViewer.xaml b/FieldVisualizer/Windows/UserControls/FieldViewer.xaml index 6ba2b54..bb9b474 100644 --- a/FieldVisualizer/Windows/UserControls/FieldViewer.xaml +++ b/FieldVisualizer/Windows/UserControls/FieldViewer.xaml @@ -9,7 +9,7 @@ - + @@ -35,7 +35,12 @@ - - + + + + + + + diff --git a/FieldVisualizer/Windows/UserControls/FieldViewer.xaml.cs b/FieldVisualizer/Windows/UserControls/FieldViewer.xaml.cs index 9dcd8da6..2ce5a97 100644 --- a/FieldVisualizer/Windows/UserControls/FieldViewer.xaml.cs +++ b/FieldVisualizer/Windows/UserControls/FieldViewer.xaml.cs @@ -31,10 +31,12 @@ namespace FieldVisualizer.Windows.UserControls public ICommand ChangeColorMapCommand { get; } public IPrimitiveSet PrimitiveSet { get; set; } + public IValueRange UserValueRange { get; set; } + private double dX, dY; private ColorMapsTypes _ColorMapType; private IColorMap _ColorMap; - private IValueRange _ValueRange; + private IValueRange valueRange; private IEnumerable _ValueRanges; private IEnumerable _ValueColorRanges; const int RangeNumber = 16; @@ -48,14 +50,13 @@ namespace FieldVisualizer.Windows.UserControls ZoomInCommand = new RelayCommand(o => Zoom(1.2), o => PrimitiveValidation()); ZoomOutCommand = new RelayCommand(o => Zoom(0.8), o => PrimitiveValidation()); ChangeColorMapCommand = new RelayCommand(o => ChangeColorMap(), o => PrimitiveValidation()); + UserValueRange = new ValueRange() { BottomValue = 0, TopValue = 0 }; } public void Refresh() { if (PrimitiveValidation() == false) { return; } - _ValueRange = PrimitiveOperations.GetValueRange(PrimitiveSet.ValuePrimitives); - _ValueRanges = ValueRangeOperations.DivideValueRange(_ValueRange, RangeNumber); _ColorMap = ColorMapFactory.GetColorMap(_ColorMapType); - _ValueColorRanges = ColorOperations.GetValueColorRanges(_ValueRange, _ValueRanges, _ColorMap); + SetColor(); if ((PrimitiveSet is null) == false) { ProcessPrimitives(); @@ -65,6 +66,7 @@ namespace FieldVisualizer.Windows.UserControls } private void ProcessPrimitives() { + WorkPlaneCanvas.Children.Clear(); double sizeX = PrimitiveOperations.GetSizeX(PrimitiveSet.ValuePrimitives); double sizeY = PrimitiveOperations.GetSizeY(PrimitiveSet.ValuePrimitives); @@ -119,7 +121,7 @@ namespace FieldVisualizer.Windows.UserControls private void ProcessShape(Shape shape, IValuePrimitive valuePrimitive, double addX, double addY) { SolidColorBrush brush = new SolidColorBrush(); - brush.Color = ColorOperations.GetColorByValue(_ValueRange, _ColorMap, valuePrimitive.Value); + brush.Color = ColorOperations.GetColorByValue(valueRange, _ColorMap, valuePrimitive.Value); foreach (var valueRange in _ValueColorRanges) { if (valuePrimitive.Value >= valueRange.BottomValue & valuePrimitive.Value <= valueRange.TopValue & (!valueRange.IsActive)) @@ -131,7 +133,7 @@ namespace FieldVisualizer.Windows.UserControls shape.Tag = valuePrimitive; shape.Fill = brush; Canvas.SetLeft(shape, valuePrimitive.CenterX - addX - dX); - Canvas.SetTop(shape, valuePrimitive.CenterY - addY - dY); + Canvas.SetTop(shape, - valuePrimitive.CenterY - addY - dY); } private void Zoom(double coefficient) { @@ -154,5 +156,13 @@ namespace FieldVisualizer.Windows.UserControls if (PrimitiveSet == null || PrimitiveSet.ValuePrimitives.Count() == 0) { return false; } else return true; } + private void SetColor() + { + valueRange = PrimitiveOperations.GetValueRange(PrimitiveSet.ValuePrimitives); + if (cbMinValueEnabled.IsChecked == true) { valueRange.BottomValue = UserValueRange.BottomValue; } else { UserValueRange.BottomValue = valueRange.BottomValue; } + if (cbMaxValueEnabled.IsChecked == true) { valueRange.TopValue = UserValueRange.TopValue; } else { UserValueRange.TopValue = valueRange.TopValue; } + _ValueRanges = ValueRangeOperations.DivideValueRange(valueRange, RangeNumber); + _ValueColorRanges = ColorOperations.GetValueColorRanges(valueRange, _ValueRanges, _ColorMap); + } } } diff --git a/FieldVisualizer/Windows/UserControls/VerticalLegend.xaml b/FieldVisualizer/Windows/UserControls/VerticalLegend.xaml index b982c83..5116791 100644 --- a/FieldVisualizer/Windows/UserControls/VerticalLegend.xaml +++ b/FieldVisualizer/Windows/UserControls/VerticalLegend.xaml @@ -12,7 +12,7 @@ - + diff --git a/FieldVisualizer/Windows/WndFieldViewer.xaml b/FieldVisualizer/Windows/WndFieldViewer.xaml index b3205cb..7362c15 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="700" Width="1200" WindowStartupLocation="CenterOwner"> + Title="FieldViewer" Height="800" Width="1200" WindowStartupLocation="CenterOwner"> diff --git a/FiledVisualzerDemo/DemoForm.cs b/FiledVisualzerDemo/DemoForm.cs index 9f926f3..419a332 100644 --- a/FiledVisualzerDemo/DemoForm.cs +++ b/FiledVisualzerDemo/DemoForm.cs @@ -1,4 +1,5 @@ using FieldVisualizer.Entities.Values.Primitives; +using FieldVisualizer.Services.PrimitiveServices; using FieldVisualizer.WindowsOperation; using System; using System.Collections.Generic; @@ -21,38 +22,7 @@ namespace FiledVisualzerDemo private void RectanglesSetDemo_Click(object sender, EventArgs e) { - List primitiveSets = new List(); - int imax = 100; - int jmax = 100; - PrimitiveSet primitiveSet = new PrimitiveSet(); - primitiveSets.Add(primitiveSet); - List primitives = new List(); - primitiveSet.ValuePrimitives = primitives; - IValuePrimitive primitive; - for (int i = 0; i < imax; i++) - { - for (int j = 0; j < jmax; j++) - { - primitive = new RectanglePrimitive() { Height = 10, Width = 20, CenterX = 20 * i, CenterY = 10 * j, Value = -(i + j) }; - primitives.Add(primitive); - } - } - for (int i = 0; i < 2; i++) - { - for (int j = 0; j < 2; j++) - { - primitive = new CirclePrimitive() { Diameter = 150, CenterX = -200 * i, CenterY = -100 * j, Value = i * 100 + j * 200 }; - primitives.Add(primitive); - } - } - primitiveSet = new PrimitiveSet(); - primitives = new List(); - primitive = new RectanglePrimitive() { Height = 100, Width = 200, CenterX = 0, CenterY = 0, Value = 100 }; - primitives.Add(primitive); - primitive = new CirclePrimitive() { Diameter = 50, CenterX = 0, CenterY = 0, Value = -100 }; - primitives.Add(primitive); - primitiveSet.ValuePrimitives = primitives; - primitiveSets.Add(primitiveSet); + var primitiveSets = TestPrimitivesOperation.AddTestPrimitives(); FieldViewerOperation.ShowViewer(primitiveSets); } } diff --git a/Services/Reports/CalculationReports/IIsoFieldReport.cs b/Services/Reports/CalculationReports/IIsoFieldReport.cs new file mode 100644 index 0000000..800acce --- /dev/null +++ b/Services/Reports/CalculationReports/IIsoFieldReport.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelper.Services.Reports.CalculationReports +{ + interface IIsoFieldReport : IReport + { + } +} diff --git a/Services/Reports/CalculationReports/IsoFieldReport.cs b/Services/Reports/CalculationReports/IsoFieldReport.cs new file mode 100644 index 0000000..00eb343 --- /dev/null +++ b/Services/Reports/CalculationReports/IsoFieldReport.cs @@ -0,0 +1,37 @@ +using FieldVisualizer.Entities.Values.Primitives; +using FieldVisualizer.Services.PrimitiveServices; +using FieldVisualizer.WindowsOperation; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelper.Services.Reports.CalculationReports +{ + public class IsoFieldReport : IIsoFieldReport + { + private IEnumerable primitiveSets; + + public void Prepare() + { + // + } + + public void ShowPrepared() + { + FieldViewerOperation.ShowViewer(primitiveSets); + } + + public void Show() + { + Prepare(); + ShowPrepared(); + } + + public IsoFieldReport(IEnumerable primitiveSets) + { + this.primitiveSets = primitiveSets; + } + } +} diff --git a/Services/Reports/IReport.cs b/Services/Reports/IReport.cs new file mode 100644 index 0000000..49c0fe3 --- /dev/null +++ b/Services/Reports/IReport.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelper.Services.Reports +{ + public interface IReport + { + void Prepare(); + void ShowPrepared(); + void Show(); + } +} diff --git a/Services/ResultViewers/ResultFuncFactory.cs b/Services/ResultViewers/ResultFuncFactory.cs index d22ad8d..64bd19b 100644 --- a/Services/ResultViewers/ResultFuncFactory.cs +++ b/Services/ResultViewers/ResultFuncFactory.cs @@ -14,7 +14,7 @@ namespace StructureHelper.Services.ResultViewers List resultFuncs = new List(); IStressLogic stressLogic = new StressLogic(); resultFuncs.Add(new ResultFunc() { Name = "Total Strain", ResultFunction = stressLogic.GetTotalStrain }); - resultFuncs.Add(new ResultFunc() { Name = "Elastic Srtain", ResultFunction = stressLogic.GetElasticStrain }); + resultFuncs.Add(new ResultFunc() { Name = "Elastic Strain", ResultFunction = stressLogic.GetElasticStrain }); resultFuncs.Add(new ResultFunc() { Name = "Plastic Strain", ResultFunction = stressLogic.GetPlasticStrain }); resultFuncs.Add(new ResultFunc() { Name = "Stress", ResultFunction = stressLogic.GetStress }); return resultFuncs; diff --git a/Services/ResultViewers/ShowIsoFieldResult.cs b/Services/ResultViewers/ShowIsoFieldResult.cs index 9a83db8..2beef02 100644 --- a/Services/ResultViewers/ShowIsoFieldResult.cs +++ b/Services/ResultViewers/ShowIsoFieldResult.cs @@ -15,6 +15,12 @@ namespace StructureHelper.Services.ResultViewers public static class ShowIsoFieldResult { public static void ShowResult(IStrainMatrix strainMatrix, IEnumerable ndms, IEnumerable resultFuncs) + { + var primitiveSets = GetPrimitiveSets(strainMatrix, ndms, resultFuncs); + FieldViewerOperation.ShowViewer(primitiveSets); + } + + public static List GetPrimitiveSets(IStrainMatrix strainMatrix, IEnumerable ndms, IEnumerable resultFuncs) { List primitiveSets = new List(); foreach (var valDelegate in resultFuncs) @@ -39,8 +45,7 @@ namespace StructureHelper.Services.ResultViewers primitiveSet.ValuePrimitives = primitives; primitiveSets.Add(primitiveSet); } - - FieldViewerOperation.ShowViewer(primitiveSets); + return primitiveSets; } } } diff --git a/StructureHelper.csproj b/StructureHelper.csproj index 97c4f4d..6030dd7 100644 --- a/StructureHelper.csproj +++ b/StructureHelper.csproj @@ -100,6 +100,9 @@ PrimitivePopup.xaml + + + @@ -119,6 +122,9 @@ CalculationPropertyView.xaml + + CalculationResultView.xaml + ColorPickerView.xaml @@ -147,6 +153,7 @@ RectangleTemplate.xaml + @@ -180,6 +187,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile diff --git a/StructureHelperTests/FieldsVisualizerTests/ColorOperationTests/GetColorByValueTest.cs b/StructureHelperTests/FieldsVisualizerTests/ColorOperationTests/GetColorByValueTest.cs index 55dd340..fa883b0 100644 --- a/StructureHelperTests/FieldsVisualizerTests/ColorOperationTests/GetColorByValueTest.cs +++ b/StructureHelperTests/FieldsVisualizerTests/ColorOperationTests/GetColorByValueTest.cs @@ -22,11 +22,11 @@ namespace StructureHelperTests.FieldsVisualizerTests.ColorOperationTests [TestCase(0, 100, -10, 255, 128, 128, 128)] //Gray as less than minimum [TestCase(0, 100, 0, 255, 255, 128, 128)] - [TestCase(0, 100, 50, 255, 255, 255, 0)] - [TestCase(0, 100, 100, 255, 0, 0, 255)]//Blue + [TestCase(0, 100, 50, 255, 255, 254, 0)] //!!!!!!254 cause broading range in method! + [TestCase(0, 100, 100, 255, 0, 0, 254)]//Blue [TestCase(0, 100, 110, 255,128, 128, 128)] //Gray as greater than maximum [TestCase(-100, 100, 110, 255, 128, 128, 128)] //Gray as greater than maximum - [TestCase(-100, 100, 100, 255, 0, 0, 255)]//Blue + [TestCase(-100, 100, 100, 255, 0, 0, 254)]//Blue [TestCase(100, 100, -100, 255, 255, 128, 128)] public void Run_ShouldPass(double bottomVal, double topVal, double val, int expectedA, int expectedR, int expectedG, int expectedB) { diff --git a/StructureHelperTests/FieldsVisualizerTests/WindowTests/ViewerTest.cs b/StructureHelperTests/FieldsVisualizerTests/WindowTests/ViewerTest.cs new file mode 100644 index 0000000..460ddb9 --- /dev/null +++ b/StructureHelperTests/FieldsVisualizerTests/WindowTests/ViewerTest.cs @@ -0,0 +1,34 @@ +using FieldVisualizer.Entities.ColorMaps; +using FieldVisualizer.Entities.ColorMaps.Factories; +using FieldVisualizer.Entities.Values; +using FieldVisualizer.Entities.Values.Primitives; +using FieldVisualizer.InfraStructures.Enums; +using FieldVisualizer.Services.ColorServices; +using FieldVisualizer.Services.PrimitiveServices; +using FieldVisualizer.Windows; +using NUnit.Framework; +using System.Collections.Generic; +using System.Windows.Media; + +namespace StructureHelperTests.FieldsVisualizerTests.WindowTests +{ + public class ViewerTest + { + private IEnumerable primitiveSets; + + [SetUp] + public void Setup() + { + primitiveSets = TestPrimitivesOperation.AddTestPrimitives(); + } + public void Run_ShouldPass() + { + //Arrange + //Act + WndFieldViewer viewer = new WndFieldViewer(primitiveSets); + //Assert + Assert.NotNull(viewer); + } + + } +} diff --git a/StructureHelperTests/StructureHelperTests.csproj b/StructureHelperTests/StructureHelperTests.csproj index be28779..641ea4e 100644 --- a/StructureHelperTests/StructureHelperTests.csproj +++ b/StructureHelperTests/StructureHelperTests.csproj @@ -41,6 +41,7 @@ + @@ -48,6 +49,7 @@ + @@ -67,6 +69,7 @@ ..\packages\NUnit.3.13.3\lib\net45\nunit.framework.dll + @@ -85,6 +88,10 @@ {87064b50-3b7c-4a91-af4a-941c6f95d997} FieldVisualizer + + {BAD27E27-4444-4300-ADF8-E21042C0781D} + StructureHelper + {5DFEC3FD-9677-47BB-9E88-EB71828B5913} StructureHelperCommon @@ -94,9 +101,7 @@ StructureHelperLogics - - - + diff --git a/StructureHelperTests/UnitTests/WindowTests/Calculations/CalculationProperties/CalculationPropertyWindowTest.cs b/StructureHelperTests/UnitTests/WindowTests/Calculations/CalculationProperties/CalculationPropertyWindowTest.cs new file mode 100644 index 0000000..e134e00 --- /dev/null +++ b/StructureHelperTests/UnitTests/WindowTests/Calculations/CalculationProperties/CalculationPropertyWindowTest.cs @@ -0,0 +1,37 @@ +using NUnit.Framework; +using StructureHelper.Windows.CalculationWindows.CalculationPropertyWindow; +using StructureHelper.Windows.ViewModels.Calculations.CalculationProperies; +using StructureHelper.Windows.ViewModels.Calculations.CalculationResult; +using StructureHelperLogics.Models.Calculations.CalculationProperties; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static System.Net.Mime.MediaTypeNames; + +namespace StructureHelperTests.UnitTests.WindowTests.Calculations.CalculationProperties +{ + public class CalculationPropertyWindowTest + { + private CalculationPropertyViewModel viewModel; + private ICalculationProperty calculationProperty; + + [SetUp] + public void Setup() + { + calculationProperty = new CalculationProperty(); + viewModel = new CalculationPropertyViewModel(calculationProperty); + } + + public void Run_Shoulpass() + { + //Arrange + + //Act + var wnd = new CalculationPropertyView(viewModel); + //Assert + Assert.NotNull(wnd); + } + } +} diff --git a/Windows/CalculationWindows/CalculationPropertyWindow/CalculationPropertyView.xaml b/Windows/CalculationWindows/CalculationPropertyWindow/CalculationPropertyView.xaml index bffb544..8c34bce 100644 --- a/Windows/CalculationWindows/CalculationPropertyWindow/CalculationPropertyView.xaml +++ b/Windows/CalculationWindows/CalculationPropertyWindow/CalculationPropertyView.xaml @@ -41,8 +41,8 @@ -