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;