From 8fecfb931fb4ba9b0827543f18b85476395a87e2 Mon Sep 17 00:00:00 2001 From: Evgeny Redikultsev Date: Fri, 24 Feb 2023 22:17:55 +0500 Subject: [PATCH] Circle Primitive Added --- .../Infrastructure/Enums/PrimitiveType.cs | 3 +- .../UI/DataContexts/CircleViewPrimitive.cs | 56 +++++++++++++++ .../UI/DataContexts/PrimitiveOperations.cs | 17 +++-- .../UI/DataTemplates/EllipseTemplate.xaml | 3 +- .../UI/DataTemplates/RectangleTemplate.xaml | 1 - .../Libraries/LoaderCalculator.dll | Bin 72704 -> 72704 bytes .../Windows/MainWindow/MainView.xaml | 45 +++++++++--- .../Windows/MainWindow/MainView.xaml.cs | 13 +++- .../Windows/MainWindow/MainViewModel.cs | 18 ++++- .../PrimitivePropertiesView.xaml | 15 ++++ .../PrimitivePropertiesView.xaml.cs | 2 + .../CrossSectionViewVisualProperty.cs | 4 +- .../PrimitiveViewModelLogic.cs | 11 ++- .../RCs/RectangleBeamViewModel.cs | 2 +- .../Infrastructures/Strings/ErrorString.cs | 2 +- .../Shapes/{ICircle.cs => ICircleShape.cs} | 2 +- .../Services/ShapeServices/ShapeService.cs | 5 ++ .../CrossSections/RCs/CircleGeometryLogic.cs | 61 ++++++++++++++++ .../CrossSections/RCs/ICircleBeamTemplate.cs | 20 ++++++ .../CrossSections/RCs/RectGeometryLogic.cs | 2 +- .../Primitives/CirclePrimitive.cs | 66 ++++++++++++++++++ .../Primitives/ICirclePrimitive.cs | 13 ++++ .../Primitives/INdmPrimitive.cs | 2 +- .../Primitives/RectanglePrimitive.cs | 8 +-- .../CircleTriangulationLogic.cs | 47 +++++++++++++ .../CircleTriangulationLogicOptions.cs | 38 ++++++++++ .../ICircleTriangulationLogicOptions.cs | 18 +++++ .../IRectangleTriangulationLogicOptions.cs | 14 +--- .../IShapeTriangulationLogicOptions.cs | 25 +++++++ .../ITriangulationLogicOptions.cs | 8 +-- .../Triangulations/PointTriangulationLogic.cs | 2 +- .../PointTriangulationLogicOptions.cs | 18 ++--- .../RectangleTriangulationLogic.cs | 27 ++++--- .../RectangleTriangulationLogicOptions.cs | 17 ++--- .../Triangulations/TriangulationService.cs | 28 ++++++++ .../NdmPrimitives/NdmPrimitivesService.cs | 2 - .../Ndms/SteelSections/ReinforcementTest.cs | 43 ++++++++++-- 37 files changed, 571 insertions(+), 87 deletions(-) create mode 100644 StructureHelper/Infrastructure/UI/DataContexts/CircleViewPrimitive.cs rename StructureHelperCommon/Models/Shapes/{ICircle.cs => ICircleShape.cs} (70%) create mode 100644 StructureHelperLogics/Models/Templates/CrossSections/RCs/CircleGeometryLogic.cs create mode 100644 StructureHelperLogics/Models/Templates/CrossSections/RCs/ICircleBeamTemplate.cs create mode 100644 StructureHelperLogics/NdmCalculations/Primitives/CirclePrimitive.cs create mode 100644 StructureHelperLogics/NdmCalculations/Primitives/ICirclePrimitive.cs create mode 100644 StructureHelperLogics/NdmCalculations/Triangulations/CircleTriangulationLogic.cs create mode 100644 StructureHelperLogics/NdmCalculations/Triangulations/CircleTriangulationLogicOptions.cs create mode 100644 StructureHelperLogics/NdmCalculations/Triangulations/ICircleTriangulationLogicOptions.cs create mode 100644 StructureHelperLogics/NdmCalculations/Triangulations/IShapeTriangulationLogicOptions.cs create mode 100644 StructureHelperLogics/NdmCalculations/Triangulations/TriangulationService.cs diff --git a/StructureHelper/Infrastructure/Enums/PrimitiveType.cs b/StructureHelper/Infrastructure/Enums/PrimitiveType.cs index 7cf1ab0..596226c 100644 --- a/StructureHelper/Infrastructure/Enums/PrimitiveType.cs +++ b/StructureHelper/Infrastructure/Enums/PrimitiveType.cs @@ -3,6 +3,7 @@ public enum PrimitiveType { Point, - Rectangle + Rectangle, + Circle } } \ No newline at end of file diff --git a/StructureHelper/Infrastructure/UI/DataContexts/CircleViewPrimitive.cs b/StructureHelper/Infrastructure/UI/DataContexts/CircleViewPrimitive.cs new file mode 100644 index 0000000..f94a001 --- /dev/null +++ b/StructureHelper/Infrastructure/UI/DataContexts/CircleViewPrimitive.cs @@ -0,0 +1,56 @@ +using StructureHelper.Infrastructure.UI.Converters.Units; +using StructureHelperCommon.Infrastructures.Exceptions; +using StructureHelperCommon.Infrastructures.Strings; +using StructureHelperLogics.NdmCalculations.Primitives; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelper.Infrastructure.UI.DataContexts +{ + public class CircleViewPrimitive : PrimitiveBase, IHasDivision, IHasCenter + { + ICirclePrimitive primitive; + public double Diameter + { get + { + return primitive.Diameter; + } + set + { + primitive.Diameter = value; + RefreshPlacement(); + } + } + public int NdmMinDivision { get; set; } + public double NdmMaxSize { get; set; } + + public double PrimitiveLeft => DeltaX - Diameter / 2d; + public double PrimitiveTop => DeltaY - Diameter / 2d; + + public CircleViewPrimitive(INdmPrimitive primitive) : base(primitive) + { + if (primitive is not ICirclePrimitive) + { + throw new StructureHelperException(ErrorStrings.DataIsInCorrect + $"\nExpected: {nameof(ICirclePrimitive)}, But was: {nameof(primitive)}"); + } + this.primitive = primitive as ICirclePrimitive; + } + + public override INdmPrimitive GetNdmPrimitive() + { + return primitive; + } + + private void RefreshPlacement() + { + OnPropertyChanged(nameof(Diameter)); + OnPropertyChanged(nameof(CenterX)); + OnPropertyChanged(nameof(CenterY)); + OnPropertyChanged(nameof(PrimitiveLeft)); + OnPropertyChanged(nameof(PrimitiveTop)); + } + } +} diff --git a/StructureHelper/Infrastructure/UI/DataContexts/PrimitiveOperations.cs b/StructureHelper/Infrastructure/UI/DataContexts/PrimitiveOperations.cs index 7e3c315..719c60c 100644 --- a/StructureHelper/Infrastructure/UI/DataContexts/PrimitiveOperations.cs +++ b/StructureHelper/Infrastructure/UI/DataContexts/PrimitiveOperations.cs @@ -19,16 +19,21 @@ namespace StructureHelper.Infrastructure.UI.DataContexts ObservableCollection viewItems = new ObservableCollection(); foreach (var item in primitives) { - if (item is IPointPrimitive) - { - var point = item as IPointPrimitive; - viewItems.Add(new PointViewPrimitive(point)); - } - else if (item is IRectanglePrimitive) + if (item is IRectanglePrimitive) { var rect = item as IRectanglePrimitive; viewItems.Add(new RectangleViewPrimitive(rect)); } + else if (item is ICirclePrimitive) + { + var circle = item as ICirclePrimitive; + viewItems.Add(new CircleViewPrimitive(circle)); + } + else if (item is IPointPrimitive) + { + var point = item as IPointPrimitive; + viewItems.Add(new PointViewPrimitive(point)); + } else throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown); } return viewItems; diff --git a/StructureHelper/Infrastructure/UI/DataTemplates/EllipseTemplate.xaml b/StructureHelper/Infrastructure/UI/DataTemplates/EllipseTemplate.xaml index d974201..ce12680 100644 --- a/StructureHelper/Infrastructure/UI/DataTemplates/EllipseTemplate.xaml +++ b/StructureHelper/Infrastructure/UI/DataTemplates/EllipseTemplate.xaml @@ -10,7 +10,7 @@ xmlns:userControls="clr-namespace:StructureHelper.Infrastructure.UI.UserControls" mc:Ignorable="d"> - + @@ -43,6 +43,5 @@ - diff --git a/StructureHelper/Infrastructure/UI/DataTemplates/RectangleTemplate.xaml b/StructureHelper/Infrastructure/UI/DataTemplates/RectangleTemplate.xaml index dc410d2..89eb81a 100644 --- a/StructureHelper/Infrastructure/UI/DataTemplates/RectangleTemplate.xaml +++ b/StructureHelper/Infrastructure/UI/DataTemplates/RectangleTemplate.xaml @@ -52,6 +52,5 @@ - diff --git a/StructureHelper/Libraries/LoaderCalculator.dll b/StructureHelper/Libraries/LoaderCalculator.dll index fc4e08067578ab5c8f212779e1d03bab298d5f48..16ad4e55167c49e6f5ac3a52e96f0b3373374d68 100644 GIT binary patch delta 17521 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 delta 17395 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 CmPfw; diff --git a/StructureHelper/Windows/MainWindow/MainView.xaml b/StructureHelper/Windows/MainWindow/MainView.xaml index 53028ca..0234fdb 100644 --- a/StructureHelper/Windows/MainWindow/MainView.xaml +++ b/StructureHelper/Windows/MainWindow/MainView.xaml @@ -18,6 +18,9 @@ + + + @@ -97,23 +100,24 @@ - + -