New Icons and Zoom of graph were added

This commit is contained in:
Evgeny Redikultsev
2023-09-17 11:37:29 +05:00
parent 1ed2ba8cf1
commit 9884a0919c
131 changed files with 714 additions and 216 deletions

View File

@@ -151,7 +151,7 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
forceTupleCalculator.Run();
var result = forceTupleCalculator.Result as IForcesTupleResult;
var loaderStrainMatrix = result.LoaderResults.ForceStrainPair.StrainMatrix;
StrainTuple strainTuple = StrainTupleService.ConvertToStrainTuple(loaderStrainMatrix);
StrainTuple strainTuple = TupleConverter.ConvertToStrainTuple(loaderStrainMatrix);
return strainTuple;
}
private void Check()

View File

@@ -1,23 +1,122 @@
using StructureHelperCommon.Models.Calculators;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LoaderCalculator.Data.Ndms;
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Models.Calculators;
using StructureHelperCommon.Models.Forces;
using StructureHelperCommon.Services.Forces;
using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
using StructureHelperLogics.NdmCalculations.Primitives;
using StructureHelperLogics.NdmCalculations.Triangulations;
namespace StructureHelperLogics.NdmCalculations.Cracking
{
public class CrackWidthCalculator : ICalculator
{
static readonly ILengthBetweenCracksLogic lengthLogic = new LengthBetweenCracksLogicSP63();
CrackWidthCalculatorResult result;
private IEnumerable<INdmPrimitive> ndmPrimitives;
private List<RebarPrimitive>? rebarPrimitives;
private IEnumerable<INdm> ndmCollection;
private CrackForceResult crackForceResult;
private StrainTuple strainTuple;
public string Name { get; set; }
public ICrackWidthCalculatorInputData InputData { get; set; }
public CrackWidthCalculatorInputData InputData { get; set; }
public IResult Result => result;
public void Run()
{
throw new NotImplementedException();
result = new() { IsValid = true, Description = ""};
try
{
ProcessCalculations();
}
catch (Exception ex)
{
result.IsValid = false;
result.Description += ex;
}
}
private void ProcessCalculations()
{
CheckInputData();
Triangulate();
CalcStrainMatrix();
CalcCrackForce();
var crackInputData = GetCrackInputData();
var calculator = new CrackWidthSimpleCalculator { InputData = crackInputData };
foreach (var item in rebarPrimitives)
{
crackInputData.RebarPrimitive = item;
calculator.Run();
var rebarResult = calculator.Result as CrackWidthSimpleCalculatorResult;
if (crackForceResult.IsSectionCracked == false)
{
rebarResult.CrackWidth = 0d;
}
result.RebarResults.Add(rebarResult);
}
}
private void CalcStrainMatrix()
{
IForceTupleInputData inputData = new ForceTupleInputData() { NdmCollection = ndmCollection, Tuple = InputData.ForceTuple};
IForceTupleCalculator calculator = new ForceTupleCalculator(inputData);
calculator.Run();
var forceResult = calculator.Result as IForcesTupleResult;
strainTuple = TupleConverter.ConvertToStrainTuple(forceResult.LoaderResults.StrainMatrix);
}
private CrackWidthSimpleCalculatorInputData GetCrackInputData()
{
lengthLogic.NdmCollection = ndmCollection;
lengthLogic.StrainMatrix = TupleConverter.ConvertToLoaderStrainMatrix(strainTuple);
var length = lengthLogic.GetLength();
var crackInputData = new CrackWidthSimpleCalculatorInputData
{
PsiSFactor = crackForceResult.PsiS,
Length = length,
LimitState = InputData.LimitState,
StrainTuple = strainTuple
};
return crackInputData;
}
private void Triangulate()
{
ndmPrimitives = InputData.NdmPrimitives;
rebarPrimitives = new List<RebarPrimitive>();
foreach (var item in ndmPrimitives)
{
if (item is RebarPrimitive)
{
rebarPrimitives.Add(item as RebarPrimitive);
}
}
//rebarPrimitives = ndmPrimitives
// .Select(x => x is RebarPrimitive) as IEnumerable<RebarPrimitive>;
var options = new TriangulationOptions() { LimiteState = InputData.LimitState, CalcTerm = InputData.CalcTerm };
ndmCollection = ndmPrimitives.SelectMany(x => x.GetNdms(options));
}
private void CalcCrackForce()
{
var calculator = new CrackForceCalculator();
calculator.EndTuple = InputData.ForceTuple;
calculator.NdmCollection = ndmCollection;
calculator.Run();
crackForceResult = calculator.Result as CrackForceResult;
}
private void CheckInputData()
{
if (InputData.NdmPrimitives is null || InputData.NdmPrimitives.Count == 0)
{
throw new StructureHelperException(ErrorStrings.DataIsInCorrect + ": input data doesn't have any primitives");
}
}
public object Clone()
{
throw new NotImplementedException();

View File

@@ -9,11 +9,11 @@ using System.Threading.Tasks;
namespace StructureHelperLogics.NdmCalculations.Cracking
{
public interface ICrackWidthCalculatorInputData
public class CrackWidthCalculatorInputData
{
LimitStates LimitState { get; set; }
CalcTerms CalcTerm { get; set; }
StrainTuple StrainTuple { get; set; }
IEnumerable<INdmPrimitive> NdmPrimitives {get;set;}
public LimitStates LimitState { get; set; }
public CalcTerms CalcTerm { get; set; }
public ForceTuple ForceTuple { get; set; }
public List<INdmPrimitive> NdmPrimitives {get;set;}
}
}

View File

@@ -11,6 +11,11 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
{
public bool IsValid { get; set; }
public string Description { get; set; }
IEnumerable<CrackWidthSimpleCalculatorResult> RebarResults { get; set; }
public List<CrackWidthSimpleCalculatorResult> RebarResults { get; set; }
public CrackWidthCalculatorResult()
{
RebarResults = new List<CrackWidthSimpleCalculatorResult>();
}
}
}

View File

@@ -0,0 +1,22 @@
using StructureHelperCommon.Infrastructures.Enums;
using StructureHelperCommon.Models.Forces;
using StructureHelperLogics.NdmCalculations.Primitives;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperLogics.NdmCalculations.Cracking
{
public class CrackWidthSimpleCalculatorInputData : ICrackWidthSimpleCalculatorInputData
{
public LimitStates LimitState { get; set; }
public CalcTerms CalcTerm { get; set; }
public StrainTuple StrainTuple { get; set; }
public double PsiSFactor { get; set; }
public double Length { get; set; }
public SectionStressStates StressState { get; set; }
public RebarPrimitive RebarPrimitive { get; set; }
}
}

View File

@@ -28,6 +28,7 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
else { data.TermFactor = 1d; }
data.PsiSFactor = inputData.PsiSFactor;
data.StressStateFactor = inputData.StressState is SectionStressStates.Tension ? 1.2d : 1.0d;
data.BondFactor = 0.5;
return data;
}
else
@@ -39,12 +40,12 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
private static void ProcessBaseProps(ICrackWidthSimpleCalculatorInputData inputData, ICrackWidthLogicInputData data)
{
var strainMatrix = StrainTupleService.ConvertToLoaderStrainMatrix(inputData.StrainTuple);
var strainMatrix = TupleConverter.ConvertToLoaderStrainMatrix(inputData.StrainTuple);
var triangulationOptions = new TriangulationOptions { LimiteState = inputData.LimitState, CalcTerm = inputData.CalcTerm };
var ndms = inputData.RebarPrimitive.GetNdms(triangulationOptions).ToArray();
var concreteNdm = ndms[0];
var rebarNdm = ndms[1];
data.ConcreteStrain = stressLogic.GetTotalStrainWithPresrain(strainMatrix, concreteNdm);
data.ConcreteStrain = concreteNdm.Prestrain;// stressLogic.GetTotalStrain(strainMatrix, concreteNdm) - stressLogic.GetTotalStrainWithPresrain(strainMatrix, concreteNdm);
data.RebarStrain = stressLogic.GetTotalStrainWithPresrain(strainMatrix, rebarNdm);
data.Length = inputData.Length;
}