Add value diagram windows and view models

This commit is contained in:
Evgeny Redikultsev
2025-11-09 17:34:51 +05:00
parent 111b60a08d
commit 466b47f447
58 changed files with 1397 additions and 162 deletions

View File

@@ -1,14 +1,11 @@
using netDxf;
using netDxf.Entities;
using StructureHelperCommon.Infrastructures.Exceptions;
using netDxf.Entities;
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Models.Shapes;
using StructureHelperCommon.Services.Exports;
using System.Runtime.CompilerServices;
namespace StructureHelperLogics.NdmCalculations.Primitives
{
public class GetPrimitivesByDxfEntities : IObjectConvertStrategy<List<INdmPrimitive>, IEnumerable<EntityObject>>
public class DxfEntitiesToNdmPrimitivesConvertStrategy : IObjectConvertStrategy<List<INdmPrimitive>, IEnumerable<EntityObject>>
{
private const double metresToMillimeters = 1000.0;
private List<INdmPrimitive> primitives = [];
@@ -68,7 +65,6 @@ namespace StructureHelperLogics.NdmCalculations.Primitives
primitive = ellipse;
}
primitive.Center = new Point2D(circle.Center.X / metresToMillimeters, circle.Center.Y / metresToMillimeters);
return primitive;
}

View File

@@ -2,7 +2,7 @@
namespace StructureHelperLogics.NdmCalculations.Primitives
{
public class GetPrimitivesByFile : IGetPrimitivesLogic
public class GetPrimitivesByFile : IImportFromFileLogic
{
private List<INdmPrimitive> primitives = [];
@@ -16,7 +16,7 @@ namespace StructureHelperLogics.NdmCalculations.Primitives
importEntitiesLogic.Import();
if (importEntitiesLogic.Entities.Count != 0)
{
var primitivesLogic = new GetPrimitivesByDxfEntities();
var primitivesLogic = new DxfEntitiesToNdmPrimitivesConvertStrategy();
primitives = primitivesLogic.Convert(importEntitiesLogic.Entities);
}
}

View File

@@ -0,0 +1,65 @@
using netDxf.Entities;
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Models.Shapes;
using StructureHelperCommon.Services.Exports;
namespace StructureHelperLogics.NdmCalculations.Primitives
{
public class NdmPrimitivesToDxfEntitiesConvertStrategy : IObjectConvertStrategy<List<(EntityObject, LayerNames)>, IEnumerable<INdmPrimitive>>
{
private const double metresToMillimeters = 1000.0;
private List<(EntityObject, LayerNames)> entities = [];
private IShapeConvertStrategy<EntityObject, IShape> shapeConvertStrategy = new ShapeToDxfEntityConvertStrategy() { Scale = metresToMillimeters };
public List<(EntityObject, LayerNames)> Convert(IEnumerable<INdmPrimitive> source)
{
entities.Clear();
foreach (var ndmPrimitive in source)
{
shapeConvertStrategy.Dx = ndmPrimitive.Center.X;
shapeConvertStrategy.Dy = ndmPrimitive.Center.Y;
if (ndmPrimitive is IRectangleNdmPrimitive rectangleNdmPrimitive)
{
var rectangle = shapeConvertStrategy.Convert(rectangleNdmPrimitive);
entities.Add((rectangle, LayerNames.StructiralPrimitives));
}
else if (ndmPrimitive is IShapeNdmPrimitive shapeNdmPrimitive)
{
var polygon = shapeConvertStrategy.Convert(shapeNdmPrimitive.Shape);
entities.Add((polygon, LayerNames.StructiralPrimitives));
}
else if (ndmPrimitive is IEllipseNdmPrimitive ellipseNdmPrimitive)
{
CircleShape circleShape = new CircleShape() { Diameter = ellipseNdmPrimitive.Width};
var circle = shapeConvertStrategy.Convert(circleShape);
entities.Add((circle, LayerNames.StructiralPrimitives));
}
else if (ndmPrimitive is IRebarNdmPrimitive rebar)
{
LayerNames layerName = LayerNames.StructuralRebars;
convertPoint(rebar, layerName);
}
else if (ndmPrimitive is IPointNdmPrimitive point)
{
LayerNames layerName = LayerNames.StructiralPrimitives;
convertPoint(point, layerName);
}
else
{
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(ndmPrimitive));
}
}
return entities;
}
private void convertPoint(IPointNdmPrimitive point, LayerNames layerName)
{
double diameter = Math.Sqrt(point.Area / Math.PI * 4.0);
CircleShape circleShape = new CircleShape() { Diameter = diameter };
var circle = shapeConvertStrategy.Convert(circleShape);
entities.Add((circle, layerName));
}
}
}

View File

@@ -77,6 +77,7 @@ namespace StructureHelperLogics.NdmCalculations.Primitives
if (shape is ILinePolygonShape polygon)
{
var newShape = PolygonGeometryUtils.GetTransfromedPolygon(polygon, Center.X, Center.Y);
newShape.IsClosed = true;
var calculator = new PolygonCalculator();
return calculator.ContainsPoint(newShape, point);
}