diff --git a/StructureHelper/Infrastructure/Enums/CalculatorTypes.cs b/StructureHelper/Infrastructure/Enums/CalculatorTypes.cs index c47f3d8..42c018f 100644 --- a/StructureHelper/Infrastructure/Enums/CalculatorTypes.cs +++ b/StructureHelper/Infrastructure/Enums/CalculatorTypes.cs @@ -7,6 +7,7 @@ CrackCalculator, FireCalculator, BeamShearCalculator, - ValueDiagram + ValueDiagramCalculator, + CurvatureCalcualtor } } diff --git a/StructureHelper/Infrastructure/UI/Resources/ButtonStyles.xaml b/StructureHelper/Infrastructure/UI/Resources/ButtonStyles.xaml index 3e7728f..dac8ef4 100644 --- a/StructureHelper/Infrastructure/UI/Resources/ButtonStyles.xaml +++ b/StructureHelper/Infrastructure/UI/Resources/ButtonStyles.xaml @@ -267,7 +267,19 @@ - + + + + + + + + + + + + + diff --git a/StructureHelper/StructureHelper.csproj.user b/StructureHelper/StructureHelper.csproj.user index b92a324..977dd49 100644 --- a/StructureHelper/StructureHelper.csproj.user +++ b/StructureHelper/StructureHelper.csproj.user @@ -63,6 +63,9 @@ Code + + Code + Code diff --git a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/CalculatorViewModel.cs b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/CalculatorViewModel.cs new file mode 100644 index 0000000..a95e6ab --- /dev/null +++ b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/CalculatorViewModel.cs @@ -0,0 +1,38 @@ +using StructureHelper.Infrastructure; +using StructureHelperCommon.Models.Calculators; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; +using System; +using System.Collections.Generic; +using System.Text; + +namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews +{ + public class CalculatorViewModel : ViewModelBase + { + private ICalculator calcualtor; + + public bool ShowTraceData + { + get => calcualtor.ShowTraceData; + set + { + calcualtor.ShowTraceData = value; + OnPropertyChanged(nameof(ShowTraceData)); + } + } + public string Name + { + get => calcualtor.Name; + set + { + calcualtor.Name = value; + OnPropertyChanged(nameof(Name)); + } + } + + public CalculatorViewModel(ICalculator calcualtor) + { + this.calcualtor = calcualtor; + } + } +} diff --git a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/CrackDiagramLogic.cs b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/CrackDiagramLogic.cs index 7018349..0de6379 100644 --- a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/CrackDiagramLogic.cs +++ b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/CrackDiagramLogic.cs @@ -25,6 +25,9 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews static IGetUnitLogic unitLogic = new GetUnitLogic(); static readonly CrackForceBynarySearchCalculator calculator = new(); private ITriangulatePrimitiveLogic triangulateLogic; + private IUnit unitForce = unitLogic.GetUnit(UnitTypes.Force); + private IUnit unitMoment = unitLogic.GetUnit(UnitTypes.Moment); + private IUnit unitCurvature = unitLogic.GetUnit(UnitTypes.Curvature); private List ValidTupleList { get; set; } ArrayParameter arrayParameter; @@ -67,11 +70,7 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews { List labels = GetCrackLabels(); arrayParameter = new ArrayParameter(ValidTupleList.Count(), labels); - CalculateWithCrack(ValidTupleList, - NdmPrimitives, - unitLogic.GetUnit(UnitTypes.Force), - unitLogic.GetUnit(UnitTypes.Moment), - unitLogic.GetUnit(UnitTypes.Curvature)); + CalculateWithCrack(ValidTupleList, NdmPrimitives); } public void ShowWindow() @@ -92,31 +91,19 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews "Errors appeared during showing a graph, see detailed information"); } - private void CalculateWithCrack(List validTupleList, IEnumerable ndmPrimitives, IUnit unitForce, IUnit unitMoment, IUnit unitCurvature) + private void CalculateWithCrack(List validTupleList, IEnumerable ndmPrimitives) { var data = arrayParameter.Data; for (int i = 0; i < validTupleList.Count(); i++) { - var valueList = new List - { - validTupleList[i].ForcesTupleResult.ForceTuple.Mx * unitMoment.Multiplyer, - validTupleList[i].ForcesTupleResult.ForceTuple.My * unitMoment.Multiplyer, - validTupleList[i].ForcesTupleResult.ForceTuple.Nz * unitForce.Multiplyer - }; calculator.InputData.EndTuple = validTupleList[i].ForcesTupleResult.ForceTuple; var limitState = validTupleList[i].StateCalcTermPair.LimitState; var calcTerm = validTupleList[i].StateCalcTermPair.CalcTerm; - triangulateLogic = new TriangulatePrimitiveLogic() - { - Primitives = ndmPrimitives, - LimitState = limitState, - CalcTerm = calcTerm, - TraceLogger = TraceLogger - }; + GetTriangulationLogic(ndmPrimitives, limitState, calcTerm); var ndms = triangulateLogic.GetNdms(); calculator.InputData.CheckedNdmCollection = calculator.InputData.SectionNdmCollection = ndms; calculator.Run(); - var result = (CrackForceResult)calculator.Result; + var result = (ICrackForceResult)calculator.Result; if (result.IsValid == false) { MessageBox.Show( @@ -126,29 +113,51 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews MessageBoxIcon.Information); return; } - valueList.Add(result.CrackedStrainTuple.Mx); - valueList.Add(result.CrackedStrainTuple.My); - valueList.Add(result.CrackedStrainTuple.Nz); - - valueList.Add(result.ReducedStrainTuple.Mx); - valueList.Add(result.ReducedStrainTuple.My); - valueList.Add(result.ReducedStrainTuple.Nz); - - valueList.Add(result.SofteningFactors.Mx); - valueList.Add(result.SofteningFactors.My); - valueList.Add(result.SofteningFactors.Nz); - - valueList.Add(result.PsiS); - + IExtendedForceTupleCalculatorResult extendedForceTupleCalculatorResult = validTupleList[i]; + List valueList = GetValueList(result, extendedForceTupleCalculatorResult); for (int j = 0; j < valueList.Count; j++) { data[i, j] = valueList[j]; } - SetProgress?.Invoke(i); } } + private List GetValueList(ICrackForceResult result, IExtendedForceTupleCalculatorResult extendedForceTupleCalculatorResult) + { + var valueList = new List + { + extendedForceTupleCalculatorResult.ForcesTupleResult.ForceTuple.Mx * unitMoment.Multiplyer, + extendedForceTupleCalculatorResult.ForcesTupleResult.ForceTuple.My * unitMoment.Multiplyer, + extendedForceTupleCalculatorResult.ForcesTupleResult.ForceTuple.Nz * unitForce.Multiplyer + }; + valueList.Add(result.CrackedStrainTuple.Mx); + valueList.Add(result.CrackedStrainTuple.My); + valueList.Add(result.CrackedStrainTuple.Nz); + + valueList.Add(result.ReducedStrainTuple.Mx); + valueList.Add(result.ReducedStrainTuple.My); + valueList.Add(result.ReducedStrainTuple.Nz); + + valueList.Add(result.SofteningFactors.Mx); + valueList.Add(result.SofteningFactors.My); + valueList.Add(result.SofteningFactors.Nz); + + valueList.Add(result.PsiS); + return valueList; + } + + private void GetTriangulationLogic(IEnumerable ndmPrimitives, LimitStates limitState, CalcTerms calcTerm) + { + triangulateLogic = new TriangulatePrimitiveLogic() + { + Primitives = ndmPrimitives, + LimitState = limitState, + CalcTerm = calcTerm, + TraceLogger = TraceLogger + }; + } + private static List GetCrackLabels() { const string crc = "Crc"; diff --git a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/Curvatures/CurvatureCalculatorInputDataViewModel.cs b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/Curvatures/CurvatureCalculatorInputDataViewModel.cs new file mode 100644 index 0000000..d2fcaa6 --- /dev/null +++ b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/Curvatures/CurvatureCalculatorInputDataViewModel.cs @@ -0,0 +1,64 @@ +using StructureHelper.Infrastructure; +using StructureHelper.Infrastructure.UI.DataContexts; +using StructureHelper.Windows.ViewModels; +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models.Forces; +using StructureHelperLogics.Models.CrossSections; +using StructureHelperLogics.NdmCalculations.Analyses.Curvatures; +using System; +using System.Collections.Generic; +using System.Text; + +namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.Curvatures +{ + public class CurvatureCalculatorInputDataViewModel : ViewModelBase + { + private ICurvatureCalculatorInputData inputData; + private double deflectionFactor; + private double spanLength; + + public double DeflectionFactor + { + get => inputData.DeflectionFactor; + set + { + inputData.DeflectionFactor = Math.Max(value, 0.0); + OnPropertyChanged(nameof(DeflectionFactor)); + } + } + + public double SpanLength + { + get => inputData.SpanLength; + set + { + inputData.SpanLength = Math.Max(value, 0.0); + OnPropertyChanged(nameof(SpanLength)); + } + } + + public SourceTargetVM CombinationViewModel { get; } + public SourceTargetVM PrimitivesViewModel { get; } + + public CurvatureCalculatorInputDataViewModel(ICurvatureCalculatorInputData inputData, ICrossSectionRepository repository) + { + this.inputData = inputData; + CombinationViewModel = SourceTargetFactory.GetSourceTargetVM(repository.ForceActions, inputData.ForceActions); + PrimitivesViewModel = SourceTargetFactory.GetSourceTargetVM(repository.Primitives, inputData.Primitives); + } + public void Refresh() + { + var combinations = CombinationViewModel.GetTargetItems(); + inputData.ForceActions.Clear(); + foreach (var item in combinations) + { + inputData.ForceActions.Add(item); + } + inputData.Primitives.Clear(); + foreach (var item in PrimitivesViewModel.GetTargetItems()) + { + inputData.Primitives.Add(item.GetNdmPrimitive()); + } + } + } +} diff --git a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/Curvatures/CurvatureCalculatorView.xaml b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/Curvatures/CurvatureCalculatorView.xaml new file mode 100644 index 0000000..66a30a7 --- /dev/null +++ b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/Curvatures/CurvatureCalculatorView.xaml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/Curvatures/CurvatureCalculatorView.xaml.cs b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/Curvatures/CurvatureCalculatorView.xaml.cs new file mode 100644 index 0000000..a61559a --- /dev/null +++ b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/Curvatures/CurvatureCalculatorView.xaml.cs @@ -0,0 +1,19 @@ +using System.Windows; + +namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.Curvatures +{ + /// + /// Логика взаимодействия для CurvatureCalculatorView.xaml + /// + public partial class CurvatureCalculatorView : Window + { + private CurvatureCalculatorViewModel viewModel; + public CurvatureCalculatorView(CurvatureCalculatorViewModel viewModel) + { + InitializeComponent(); + viewModel.ParentWindow = this; + this.viewModel = viewModel; + this.DataContext = viewModel; + } + } +} diff --git a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/Curvatures/CurvatureCalculatorViewModel.cs b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/Curvatures/CurvatureCalculatorViewModel.cs new file mode 100644 index 0000000..413ef8a --- /dev/null +++ b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/Curvatures/CurvatureCalculatorViewModel.cs @@ -0,0 +1,25 @@ +using StructureHelper.Windows.ViewModels; +using StructureHelperLogics.Models.CrossSections; +using StructureHelperLogics.NdmCalculations.Analyses.Curvatures; + +namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.Curvatures +{ + public class CurvatureCalculatorViewModel : OkCancelViewModelBase + { + private ICurvatureCalculator curvatureCalculator; + public CalculatorViewModel CalculatorViewModel { get; private set; } + public CurvatureCalculatorInputDataViewModel InputDataViewModel { get; private set; } + + public CurvatureCalculatorViewModel(ICurvatureCalculator calculator, ICrossSectionRepository repository) + { + this.curvatureCalculator = calculator; + CalculatorViewModel = new CalculatorViewModel(calculator); + InputDataViewModel = new(calculator.InputData, repository); + } + + public void Refresh() + { + InputDataViewModel.Refresh(); + } + } +} diff --git a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramCalculatorInputDataViewModel.cs b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramCalculatorInputDataViewModel.cs index ded27c7..412b192 100644 --- a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramCalculatorInputDataViewModel.cs +++ b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramCalculatorInputDataViewModel.cs @@ -27,7 +27,7 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ValueDiagr public StateCalcTermPairViewModel StateCalcTermPairViewModel { get; } public ValueDiagramsViewModel ValueDiagramsViewModel { get; } - public ValueDiagramCalculatorInputDataViewModel(ICrossSectionRepository repository, IValueDiagramCalculatorInputData inputData) + public ValueDiagramCalculatorInputDataViewModel(IValueDiagramCalculatorInputData inputData, ICrossSectionRepository repository) { this.inputData = inputData; this.repository = repository; diff --git a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramCalculatorView.xaml b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramCalculatorView.xaml index d78f738..2a69240 100644 --- a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramCalculatorView.xaml +++ b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramCalculatorView.xaml @@ -29,9 +29,9 @@ - + - + diff --git a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramCalculatorViewModel.cs b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramCalculatorViewModel.cs index a5655eb..010c2fc 100644 --- a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramCalculatorViewModel.cs +++ b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramCalculatorViewModel.cs @@ -7,31 +7,15 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ValueDiagr public class ValueDiagramCalculatorViewModel : OkCancelViewModelBase { private IValueDiagramCalculator valueDiagramCalculator; - - public bool ShowTraceData - { - get => valueDiagramCalculator.ShowTraceData; - set - { - valueDiagramCalculator.ShowTraceData = value; - OnPropertyChanged(nameof(ShowTraceData)); - } - } - public string Name - { - get => valueDiagramCalculator.Name; - set - { - valueDiagramCalculator.Name = value; - OnPropertyChanged(nameof(Name)); - } - } + + public CalculatorViewModel CalculatorViewModel { get; private set; } public ValueDiagramCalculatorInputDataViewModel InputDataViewModel { get; set; } public ValueDiagramCalculatorViewModel(ICrossSectionRepository repository, IValueDiagramCalculator valueDiagramCalculator) { this.valueDiagramCalculator = valueDiagramCalculator; - InputDataViewModel = new(repository, valueDiagramCalculator.InputData); + CalculatorViewModel = new(valueDiagramCalculator); + InputDataViewModel = new(valueDiagramCalculator.InputData, repository); } public void Refresh() diff --git a/StructureHelper/Windows/MainWindow/CrossSections/AnalysisViewModelLogic.cs b/StructureHelper/Windows/MainWindow/CrossSections/AnalysisViewModelLogic.cs index ee8ab45..8bb4aea 100644 --- a/StructureHelper/Windows/MainWindow/CrossSections/AnalysisViewModelLogic.cs +++ b/StructureHelper/Windows/MainWindow/CrossSections/AnalysisViewModelLogic.cs @@ -2,6 +2,7 @@ using StructureHelper.Infrastructure; using StructureHelper.Infrastructure.Enums; using StructureHelper.Windows.CalculationWindows.CalculatorsViews; +using StructureHelper.Windows.CalculationWindows.CalculatorsViews.Curvatures; using StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalculatorViews; using StructureHelper.Windows.CalculationWindows.CalculatorsViews.ValueDiagrams; using StructureHelper.Windows.CalculationWindows.ProgressViews; @@ -14,6 +15,7 @@ using StructureHelperCommon.Models; using StructureHelperCommon.Models.Calculators; using StructureHelperLogics.Models.CrossSections; using StructureHelperLogics.NdmCalculations.Analyses.ByForces; +using StructureHelperLogics.NdmCalculations.Analyses.Curvatures; using StructureHelperLogics.NdmCalculations.Analyses.Logics; using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; using StructureHelperLogics.NdmCalculations.Cracking; @@ -54,16 +56,30 @@ namespace StructureHelper.Windows.ViewModels.NdmCrossSections { AddCrackCalculator(); } - else if (parameterType == CalculatorTypes.ValueDiagram) + else if (parameterType == CalculatorTypes.ValueDiagramCalculator) { AddValueDiagramCalculator(); } + else if (parameterType == CalculatorTypes.CurvatureCalcualtor) + { + AddCurvatureCalculator(); + } else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(parameterType)); } } + private void AddCurvatureCalculator() + { + var calculator = new CurvatureCalculator(Guid.NewGuid()) + { + Name = "New Curvature calculator", + ShowTraceData = false, + }; + NewItem = calculator; + } + private void AddValueDiagramCalculator() { var calculator = new ValueDiagramCalculator(Guid.NewGuid()) @@ -130,13 +146,19 @@ namespace StructureHelper.Windows.ViewModels.NdmCrossSections private void EditCalculator() { if (SelectedItem is ForceCalculator forceCalculator) { EditForceCalculator(forceCalculator);} - else if (SelectedItem is LimitCurvesCalculator limitCurvesCalculator) { EditLimitCurveCalculator(limitCurvesCalculator); } + else if (SelectedItem is LimitCurvesCalculator limitCurvesCalculator) { EditLimitCurveCalculator(limitCurvesCalculator);} else if (SelectedItem is CrackCalculator crackCalculator) { EditCrackCalculator(crackCalculator);} - else if (SelectedItem is IValueDiagramCalculator valueDiagramCalculator) - { - EditValueDiagramCalculator(valueDiagramCalculator); - } - else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(SelectedItem));} + else if (SelectedItem is ValueDiagramCalculator valueDiagramCalculator) {EditValueDiagramCalculator(valueDiagramCalculator);} + else if (SelectedItem is CurvatureCalculator curvatureCalculator) {EditCurvatureCalculator(curvatureCalculator);} + else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(SelectedItem)); } + } + + private void EditCurvatureCalculator(CurvatureCalculator sourceCalculator) + { + var clone = sourceCalculator.Clone() as ICurvatureCalculator; + var vm = new CurvatureCalculatorViewModel(sourceCalculator, repository); + var wnd = new CurvatureCalculatorView(vm); + ShowWindow(sourceCalculator, clone, wnd); } private void EditValueDiagramCalculator(IValueDiagramCalculator sourceCalculator) diff --git a/StructureHelper/Windows/MainWindow/CrossSections/CrossSectionView.xaml b/StructureHelper/Windows/MainWindow/CrossSections/CrossSectionView.xaml index 5269f7f..37b29ef 100644 --- a/StructureHelper/Windows/MainWindow/CrossSections/CrossSectionView.xaml +++ b/StructureHelper/Windows/MainWindow/CrossSections/CrossSectionView.xaml @@ -101,9 +101,9 @@ - +