From d7a4b1f0a73734241a90b98aff861a5d1baa19ce Mon Sep 17 00:00:00 2001 From: Evgeny Redikultsev Date: Sun, 16 Jul 2023 17:21:28 +0500 Subject: [PATCH] Crack Calculator was added --- .../UI/DataContexts/CircleViewPrimitive.cs | 7 + .../UI/DataContexts/PointViewPrimitive.cs | 6 +- .../UI/DataContexts/PrimitiveBase.cs | 19 +- .../UI/DataContexts/PrimitiveOperations.cs | 6 +- .../UI/DataContexts/RectangleViewPrimitive.cs | 7 +- .../ReinforcementViewPrimitive.cs | 9 +- .../Libraries/LoaderCalculator.dll | Bin 75264 -> 76288 bytes .../Primitives/Factories/PrimitiveFactory.cs | 81 ------ .../ResultViewers/ShowAnchorageResult.cs | 20 +- StructureHelper/StructureHelper.csproj | 1 + .../ForceCalculatorView.xaml | 3 +- .../ForceCalculatorView.xaml.cs | 1 + .../ForcesResultsView.xaml | 1 + .../Windows/MainWindow/MainView.xaml | 4 +- .../PrimitivePropertiesView.xaml | 233 +++++++++--------- .../PrimitivePropertiesView.xaml.cs | 12 +- .../SelectPrimitivesView.xaml | 5 +- .../SelectPrimitivesView.xaml.cs | 11 +- .../Calculators/ForceCalculatorViewModel.cs | 2 +- .../Calculators/ForcesResultsViewModel.cs | 58 ++++- .../ViewModels/Errors/SafetyProcessor.cs | 30 +++ .../NdmCrossSections/AnalysisVewModelLogic.cs | 56 +++-- .../ICalculatorsViewModelLogic.cs | 3 +- .../PrimitiveViewModelLogic.cs | 20 +- .../PrimitivePropertiesViewModel.cs | 8 +- .../SelectPrimitivesViewModel.cs | 2 +- .../Infrastructures/Exceptions/ErrorString.cs | 1 + .../Calculators/FindParameterCalculator.cs | 81 ++++++ .../Models/Calculators/FindParameterResult.cs | 15 ++ .../Models/Calculators/ICalculator.cs | 9 +- .../Models/Calculators/IResult.cs | 4 +- .../Logics/AccuracyUpdateStrategy.cs | 18 ++ .../Logics/ForceActionUpdateStrategy.cs | 2 +- .../Forces/Logics/ForceTupleUpdateStrategy.cs | 2 +- .../Models/Sections/CompressedMember.cs | 11 +- .../Logics/CompressedMemberUpdateStrategy.cs | 22 ++ .../Logics/CircleShapeUpdateStrategy.cs | 17 ++ .../Shapes/Logics/LineShapeUpdateStrategy.cs | 20 ++ ...trategy.cs => PointShapeUpdateStrategy.cs} | 2 +- .../Logics/RectangleShapeUpdateStrategy.cs | 19 ++ .../Models/Shapes/Point2D.cs | 2 +- .../Services/Calculations/AccuracyService.cs | 13 - .../Sections/CompressedMemberServices.cs | 17 -- .../Services/ShapeServices/ShapeService.cs | 27 -- .../Decorators/IDecoratorOption.cs | 12 + .../Decorators/RestrictStrainDecorator.cs | 57 +++++ .../Decorators/RestrictStrainOption.cs | 28 +++ .../MaterialBuilders/IBearingOption.cs | 19 ++ .../MaterialBuilders/IMaterialBuilder.cs | 15 ++ .../MaterialBuilders/IMaterialOption.cs | 12 + .../MaterialBuilders/IPartialFactor.cs | 15 ++ .../CrossSections/CrossSectionRepository.cs | 5 +- .../CrossSections/ICrossSectionRepository.cs | 3 +- .../CrossSections/CalculatorLogic.cs | 7 +- .../CrossSections/ICalculatorLogic.cs | 9 +- .../CrossSections/RCs/CircleGeometryLogic.cs | 7 +- .../CrossSections/RCs/RectGeometryLogic.cs | 70 +++++- .../CrossSections/RCs/SectionTemplate.cs | 3 +- .../Analyses/ByForces/ForceCalculator.cs | 28 +-- .../Analyses/ByForces/ForceTupleCalculator.cs | 2 +- .../Analyses/ByForces/IForceCalculator.cs | 4 +- .../ByForces/IForceTupleCalculator.cs | 2 +- .../Analyses/ByForces/IForcesResults.cs | 5 +- .../Analyses/ByForces/IForcesTupleResult.cs | 3 +- .../Logics/ForceCalculatorUpdateStrategy.cs | 26 ++ .../Analyses/Geometry/GeometryCalculator.cs | 3 +- .../Analyses/Geometry/IGeometryCalculator.cs | 8 +- .../Analyses/Geometry/IGeometryResult.cs | 5 +- .../Logics/CalculatorUpdateStrategy.cs | 31 +++ .../Analyses/RC/InputDataFactory.cs | 6 +- .../Buckling/ConcreteBucklingCalculator.cs | 2 +- .../Buckling/IConcreteBucklingCalculator.cs | 2 +- .../Buckling/IConcreteBucklingResult.cs | 5 +- .../Cracking/CrackForceCalculator.cs | 100 ++++++++ .../Cracking/CrackForceResult.cs | 19 ++ .../NdmCalculations/Cracking/CrackedLogic.cs | 34 +++ .../Cracking/ExponentialSofteningLogic.cs | 59 +++++ .../Cracking/HoleSectionCrackedLogic.cs | 47 ++++ .../Cracking/ICrackSofteningLogic.cs | 13 + .../NdmCalculations/Cracking/ICrackedLogic.cs | 18 ++ .../Cracking/ISectionCrackedLogic.cs | 17 ++ .../Primitives/CirclePrimitive.cs | 40 +-- .../Primitives/INdmPrimitive.cs | 3 +- .../Primitives/LinePrimitive.cs | 12 +- .../Primitives/Logics/BaseUpdateStrategy.cs | 30 +++ .../Primitives/Logics/CircleUpdateStrategy.cs | 24 ++ .../Logics/DivisionPropsUpdateStrategy.cs | 19 ++ .../Logics/NdmPrimitiveUpdateStrategy.cs | 35 +++ .../Primitives/Logics/PointUpdateStrategy.cs | 20 ++ .../Primitives/Logics/RebarUpdateStrategy.cs | 20 ++ .../Logics/RectangleUpdateStrategy.cs | 23 ++ .../Logics/VisualPropsUpdateStrategy.cs | 21 ++ .../Primitives/PointPrimitive.cs | 14 +- ...orcementPrimitive.cs => RebarPrimitive.cs} | 23 +- .../Primitives/RectanglePrimitive.cs | 32 +-- .../CircleTriangulationLogicOptions.cs | 2 +- .../PointTriangulationLogicOptions.cs | 2 +- .../RectangleTriangulationLogicOptions.cs | 2 +- .../NdmCalculations/InterpolateService.cs | 11 +- .../NdmPrimitives/NdmPrimitivesService.cs | 26 -- .../NdmPrimitives/TextParametersLogic.cs | 2 - .../CrackCalculatorTest.cs | 41 +++ .../Ndms/RCSections/RCSectionTest.cs | 18 +- .../Ndms/SteelSections/ReinforcementTest.cs | 4 +- .../UnitTests/Calcuators/FindParameterTest.cs | 49 ++++ .../MaterialTests/MaterialStrengthTest.cs | 7 +- .../RectangleTriangulationTest.cs | 18 +- .../ViewModelTests/NdmPrimitiveTests.cs | 2 +- 108 files changed, 1523 insertions(+), 565 deletions(-) delete mode 100644 StructureHelper/Models/Primitives/Factories/PrimitiveFactory.cs create mode 100644 StructureHelper/Windows/ViewModels/Errors/SafetyProcessor.cs create mode 100644 StructureHelperCommon/Models/Calculators/FindParameterCalculator.cs create mode 100644 StructureHelperCommon/Models/Calculators/FindParameterResult.cs rename StructureHelperLogics/NdmCalculations/Analyses/INdmCalculator.cs => StructureHelperCommon/Models/Calculators/ICalculator.cs (64%) rename StructureHelperLogics/NdmCalculations/Analyses/INdmResult.cs => StructureHelperCommon/Models/Calculators/IResult.cs (77%) create mode 100644 StructureHelperCommon/Models/Calculators/Logics/AccuracyUpdateStrategy.cs create mode 100644 StructureHelperCommon/Models/Sections/Logics/CompressedMemberUpdateStrategy.cs create mode 100644 StructureHelperCommon/Models/Shapes/Logics/CircleShapeUpdateStrategy.cs create mode 100644 StructureHelperCommon/Models/Shapes/Logics/LineShapeUpdateStrategy.cs rename StructureHelperCommon/Models/Shapes/Logics/{PointUpdateStrategy.cs => PointShapeUpdateStrategy.cs} (87%) create mode 100644 StructureHelperCommon/Models/Shapes/Logics/RectangleShapeUpdateStrategy.cs delete mode 100644 StructureHelperCommon/Services/Calculations/AccuracyService.cs delete mode 100644 StructureHelperCommon/Services/Sections/CompressedMemberServices.cs delete mode 100644 StructureHelperCommon/Services/ShapeServices/ShapeService.cs create mode 100644 StructureHelperLogics/MaterialBuilders/Decorators/IDecoratorOption.cs create mode 100644 StructureHelperLogics/MaterialBuilders/Decorators/RestrictStrainDecorator.cs create mode 100644 StructureHelperLogics/MaterialBuilders/Decorators/RestrictStrainOption.cs create mode 100644 StructureHelperLogics/MaterialBuilders/IBearingOption.cs create mode 100644 StructureHelperLogics/MaterialBuilders/IMaterialBuilder.cs create mode 100644 StructureHelperLogics/MaterialBuilders/IMaterialOption.cs create mode 100644 StructureHelperLogics/MaterialBuilders/IPartialFactor.cs create mode 100644 StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/ForceCalculatorUpdateStrategy.cs create mode 100644 StructureHelperLogics/NdmCalculations/Analyses/Logics/CalculatorUpdateStrategy.cs create mode 100644 StructureHelperLogics/NdmCalculations/Cracking/CrackForceCalculator.cs create mode 100644 StructureHelperLogics/NdmCalculations/Cracking/CrackForceResult.cs create mode 100644 StructureHelperLogics/NdmCalculations/Cracking/CrackedLogic.cs create mode 100644 StructureHelperLogics/NdmCalculations/Cracking/ExponentialSofteningLogic.cs create mode 100644 StructureHelperLogics/NdmCalculations/Cracking/HoleSectionCrackedLogic.cs create mode 100644 StructureHelperLogics/NdmCalculations/Cracking/ICrackSofteningLogic.cs create mode 100644 StructureHelperLogics/NdmCalculations/Cracking/ICrackedLogic.cs create mode 100644 StructureHelperLogics/NdmCalculations/Cracking/ISectionCrackedLogic.cs create mode 100644 StructureHelperLogics/NdmCalculations/Primitives/Logics/BaseUpdateStrategy.cs create mode 100644 StructureHelperLogics/NdmCalculations/Primitives/Logics/CircleUpdateStrategy.cs create mode 100644 StructureHelperLogics/NdmCalculations/Primitives/Logics/DivisionPropsUpdateStrategy.cs create mode 100644 StructureHelperLogics/NdmCalculations/Primitives/Logics/NdmPrimitiveUpdateStrategy.cs create mode 100644 StructureHelperLogics/NdmCalculations/Primitives/Logics/PointUpdateStrategy.cs create mode 100644 StructureHelperLogics/NdmCalculations/Primitives/Logics/RebarUpdateStrategy.cs create mode 100644 StructureHelperLogics/NdmCalculations/Primitives/Logics/RectangleUpdateStrategy.cs create mode 100644 StructureHelperLogics/NdmCalculations/Primitives/Logics/VisualPropsUpdateStrategy.cs rename StructureHelperLogics/NdmCalculations/Primitives/{ReinforcementPrimitive.cs => RebarPrimitive.cs} (78%) create mode 100644 StructureHelperTests/FunctionalTests/Ndms/Calculators/CrackCalculatorTests/CrackCalculatorTest.cs create mode 100644 StructureHelperTests/UnitTests/Calcuators/FindParameterTest.cs diff --git a/StructureHelper/Infrastructure/UI/DataContexts/CircleViewPrimitive.cs b/StructureHelper/Infrastructure/UI/DataContexts/CircleViewPrimitive.cs index 9523ad0..748b9ed 100644 --- a/StructureHelper/Infrastructure/UI/DataContexts/CircleViewPrimitive.cs +++ b/StructureHelper/Infrastructure/UI/DataContexts/CircleViewPrimitive.cs @@ -53,5 +53,12 @@ namespace StructureHelper.Infrastructure.UI.DataContexts OnPropertyChanged(nameof(PrimitiveLeft)); OnPropertyChanged(nameof(PrimitiveTop)); } + public override void Refresh() + { + OnPropertyChanged(nameof(Diameter)); + OnPropertyChanged(nameof(PrimitiveLeft)); + OnPropertyChanged(nameof(PrimitiveTop)); + base.Refresh(); + } } } diff --git a/StructureHelper/Infrastructure/UI/DataContexts/PointViewPrimitive.cs b/StructureHelper/Infrastructure/UI/DataContexts/PointViewPrimitive.cs index cff5884..bc5d969 100644 --- a/StructureHelper/Infrastructure/UI/DataContexts/PointViewPrimitive.cs +++ b/StructureHelper/Infrastructure/UI/DataContexts/PointViewPrimitive.cs @@ -42,7 +42,11 @@ namespace StructureHelper.Infrastructure.UI.DataContexts { return primitive; } - + public override void Refresh() + { + RefreshPlacement(); + base.Refresh(); + } private void RefreshPlacement() { OnPropertyChanged(nameof(Area)); diff --git a/StructureHelper/Infrastructure/UI/DataContexts/PrimitiveBase.cs b/StructureHelper/Infrastructure/UI/DataContexts/PrimitiveBase.cs index 931a22b..b280374 100644 --- a/StructureHelper/Infrastructure/UI/DataContexts/PrimitiveBase.cs +++ b/StructureHelper/Infrastructure/UI/DataContexts/PrimitiveBase.cs @@ -39,19 +39,19 @@ namespace StructureHelper.Infrastructure.UI.DataContexts } public double CenterX { - get => primitive.CenterX; + get => primitive.Center.X; set { - primitive.CenterX = value; + primitive.Center.X = value; OnPropertyChanged(nameof(CenterX)); } } public double CenterY { - get => primitive.CenterY; + get => primitive.Center.Y; set { - primitive.CenterY = value; + primitive.Center.Y = value; OnPropertyChanged(nameof(CenterY)); OnPropertyChanged(nameof(InvertedCenterY)); } @@ -261,5 +261,16 @@ namespace StructureHelper.Infrastructure.UI.DataContexts { OnPropertyChanged(nameof(Color)); } + public virtual void Refresh() + { + OnPropertyChanged(nameof(Name)); + OnPropertyChanged(nameof(Color)); + OnPropertyChanged(nameof(CenterX)); + OnPropertyChanged(nameof(CenterY)); + OnPropertyChanged(nameof(SetMaterialColor)); + OnPropertyChanged(nameof(Triangulate)); + OnPropertyChanged(nameof(PrimitiveWidth)); + OnPropertyChanged(nameof(PrimitiveHeight)); + } } } diff --git a/StructureHelper/Infrastructure/UI/DataContexts/PrimitiveOperations.cs b/StructureHelper/Infrastructure/UI/DataContexts/PrimitiveOperations.cs index ff76ad7..1f963a0 100644 --- a/StructureHelper/Infrastructure/UI/DataContexts/PrimitiveOperations.cs +++ b/StructureHelper/Infrastructure/UI/DataContexts/PrimitiveOperations.cs @@ -35,14 +35,14 @@ namespace StructureHelper.Infrastructure.UI.DataContexts var circle = primitive as ICirclePrimitive; viewItem = new CircleViewPrimitive(circle); } - else if (primitive is IPointPrimitive & primitive is not ReinforcementPrimitive) + else if (primitive is IPointPrimitive & primitive is not RebarPrimitive) { var point = primitive as IPointPrimitive; viewItem = new PointViewPrimitive(point); } - else if (primitive is ReinforcementPrimitive) + else if (primitive is RebarPrimitive) { - var point = primitive as ReinforcementPrimitive; + var point = primitive as RebarPrimitive; viewItem = new ReinforcementViewPrimitive(point); } else throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown + $". Actual type: {primitive.GetType()}"); diff --git a/StructureHelper/Infrastructure/UI/DataContexts/RectangleViewPrimitive.cs b/StructureHelper/Infrastructure/UI/DataContexts/RectangleViewPrimitive.cs index 3f08950..f286553 100644 --- a/StructureHelper/Infrastructure/UI/DataContexts/RectangleViewPrimitive.cs +++ b/StructureHelper/Infrastructure/UI/DataContexts/RectangleViewPrimitive.cs @@ -42,7 +42,12 @@ namespace StructureHelper.Infrastructure.UI.DataContexts primitive = _primitive; DivisionViewModel = new HasDivisionViewModel(primitive); } - + public override void Refresh() + { + OnPropertyChanged(nameof(PrimitiveLeft)); + OnPropertyChanged(nameof(PrimitiveTop)); + base.Refresh(); + } public override INdmPrimitive GetNdmPrimitive() { return primitive; diff --git a/StructureHelper/Infrastructure/UI/DataContexts/ReinforcementViewPrimitive.cs b/StructureHelper/Infrastructure/UI/DataContexts/ReinforcementViewPrimitive.cs index 4d869a6..e644160 100644 --- a/StructureHelper/Infrastructure/UI/DataContexts/ReinforcementViewPrimitive.cs +++ b/StructureHelper/Infrastructure/UI/DataContexts/ReinforcementViewPrimitive.cs @@ -9,7 +9,7 @@ namespace StructureHelper.Infrastructure.UI.DataContexts { public class ReinforcementViewPrimitive : PointViewPrimitive, IHasHostPrimitive { - ReinforcementPrimitive primitive; + RebarPrimitive primitive; public INdmPrimitive HostPrimitive { @@ -21,9 +21,14 @@ namespace StructureHelper.Infrastructure.UI.DataContexts } } - public ReinforcementViewPrimitive(ReinforcementPrimitive _primitive) : base(_primitive) + public ReinforcementViewPrimitive(RebarPrimitive _primitive) : base(_primitive) { primitive = _primitive; } + public override void Refresh() + { + OnPropertyChanged(nameof(HostPrimitive)); + base.Refresh(); + } } } diff --git a/StructureHelper/Libraries/LoaderCalculator.dll b/StructureHelper/Libraries/LoaderCalculator.dll index 9a7406a4bf658ea56357d7b3754d968238813c80..a41eb6eaed3bb98b83f83a9ff80b4222f130a409 100644 GIT binary patch delta 28385 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 Ydt~5do16NgGdYZIy_x=FxF7KU0ER6~4*&oF delta 27377 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 diff --git a/StructureHelper/Models/Primitives/Factories/PrimitiveFactory.cs b/StructureHelper/Models/Primitives/Factories/PrimitiveFactory.cs deleted file mode 100644 index 3f68c55..0000000 --- a/StructureHelper/Models/Primitives/Factories/PrimitiveFactory.cs +++ /dev/null @@ -1,81 +0,0 @@ -using StructureHelper.Infrastructure.UI.DataContexts; -using StructureHelper.Models.Materials; -using StructureHelperCommon.Infrastructures.Enums; -using StructureHelperLogics.Models.Primitives; -using StructureHelperLogics.Models.Templates.RCs; -using StructureHelperLogics.NdmCalculations.Primitives; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace StructureHelper.Models.Primitives.Factories -{ - internal static class PrimitiveFactory - { - public static IEnumerable GetRectangleRCElement(RectangleBeamTemplate template, IHeadMaterial concrete, IHeadMaterial reinforcement) - { - List primitives = new List(); - var rect = template.Shape as StructureHelperCommon.Models.Shapes.RectangleShape; - var width = rect.Width; - var height = rect.Height; - var area1 = Math.PI * template.BottomDiameter * template.BottomDiameter / 4d; - var area2 = Math.PI * template.TopDiameter * template.TopDiameter / 4d; - var gap = template.CoverGap; - - double[] xs = new double[] { -width / 2 + gap, width / 2 - gap }; - double[] ys = new double[] { -height / 2 + gap, height / 2 - gap }; - - var rectangle = new RectanglePrimitive() { Width = width, Height = height, Name = "Concrete block" }; - primitives.Add(new RectangleViewPrimitive(rectangle) { HeadMaterial = concrete}); - var point = new PointPrimitive() { CenterX = xs[0], CenterY = ys[0], Area = area1}; - var viewPoint = new PointViewPrimitive(point) { HeadMaterial = reinforcement, Name = "Left bottom point" }; - viewPoint.RegisterDeltas(xs[0], ys[0]); - primitives.Add(viewPoint); - point = new PointPrimitive() {CenterX = xs[1], CenterY = ys[0], Area = area1 }; - viewPoint = new PointViewPrimitive(point) { HeadMaterial = reinforcement, Name = "Right bottom point" }; - primitives.Add(viewPoint); - point = new PointPrimitive() { CenterX = xs[0], CenterY = ys[1], Area = area2 }; - viewPoint = new PointViewPrimitive(point) { HeadMaterial = reinforcement, Name = "Left top point" }; - primitives.Add(viewPoint); - point = new PointPrimitive() { CenterX = xs[1], CenterY = ys[1], Area = area2 }; - viewPoint = new PointViewPrimitive(point) { HeadMaterial = reinforcement, Name = "Right top point" }; - viewPoint.RegisterDeltas(xs[1], ys[1]); - primitives.Add(viewPoint); - - if (template.WidthCount > 2) - { - int count = template.WidthCount - 1; - double dist = (xs[1] - xs[0]) / count; - for (int i = 1; i < count; i++) - { - point = new PointPrimitive() {CenterX = xs[0] + dist * i, CenterY = ys[0], Area = area1 }; - viewPoint = new PointViewPrimitive(point) { HeadMaterial = reinforcement, Name = $"Bottom point {i}" }; - primitives.Add(viewPoint); - - point = new PointPrimitive() { CenterX = xs[0] + dist * i, CenterY = ys[1], Area = area2 }; - viewPoint = new PointViewPrimitive(point) { HeadMaterial = reinforcement, Name = $"Top point {i}" }; - primitives.Add(viewPoint); - } - } - if (template.HeightCount > 2) - { - int count = template.HeightCount - 1; - double dist = (ys[1] - ys[0]) / count; - for (int i = 1; i < count; i++) - { - point = new PointPrimitive() {CenterX = xs[0], CenterY = ys[0] + dist * i, Area = area1 }; - viewPoint = new PointViewPrimitive(point) { HeadMaterial = reinforcement, Name = $"Left point {i}" }; - primitives.Add(viewPoint); - - point = new PointPrimitive() { CenterX = xs[1], CenterY = ys[0] + dist * i, Area = area1 }; - viewPoint = new PointViewPrimitive(point) { HeadMaterial = reinforcement, Name = $"Right point {i}" }; - primitives.Add(viewPoint); - } - } - return primitives; - } - } -} diff --git a/StructureHelper/Services/ResultViewers/ShowAnchorageResult.cs b/StructureHelper/Services/ResultViewers/ShowAnchorageResult.cs index 0ac9c22..4f90733 100644 --- a/StructureHelper/Services/ResultViewers/ShowAnchorageResult.cs +++ b/StructureHelper/Services/ResultViewers/ShowAnchorageResult.cs @@ -50,9 +50,9 @@ namespace StructureHelper.Services.ResultViewers List primitives = new List(); foreach (var item in ndmPrimitives) { - if (item is ReinforcementPrimitive) + if (item is RebarPrimitive) { - var primitive = item as ReinforcementPrimitive; + var primitive = item as RebarPrimitive; var inputData = InputDataFactory.GetInputData(primitive, strainMatrix, limitState, calcTerm, 1d); if (fullStrength == true) { @@ -73,9 +73,9 @@ namespace StructureHelper.Services.ResultViewers List primitives = new List(); foreach (var item in ndmPrimitives) { - if (item is ReinforcementPrimitive) + if (item is RebarPrimitive) { - var primitive = item as ReinforcementPrimitive; + var primitive = item as RebarPrimitive; var inputData = InputDataFactory.GetInputData(primitive, strainMatrix, limitState, calcTerm, 1d); var calculator = new AnchorageCalculator(inputData); var val = calculator.GetBaseDevLength() * UnitConstants.Length; @@ -92,9 +92,9 @@ namespace StructureHelper.Services.ResultViewers List primitives = new List(); foreach (var item in ndmPrimitives) { - if (item is ReinforcementPrimitive) + if (item is RebarPrimitive) { - var primitive = item as ReinforcementPrimitive; + var primitive = item as RebarPrimitive; var inputData = InputDataFactory.GetInputData(primitive, strainMatrix, limitState, calcTerm, 1d); if (fullStrength == true) { @@ -116,9 +116,9 @@ namespace StructureHelper.Services.ResultViewers List primitives = new List(); foreach (var item in ndmPrimitives) { - if (item is ReinforcementPrimitive) + if (item is RebarPrimitive) { - var primitive = item as ReinforcementPrimitive; + var primitive = item as RebarPrimitive; var inputData = InputDataFactory.GetInputData(primitive, strainMatrix, limitState, calcTerm, lapperdCountRate); if (fullStrength == true) { @@ -138,8 +138,8 @@ namespace StructureHelper.Services.ResultViewers { var valuePrimitive = new FieldVisualizer.Entities.Values.Primitives.CirclePrimitive() { - CenterX = primitive.CenterX, - CenterY = primitive.CenterY, + CenterX = primitive.Center.X, + CenterY = primitive.Center.Y, Diameter = Math.Sqrt(primitive.Area / Math.PI) * 2, Value = val }; diff --git a/StructureHelper/StructureHelper.csproj b/StructureHelper/StructureHelper.csproj index 2a86384..76dd3e7 100644 --- a/StructureHelper/StructureHelper.csproj +++ b/StructureHelper/StructureHelper.csproj @@ -50,6 +50,7 @@ + diff --git a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ForceCalculatorViews/ForceCalculatorView.xaml b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ForceCalculatorViews/ForceCalculatorView.xaml index 411ecb2..32c082d 100644 --- a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ForceCalculatorViews/ForceCalculatorView.xaml +++ b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ForceCalculatorViews/ForceCalculatorView.xaml @@ -16,7 +16,7 @@ - + @@ -92,5 +92,6 @@ + diff --git a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ForceCalculatorViews/ForceCalculatorView.xaml.cs b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ForceCalculatorViews/ForceCalculatorView.xaml.cs index a92b889..0e7ae6b 100644 --- a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ForceCalculatorViews/ForceCalculatorView.xaml.cs +++ b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ForceCalculatorViews/ForceCalculatorView.xaml.cs @@ -25,6 +25,7 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalcu public ForceCalculatorView(ForceCalculatorViewModel _forceCalculatorViewModel) { viewModel = _forceCalculatorViewModel; + viewModel.ParentWindow = this; DataContext = viewModel; InitializeComponent(); } diff --git a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ForceCalculatorViews/ForcesResultsView.xaml b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ForceCalculatorViews/ForcesResultsView.xaml index ef7698c..4eda487 100644 --- a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ForceCalculatorViews/ForcesResultsView.xaml +++ b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ForceCalculatorViews/ForcesResultsView.xaml @@ -46,6 +46,7 @@