Add polygon to DTO convert strategy
This commit is contained in:
@@ -1,13 +1,6 @@
|
||||
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
|
||||
{
|
||||
|
||||
@@ -7,7 +7,7 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace StructureHelperLogics.NdmCalculations.Primitives
|
||||
{
|
||||
public interface IShapeNDMPrimitive : INdmPrimitive, IHasDivisionSize
|
||||
public interface IShapeNdmPrimitive : INdmPrimitive, IHasDivisionSize
|
||||
{
|
||||
void SetShape(IShape shape);
|
||||
}
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
using StructureHelperCommon.Infrastructures.Interfaces;
|
||||
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;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace StructureHelperLogics.NdmCalculations.Primitives
|
||||
{
|
||||
internal class BaseUpdateStrategy : IUpdateStrategy<INdmPrimitive>
|
||||
{
|
||||
static readonly Point2DUpdateStrategy point2DUpdateStrategy = new();
|
||||
readonly ForceTupleUpdateStrategy tupleUpdateStrategy = new();
|
||||
readonly VisualPropsUpdateStrategy visualPropsUpdateStrategy = new();
|
||||
|
||||
public void Update(INdmPrimitive targetObject, INdmPrimitive sourceObject)
|
||||
{
|
||||
CheckObject.IsNull(targetObject, sourceObject);
|
||||
if (ReferenceEquals(targetObject, sourceObject)) { return; }
|
||||
targetObject.Name = sourceObject.Name;
|
||||
if (sourceObject.NdmElement.HeadMaterial != null)
|
||||
{
|
||||
targetObject.NdmElement.HeadMaterial = sourceObject.NdmElement.HeadMaterial;
|
||||
}
|
||||
targetObject.NdmElement.Triangulate = sourceObject.NdmElement.Triangulate;
|
||||
point2DUpdateStrategy.Update(targetObject.Center, sourceObject.Center);
|
||||
targetObject.RotationAngle = sourceObject.RotationAngle;
|
||||
visualPropsUpdateStrategy.Update(targetObject.VisualProperty, sourceObject.VisualProperty);
|
||||
tupleUpdateStrategy.Update(targetObject.NdmElement.UsersPrestrain, sourceObject.NdmElement.UsersPrestrain);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,7 @@ namespace StructureHelperLogics.NdmCalculations.Primitives
|
||||
this.divisionPropsUpdateStrategy = divisionPropsUpdateStrategy;
|
||||
}
|
||||
public EllipsePrimitiveUpdateStrategy() : this(
|
||||
new BaseUpdateStrategy(),
|
||||
new NdmPrimitiveBaseUpdateStrategy(),
|
||||
new ShapeUpdateStrategy(),
|
||||
new DivisionSizeUpdateStrategy())
|
||||
{
|
||||
|
||||
@@ -5,10 +5,12 @@ using StructureHelperCommon.Services;
|
||||
|
||||
namespace StructureHelperLogics.NdmCalculations.Primitives.Logics
|
||||
{
|
||||
public class NdmElementUpdateStrategy : IUpdateStrategy<INdmElement>
|
||||
public class NdmElementUpdateStrategy : IParentUpdateStrategy<INdmElement>
|
||||
{
|
||||
private readonly IUpdateStrategy<IForceTuple> tupleUpdateStrategy;
|
||||
|
||||
public bool UpdateChildren { get; set; } = true;
|
||||
|
||||
public NdmElementUpdateStrategy(IUpdateStrategy<IForceTuple> tupleUpdateStrategy)
|
||||
{
|
||||
this.tupleUpdateStrategy = tupleUpdateStrategy;
|
||||
@@ -24,12 +26,15 @@ namespace StructureHelperLogics.NdmCalculations.Primitives.Logics
|
||||
{
|
||||
CheckObject.IsNull(targetObject, sourceObject);
|
||||
if (ReferenceEquals(targetObject, sourceObject)) { return; }
|
||||
if (sourceObject.HeadMaterial != null)
|
||||
{
|
||||
targetObject.HeadMaterial = sourceObject.HeadMaterial;
|
||||
}
|
||||
targetObject.Triangulate = sourceObject.Triangulate;
|
||||
tupleUpdateStrategy.Update(targetObject.UsersPrestrain, sourceObject.UsersPrestrain);
|
||||
if (UpdateChildren == true)
|
||||
{
|
||||
if (sourceObject.HeadMaterial != null)
|
||||
{
|
||||
targetObject.HeadMaterial = sourceObject.HeadMaterial;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
using StructureHelperCommon.Infrastructures.Interfaces;
|
||||
using StructureHelperCommon.Models.Forces;
|
||||
using StructureHelperCommon.Models.Shapes;
|
||||
using StructureHelperCommon.Services;
|
||||
using StructureHelperLogics.NdmCalculations.Primitives.Logics;
|
||||
|
||||
namespace StructureHelperLogics.NdmCalculations.Primitives
|
||||
{
|
||||
internal class NdmPrimitiveBaseUpdateStrategy : IParentUpdateStrategy<INdmPrimitive>
|
||||
{
|
||||
private IUpdateStrategy<INdmElement> ndmElementUpdateStrategy;
|
||||
private IUpdateStrategy<IPoint2D> point2DUpdateStrategy;
|
||||
private IUpdateStrategy<IVisualProperty> visualPropsUpdateStrategy;
|
||||
|
||||
public bool UpdateChildren { get; set; } = true;
|
||||
|
||||
public void Update(INdmPrimitive targetObject, INdmPrimitive sourceObject)
|
||||
{
|
||||
CheckObject.IsNull(targetObject, sourceObject);
|
||||
if (ReferenceEquals(targetObject, sourceObject)) { return; }
|
||||
InitializeStrategies();
|
||||
targetObject.Name = sourceObject.Name;
|
||||
targetObject.RotationAngle = sourceObject.RotationAngle;
|
||||
targetObject.CrossSection = sourceObject.CrossSection;
|
||||
if (UpdateChildren == true)
|
||||
{
|
||||
point2DUpdateStrategy.Update(targetObject.Center, sourceObject.Center);
|
||||
visualPropsUpdateStrategy.Update(targetObject.VisualProperty, sourceObject.VisualProperty);
|
||||
ndmElementUpdateStrategy.Update(targetObject.NdmElement, sourceObject.NdmElement);
|
||||
}
|
||||
}
|
||||
|
||||
private void InitializeStrategies()
|
||||
{
|
||||
point2DUpdateStrategy = new Point2DUpdateStrategy();
|
||||
visualPropsUpdateStrategy = new VisualPropsUpdateStrategy();
|
||||
ndmElementUpdateStrategy = new NdmElementUpdateStrategy() {UpdateChildren = UpdateChildren };
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -27,9 +27,9 @@ namespace StructureHelperLogics.NdmCalculations.Primitives
|
||||
{
|
||||
new EllipsePrimitiveUpdateStrategy().Update(circle, (EllipseNdmPrimitive)sourceObject);
|
||||
}
|
||||
else if (targetObject is IShapeNDMPrimitive shapePrimitive)
|
||||
else if (targetObject is IShapeNdmPrimitive shapePrimitive)
|
||||
{
|
||||
new ShapeNDMPrimitiveUpdateStrategy().Update(shapePrimitive, (IShapeNDMPrimitive)sourceObject);
|
||||
new ShapeNdmPrimitiveUpdateStrategy().Update(shapePrimitive, (IShapeNdmPrimitive)sourceObject);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -10,7 +10,7 @@ namespace StructureHelperLogics.NdmCalculations.Primitives
|
||||
{
|
||||
public class PointNdmPrimitiveUpdateStrategy : IUpdateStrategy<IPointNdmPrimitive>
|
||||
{
|
||||
static readonly BaseUpdateStrategy basePrimitiveUpdateStrategy = new();
|
||||
static readonly NdmPrimitiveBaseUpdateStrategy basePrimitiveUpdateStrategy = new();
|
||||
public void Update(IPointNdmPrimitive targetObject, IPointNdmPrimitive sourceObject)
|
||||
{
|
||||
if (ReferenceEquals(targetObject, sourceObject)) { return; }
|
||||
|
||||
@@ -9,7 +9,7 @@ namespace StructureHelperLogics.NdmCalculations.Primitives
|
||||
{
|
||||
public class RebarNdmPrimitiveUpdateStrategy : IUpdateStrategy<IRebarNdmPrimitive>
|
||||
{
|
||||
static readonly BaseUpdateStrategy basePrimitiveUpdateStrategy = new();
|
||||
static readonly NdmPrimitiveBaseUpdateStrategy basePrimitiveUpdateStrategy = new();
|
||||
public void Update(IRebarNdmPrimitive targetObject, IRebarNdmPrimitive sourceObject)
|
||||
{
|
||||
if (ReferenceEquals(targetObject, sourceObject)) { return; }
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace StructureHelperLogics.NdmCalculations.Primitives
|
||||
this.divisionPropsUpdateStrategy = divisionPropsUpdateStrategy;
|
||||
}
|
||||
public RectanglePrimitiveUpdateStrategy() : this(
|
||||
new BaseUpdateStrategy(),
|
||||
new NdmPrimitiveBaseUpdateStrategy(),
|
||||
new ShapeUpdateStrategy(),
|
||||
new DivisionSizeUpdateStrategy())
|
||||
{
|
||||
|
||||
@@ -1,22 +1,19 @@
|
||||
using StructureHelperCommon.Infrastructures.Interfaces;
|
||||
using StructureHelperCommon.Models.Shapes;
|
||||
using StructureHelperCommon.Services;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace StructureHelperLogics.NdmCalculations.Primitives
|
||||
{
|
||||
public class ShapeNDMPrimitiveUpdateStrategy : IUpdateStrategy<IShapeNDMPrimitive>
|
||||
public class ShapeNdmPrimitiveUpdateStrategy : IParentUpdateStrategy<IShapeNdmPrimitive>
|
||||
{
|
||||
private IUpdateStrategy<INdmPrimitive> basePrimitiveUpdateStrategy;
|
||||
private IParentUpdateStrategy<INdmPrimitive> basePrimitiveUpdateStrategy;
|
||||
private IUpdateStrategy<IDivisionSize> divisionPropsUpdateStrategy;
|
||||
private IUpdateStrategy<IShape> shapeUpdateStrategy;
|
||||
|
||||
public ShapeNDMPrimitiveUpdateStrategy(
|
||||
IUpdateStrategy<INdmPrimitive> basePrimitiveUpdateStrategy,
|
||||
public bool UpdateChildren { get; set; } = true;
|
||||
|
||||
public ShapeNdmPrimitiveUpdateStrategy(
|
||||
IParentUpdateStrategy<INdmPrimitive> basePrimitiveUpdateStrategy,
|
||||
IUpdateStrategy<IShape> shapeUpdateStrategy,
|
||||
IUpdateStrategy<IDivisionSize> divisionPropsUpdateStrategy)
|
||||
{
|
||||
@@ -25,28 +22,31 @@ namespace StructureHelperLogics.NdmCalculations.Primitives
|
||||
this.divisionPropsUpdateStrategy = divisionPropsUpdateStrategy;
|
||||
}
|
||||
|
||||
public ShapeNDMPrimitiveUpdateStrategy() : this(
|
||||
new BaseUpdateStrategy(),
|
||||
public ShapeNdmPrimitiveUpdateStrategy() : this(
|
||||
new NdmPrimitiveBaseUpdateStrategy(),
|
||||
new ShapeUpdateStrategy(),
|
||||
new DivisionSizeUpdateStrategy())
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void Update(IShapeNDMPrimitive targetObject, IShapeNDMPrimitive sourceObject)
|
||||
public void Update(IShapeNdmPrimitive targetObject, IShapeNdmPrimitive sourceObject)
|
||||
{
|
||||
CheckObject.IsNull(sourceObject, "source object");
|
||||
CheckObject.IsNull(targetObject, "target object");
|
||||
CheckObject.IsNull(targetObject, sourceObject);
|
||||
if (ReferenceEquals(targetObject, sourceObject)) { return; }
|
||||
InitializeStrategies();
|
||||
basePrimitiveUpdateStrategy.Update(targetObject, sourceObject);
|
||||
divisionPropsUpdateStrategy.Update(targetObject.DivisionSize, sourceObject.DivisionSize);
|
||||
shapeUpdateStrategy.Update(targetObject.Shape, sourceObject.Shape);
|
||||
if (UpdateChildren == true)
|
||||
{
|
||||
divisionPropsUpdateStrategy.Update(targetObject.DivisionSize, sourceObject.DivisionSize);
|
||||
shapeUpdateStrategy.Update(targetObject.Shape, sourceObject.Shape);
|
||||
}
|
||||
}
|
||||
|
||||
private void InitializeStrategies()
|
||||
{
|
||||
basePrimitiveUpdateStrategy ??= new BaseUpdateStrategy();
|
||||
basePrimitiveUpdateStrategy ??= new NdmPrimitiveBaseUpdateStrategy();
|
||||
basePrimitiveUpdateStrategy.UpdateChildren = UpdateChildren;
|
||||
divisionPropsUpdateStrategy ??= new DivisionSizeUpdateStrategy();
|
||||
shapeUpdateStrategy ??= new ShapeUpdateStrategy();
|
||||
}
|
||||
|
||||
@@ -4,18 +4,13 @@ using StructureHelperCommon.Infrastructures.Interfaces;
|
||||
using StructureHelperCommon.Models.Shapes;
|
||||
using StructureHelperLogics.Models.CrossSections;
|
||||
using StructureHelperLogics.NdmCalculations.Triangulations;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace StructureHelperLogics.NdmCalculations.Primitives
|
||||
{
|
||||
public class ShapeNdmPrimitive : IShapeNDMPrimitive
|
||||
public class ShapeNdmPrimitive : IShapeNdmPrimitive
|
||||
{
|
||||
private IShape shape;
|
||||
private IUpdateStrategy<IShapeNDMPrimitive> updateStrategy;
|
||||
private IUpdateStrategy<IShapeNdmPrimitive> updateStrategy;
|
||||
|
||||
public Guid Id { get; }
|
||||
public string? Name { get; set; } = string.Empty;
|
||||
@@ -34,9 +29,9 @@ namespace StructureHelperLogics.NdmCalculations.Primitives
|
||||
public object Clone()
|
||||
{
|
||||
var primitive = new ShapeNdmPrimitive(Guid.NewGuid());
|
||||
PolygonShape polygon = new(Guid.NewGuid());
|
||||
LinePolygonShape polygon = new(Guid.NewGuid());
|
||||
primitive.SetShape(polygon);
|
||||
updateStrategy ??= new ShapeNDMPrimitiveUpdateStrategy();
|
||||
updateStrategy ??= new ShapeNdmPrimitiveUpdateStrategy();
|
||||
updateStrategy.Update(primitive, this);
|
||||
return primitive;
|
||||
}
|
||||
@@ -57,7 +52,7 @@ namespace StructureHelperLogics.NdmCalculations.Primitives
|
||||
Area = 0d
|
||||
};
|
||||
points.Add(newPoint);
|
||||
if (shape is IPolygonShape polygon)
|
||||
if (shape is ILinePolygonShape polygon)
|
||||
{
|
||||
int i = 0;
|
||||
foreach (var item in polygon.Vertices)
|
||||
@@ -77,7 +72,7 @@ namespace StructureHelperLogics.NdmCalculations.Primitives
|
||||
|
||||
public bool IsPointInside(IPoint2D point)
|
||||
{
|
||||
if (shape is IPolygonShape polygon)
|
||||
if (shape is ILinePolygonShape polygon)
|
||||
{
|
||||
var newShape = PolygonGeometryUtils.GetTratsfromedPolygon(polygon, Center.X, Center.Y);
|
||||
var calculator = new PolygonCalculator();
|
||||
|
||||
Reference in New Issue
Block a user