All Test Was Repaired

This commit is contained in:
Evgeny Redikultsev
2022-12-10 17:44:06 +05:00
parent c766227b19
commit f562cf2bce
72 changed files with 1541 additions and 398 deletions

View File

@@ -11,8 +11,8 @@ using StructureHelper.UnitSystem.Systems;
using StructureHelperCommon.Infrastructures.Enums;
using StructureHelperCommon.Services.Units;
using StructureHelperLogics.Models.Calculations.CalculationProperties;
using StructureHelperLogics.Models.CrossSections;
using StructureHelperLogics.Models.Materials;
using StructureHelperLogics.Models.Materials.Factories;
using StructureHelperLogics.NdmCalculations.Triangulations;
using StructureHelperLogics.Services;
using StructureHelperLogics.Services.NdmCalculations;
@@ -25,9 +25,7 @@ namespace StructureHelper.Windows.MainWindow
{
public class MainModel
{
//const CodeTypes code = CodeTypes.EuroCode_2_1990;
const CodeTypes code = CodeTypes.SP63_13330_2018;
public ICrossSection Section { get; private set; }
private IPrimitiveRepository primitiveRepository;
public IHeadMaterialRepository HeadMaterialRepository { get; }
public List<IHeadMaterial> HeadMaterials { get; }
@@ -44,10 +42,10 @@ namespace StructureHelper.Windows.MainWindow
this.calculationService = calculationService;
this.unitSystemService = unitSystemService;
Section = new CrossSection();
CalculationProperty = new CalculationProperty();
HeadMaterials = new List<IHeadMaterial>();
HeadMaterialRepository = new HeadMaterialRepository(this);
HeadMaterialRepository.LibMaterials = LibMaterialFactory.GetLibMaterials(code);
}
//public IStrainMatrix Calculate(double mx, double my, double nz)
@@ -60,8 +58,7 @@ namespace StructureHelper.Windows.MainWindow
public IEnumerable<INdm> GetNdms(ICalculationProperty calculationProperty)
{
var unitSystem = unitSystemService.GetCurrentSystem();
var ndmPrimitives = primitiveRepository.Primitives.Select(x => x.GetNdmPrimitive()).ToArray();
var ndmPrimitives = Section.SectionRepository.Primitives;
//Настройки триангуляции, пока опции могут быть только такие
ITriangulationOptions options = new TriangulationOptions { LimiteState = calculationProperty.LimitState, CalcTerm = calculationProperty.CalcTerm };

View File

@@ -62,32 +62,38 @@
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel>
<Expander Header="Materials" ExpandDirection="Down" MinWidth="20">
<Expander Header="Actions" MinWidth="20">
<Expander.ContextMenu>
<ContextMenu>
<Button Content="Materials" Command="{Binding EditHeadMaterialsCommand}"/>
<Button Content="Add Force Combination" Command="{Binding AddForceCombinationCommand}"/>
</ContextMenu>
</Expander.ContextMenu>
<ListBox ItemsSource="{Binding HeadMaterials}">
<ListBox ItemsSource="{Binding ForceCombinationLists}" SelectedItem="{Binding SelectedForceCombinationList}">
<ListBox.ContextMenu>
<ContextMenu>
<Button Content="Edit" Command="{Binding EditForceCombinationCommand}"/>
<Button Content="Delete" Command="{Binding DeleteForceCombinationCommand}"/>
</ContextMenu>
</ListBox.ContextMenu>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Rectangle Grid.Column="0" Margin="3">
<Rectangle.Fill>
<SolidColorBrush Color="{Binding Color}"/>
</Rectangle.Fill>
</Rectangle>
<TextBlock Grid.Column="1" Text="{Binding Name}"/>
<TextBlock Text="{Binding Name}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Expander>
<Expander Header="Geometry" ExpandDirection="Down" MinWidth="20" >
<Expander Header="Materials" MinWidth="20">
<Expander.ContextMenu>
<ContextMenu>
<Button Content="Materials" Command="{Binding EditHeadMaterialsCommand}"/>
</ContextMenu>
</Expander.ContextMenu>
<ListBox ItemsSource="{Binding HeadMaterials}" ItemTemplate="{StaticResource ColoredItemTemplate}">
</ListBox>
</Expander>
<Expander Header="Geometry" MinWidth="20" >
<Expander.ContextMenu>
<ContextMenu>
<MenuItem Header="Add">
@@ -96,43 +102,33 @@
</MenuItem>
</ContextMenu>
</Expander.ContextMenu>
<ListBox ItemsSource="{Binding Primitives}" SelectedItem="{Binding SelectedPrimitive}">
<ListBox ItemsSource="{Binding Primitives}" SelectedItem="{Binding SelectedPrimitive}" ItemTemplate="{StaticResource ColoredItemTemplate}">
<ListBox.ContextMenu>
<ContextMenu>
<Button Content="Edit" Command="{Binding EditPrimitive}"/>
<Button Content="Delete" Command="{Binding DeletePrimitive}"/>
</ContextMenu>
</ListBox.ContextMenu>
</ListBox>
</Expander>
<Expander Header="Analyses" MinWidth="20">
<Expander.ContextMenu>
<ContextMenu>
<Button Content="Add Calculator" Command="{Binding AddCalculatorCommand}"/>
</ContextMenu>
</Expander.ContextMenu>
<ListBox ItemsSource="{Binding Calculators}" SelectedItem="{Binding SelectedCalculator}">
<ListBox.ContextMenu>
<ContextMenu>
<Button Content="Edit" Command="{Binding EditCalculatorCommand}"/>
<!--<Button Content="Delete" Command="{Binding DeleteForceCombinationCommand}"/>-->
</ContextMenu>
</ListBox.ContextMenu>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Rectangle Grid.Column="0" Margin="3">
<Rectangle.Fill>
<SolidColorBrush Color="{Binding Color}"/>
</Rectangle.Fill>
</Rectangle>
<TextBlock Grid.Column="1" Text="{Binding Name}"/>
<TextBlock Text="{Binding Name}"/>
</Grid>
<!--<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="20"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1"/>
<ColumnDefinition MinWidth="50"/>
</Grid.ColumnDefinitions>
<Viewbox Grid.RowSpan="2">
</Viewbox>
<TextBlock Grid.Column="1" Text="{Binding Name}"/>
<Button Grid.Column="1" Grid.Row="1" Content="..."/>
</Grid>-->
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

View File

@@ -11,18 +11,27 @@ using StructureHelper.Services.Primitives;
using StructureHelper.UnitSystem;
using StructureHelper.Windows.CalculationWindows.CalculationPropertyWindow;
using StructureHelper.Windows.CalculationWindows.CalculationResultWindow;
using StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalculatorViews;
using StructureHelper.Windows.ColorPickerWindow;
using StructureHelper.Windows.Forces;
using StructureHelper.Windows.MainWindow.Materials;
using StructureHelper.Windows.PrimitiveProperiesWindow;
using StructureHelper.Windows.PrimitiveTemplates.RCs.RectangleBeam;
using StructureHelper.Windows.ViewModels.Calculations.CalculationProperies;
using StructureHelper.Windows.ViewModels.Calculations.CalculationResult;
using StructureHelper.Windows.ViewModels.Calculations.Calculators;
using StructureHelperCommon.Infrastructures.Enums;
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Settings;
using StructureHelperCommon.Infrastructures.Strings;
using StructureHelperCommon.Models.Forces;
using StructureHelperLogics.Models.Calculations.CalculationProperties;
using StructureHelperLogics.Models.CrossSections;
using StructureHelperLogics.Models.Materials;
using StructureHelperLogics.Models.Primitives;
using StructureHelperLogics.Models.Templates.RCs;
using StructureHelperLogics.NdmCalculations.Analyses;
using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
using StructureHelperLogics.NdmCalculations.Primitives;
using StructureHelperLogics.Services.NdmCalculations;
using System;
@@ -38,17 +47,46 @@ namespace StructureHelper.Windows.MainWindow
public class MainViewModel : ViewModelBase
{
const double scale = 1d;
ICrossSection section;
ICrossSectionRepository repository => section.SectionRepository;
private double ConstAxisLineThickness = 2d * scale;
private double ConstGridLineThickness = 0.25d * scale;
private List<IHeadMaterial> headMaterials;
private readonly double scaleRate = 1.1d;
private IPrimitiveRepository PrimitiveRepository { get; }
public PrimitiveBase SelectedPrimitive { get; set; }
public IForceCombinationList SelectedForceCombinationList { get; set; }
public INdmCalculator SelectedCalculator { get; set; }
private MainModel Model { get; }
public ObservableCollection<PrimitiveBase> Primitives { get; set; }
public ObservableCollection<PrimitiveBase> Primitives { get; private set; }
public ObservableCollection<IForceCombinationList> ForceCombinationLists
{
get
{
var collection = new ObservableCollection<IForceCombinationList>();
foreach (var item in Model.Section.SectionRepository.ForceCombinationLists)
{
collection.Add(item);
}
return collection;
}
}
public ObservableCollection<INdmCalculator> Calculators
{
get
{
var collection = new ObservableCollection<INdmCalculator>();
foreach (var item in Model.Section.SectionRepository.Calculators)
{
collection.Add(item);
}
return collection;
}
}
private double panelX, panelY, scrollPanelX, scrollPanelY;
private CalculationProperty calculationProperty;
@@ -119,7 +157,7 @@ namespace StructureHelper.Windows.MainWindow
get
{
var collection = new ObservableCollection<IHeadMaterial>();
foreach (var obj in headMaterials)
foreach (var obj in Model.Section.SectionRepository.HeadMaterials)
{
collection.Add(obj);
}
@@ -148,6 +186,117 @@ namespace StructureHelper.Windows.MainWindow
set => OnPropertyChanged(value, ref yY2);
}
public ICommand AddPrimitive { get; }
private ICommand addForceCombinationCommand;
public ICommand AddForceCombinationCommand
{
get
{
return addForceCombinationCommand ??
(
addForceCombinationCommand = new RelayCommand(o =>
{
AddForceCombination();
OnPropertyChanged(nameof(ForceCombinationLists));
}));
}
}
private void AddForceCombination()
{
var item = new ForceCombinationList() { Name = "New Force Combination" };
Model.Section.SectionRepository.ForceCombinationLists.Add(item);
}
private ICommand deleteForceCombinationCommand;
public ICommand DeleteForceCombinationCommand
{
get
{
return deleteForceCombinationCommand ??
(
deleteForceCombinationCommand = new RelayCommand(o =>
{
DeleteForceCombination();
OnPropertyChanged(nameof(ForceCombinationLists));
}, o => SelectedForceCombinationList != null));
}
}
private void DeleteForceCombination()
{
var dialogResult = MessageBox.Show("Delete action?", "Please, confirm deleting", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (dialogResult == DialogResult.Yes)
{
Model.Section.SectionRepository.ForceCombinationLists.Remove(SelectedForceCombinationList);
}
}
private ICommand editForceCombinationCommand;
public ICommand EditForceCombinationCommand
{
get
{
return editForceCombinationCommand ??
(
editForceCombinationCommand = new RelayCommand(o =>
{
EditForceCombination();
OnPropertyChanged(nameof(ForceCombinationLists));
}, o => SelectedForceCombinationList != null));
}
}
private void EditForceCombination()
{
var wnd = new ForceCombinationView(SelectedForceCombinationList);
wnd.ShowDialog();
}
private ICommand addCalculatorCommand;
public ICommand AddCalculatorCommand
{
get
{
return addCalculatorCommand ??
(
addCalculatorCommand = new RelayCommand(o =>
{
AddCalculator();
OnPropertyChanged(nameof(Calculators));
}));
}
}
private void AddCalculator()
{
var item = new ForceCalculator() { Name = "New force calculator"};
Model.Section.SectionRepository.Calculators.Add(item);
}
private ICommand editCalculatorCommand;
public ICommand EditCalculatorCommand
{
get
{
return editCalculatorCommand ??
(
editCalculatorCommand = new RelayCommand(o =>
{
EditCalculator();
OnPropertyChanged(nameof(Calculators));
}, o => SelectedCalculator != null));
}
}
private void EditCalculator()
{
if (SelectedCalculator is ForceCalculator)
{
var calculator = SelectedCalculator as ForceCalculator;
var repository = Model.Section.SectionRepository;
var primitives = Primitives.Select(x => x.GetNdmPrimitive()).ToArray();
var vm = new ForceCalculatorViewModel( primitives, repository.ForceCombinationLists, calculator);
var wnd = new ForceCalculatorView(vm);
wnd.ShowDialog();
}
}
public ICommand Calculate { get; }
public ICommand DeletePrimitive { get; }
public ICommand EditCalculationPropertyCommand { get; }
@@ -176,11 +325,10 @@ namespace StructureHelper.Windows.MainWindow
private double axisLineThickness;
private double gridLineThickness;
public MainViewModel(MainModel model, IPrimitiveRepository primitiveRepository, UnitSystemService unitSystemService)
public MainViewModel(MainModel model)
{
PrimitiveRepository = primitiveRepository;
Model = model;
headMaterials = Model.HeadMaterialRepository.HeadMaterials;
section = model.Section;
CanvasWidth = 2d * scale;
CanvasHeight = 1.5d * scale;
XX2 = CanvasWidth;
@@ -276,7 +424,7 @@ namespace StructureHelper.Windows.MainWindow
ScaleValue /= scaleRate;
});
Primitives = new ObservableCollection<PrimitiveBase>();
Primitives = PrimitiveOperations.ConvertNdmPrimitivesToPrimitiveBase(repository.Primitives);
AddPrimitive = new RelayCommand(o =>
{
@@ -306,8 +454,9 @@ namespace StructureHelper.Windows.MainWindow
else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown + nameof(primitiveType)); }
viewPrimitive.RegisterDeltas(CanvasWidth / 2, CanvasHeight / 2);
repository.Primitives.Add(ndmPrimitive);
Primitives.Add(viewPrimitive);
PrimitiveRepository.Add(viewPrimitive);
OnPropertyChanged(nameof(Primitives));
OnPropertyChanged(nameof(PrimitivesCount));
});
@@ -326,7 +475,8 @@ namespace StructureHelper.Windows.MainWindow
foreach (var primitive in GetBeamCasePrimitives())
{
Primitives.Add(primitive);
PrimitiveRepository.Add(primitive);
var ndmPrimitive = primitive.GetNdmPrimitive();
repository.Primitives.Add(ndmPrimitive);
}
OnPropertyChanged(nameof(PrimitivesCount));
AddCaseLoads(-50e3d, 50e3d, 0d);
@@ -337,7 +487,8 @@ namespace StructureHelper.Windows.MainWindow
foreach (var primitive in GetColumnCasePrimitives())
{
Primitives.Add(primitive);
PrimitiveRepository.Add(primitive);
var ndmPrimitive = primitive.GetNdmPrimitive();
repository.Primitives.Add(ndmPrimitive);
}
OnPropertyChanged(nameof(PrimitivesCount));
AddCaseLoads(50e3d, 50e3d, -100e3d);
@@ -348,7 +499,8 @@ namespace StructureHelper.Windows.MainWindow
foreach (var primitive in GetSlabCasePrimitives())
{
Primitives.Add(primitive);
PrimitiveRepository.Add(primitive);
var ndmPrimitive = primitive.GetNdmPrimitive();
repository.Primitives.Add(ndmPrimitive);
}
OnPropertyChanged(nameof(PrimitivesCount));
AddCaseLoads(-20e3d, 0d, 0d);
@@ -357,9 +509,8 @@ namespace StructureHelper.Windows.MainWindow
Calculate = new RelayCommand(o =>
{
CalculateResult();
},
o => Model.PrimitiveRepository.Primitives.Count() > 0);
o => repository.Primitives.Count() > 0);
EditCalculationPropertyCommand = new RelayCommand (o => EditCalculationProperty());
@@ -374,7 +525,7 @@ namespace StructureHelper.Windows.MainWindow
primitive.CenterY -= center[1];
}
},
o => Model.PrimitiveRepository.Primitives.Count() > 0
o => repository.Primitives.Count() > 0
);
SetPopupCanBeClosedTrue = new RelayCommand(o =>
@@ -392,10 +543,9 @@ namespace StructureHelper.Windows.MainWindow
private void EditHeadMaterials()
{
var wnd = new HeadMaterialsView(Model.HeadMaterialRepository);
var wnd = new HeadMaterialsView(repository);
wnd.ShowDialog();
headMaterials = Model.HeadMaterialRepository.HeadMaterials;
OnPropertyChanged(nameof(headMaterials));
OnPropertyChanged(nameof(HeadMaterials));
foreach (var primitive in Primitives)
{
primitive.RefreshColor();
@@ -409,7 +559,8 @@ namespace StructureHelper.Windows.MainWindow
var dialogResult = MessageBox.Show("Delete primitive?", "Please, confirm deleting", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (dialogResult == DialogResult.Yes)
{
PrimitiveRepository.Delete(SelectedPrimitive);
var ndmPrimitive = SelectedPrimitive.GetNdmPrimitive();
repository.Primitives.Remove(ndmPrimitive);
Primitives.Remove(SelectedPrimitive);
}
}
@@ -421,9 +572,9 @@ namespace StructureHelper.Windows.MainWindow
{
if (!(SelectedPrimitive is null))
{
var wnd = new PrimitiveProperties(SelectedPrimitive, Model.HeadMaterialRepository);
var wnd = new PrimitiveProperties(SelectedPrimitive, repository);
wnd.ShowDialog();
OnPropertyChanged(nameof(headMaterials));
OnPropertyChanged(nameof(HeadMaterials));
}
else { MessageBox.Show("Selection is changed", "Please, select primitive", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); }
}
@@ -458,7 +609,7 @@ namespace StructureHelper.Windows.MainWindow
private bool CheckMaterials()
{
foreach (var item in PrimitiveRepository.Primitives)
foreach (var item in Primitives)
{
if (item.HeadMaterial == null)
{
@@ -507,13 +658,13 @@ namespace StructureHelper.Windows.MainWindow
wnd.ShowDialog();
if (wnd.DialogResult == true)
{
IHeadMaterial concrete = new HeadMaterial() { Name = "Concrete" };
concrete.HelperMaterial = Model.HeadMaterialRepository.LibMaterials.Where(x => (x.MaterialType == MaterialTypes.Concrete & x.Name.Contains("40"))).First();
IHeadMaterial reinforcement = new HeadMaterial() { Name = "Reinforcement" };
reinforcement.HelperMaterial = Model.HeadMaterialRepository.LibMaterials.Where(x => (x.MaterialType == MaterialTypes.Reinforcement & x.Name.Contains("400"))).First();
headMaterials.Add(concrete);
headMaterials.Add(reinforcement);
OnPropertyChanged(nameof(headMaterials));
var concrete = HeadMaterialFactory.GetHeadMaterial(HeadmaterialType.Concrete40, ProgramSetting.CodeType);
concrete.Name = "Concrete";
var reinforcement = HeadMaterialFactory.GetHeadMaterial(HeadmaterialType.Reinforecement400, ProgramSetting.CodeType);
reinforcement.Name = "Reinforcement";
Model.Section.SectionRepository.HeadMaterials.Add(concrete);
Model.Section.SectionRepository.HeadMaterials.Add(reinforcement);
OnPropertyChanged(nameof(HeadMaterials));
var primitives = PrimitiveFactory.GetRectangleRCElement(template, concrete, reinforcement);
foreach (var item in primitives)
{

View File

@@ -9,10 +9,22 @@
mc:Ignorable="d"
Title="Materials" Height="350" Width="680" MinHeight="350" MinWidth="680" WindowStartupLocation="CenterScreen">
<Window.Resources>
<DataTemplate x:Key="LibMaterial">
<DataTemplate x:Key="ConcreteLibMaterial">
<StackPanel>
<TextBlock Text="Library material"/>
<ComboBox Grid.Row="2" Height="25" VerticalAlignment="Top" ItemsSource="{Binding LibMaterials}" SelectedItem="{Binding SelectedLibMaterial}">
<ComboBox Grid.Row="2" Height="25" VerticalAlignment="Top" ItemsSource="{Binding LibConcreteMaterials}" SelectedItem="{Binding SelectedLibMaterial}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="ReinforcementLibMaterial">
<StackPanel>
<TextBlock Text="Library material"/>
<ComboBox Grid.Row="2" Height="25" VerticalAlignment="Top" ItemsSource="{Binding LibReinforcementMaterials}" SelectedItem="{Binding SelectedLibMaterial}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
@@ -74,7 +86,8 @@
</ListBox>
</Grid>
<StackPanel Grid.Column="1">
<Button Content="New Lib Material" Command="{Binding AddNewMaterialCommand}"/>
<Button Content="New Concrete" Command="{Binding AddNewConcreteMaterialCommand}"/>
<Button Content="New Reinforcement" Command="{Binding AddNewReinforcementMaterialCommand}"/>
<Button Content="New Elastic Material" Command="{Binding AddElasticMaterialCommand}"/>
<Button Content="Edit color" Command="{Binding EditColorCommand}"/>
<Button Content="Copy" Command="{Binding CopyHeadMaterialCommand}"/>

View File

@@ -25,13 +25,8 @@ namespace StructureHelper.Windows.MainWindow.Materials
{
private HeadMaterialsViewModel viewModel;
public HeadMaterialsView(IHeadMaterialRepository headMaterialRepository)
{
viewModel = new HeadMaterialsViewModel(headMaterialRepository);
this.DataContext = viewModel;
InitializeComponent();
}
//public HeadMaterialsView(List<IHeadMaterial> headMaterials) : this(new HeadMaterialsViewModel(headMaterials)) {}
public HeadMaterialsView(IHasHeadMaterials hasHeadMaterials) : this(new HeadMaterialsViewModel(hasHeadMaterials)) { }
public HeadMaterialsView(HeadMaterialsViewModel vm)
{
viewModel = vm;
@@ -47,12 +42,17 @@ namespace StructureHelper.Windows.MainWindow.Materials
var helperMaterial = selectedMaterial.HelperMaterial;
string dataTemplateName = string.Empty;
Binding binding = new Binding();
if (helperMaterial is ILibMaterial)
if (helperMaterial is IConcreteLibMaterial)
{
dataTemplateName = "LibMaterial";
dataTemplateName = "ConcreteLibMaterial";
binding.Source = viewModel;
}
if (helperMaterial is IElasticMaterial)
else if (helperMaterial is IReinforcementLibMaterial)
{
dataTemplateName = "ReinforcementLibMaterial";
binding.Source = viewModel;
}
else if (helperMaterial is IElasticMaterial)
{
dataTemplateName = "ElasticMaterial";
binding.Source = viewModel.SelectedMaterial.HelperMaterial;