CompressedProperty was added

This commit is contained in:
Evgeny Redikultsev
2023-01-16 21:42:18 +05:00
parent 062be10d96
commit 6d1f9bae1b
18 changed files with 276 additions and 209 deletions

View File

@@ -264,7 +264,8 @@
<Compile Include="Windows\ViewModels\Materials\PartialFactorsViewModel.cs" /> <Compile Include="Windows\ViewModels\Materials\PartialFactorsViewModel.cs" />
<Compile Include="Windows\ViewModels\Materials\SafetyFactorsViewModel.cs" /> <Compile Include="Windows\ViewModels\Materials\SafetyFactorsViewModel.cs" />
<Compile Include="Windows\ViewModels\Forces\ActionsViewModel.cs" /> <Compile Include="Windows\ViewModels\Forces\ActionsViewModel.cs" />
<Compile Include="Windows\ViewModels\NdmCrossSections\AnalysisVewModel.cs" /> <Compile Include="Windows\ViewModels\NdmCrossSections\AnalysisVewModelLogic.cs" />
<Compile Include="Windows\ViewModels\NdmCrossSections\SecondOrderViewModel.cs" />
<Compile Include="Windows\ViewModels\NdmCrossSections\IPrimitiveViewModelLogic.cs" /> <Compile Include="Windows\ViewModels\NdmCrossSections\IPrimitiveViewModelLogic.cs" />
<Compile Include="Windows\ViewModels\NdmCrossSections\PrimitiveViewModelLogic.cs" /> <Compile Include="Windows\ViewModels\NdmCrossSections\PrimitiveViewModelLogic.cs" />
<Compile Include="Windows\ViewModels\NdmCrossSections\CrossSectionViewVisualProperty.cs" /> <Compile Include="Windows\ViewModels\NdmCrossSections\CrossSectionViewVisualProperty.cs" />
@@ -278,7 +279,6 @@
<Compile Include="Windows\ViewModels\ICRUDViewModel.cs" /> <Compile Include="Windows\ViewModels\ICRUDViewModel.cs" />
<Compile Include="Windows\ViewModels\ISourceToTargetViewModel.cs" /> <Compile Include="Windows\ViewModels\ISourceToTargetViewModel.cs" />
<Compile Include="Windows\ViewModels\Materials\HeadMaterialsViewModel.cs" /> <Compile Include="Windows\ViewModels\Materials\HeadMaterialsViewModel.cs" />
<Compile Include="Windows\ViewModels\NdmCrossSections\CalculatorsViewModelLogic.cs" />
<Compile Include="Windows\ViewModels\NdmCrossSections\ForceCombinationViewModelLogic.cs" /> <Compile Include="Windows\ViewModels\NdmCrossSections\ForceCombinationViewModelLogic.cs" />
<Compile Include="Windows\ViewModels\NdmCrossSections\ICalculatorsViewModelLogic.cs" /> <Compile Include="Windows\ViewModels\NdmCrossSections\ICalculatorsViewModelLogic.cs" />
<Compile Include="Windows\ViewModels\NdmCrossSections\IForceCombinationViewModelLogic.cs" /> <Compile Include="Windows\ViewModels\NdmCrossSections\IForceCombinationViewModelLogic.cs" />

View File

@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperCommon.Models.Calculators
{
public class Accuracy : IAccuracy
{
public double IterationAccuracy { get; set; }
public int MaxIterationCount { get; set; }
}
}

View File

@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperCommon.Models.Calculators
{
public interface IAccuracy
{
double IterationAccuracy { get; set; }
int MaxIterationCount { get; set; }
}
}

View File

@@ -0,0 +1,37 @@
using StructureHelperCommon.Services.Sections;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperCommon.Models.Sections
{
public class CompressedMember : ICompressedMember
{
public bool Buckling { get; set; }
public double GeometryLength { get; set; }
public double LengthFactorX { get; set; }
public double DiagramFactorX { get; set; }
public double LengthFactorY { get; set; }
public double DiagramFactorY { get; set; }
public CompressedMember()
{
Buckling = true;
GeometryLength = 3d;
LengthFactorX = 1d;
DiagramFactorX = 1d;
LengthFactorY = 1d;
DiagramFactorY = 1d;
}
public object Clone()
{
var target = new CompressedMember();
CompressedMemberServices.CopyProperties(this, target);
return target;
}
}
}

