From 5a9e7c3c4f3f04c4b89db2df52af8d4dc480736d Mon Sep 17 00:00:00 2001 From: Evgeny Redikultsev Date: Sun, 8 Sep 2024 21:10:18 +0500 Subject: [PATCH] Objects of NdmElement were added --- DataAccess/DTOs/CirclePrimitiveDTO.cs | 13 +++++ DataAccess/DTOs/NdmPrimitiveDTO.cs | 35 ++++++++++++++ .../Forces/Logics/ForceTupleUpdateStrategy.cs | 2 +- .../Primitives/CirclePrimitive.cs | 2 +- .../NdmCalculations/Primitives/INdmElement.cs | 37 +++++++++++++++ .../Primitives/INdmPrimitive.cs | 1 + .../Primitives/Logics/BaseUpdateStrategy.cs | 2 + .../Logics/INdmElementUpdateStrategy.cs | 42 +++++++++++++++++ .../NdmCalculations/Primitives/NdmElement.cs | 47 +++++++++++++++++++ .../Primitives/PointPrimitive.cs | 1 + .../Primitives/RebarPrimitive.cs | 1 + .../Primitives/RectanglePrimitive.cs | 2 + 12 files changed, 183 insertions(+), 2 deletions(-) create mode 100644 DataAccess/DTOs/CirclePrimitiveDTO.cs create mode 100644 DataAccess/DTOs/NdmPrimitiveDTO.cs create mode 100644 StructureHelperLogics/NdmCalculations/Primitives/INdmElement.cs create mode 100644 StructureHelperLogics/NdmCalculations/Primitives/Logics/INdmElementUpdateStrategy.cs create mode 100644 StructureHelperLogics/NdmCalculations/Primitives/NdmElement.cs diff --git a/DataAccess/DTOs/CirclePrimitiveDTO.cs b/DataAccess/DTOs/CirclePrimitiveDTO.cs new file mode 100644 index 0000000..8df3566 --- /dev/null +++ b/DataAccess/DTOs/CirclePrimitiveDTO.cs @@ -0,0 +1,13 @@ +using StructureHelperLogics.NdmCalculations.Primitives; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataAccess.DTOs +{ + public class CirclePrimitiveDTO + { + } +} diff --git a/DataAccess/DTOs/NdmPrimitiveDTO.cs b/DataAccess/DTOs/NdmPrimitiveDTO.cs new file mode 100644 index 0000000..e24b87c --- /dev/null +++ b/DataAccess/DTOs/NdmPrimitiveDTO.cs @@ -0,0 +1,35 @@ +using Newtonsoft.Json; +using StructureHelper.Models.Materials; +using StructureHelperCommon.Models.Forces; +using StructureHelperCommon.Models.Shapes; +using StructureHelperLogics.NdmCalculations.Primitives; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataAccess.DTOs +{ + public class NdmPrimitiveDTO : INdmElement + { + [JsonProperty("Id")] + public Guid Id { get; set; } + [JsonProperty("Center")] + public IPoint2D Center { get; set; } + [JsonProperty("HeadMaterial")] + public IHeadMaterial? HeadMaterial { get; set; } + [JsonProperty("Triangulate")] + public bool Triangulate { get; set; } + [JsonProperty("UserPrestrain")] + public StrainTuple UsersPrestrain { get; } = new StrainTuple(); + [JsonIgnore] + public StrainTuple AutoPrestrain => throw new NotImplementedException(); + + + public object Clone() + { + throw new NotImplementedException(); + } + } +} diff --git a/StructureHelperCommon/Models/Forces/Logics/ForceTupleUpdateStrategy.cs b/StructureHelperCommon/Models/Forces/Logics/ForceTupleUpdateStrategy.cs index 650e7db..75f00ab 100644 --- a/StructureHelperCommon/Models/Forces/Logics/ForceTupleUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Forces/Logics/ForceTupleUpdateStrategy.cs @@ -13,8 +13,8 @@ namespace StructureHelperCommon.Models.Forces { public void Update(IForceTuple targetObject, IForceTuple sourceObject) { + CheckObject.IsNull(targetObject, sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } - CheckObject.CompareTypes(targetObject, sourceObject); targetObject.Mx = sourceObject.Mx; targetObject.My = sourceObject.My; diff --git a/StructureHelperLogics/NdmCalculations/Primitives/CirclePrimitive.cs b/StructureHelperLogics/NdmCalculations/Primitives/CirclePrimitive.cs index 2275ee7..f525154 100644 --- a/StructureHelperLogics/NdmCalculations/Primitives/CirclePrimitive.cs +++ b/StructureHelperLogics/NdmCalculations/Primitives/CirclePrimitive.cs @@ -28,7 +28,7 @@ namespace StructureHelperLogics.NdmCalculations.Primitives public bool ClearUnderlying { get; set; } public bool Triangulate { get; set; } public ICrossSection? CrossSection { get; set; } - + public INdmElement NdmElement { get; } = new NdmElement(); public CirclePrimitive(Guid id) { diff --git a/StructureHelperLogics/NdmCalculations/Primitives/INdmElement.cs b/StructureHelperLogics/NdmCalculations/Primitives/INdmElement.cs new file mode 100644 index 0000000..e600468 --- /dev/null +++ b/StructureHelperLogics/NdmCalculations/Primitives/INdmElement.cs @@ -0,0 +1,37 @@ +using StructureHelper.Models.Materials; +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models.Forces; +using StructureHelperCommon.Models.Shapes; +using StructureHelperLogics.Models.CrossSections; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.NdmCalculations.Primitives +{ + public interface INdmElement : ISaveable, ICloneable + { + /// + /// Base point of primitive + /// + IPoint2D Center { get; } + /// + /// Material of primitive + /// + IHeadMaterial? HeadMaterial { get; set; } + /// + /// Flag of triangulation + /// + bool Triangulate { get; set; } + /// + /// Prestrain assigned from user + /// + StrainTuple UsersPrestrain { get; } + /// + /// Prestrain assigned from calculations + /// + StrainTuple AutoPrestrain { get; } + } +} diff --git a/StructureHelperLogics/NdmCalculations/Primitives/INdmPrimitive.cs b/StructureHelperLogics/NdmCalculations/Primitives/INdmPrimitive.cs index e3621b3..c46eefc 100644 --- a/StructureHelperLogics/NdmCalculations/Primitives/INdmPrimitive.cs +++ b/StructureHelperLogics/NdmCalculations/Primitives/INdmPrimitive.cs @@ -23,6 +23,7 @@ namespace StructureHelperLogics.NdmCalculations.Primitives /// Name of primitive /// string? Name { get; set; } + INdmElement NdmElement { get;} /// /// Base point of primitive /// diff --git a/StructureHelperLogics/NdmCalculations/Primitives/Logics/BaseUpdateStrategy.cs b/StructureHelperLogics/NdmCalculations/Primitives/Logics/BaseUpdateStrategy.cs index b593b2c..b014d29 100644 --- a/StructureHelperLogics/NdmCalculations/Primitives/Logics/BaseUpdateStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Primitives/Logics/BaseUpdateStrategy.cs @@ -2,6 +2,7 @@ using StructureHelperCommon.Models.Forces; using StructureHelperCommon.Models.Shapes; using StructureHelperCommon.Models.Shapes.Logics; +using StructureHelperCommon.Services; using StructureHelperCommon.Services.Forces; using System; using System.Collections.Generic; @@ -19,6 +20,7 @@ namespace StructureHelperLogics.NdmCalculations.Primitives public void Update(INdmPrimitive targetObject, INdmPrimitive sourceObject) { + CheckObject.IsNull(targetObject, sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Name = sourceObject.Name; if (sourceObject.HeadMaterial != null) targetObject.HeadMaterial = sourceObject.HeadMaterial; diff --git a/StructureHelperLogics/NdmCalculations/Primitives/Logics/INdmElementUpdateStrategy.cs b/StructureHelperLogics/NdmCalculations/Primitives/Logics/INdmElementUpdateStrategy.cs new file mode 100644 index 0000000..a160117 --- /dev/null +++ b/StructureHelperLogics/NdmCalculations/Primitives/Logics/INdmElementUpdateStrategy.cs @@ -0,0 +1,42 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models.Forces; +using StructureHelperCommon.Models.Shapes; +using StructureHelperCommon.Services; + +namespace StructureHelperLogics.NdmCalculations.Primitives.Logics +{ + public class INdmElementUpdateStrategy : IUpdateStrategy + { + private readonly IUpdateStrategy point2DUpdateStrategy; + private readonly IUpdateStrategy tupleUpdateStrategy; + + public INdmElementUpdateStrategy(IUpdateStrategy point2DUpdateStrategy, + IUpdateStrategy tupleUpdateStrategy) + { + this.point2DUpdateStrategy = point2DUpdateStrategy; + this.tupleUpdateStrategy = tupleUpdateStrategy; + } + + public INdmElementUpdateStrategy() : this ( + new Point2DUpdateStrategy(), + new ForceTupleUpdateStrategy()) + { + + } + + /// + public void Update(INdmElement targetObject, INdmElement sourceObject) + { + CheckObject.IsNull(targetObject, sourceObject); + if (ReferenceEquals(targetObject, sourceObject)) { return; } + + point2DUpdateStrategy.Update(targetObject.Center, sourceObject.Center); + if (sourceObject.HeadMaterial != null) + { + targetObject.HeadMaterial = sourceObject.HeadMaterial; + } + targetObject.Triangulate = sourceObject.Triangulate; + tupleUpdateStrategy.Update(targetObject.UsersPrestrain, sourceObject.UsersPrestrain); + } + } +} diff --git a/StructureHelperLogics/NdmCalculations/Primitives/NdmElement.cs b/StructureHelperLogics/NdmCalculations/Primitives/NdmElement.cs new file mode 100644 index 0000000..60851f3 --- /dev/null +++ b/StructureHelperLogics/NdmCalculations/Primitives/NdmElement.cs @@ -0,0 +1,47 @@ +using StructureHelper.Models.Materials; +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models.Forces; +using StructureHelperCommon.Models.Shapes; +using StructureHelperLogics.Models.CrossSections; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.NdmCalculations.Primitives +{ + /// + public class NdmElement : INdmElement + { + private IUpdateStrategy updateStrategy; + /// + public Guid Id { get; } + /// + public IPoint2D Center { get; } = new Point2D(); + /// + public IHeadMaterial? HeadMaterial { get; set; } + /// + public bool Triangulate { get; set; } + /// + public StrainTuple UsersPrestrain { get; } = new(); + /// + public StrainTuple AutoPrestrain { get; } = new(); + + public NdmElement(Guid id) + { + Id = id; + } + + public NdmElement() : this(Guid.NewGuid()) + { + + } + + /// + public object Clone() + { + throw new NotImplementedException(); + } + } +} diff --git a/StructureHelperLogics/NdmCalculations/Primitives/PointPrimitive.cs b/StructureHelperLogics/NdmCalculations/Primitives/PointPrimitive.cs index 5540e02..cdf395a 100644 --- a/StructureHelperLogics/NdmCalculations/Primitives/PointPrimitive.cs +++ b/StructureHelperLogics/NdmCalculations/Primitives/PointPrimitive.cs @@ -26,6 +26,7 @@ namespace StructureHelperLogics.Models.Primitives public bool Triangulate { get; set; } public ICrossSection? CrossSection { get; set; } + public INdmElement NdmElement { get; } = new NdmElement(); public PointPrimitive(Guid id) { diff --git a/StructureHelperLogics/NdmCalculations/Primitives/RebarPrimitive.cs b/StructureHelperLogics/NdmCalculations/Primitives/RebarPrimitive.cs index 97d3c75..a0a1787 100644 --- a/StructureHelperLogics/NdmCalculations/Primitives/RebarPrimitive.cs +++ b/StructureHelperLogics/NdmCalculations/Primitives/RebarPrimitive.cs @@ -47,6 +47,7 @@ namespace StructureHelperLogics.NdmCalculations.Primitives /// public ICrossSection? CrossSection { get; set; } + public INdmElement NdmElement { get; } = new NdmElement(); public RebarPrimitive(Guid id) { diff --git a/StructureHelperLogics/NdmCalculations/Primitives/RectanglePrimitive.cs b/StructureHelperLogics/NdmCalculations/Primitives/RectanglePrimitive.cs index 6007b60..0537b4b 100644 --- a/StructureHelperLogics/NdmCalculations/Primitives/RectanglePrimitive.cs +++ b/StructureHelperLogics/NdmCalculations/Primitives/RectanglePrimitive.cs @@ -29,6 +29,8 @@ namespace StructureHelperLogics.NdmCalculations.Primitives public IPoint2D Center { get; private set; } + public INdmElement NdmElement { get; } = new NdmElement(); + public RectanglePrimitive(Guid id) { Id = id;