130 lines
7.6 KiB
C#
130 lines
7.6 KiB
C#
using LoaderCalculator.Data.Materials;
|
||
using NUnit.Framework;
|
||
using System.Linq;
|
||
using StructureHelperCommon.Models.Shapes;
|
||
using StructureHelperLogics.NdmCalculations.Triangulations;
|
||
using StructureHelperLogics.Models.Materials;
|
||
using StructureHelperLogics.NdmCalculations.Primitives;
|
||
using StructureHelperLogics.Services.NdmPrimitives;
|
||
using StructureHelperCommon.Infrastructures.Enums;
|
||
using LoaderCalculator.Logics.Geometry;
|
||
|
||
namespace StructureHelperTests.UnitTests.Ndms.Triangulations
|
||
{
|
||
public class RectangleTriangulationTest
|
||
{
|
||
//Участок по центру
|
||
[TestCase(0d, 0d, 1.0d, 1.0d, 0d, 0.02d, 1, 50 * 50, -0.49d, -0.49d)]
|
||
//Участок со смещением от центра
|
||
[TestCase(2d, 2d, 1.0d, 1.0d, 0d, 0.02d, 1, 50 * 50, 1.51d, 1.51d)]
|
||
[TestCase(2d, 1d, 1.0d, 1.0d, 0d, 0.02d, 1, 50 * 50, 1.51d, 0.51d)]
|
||
//Участок с поворотом на 1 радиан
|
||
[TestCase(0d, 0d, 1.0d, 1.0d, 1d, 0.02d, 1, 50 * 50, 0.14757265268048089d, -0.67706891243125777d)]
|
||
//Участок со смещением и поворотом на 1 радиан
|
||
[TestCase(2d, 2d, 1.0d, 1.0d, 1d, 0.02d, 1, 50 * 50, -0.45476470519903262d, 2.0864776689208147d)]
|
||
public void Run_ShouldPass (double centerX, double centerY, double width, double height, double angle, double ndmMaxSize, int ndmMinDivision, int expectedCount, double expectedFirstCenterX, double expectedFirstCenterY)
|
||
{
|
||
//Arrange
|
||
IMaterial material = new Material();
|
||
IPoint2D center = new Point2D { X = centerX, Y = centerY };
|
||
IRectangleShape rectangle = new RectangleShape { Width = width, Height = height, Angle = angle };
|
||
IRectangleTriangulationLogicOptions options = new RectangleTriangulationLogicOptions(center, rectangle, ndmMaxSize, ndmMinDivision);
|
||
IRectangleTriangulationLogic logic = new RectangleTriangulationLogic(options);
|
||
//Act
|
||
var result = logic.GetNdmCollection(material);
|
||
//Assert
|
||
Assert.NotNull(result);
|
||
Assert.AreEqual(expectedCount, result.Count());
|
||
var firstNdm = result.First();
|
||
Assert.AreEqual(expectedFirstCenterX, firstNdm.CenterX);
|
||
Assert.AreEqual(expectedFirstCenterY, firstNdm.CenterY);
|
||
}
|
||
[TestCase(0d, 0d, 1.0d, 1.0d, true, 1d, 3020418448.8512335d, 3020418448.8512335d)]
|
||
[TestCase(0d, 0d, 1.0d, 1.0d, false, 0.94d, 3013186843.9241991d, 3004124682.3615651d)]
|
||
[TestCase(0.1d, 0.2d, 1.0d, 1.0d, true, 1d, 3020418448.8512335d, 3020418448.8512335d)]
|
||
[TestCase(0.1d, 0.2d, 1.0d, 1.0d, false, 0.94d, 2920637108.8157182d, 2980987248.5842943d)]
|
||
public void Run_Shouldpass_RectOpeningRect(double centerX, double centerY, double width, double height, bool triangOpening, double expectedArea, double expectedMomX, double expectedMomY)
|
||
{
|
||
//Arrange
|
||
var material = HeadMaterialFactory.GetHeadMaterial(HeadmaterialType.Concrete40, CodeTypes.SP63_2018);
|
||
var mainBlock = new RectanglePrimitive() { CenterX = centerX, CenterY = centerY, Width = width, Height = height, HeadMaterial = material };
|
||
mainBlock.VisualProperty.ZIndex = 0;
|
||
var opening = new RectanglePrimitive()
|
||
{ CenterX = 0d, CenterY = 0d, Width = 0.3d, Height = 0.2d,
|
||
HeadMaterial = material, Triangulate = triangOpening,
|
||
ClearUnderlying = true};
|
||
opening.VisualProperty.ZIndex = 1;
|
||
var primitives = new List<INdmPrimitive>() { mainBlock, opening };
|
||
//Act
|
||
var ndms = NdmPrimitivesService.GetNdms(primitives, LimitStates.ULS, CalcTerms.ShortTerm);
|
||
//Assert
|
||
var area = ndms.Sum(x => x.Area);
|
||
var moments = GeometryOperations.GetReducedMomentsOfInertia(ndms);
|
||
Assert.AreEqual(expectedArea, area, 0.001d);
|
||
Assert.AreEqual(expectedMomX, moments.MomentX, 0.001d);
|
||
Assert.AreEqual(expectedMomY, moments.MomentY, 1d);
|
||
}
|
||
[TestCase(0d, 0d, 1.0d, 1.0d, true, 1d, 3020017308.3574591d, 3020017308.3574591d)]
|
||
[TestCase(0d, 0d, 1.0d, 1.0d, false, 0.92839999999991407d, 3005633713.5049105d, 3005633713.5049105d)]
|
||
[TestCase(0.1d, 0.2d, 1.0d, 1.0d, true, 1d, 3018642205.1351919d, 3019673532.5518913d)]
|
||
[TestCase(0.1d, 0.2d, 1.0d, 1.0d, false, 0.92839999999991407d, 2893811090.8611836d, 2977678057.8439965d)]
|
||
public void Run_Shouldpass_RectOpeningCircle(double centerX, double centerY, double width, double height, bool triangOpening, double expectedArea, double expectedMomX, double expectedMomY)
|
||
{
|
||
//Arrange
|
||
var material = HeadMaterialFactory.GetHeadMaterial(HeadmaterialType.Concrete40, CodeTypes.SP63_2018);
|
||
var mainBlock = new RectanglePrimitive() { CenterX = centerX, CenterY = centerY, Width = width, Height = height, HeadMaterial = material };
|
||
mainBlock.VisualProperty.ZIndex = 0;
|
||
var opening = new CirclePrimitive()
|
||
{
|
||
CenterX = 0d,
|
||
CenterY = 0d,
|
||
Diameter = 0.3d,
|
||
HeadMaterial = material,
|
||
Triangulate = triangOpening,
|
||
ClearUnderlying = true
|
||
};
|
||
opening.VisualProperty.ZIndex = 1;
|
||
var primitives = new List<INdmPrimitive>() { mainBlock, opening };
|
||
//Act
|
||
var ndms = NdmPrimitivesService.GetNdms(primitives, LimitStates.ULS, CalcTerms.ShortTerm);
|
||
//Assert
|
||
var area = ndms.Sum(x => x.Area);
|
||
var moments = GeometryOperations.GetReducedMomentsOfInertia(ndms);
|
||
Assert.AreEqual(expectedArea, area, 0.001d);
|
||
Assert.AreEqual(expectedMomX, moments.MomentX, 0.001d);
|
||
Assert.AreEqual(expectedMomY, moments.MomentY, 1d);
|
||
}
|
||
[TestCase(0d, 0d, 1.0d, true, 0.78079430967489682d, 1777730450.3666615d, 1776732530.5957441d)]
|
||
[TestCase(0d, 0d, 1.0d, false, 0.72079430967490343d, 1770498845.4396176d, 1760438764.1059904d)]
|
||
[TestCase(0.1d, 0.2d, 1.0d, true, 0.78386909642355929d, 1772956158.4523892d, 1777255335.2898147d)]
|
||
[TestCase(0.1d, 0.2d, 1.0d, false, 0.72386909642356589d, 1670848320.3763092d, 1737334754.3254938d)]
|
||
public void Run_Shouldpass_CircleOpeningRect(double centerX, double centerY, double diameter, bool triangOpening, double expectedArea, double expectedMomX, double expectedMomY)
|
||
{
|
||
//Arrange
|
||
var material = HeadMaterialFactory.GetHeadMaterial(HeadmaterialType.Concrete40, CodeTypes.SP63_2018);
|
||
var mainBlock = new CirclePrimitive() { CenterX = centerX, CenterY = centerY, Diameter = diameter, HeadMaterial = material };
|
||
mainBlock.VisualProperty.ZIndex = 0;
|
||
var opening = new RectanglePrimitive()
|
||
{
|
||
CenterX = 0d,
|
||
CenterY = 0d,
|
||
Width = 0.3d,
|
||
Height = 0.2d,
|
||
HeadMaterial = material,
|
||
Triangulate = triangOpening,
|
||
ClearUnderlying = true
|
||
};
|
||
opening.VisualProperty.ZIndex = 1;
|
||
var primitives = new List<INdmPrimitive>() { mainBlock, opening };
|
||
//Act
|
||
var ndms = NdmPrimitivesService.GetNdms(primitives, LimitStates.ULS, CalcTerms.ShortTerm);
|
||
//Assert
|
||
var area = ndms.Sum(x => x.Area);
|
||
var moments = GeometryOperations.GetReducedMomentsOfInertia(ndms);
|
||
Assert.AreEqual(expectedArea, area, 0.001d);
|
||
Assert.AreEqual(expectedMomX, moments.MomentX, 0.001d);
|
||
Assert.AreEqual(expectedMomY, moments.MomentY, 1d);
|
||
}
|
||
}
|
||
}
|