View File

@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperCommon.Models.Sections
{
public interface ICompressedMember : ICloneable
{
bool Buckling { get; set; }
double GeometryLength { get; set; }
double LengthFactorX { get; set; }
double DiagramFactorX { get; set; }
double LengthFactorY { get; set; }
double DiagramFactorY { get; set; }
}
}

View File

@@ -0,0 +1,19 @@
using LoaderCalculator;
using StructureHelperCommon.Models.Calculators;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperCommon.Services.Calculations
{
public static class AccuracyService
{
public static void CopyProperties(IAccuracy source, IAccuracy target)
{
target.IterationAccuracy = source.IterationAccuracy;
target.MaxIterationCount = source.MaxIterationCount;
}
}
}

View File

@@ -0,0 +1,22 @@
using StructureHelperCommon.Models.Sections;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperCommon.Services.Sections
{
public static class CompressedMemberServices
{
public static void CopyProperties(ICompressedMember source, ICompressedMember target)
{
target.Buckling = source.Buckling;
target.GeometryLength = source.GeometryLength;
target.LengthFactorX = source.LengthFactorX;
target.DiagramFactorX = source.DiagramFactorX;
target.LengthFactorY = source.LengthFactorY;
target.DiagramFactorY = source.DiagramFactorY;
}
}
}

View File

@@ -61,6 +61,8 @@
<Compile Include="Infrastructures\Settings\ProgramSetting.cs" /> <Compile Include="Infrastructures\Settings\ProgramSetting.cs" />
<Compile Include="Infrastructures\Strings\ErrorString.cs" /> <Compile Include="Infrastructures\Strings\ErrorString.cs" />
<Compile Include="Infrastructures\Enums\MaterialTypes.cs" /> <Compile Include="Infrastructures\Enums\MaterialTypes.cs" />
<Compile Include="Models\Calculators\Accuracy.cs" />
<Compile Include="Models\Calculators\IAccuracy.cs" />
<Compile Include="Models\Calculators\IHelperCalculator.cs" /> <Compile Include="Models\Calculators\IHelperCalculator.cs" />
<Compile Include="Models\Forces\DesignForceTuple.cs" /> <Compile Include="Models\Forces\DesignForceTuple.cs" />
<Compile Include="Models\Forces\Factories\DesignForceFactory.cs" /> <Compile Include="Models\Forces\Factories\DesignForceFactory.cs" />
@@ -86,6 +88,8 @@
<Compile Include="Models\Materials\Libraries\MaterialPartialFactor.cs" /> <Compile Include="Models\Materials\Libraries\MaterialPartialFactor.cs" />
<Compile Include="Models\Materials\Libraries\MaterialSafetyFactor.cs" /> <Compile Include="Models\Materials\Libraries\MaterialSafetyFactor.cs" />
<Compile Include="Models\Materials\Libraries\ReinforcementMaterialEntity.cs" /> <Compile Include="Models\Materials\Libraries\ReinforcementMaterialEntity.cs" />
<Compile Include="Models\Sections\CompressedMember.cs" />
<Compile Include="Models\Sections\ICompressedMember.cs" />
<Compile Include="Models\Shapes\Point2D.cs" /> <Compile Include="Models\Shapes\Point2D.cs" />
<Compile Include="Models\Shapes\IPoint2D.cs" /> <Compile Include="Models\Shapes\IPoint2D.cs" />
<Compile Include="Models\Shapes\ICenterShape.cs" /> <Compile Include="Models\Shapes\ICenterShape.cs" />
@@ -98,9 +102,11 @@
<Compile Include="Models\Shapes\PointShape.cs" /> <Compile Include="Models\Shapes\PointShape.cs" />
<Compile Include="Models\Shapes\RectangleShape.cs" /> <Compile Include="Models\Shapes\RectangleShape.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Services\Calculations\AccuracyService.cs" />
<Compile Include="Services\ColorServices\ColorProcessor.cs" /> <Compile Include="Services\ColorServices\ColorProcessor.cs" />
<Compile Include="Services\Forces\ForceTupleService.cs" /> <Compile Include="Services\Forces\ForceTupleService.cs" />
<Compile Include="Services\Forces\StrainTupleService.cs" /> <Compile Include="Services\Forces\StrainTupleService.cs" />
<Compile Include="Services\Sections\CompressedMemberServices.cs" />
<Compile Include="Services\ShapeServices\ShapeService.cs" /> <Compile Include="Services\ShapeServices\ShapeService.cs" />
<Compile Include="Services\Units\IUnit.cs" /> <Compile Include="Services\Units\IUnit.cs" />
<Compile Include="Services\Units\Unit.cs" /> <Compile Include="Services\Units\Unit.cs" />

