From bc867d5db2f1c523375e2f9dbc9e1346047ef4f2 Mon Sep 17 00:00:00 2001 From: Evgeny Redikultsev Date: Thu, 23 Jun 2022 21:52:26 +0500 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20=D1=82=D1=80?= =?UTF-8?q?=D0=B8=D0=B0=D0=BD=D0=B3=D1=83=D0=BB=D1=8F=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?=D1=82=D0=BE=D1=87=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- StructureHelperLogics/Data/Shapes/IPoint.cs | 2 +- ...onLogic.cs => IPointTriangulationLogic.cs} | 2 +- .../Triangulations/PointTriangulationLogic.cs | 4 +- .../Triangulations/Triangulation.cs | 12 +++-- .../Ndms/RCSections/RCSectionTest.cs | 45 ++++++++++--------- 5 files changed, 38 insertions(+), 27 deletions(-) rename StructureHelperLogics/NdmCalculations/Triangulations/{IPointTiangulationLogic.cs => IPointTriangulationLogic.cs} (71%) diff --git a/StructureHelperLogics/Data/Shapes/IPoint.cs b/StructureHelperLogics/Data/Shapes/IPoint.cs index fe39f04..998be59 100644 --- a/StructureHelperLogics/Data/Shapes/IPoint.cs +++ b/StructureHelperLogics/Data/Shapes/IPoint.cs @@ -6,6 +6,6 @@ namespace StructureHelperLogics.Data.Shapes { public interface IPoint : IShape { - double Area { get; set; } + double Area { get; } } } diff --git a/StructureHelperLogics/NdmCalculations/Triangulations/IPointTiangulationLogic.cs b/StructureHelperLogics/NdmCalculations/Triangulations/IPointTriangulationLogic.cs similarity index 71% rename from StructureHelperLogics/NdmCalculations/Triangulations/IPointTiangulationLogic.cs rename to StructureHelperLogics/NdmCalculations/Triangulations/IPointTriangulationLogic.cs index bd9217b..b3d7a8d 100644 --- a/StructureHelperLogics/NdmCalculations/Triangulations/IPointTiangulationLogic.cs +++ b/StructureHelperLogics/NdmCalculations/Triangulations/IPointTriangulationLogic.cs @@ -4,7 +4,7 @@ using System.Text; namespace StructureHelperLogics.NdmCalculations.Triangulations { - interface IPointTiangulationLogic : ITriangulationLogic + interface IPointTriangulationLogic : ITriangulationLogic { } } diff --git a/StructureHelperLogics/NdmCalculations/Triangulations/PointTriangulationLogic.cs b/StructureHelperLogics/NdmCalculations/Triangulations/PointTriangulationLogic.cs index a7660d7..49d53c2 100644 --- a/StructureHelperLogics/NdmCalculations/Triangulations/PointTriangulationLogic.cs +++ b/StructureHelperLogics/NdmCalculations/Triangulations/PointTriangulationLogic.cs @@ -7,11 +7,11 @@ using System.Text; namespace StructureHelperLogics.NdmCalculations.Triangulations { - public class PointTriangulationLogic : IPointTiangulationLogic + public class PointTriangulationLogic : IPointTriangulationLogic { public ITriangulationLogicOptions Options { get; } - public PointTriangulationLogic(IPointTriangulationLogicOptions options) + public PointTriangulationLogic(ITriangulationLogicOptions options) { Options = options; } diff --git a/StructureHelperLogics/NdmCalculations/Triangulations/Triangulation.cs b/StructureHelperLogics/NdmCalculations/Triangulations/Triangulation.cs index e04eebf..b452d87 100644 --- a/StructureHelperLogics/NdmCalculations/Triangulations/Triangulation.cs +++ b/StructureHelperLogics/NdmCalculations/Triangulations/Triangulation.cs @@ -62,16 +62,22 @@ namespace StructureHelperLogics.NdmCalculations.Triangulations IShape shape = primitive.Shape; if (shape is IRectangle) { - IRectangle rectangle = shape as IRectangle; options = new RectangleTriangulationLogicOptions(primitive); - IRectangleTriangulationLogic logic = new RectangleTriangulationLogic(options); + ITriangulationLogic logic = new RectangleTriangulationLogic(options); + ndms.AddRange(logic.GetNdmCollection(material)); + } + else if (shape is IPoint) + { + IPoint point = shape as IPoint; + options = new PointTriangulationLogicOptions(primitive.Center, point.Area); + IPointTriangulationLogic logic = new PointTriangulationLogic(options); ndms.AddRange(logic.GetNdmCollection(material)); } else { throw new Exception("Primitive type is not valid"); } return ndms; } - public static IMaterial GetMaterial(IPrimitiveMaterial primitiveMaterial, ITriangulationOptions options) + private static IMaterial GetMaterial(IPrimitiveMaterial primitiveMaterial, ITriangulationOptions options) { IMaterial material; if (primitiveMaterial.MaterialType == MaterialTypes.Concrete) { material = GetConcreteMaterial(primitiveMaterial, options); } diff --git a/StructureHelperTests/FunctionalTests/Ndms/RCSections/RCSectionTest.cs b/StructureHelperTests/FunctionalTests/Ndms/RCSections/RCSectionTest.cs index dd13903..939c52f 100644 --- a/StructureHelperTests/FunctionalTests/Ndms/RCSections/RCSectionTest.cs +++ b/StructureHelperTests/FunctionalTests/Ndms/RCSections/RCSectionTest.cs @@ -30,8 +30,11 @@ namespace StructureHelperTests.FunctionalTests.Ndms.RCSections double width = 0.4; double height = 0.6; var ndmCollection = new List(); - ndmCollection.AddRange(GetConcreteNdms(width, height)); - ndmCollection.AddRange(GetReinforcementNdms(width, height, topArea, bottomArea)); + ITriangulationOptions options = new TriangulationOptions() { LimiteState = StructureHelperLogics.Infrastructures.CommonEnums.LimitStates.Collapse, CalcTerm = StructureHelperLogics.Infrastructures.CommonEnums.CalcTerms.ShortTerm }; + var primitives = new List(); + primitives.AddRange(GetConcreteNdms(width, height)); + primitives.AddRange(GetReinforcementNdms(width, height, topArea, bottomArea)); + ndmCollection.AddRange(Triangulation.GetNdms(primitives, options)); var loaderData = new LoaderOptions { Preconditions = new Preconditions @@ -55,21 +58,19 @@ namespace StructureHelperTests.FunctionalTests.Ndms.RCSections Assert.AreEqual(expectedEpsilonZ, strainMatrix.EpsZ, ExpectedProcessor.GetAccuracyForExpectedValue(expectedEpsilonZ)); } - private IEnumerable GetConcreteNdms(double width, double height) + private IEnumerable GetConcreteNdms(double width, double height) { double strength = 40e6; ICenter center = new Center() { X = 0, Y = 0 }; IRectangle rectangle = new Rectangle() { Width = width, Height = height, Angle = 0 }; - IPrimitiveMaterial material = new PrimitiveMaterial() { MaterialType = MaterialTypes.Concrete, ClassName = "С20", Strength = strength }; + IPrimitiveMaterial material = new PrimitiveMaterial() { MaterialType = MaterialTypes.Concrete, ClassName = "С40", Strength = strength }; ITriangulationOptions options = new TriangulationOptions() { LimiteState = StructureHelperLogics.Infrastructures.CommonEnums.LimitStates.Collapse, CalcTerm = StructureHelperLogics.Infrastructures.CommonEnums.CalcTerms.ShortTerm }; INdmPrimitive primitive = new NdmPrimitive() { Center = center, Shape = rectangle, PrimitiveMaterial = material, NdmMaxSize = 1, NdmMinDivision = 20 }; - List primitives = new List(); - primitives.Add(primitive); - var ndmCollection = Triangulation.GetNdms(primitives, options); - return ndmCollection; + List primitives = new List {primitive}; + return primitives; } - private IEnumerable GetReinforcementNdms(double width, double height, double topArea, double bottomArea) + private IEnumerable GetReinforcementNdms(double width, double height, double topArea, double bottomArea) { double gap = 0.05d; double strength = 4e8; @@ -77,21 +78,25 @@ namespace StructureHelperTests.FunctionalTests.Ndms.RCSections IShape bottomReinforcement = new Point() { Area = bottomArea }; IPrimitiveMaterial primitiveMaterial = new PrimitiveMaterial() { MaterialType = MaterialTypes.Reinforcement, ClassName = "S400", Strength = strength }; ITriangulationOptions options = new TriangulationOptions() { LimiteState = StructureHelperLogics.Infrastructures.CommonEnums.LimitStates.Collapse, CalcTerm = StructureHelperLogics.Infrastructures.CommonEnums.CalcTerms.ShortTerm }; - IMaterial material = Triangulation.GetMaterial(primitiveMaterial, options); ICenter centerRT = new Center() { X = width / 2 - gap, Y = height / 2 - gap }; ICenter centerLT = new Center() { X = - (width / 2 - gap), Y = height / 2 - gap }; ICenter centerRB = new Center() { X = width / 2 - gap, Y = - (height / 2 - gap) }; ICenter centerLB = new Center() { X = -(width / 2 - gap), Y = - (height / 2 - gap) }; - IPointTriangulationLogicOptions optionsRT = new PointTriangulationLogicOptions(centerRT, topArea); - IPointTriangulationLogicOptions optionsLT = new PointTriangulationLogicOptions(centerLT, topArea); - IPointTriangulationLogicOptions optionsRB = new PointTriangulationLogicOptions(centerRB, bottomArea); - IPointTriangulationLogicOptions optionsLB = new PointTriangulationLogicOptions(centerLB, bottomArea); - var ndmCollection = new List(); - ndmCollection.AddRange((new PointTriangulationLogic(optionsRT)).GetNdmCollection(material)); - ndmCollection.AddRange((new PointTriangulationLogic(optionsLT)).GetNdmCollection(material)); - ndmCollection.AddRange((new PointTriangulationLogic(optionsRB)).GetNdmCollection(material)); - ndmCollection.AddRange((new PointTriangulationLogic(optionsLB)).GetNdmCollection(material)); - return ndmCollection; + List primitives = new List(); + INdmPrimitive primitive; + //Right top bar + primitive = new NdmPrimitive() { Center = centerRT, Shape = topReinforcement, PrimitiveMaterial = primitiveMaterial}; + primitives.Add(primitive); + //Left top bar + primitive = new NdmPrimitive() { Center = centerLT, Shape = topReinforcement, PrimitiveMaterial = primitiveMaterial }; + primitives.Add(primitive); + //Right bottom bar + primitive = new NdmPrimitive() { Center = centerRB, Shape = bottomReinforcement, PrimitiveMaterial = primitiveMaterial }; + primitives.Add(primitive); + //Left bottom bar + primitive = new NdmPrimitive() { Center = centerLB, Shape = bottomReinforcement, PrimitiveMaterial = primitiveMaterial }; + primitives.Add(primitive); + return primitives; } } }