View File

@@ -3,9 +3,13 @@ using LoaderCalculator.Data.Matrix;
using LoaderCalculator.Data.Ndms; using LoaderCalculator.Data.Ndms;
using LoaderCalculator.Data.SourceData; using LoaderCalculator.Data.SourceData;
using StructureHelperCommon.Infrastructures.Enums; using StructureHelperCommon.Infrastructures.Enums;
using StructureHelperCommon.Models.Calculators;
using StructureHelperCommon.Models.Forces; using StructureHelperCommon.Models.Forces;
using StructureHelperCommon.Models.Sections;
using StructureHelperCommon.Models.Shapes; using StructureHelperCommon.Models.Shapes;
using StructureHelperCommon.Services.Calculations;
using StructureHelperCommon.Services.Forces; using StructureHelperCommon.Services.Forces;
using StructureHelperCommon.Services.Sections;
using StructureHelperLogics.NdmCalculations.Primitives; using StructureHelperLogics.NdmCalculations.Primitives;
using StructureHelperLogics.Services.NdmPrimitives; using StructureHelperLogics.Services.NdmPrimitives;
using System; using System;
@@ -17,14 +21,13 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
public class ForceCalculator : IForceCalculator public class ForceCalculator : IForceCalculator
{ {
public string Name { get; set; } public string Name { get; set; }
public double IterationAccuracy { get; set; }
public int MaxIterationCount { get; set; }
public List<LimitStates> LimitStatesList { get; } public List<LimitStates> LimitStatesList { get; }
public List<CalcTerms> CalcTermsList { get; } public List<CalcTerms> CalcTermsList { get; }
public List<IForceCombinationList> ForceCombinationLists { get; } public List<IForceCombinationList> ForceCombinationLists { get; }
public List<INdmPrimitive> Primitives { get; } public List<INdmPrimitive> Primitives { get; }
public INdmResult Result { get; private set; } public INdmResult Result { get; private set; }
public ICompressedMember CompressedMember { get; }
public IAccuracy Accuracy { get; }
public void Run() public void Run()
{ {
@@ -82,8 +85,8 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
{ {
ForceCombinationLists = new List<IForceCombinationList>(); ForceCombinationLists = new List<IForceCombinationList>();
Primitives = new List<INdmPrimitive>(); Primitives = new List<INdmPrimitive>();
IterationAccuracy = 0.001d; CompressedMember = new CompressedMember();
MaxIterationCount = 1000; Accuracy = new Accuracy() { IterationAccuracy = 0.001d, MaxIterationCount = 1000 };
LimitStatesList = new List<LimitStates>() { LimitStates.ULS, LimitStates.SLS }; LimitStatesList = new List<LimitStates>() { LimitStates.ULS, LimitStates.SLS };
CalcTermsList = new List<CalcTerms>() { CalcTerms.ShortTerm, CalcTerms.LongTerm }; CalcTermsList = new List<CalcTerms>() { CalcTerms.ShortTerm, CalcTerms.LongTerm };
} }
@@ -100,8 +103,8 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
{ {
Preconditions = new Preconditions Preconditions = new Preconditions
{ {
ConditionRate = IterationAccuracy, ConditionRate = Accuracy.IterationAccuracy,
MaxIterationCount = MaxIterationCount, MaxIterationCount = Accuracy.MaxIterationCount,
StartForceMatrix = new ForceMatrix { Mx = mx, My = my, Nz = nz } StartForceMatrix = new ForceMatrix { Mx = mx, My = my, Nz = nz }
}, },
NdmCollection = ndmCollection NdmCollection = ndmCollection
@@ -109,7 +112,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
var calculator = new Calculator(); var calculator = new Calculator();
calculator.Run(loaderData, new CancellationToken()); calculator.Run(loaderData, new CancellationToken());
var calcResult = calculator.Result; var calcResult = calculator.Result;
if (calcResult.AccuracyRate <= IterationAccuracy) if (calcResult.AccuracyRate <= Accuracy.IterationAccuracy)
{ {
return new ForcesResult() { IsValid = true, Desctription = "Analysis is done succsefully", LoaderResults = calcResult }; return new ForcesResult() { IsValid = true, Desctription = "Analysis is done succsefully", LoaderResults = calcResult };
} }
@@ -131,17 +134,16 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
public object Clone() public object Clone()
{ {
IForceCalculator calculator = new ForceCalculator(); IForceCalculator target = new ForceCalculator { Name = Name + " copy"};
calculator.Name = Name + " copy"; target.LimitStatesList.Clear();
calculator.LimitStatesList.Clear(); target.LimitStatesList.AddRange(LimitStatesList);
calculator.LimitStatesList.AddRange(LimitStatesList); target.CalcTermsList.Clear();
calculator.CalcTermsList.Clear(); target.CalcTermsList.AddRange(CalcTermsList);
calculator.CalcTermsList.AddRange(CalcTermsList); AccuracyService.CopyProperties(Accuracy, target.Accuracy);
calculator.IterationAccuracy = IterationAccuracy; CompressedMemberServices.CopyProperties(CompressedMember, target.CompressedMember);
calculator.MaxIterationCount = MaxIterationCount; target.Primitives.AddRange(Primitives);
calculator.Primitives.AddRange(Primitives); target.ForceCombinationLists.AddRange(ForceCombinationLists);
calculator.ForceCombinationLists.AddRange(ForceCombinationLists); return target;
return calculator;
} }
} }
} }

View File

@@ -1,6 +1,8 @@
using StructureHelperCommon.Infrastructures.Enums; using StructureHelperCommon.Infrastructures.Enums;
using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Models.Calculators;
using StructureHelperCommon.Models.Forces; using StructureHelperCommon.Models.Forces;
using StructureHelperCommon.Models.Sections;
using StructureHelperLogics.NdmCalculations.Primitives; using StructureHelperLogics.NdmCalculations.Primitives;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -10,8 +12,8 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
public interface IForceCalculator : INdmCalculator, IHasPrimitives, IHasForceCombinations public interface IForceCalculator : INdmCalculator, IHasPrimitives, IHasForceCombinations
{ {
List<CalcTerms> CalcTermsList { get; } List<CalcTerms> CalcTermsList { get; }
double IterationAccuracy { get; set; }
List<LimitStates> LimitStatesList { get; } List<LimitStates> LimitStatesList { get; }
int MaxIterationCount { get; set; } ICompressedMember CompressedMember { get; }
IAccuracy Accuracy { get; }
} }
} }

View File

@@ -19,8 +19,8 @@ namespace StructureHelperLogics.Services.NdmCalculations
calculator.LimitStatesList.Add(finishDesignForce.LimitState); calculator.LimitStatesList.Add(finishDesignForce.LimitState);
calculator.CalcTermsList.Clear(); calculator.CalcTermsList.Clear();
calculator.CalcTermsList.Add(finishDesignForce.CalcTerm); calculator.CalcTermsList.Add(finishDesignForce.CalcTerm);
calculator.IterationAccuracy = source.IterationAccuracy; calculator.Accuracy.IterationAccuracy = source.Accuracy.IterationAccuracy;
calculator.MaxIterationCount = source.MaxIterationCount; calculator.Accuracy.MaxIterationCount = source.Accuracy.MaxIterationCount;
calculator.Primitives.AddRange(source.Primitives); calculator.Primitives.AddRange(source.Primitives);
calculator.ForceCombinationLists.Clear(); calculator.ForceCombinationLists.Clear();
var combination = new ForceCombinationList() var combination = new ForceCombinationList()

View File

@@ -49,6 +49,31 @@
<TabItem Header="Primitives"> <TabItem Header="Primitives">
<ContentControl ContentTemplate="{StaticResource SourceToTarget}" Content="{Binding PrimitivesViewModel}"/> <ContentControl ContentTemplate="{StaticResource SourceToTarget}" Content="{Binding PrimitivesViewModel}"/>
</TabItem> </TabItem>
<TabItem Header="SOrder" Visibility="Hidden">
<Grid DataContext="{Binding SecondOrder}">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="22"/>
<RowDefinition Height="22"/>
<RowDefinition Height="22"/>
<RowDefinition Height="22"/>
<RowDefinition Height="22"/>
<RowDefinition Height="22"/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Text="Consider second order effects"/>
<TextBlock Grid.Row="1" Text="Geometry length"/>
<TextBlock Grid.Row="2" Text="Buckling factor x-axis"/>
<TextBlock Grid.Row="3" Text="Buckling factor y-axis"/>
<CheckBox Grid.Column="1" IsChecked="{Binding Buckling}"/>
<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding GeometryLength, Converter={StaticResource LengthConverter}, ValidatesOnExceptions=True}"/>
<TextBox Grid.Row="2" Grid.Column="1" Text="{Binding LengthFactorX, Converter={StaticResource PlainDouble}, ValidatesOnExceptions=True}"/>
<TextBox Grid.Row="3" Grid.Column="1" Text="{Binding LengthFactorY, Converter={StaticResource PlainDouble}, ValidatesOnExceptions=True}"/>
</Grid>
</TabItem>
<TabItem Header="Iterations"> <TabItem Header="Iterations">
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>

View File

@@ -43,8 +43,8 @@ namespace StructureHelper.Windows.MainWindow
public PrimitiveBase SelectedPrimitive { get; set; } public PrimitiveBase SelectedPrimitive { get; set; }
public IForceCombinationList SelectedForceCombinationList { get; set; } public IForceCombinationList SelectedForceCombinationList { get; set; }
private readonly AnalysisVewModel calculatorsLogic; private readonly AnalysisVewModelLogic calculatorsLogic;
public AnalysisVewModel CalculatorsLogic { get => calculatorsLogic;} public AnalysisVewModelLogic CalculatorsLogic { get => calculatorsLogic;}
public ActionsViewModel CombinationsLogic { get => combinationsLogic; } public ActionsViewModel CombinationsLogic { get => combinationsLogic; }
public IPrimitiveViewModelLogic PrimitiveLogic => primitiveLogic; public IPrimitiveViewModelLogic PrimitiveLogic => primitiveLogic;
@@ -202,7 +202,7 @@ namespace StructureHelper.Windows.MainWindow
Model = model; Model = model;
section = model.Section; section = model.Section;
combinationsLogic = new ActionsViewModel(repository); combinationsLogic = new ActionsViewModel(repository);
calculatorsLogic = new AnalysisVewModel(repository); calculatorsLogic = new AnalysisVewModelLogic(repository);
primitiveLogic = new PrimitiveViewModelLogic(repository) { CanvasWidth = CanvasWidth, CanvasHeight = CanvasHeight }; primitiveLogic = new PrimitiveViewModelLogic(repository) { CanvasWidth = CanvasWidth, CanvasHeight = CanvasHeight };
XX2 = CanvasWidth; XX2 = CanvasWidth;
XY1 = CanvasHeight / 2d; XY1 = CanvasHeight / 2d;

View File

@@ -83,28 +83,24 @@
<TextBlock Grid.Row="2" Text="Center X"/> <TextBlock Grid.Row="2" Text="Center X"/>
<TextBlock Grid.Row="3" Text="Center Y"/> <TextBlock Grid.Row="3" Text="Center Y"/>
<TextBox Grid.Row="0" Grid.Column="1" Margin="1" Text="{Binding Name}"/> <TextBox Grid.Row="0" Grid.Column="1" Margin="1" Text="{Binding Name}"/>
<StackPanel Grid.Row="1" Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Left"> <ComboBox Grid.Row="1" Grid.Column="1" ItemsSource="{Binding HeadMaterials}" SelectedItem="{Binding PrimitiveMaterial}">
<ComboBox Width="100" ItemsSource="{Binding HeadMaterials}" SelectedItem="{Binding PrimitiveMaterial}"> <ComboBox.ItemTemplate>
<ComboBox.ItemTemplate> <DataTemplate>
<DataTemplate> <Grid>
<Grid> <Grid.ColumnDefinitions>
<Grid.ColumnDefinitions> <ColumnDefinition Width="20"/>
<ColumnDefinition Width="20"/> <ColumnDefinition/>
<ColumnDefinition/> </Grid.ColumnDefinitions>
</Grid.ColumnDefinitions> <Rectangle Grid.Column="0" Margin="3">
<Rectangle Grid.Column="0" Margin="3"> <Rectangle.Fill>
<Rectangle.Fill> <SolidColorBrush Color="{Binding Color}"/>
<SolidColorBrush Color="{Binding Color}"/> </Rectangle.Fill>
</Rectangle.Fill> </Rectangle>
</Rectangle> <TextBlock Grid.Column="1" Text="{Binding Name}"/>
<TextBlock Grid.Column="1" Text="{Binding Name}"/> </Grid>
</Grid> </DataTemplate>
</DataTemplate> </ComboBox.ItemTemplate>
</ComboBox.ItemTemplate> </ComboBox>
</ComboBox>
<Button Width="50" Content="..." Command="{Binding EditMaterialCommand}">
</Button>
</StackPanel>
<TextBox Grid.Row="2" Grid.Column="1" Margin="1" Text="{Binding CenterX, Converter={StaticResource LengthConverter}, ValidatesOnExceptions=True}"/> <TextBox Grid.Row="2" Grid.Column="1" Margin="1" Text="{Binding CenterX, Converter={StaticResource LengthConverter}, ValidatesOnExceptions=True}"/>
<TextBox Grid.Row="3" Grid.Column="1" Margin="1" Text="{Binding CenterY, Converter={StaticResource LengthConverter}, ValidatesOnExceptions=True}"/> <TextBox Grid.Row="3" Grid.Column="1" Margin="1" Text="{Binding CenterY, Converter={StaticResource LengthConverter}, ValidatesOnExceptions=True}"/>
</Grid> </Grid>

View File

@@ -1,6 +1,7 @@
using StructureHelper.Infrastructure; using StructureHelper.Infrastructure;
using StructureHelper.Infrastructure.UI.DataContexts; using StructureHelper.Infrastructure.UI.DataContexts;
using StructureHelper.Services.Primitives; using StructureHelper.Services.Primitives;
using StructureHelper.Windows.ViewModels.NdmCrossSections;
using StructureHelperCommon.Infrastructures.Enums; using StructureHelperCommon.Infrastructures.Enums;
using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Strings; using StructureHelperCommon.Infrastructures.Strings;
@@ -25,6 +26,7 @@ namespace StructureHelper.Windows.ViewModels.Calculations.Calculators
IEnumerable<INdmPrimitive> allowedPrimitives; IEnumerable<INdmPrimitive> allowedPrimitives;
IEnumerable<IForceCombinationList> allowedForceCombinations; IEnumerable<IForceCombinationList> allowedForceCombinations;
ForceCalculator forcesCalculator; ForceCalculator forcesCalculator;
SecondOrderViewModel secondOrderViewModel;
public string Name public string Name
{ {
@@ -34,16 +36,18 @@ namespace StructureHelper.Windows.ViewModels.Calculations.Calculators
public double IterationAccuracy public double IterationAccuracy
{ {
get { return forcesCalculator.IterationAccuracy; } get { return forcesCalculator.Accuracy.IterationAccuracy; }
set { forcesCalculator.IterationAccuracy = value;} set { forcesCalculator.Accuracy.IterationAccuracy = value;}
} }
public int MaxIterationCount public int MaxIterationCount
{ {
get { return forcesCalculator.MaxIterationCount; } get { return forcesCalculator.Accuracy.MaxIterationCount; }
set { forcesCalculator.MaxIterationCount = value; } set { forcesCalculator.Accuracy.MaxIterationCount = value; }
} }
public SecondOrderViewModel SecondOrder => secondOrderViewModel;
public bool ULS { get; set; } public bool ULS { get; set; }
public bool SLS { get; set; } public bool SLS { get; set; }
public bool ShortTerm { get; set; } public bool ShortTerm { get; set; }
@@ -147,6 +151,7 @@ namespace StructureHelper.Windows.ViewModels.Calculations.Calculators
allowedPrimitives = _allowedPrimitives; allowedPrimitives = _allowedPrimitives;
allowedForceCombinations = _allowedForceCombinations; allowedForceCombinations = _allowedForceCombinations;
forcesCalculator = _forcesCalculator; forcesCalculator = _forcesCalculator;
secondOrderViewModel = new SecondOrderViewModel(forcesCalculator.CompressedMember);
CombinationViewModel = new SourceToTargetViewModel<IForceCombinationList>(); CombinationViewModel = new SourceToTargetViewModel<IForceCombinationList>();
CombinationViewModel.SetTargetItems(forcesCalculator.ForceCombinationLists); CombinationViewModel.SetTargetItems(forcesCalculator.ForceCombinationLists);

View File

@@ -15,7 +15,7 @@ using System.Windows.Forms;
namespace StructureHelper.Windows.ViewModels.NdmCrossSections namespace StructureHelper.Windows.ViewModels.NdmCrossSections
{ {
public class AnalysisVewModel : CRUDViewModelBase<INdmCalculator> public class AnalysisVewModelLogic : CRUDViewModelBase<INdmCalculator>
{ {
private ICrossSectionRepository repository; private ICrossSectionRepository repository;
private RelayCommand runCommand; private RelayCommand runCommand;
@@ -69,7 +69,7 @@ namespace StructureHelper.Windows.ViewModels.NdmCrossSections
}, o => SelectedItem != null)); }, o => SelectedItem != null));
} }
} }
public AnalysisVewModel(ICrossSectionRepository sectionRepository) : base(sectionRepository.CalculatorsList) public AnalysisVewModelLogic(ICrossSectionRepository sectionRepository) : base(sectionRepository.CalculatorsList)
{ {
repository = sectionRepository; repository = sectionRepository;
} }

View File

@@ -1,153 +0,0 @@
using StructureHelper.Infrastructure;
using StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalculatorViews;
using StructureHelper.Windows.ViewModels.Calculations.Calculators;
using StructureHelperCommon.Models.Forces;
using StructureHelperLogics.Models.CrossSections;
using StructureHelperLogics.NdmCalculations.Analyses;
using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows.Forms;
using System.Windows.Input;
namespace StructureHelper.Windows.ViewModels.NdmCrossSections
{
public class CalculatorsViewModelLogic : ViewModelBase, ICalculatorsViewModelLogic
{
private readonly ICrossSectionRepository repository;
public INdmCalculator SelectedItem { get; set; }
public ObservableCollection<INdmCalculator> Items { get; private set; }
private RelayCommand addCommand;
public RelayCommand Add
{
get
{
return addCommand ??
(
addCommand = new RelayCommand(o =>
{
AddCalculator();
OnPropertyChanged(nameof(Items));
}));
}
}
private void AddCalculator()
{
var item = new ForceCalculator() { Name = "New force calculator" };
Items.Add(item);
repository.CalculatorsList.Add(item);
}
private RelayCommand editCommand;
public RelayCommand Edit
{
get
{
return editCommand ??
(
editCommand = new RelayCommand(o =>
{
var tmpSelected = SelectedItem;
EditCalculator();
Items.Clear();
AddItems(repository.CalculatorsList);
OnPropertyChanged(nameof(Items));
SelectedItem = tmpSelected;
}, o => SelectedItem != null));
}
}
private void EditCalculator()
{
if (SelectedItem is ForceCalculator)
{
var calculator = SelectedItem as ForceCalculator;
var vm = new ForceCalculatorViewModel(repository.Primitives, repository.ForceCombinationLists, calculator);
var wnd = new ForceCalculatorView(vm);
wnd.ShowDialog();
}
}
private RelayCommand deleteCommand;
private RelayCommand runCommand;
private RelayCommand copyCommand;
public RelayCommand Delete
{
get
{
return deleteCommand ??
(
deleteCommand = new RelayCommand(o =>
{
DeleteCalculator();
}, o => SelectedItem != null));
}
}
public RelayCommand Run
{
get
{
return runCommand ??
(
runCommand = new RelayCommand(o =>
{
SelectedItem.Run();
var result = SelectedItem.Result;
if (result.IsValid == false)
{
MessageBox.Show(result.Desctription, "Check data for analisys", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
var calculator = SelectedItem as IForceCalculator;
var vm = new ForcesResultsViewModel(calculator);
var wnd = new ForceResultsView(vm);
wnd.ShowDialog();
}
}, o => SelectedItem != null));
}
}
public RelayCommand Copy
{
get
{
return copyCommand ??
(
copyCommand = new RelayCommand(o =>
{
var item = SelectedItem.Clone() as INdmCalculator;
repository.CalculatorsList.Add(item);
Items.Add(item);
OnPropertyChanged(nameof(Items));
}, o => SelectedItem != null));
}
}
private void DeleteCalculator()
{
var dialogResult = MessageBox.Show("Delete calculator?", "Please, confirm deleting", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (dialogResult == DialogResult.Yes)
{
repository.CalculatorsList.Remove(SelectedItem as INdmCalculator);
OnPropertyChanged(nameof(Items));
}
}
public void AddItems(IEnumerable<INdmCalculator> items)
{
foreach (var item in items)
{
Items.Add(item);
}
}
public CalculatorsViewModelLogic(ICrossSectionRepository repository)
{
this.repository = repository;
Items = new ObservableCollection<INdmCalculator>();
AddItems(this.repository.CalculatorsList);
}
}
}

View File

@@ -0,0 +1,60 @@
using FieldVisualizer.ViewModels;
using StructureHelperCommon.Models.Sections;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelper.Windows.ViewModels.NdmCrossSections
{
public class SecondOrderViewModel : ViewModelBase
{
ICompressedMember member;
public bool Buckling
{
get => member.Buckling;
set
{
member.Buckling = value;
OnPropertyChanged(nameof(Buckling));
}
}
public double GeometryLength
{
get => member.GeometryLength;
set
{
member.GeometryLength = value;
OnPropertyChanged(nameof(GeometryLength));
}
}
public double LengthFactorX
{
get => member.LengthFactorX;
set
{
member.GeometryLength = value;
OnPropertyChanged(nameof(LengthFactorX));
}
}
public double LengthFactorY
{
get => member.LengthFactorY;
set
{
member.GeometryLength = value;
OnPropertyChanged(nameof(LengthFactorY));
}
}
public SecondOrderViewModel(ICompressedMember compressedMember)
{
member = compressedMember;
}
}
}