material edit windows were added

This commit is contained in:
Evgeny Redikultsev
2023-04-02 17:37:22 +05:00
parent 5b14ad6626
commit fe2adb49ff
24 changed files with 676 additions and 96 deletions

Binary file not shown.

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelper.Infrastructure.Enums
{
internal enum MaterialType
{
Concrete,
Reinforcement,
Elastic
}
}

View File

@@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace StructureHelper.Infrastructure.UI.Converters.Units
{
internal static class UnitConstatnts
internal static class UnitConstants
{
public static double Length = 1e3d;
public static double Force = 1e-3d;

View File

@@ -0,0 +1,107 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<DataTemplate x:Key="LibraryMaterial">
<StackPanel>
<TextBlock Text="Library material"/>
<ComboBox Height="25" VerticalAlignment="Top" ItemsSource="{Binding MaterialLibrary}" SelectedItem="{Binding MaterialEntity}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="SafetyFactors">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="200"/>
</Grid.RowDefinitions>
<Button Content="Show Safety Factors" Command="{Binding DataContext.ShowSafetyFactors, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}"/>
<ContentControl Grid.Row="1" ContentTemplate="{StaticResource MaterialSafetyFactors}" Content="{Binding DataContext, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}"/>
</Grid>
</DataTemplate>
<DataTemplate x:Key="ConcreteLibMaterial">
<StackPanel>
<TextBlock Text="Library material"/>
<ComboBox Height="25" VerticalAlignment="Top" ItemsSource="{Binding LibConcreteMaterials}" SelectedItem="{Binding SelectedLibMaterial}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<ContentControl ContentTemplate="{StaticResource SafetyFactors}"/>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="ConcreteMaterial">
<StackPanel>
<ContentControl ContentTemplate="{StaticResource LibraryMaterial}" Content="{Binding}"/>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="22"/>
<RowDefinition Height="22"/>
<RowDefinition Height="22"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="Tension for ULS"/>
<TextBlock Grid.Row="1" Text="Tension for SLS"/>
<TextBlock Grid.Row="2" Text="Relative humidity"/>
<CheckBox Grid.Column="1" IsChecked="{Binding TensionForULS}"/>
<CheckBox Grid.Column="1" Grid.Row="1" IsChecked="{Binding TensionForSLS}"/>
<TextBox Grid.Column="1" Grid.Row="2" Text="{Binding Humidity}"/>
</Grid>
<Button Content="Show Safety Factors" Command="{Binding ShowSafetyFactors}"/>
<ContentControl ContentTemplate="{StaticResource MaterialSafetyFactors}" Content="{Binding SafetyFactors}"/>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="ReinforcementMaterial">
<StackPanel>
<ContentControl ContentTemplate="{StaticResource LibraryMaterial}" Content="{Binding}"/>
<Button Content="Show Safety Factors" Command="{Binding ShowSafetyFactors}"/>
<ContentControl ContentTemplate="{StaticResource MaterialSafetyFactors}" Content="{Binding SafetyFactors}"/>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="ReinforcementLibMaterial">
<StackPanel>
<TextBlock Text="Library material"/>
<ComboBox Height="25" VerticalAlignment="Top" ItemsSource="{Binding LibReinforcementMaterials}" SelectedItem="{Binding SelectedLibMaterial}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<ContentControl ContentTemplate="{StaticResource SafetyFactors}"/>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="ElasticMaterial">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="180"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="28"/>
<RowDefinition Height="28"/>
<RowDefinition Height="28"/>
<RowDefinition Height="28"/>
</Grid.RowDefinitions>
<TextBlock Text="Elastic material"/>
<TextBlock Grid.Row="1" Text="Young's modulus"/>
<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding Modulus, Converter={StaticResource StressConverter}, ValidatesOnExceptions=True}"/>
<TextBlock Grid.Row="2" Text="Compressive strength"/>
<TextBox Grid.Row="2" Grid.Column="1" Text="{Binding CompressiveStrength, Converter={StaticResource StressConverter}, ValidatesOnExceptions=True}"/>
<TextBlock Grid.Row="3" Text="Tensile strength"/>
<TextBox Grid.Row="3" Grid.Column="1" Text="{Binding TensileStrength, Converter={StaticResource StressConverter}, ValidatesOnExceptions=True}"/>
</Grid>
</DataTemplate>
</ResourceDictionary>

View File

@@ -18,12 +18,12 @@ namespace StructureHelper.Services.ResultViewers
resultFuncs.Add(new ResultFunc() { Name = "Total Strain with prestrain", ResultFunction = stressLogic.GetTotalStrainWithPresrain });
resultFuncs.Add(new ResultFunc() { Name = "Elastic Strain", ResultFunction = stressLogic.GetElasticStrain });
resultFuncs.Add(new ResultFunc() { Name = "Plastic Strain", ResultFunction = stressLogic.GetPlasticStrain });
resultFuncs.Add(new ResultFunc() { Name = "Stress", ResultFunction = stressLogic.GetStress, UnitFactor = UnitConstatnts.Stress });
resultFuncs.Add(new ResultFunc() { Name = "Secant modulus", ResultFunction = stressLogic.GetSecantModulus, UnitFactor = UnitConstatnts.Stress });
resultFuncs.Add(new ResultFunc() { Name = "Stress", ResultFunction = stressLogic.GetStress, UnitFactor = UnitConstants.Stress });
resultFuncs.Add(new ResultFunc() { Name = "Secant modulus", ResultFunction = stressLogic.GetSecantModulus, UnitFactor = UnitConstants.Stress });
resultFuncs.Add(new ResultFunc() { Name = "Modulus degradation", ResultFunction = stressLogic.GetModulusDegradation });
resultFuncs.Add(new ResultFunc() { Name = "Force", ResultFunction = stressLogic.GetForce, UnitFactor = UnitConstatnts.Force });
resultFuncs.Add(new ResultFunc() { Name = "Moment X", ResultFunction = stressLogic.GetMomentX, UnitFactor = UnitConstatnts.Force });
resultFuncs.Add(new ResultFunc() { Name = "Moment Y", ResultFunction = stressLogic.GetMomentY, UnitFactor = UnitConstatnts.Force });
resultFuncs.Add(new ResultFunc() { Name = "Force", ResultFunction = stressLogic.GetForce, UnitFactor = UnitConstants.Force });
resultFuncs.Add(new ResultFunc() { Name = "Moment X", ResultFunction = stressLogic.GetMomentX, UnitFactor = UnitConstants.Force });
resultFuncs.Add(new ResultFunc() { Name = "Moment Y", ResultFunction = stressLogic.GetMomentY, UnitFactor = UnitConstants.Force });
return resultFuncs;
}
}

View File

@@ -58,7 +58,7 @@ namespace StructureHelper.Services.ResultViewers
{
inputData.ReinforcementStress = inputData.ReinforcementStrength * Math.Sign(inputData.ReinforcementStress);
}
var val = inputData.ReinforcementStress * UnitConstatnts.Stress;
var val = inputData.ReinforcementStress * UnitConstants.Stress;
var valuePrimitive = GetValuePrimitive(primitive, val);
primitives.Add(valuePrimitive);
}
@@ -78,7 +78,7 @@ namespace StructureHelper.Services.ResultViewers
var primitive = item as ReinforcementPrimitive;
var inputData = InputDataFactory.GetInputData(primitive, strainMatrix, limitState, calcTerm, 1d);
var calculator = new AnchorageCalculator(inputData);
var val = calculator.GetBaseDevLength() * UnitConstatnts.Length;
var val = calculator.GetBaseDevLength() * UnitConstants.Length;
var valuePrimitive = GetValuePrimitive(primitive, val);
primitives.Add(valuePrimitive);
}
@@ -101,7 +101,7 @@ namespace StructureHelper.Services.ResultViewers
inputData.ReinforcementStress = inputData.ReinforcementStrength * Math.Sign(inputData.ReinforcementStress);
}
var calculator = new AnchorageCalculator(inputData);
var val = calculator.GetDevLength() * UnitConstatnts.Length;
var val = calculator.GetDevLength() * UnitConstants.Length;
var valuePrimitive = GetValuePrimitive(primitive, val);
primitives.Add(valuePrimitive);
}
@@ -125,7 +125,7 @@ namespace StructureHelper.Services.ResultViewers
inputData.ReinforcementStress = inputData.ReinforcementStrength * Math.Sign(inputData.ReinforcementStress);
}
var calculator = new AnchorageCalculator(inputData);
var val = calculator.GetLapLength() * UnitConstatnts.Length;
var val = calculator.GetLapLength() * UnitConstants.Length;
var valuePrimitive = GetValuePrimitive(primitive, val);
primitives.Add(valuePrimitive);
}

View File

@@ -48,4 +48,8 @@
</None>
</ItemGroup>
<ItemGroup>
<Folder Include="Documentation\Manuals\" />
</ItemGroup>
</Project>

View File

@@ -18,6 +18,9 @@
<Compile Update="Windows\MainWindow\AboutView.xaml.cs">
<SubType>Code</SubType>
</Compile>
<Compile Update="Windows\MainWindow\Materials\HeadMaterialView.xaml.cs">
<SubType>Code</SubType>
</Compile>
<Compile Update="Windows\MainWindow\Materials\MaterialDiagramView.xaml.cs">
<SubType>Code</SubType>
</Compile>
@@ -29,6 +32,9 @@
<Page Update="Infrastructure\UI\Resources\ForceTemplates.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Infrastructure\UI\Resources\Materials.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Windows\Errors\ErrorMessage.xaml">
<SubType>Designer</SubType>
</Page>
@@ -38,6 +44,9 @@
<Page Update="Windows\MainWindow\AboutView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Windows\MainWindow\Materials\HeadMaterialView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Windows\MainWindow\Materials\MaterialDiagramView.xaml">
<SubType>Designer</SubType>
</Page>

View File

@@ -0,0 +1,46 @@
<Window x:Class="StructureHelper.Windows.MainWindow.Materials.HeadMaterialView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:StructureHelper.Windows.MainWindow.Materials"
xmlns:vm="clr-namespace:StructureHelper.Windows.ViewModels.Materials"
d:DataContext="{d:DesignInstance vm:HeadMaterialViewModel}"
mc:Ignorable="d"
Title="Material properties" Height="350" Width="300" ResizeMode="NoResize" WindowStartupLocation="CenterScreen">
<Window.Resources>
<ResourceDictionary Source="/Infrastructure/UI/Resources/Materials.xaml"/>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="46"/>
<RowDefinition/>
<RowDefinition Height="1"/>
</Grid.RowDefinitions>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="22"/>
<RowDefinition Height="22"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Text="Name"/>
<TextBlock Grid.Row="1" Text="Color"/>
<TextBox Grid.Row="0" Grid.Column="1" Margin="1" Text="{Binding Name}"/>
<StackPanel Grid.Column="1" Grid.Row="1" Orientation="Horizontal">
<Rectangle Width="100" Margin="1" Stroke="Black">
<Rectangle.Fill>
<SolidColorBrush Color="{Binding Color}"/>
</Rectangle.Fill>
</Rectangle>
<Button Width="50" Margin="1" Content="..." Command="{Binding EditColorCommand}"/>
</StackPanel>
</Grid>
<StackPanel Grid.Row="1" x:Name="StpMaterialProperties">
</StackPanel>
</Grid>
</Window>

View File

@@ -0,0 +1,76 @@
using StructureHelper.Models.Materials;
using StructureHelper.Windows.ViewModels.Materials;
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Strings;
using StructureHelperLogics.Models.Materials;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace StructureHelper.Windows.MainWindow.Materials
{
/// <summary>
/// Логика взаимодействия для HeadMaterialView.xaml
/// </summary>
public partial class HeadMaterialView : Window
{
IHeadMaterial headMaterial;
HeadMaterialViewModel vm;
public HeadMaterialView(IHeadMaterial headMaterial)
{
InitializeComponent();
this.headMaterial = headMaterial;
vm = new HeadMaterialViewModel(this.headMaterial);
DataContext = vm;
AddDataTemplates();
}
private void AddDataTemplates()
{
StpMaterialProperties.Children.Clear();
var bindings = new Dictionary<string, Binding>();
var helperMaterial = headMaterial.HelperMaterial;
string templateName;
var binding = new Binding();
if (helperMaterial is IConcreteLibMaterial)
{
templateName = "ConcreteMaterial";
binding.Source = vm.HelperMaterialViewModel;
}
else if (helperMaterial is IReinforcementLibMaterial)
{
templateName = "ReinforcementMaterial";
binding.Source = vm.HelperMaterialViewModel;
}
else if (helperMaterial is IElasticMaterial)
{
templateName = "ElasticMaterial";
binding.Source = vm.HelperMaterialViewModel;
}
else
{
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown + $". Expected: {typeof(IHelperMaterial)}, but was: {helperMaterial.GetType()}");
}
bindings.Add(templateName, binding);
foreach (var item in bindings)
{
ContentControl contentControl = new ContentControl();
contentControl.SetResourceReference(ContentTemplateProperty, item.Key);
contentControl.SetBinding(ContentProperty, item.Value);
StpMaterialProperties.Children.Add(contentControl);
}
}
}
}

View File

@@ -9,63 +9,7 @@
mc:Ignorable="d"
Title="Materials" Height="350" Width="680" MinHeight="350" MinWidth="680" WindowStartupLocation="CenterScreen">
<Window.Resources>
<DataTemplate x:Key="SafetyFactors">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="200"/>
</Grid.RowDefinitions>
<Button Content="Show Safety Factors" Command="{Binding DataContext.ShowSafetyFactors, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}"/>
<ContentControl Grid.Row="1" ContentTemplate="{StaticResource MaterialSafetyFactors}" Content="{Binding DataContext, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}"/>
</Grid>
</DataTemplate>
<DataTemplate x:Key="ConcreteLibMaterial">
<StackPanel>
<TextBlock Text="Library material"/>
<ComboBox Height="25" VerticalAlignment="Top" ItemsSource="{Binding LibConcreteMaterials}" SelectedItem="{Binding SelectedLibMaterial}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<ContentControl ContentTemplate="{StaticResource SafetyFactors}"/>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="ReinforcementLibMaterial">
<StackPanel>
<TextBlock Text="Library material"/>
<ComboBox Height="25" VerticalAlignment="Top" ItemsSource="{Binding LibReinforcementMaterials}" SelectedItem="{Binding SelectedLibMaterial}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<ContentControl ContentTemplate="{StaticResource SafetyFactors}"/>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="ElasticMaterial">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="180"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="28"/>
<RowDefinition Height="28"/>
<RowDefinition Height="28"/>
<RowDefinition Height="28"/>
</Grid.RowDefinitions>
<TextBlock Text="Elastic material"/>
<TextBlock Grid.Row="1" Text="Young's modulus"/>
<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding Modulus, Converter={StaticResource StressConverter}, ValidatesOnExceptions=True}"/>
<TextBlock Grid.Row="2" Text="Compressive strength"/>
<TextBox Grid.Row="2" Grid.Column="1" Text="{Binding CompressiveStrength, Converter={StaticResource StressConverter}, ValidatesOnExceptions=True}"/>
<TextBlock Grid.Row="3" Text="Tensile strength"/>
<TextBox Grid.Row="3" Grid.Column="1" Text="{Binding TensileStrength, Converter={StaticResource StressConverter}, ValidatesOnExceptions=True}"/>
</Grid>
</DataTemplate>
<ResourceDictionary Source="/Infrastructure/UI/Resources/Materials.xaml"/>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
@@ -103,14 +47,14 @@
<Button Content="New Elastic Material" Command="{Binding AddElasticMaterialCommand}"/>
<Button Content="Show diagram" Command="{Binding ShowMaterialDiagram}"/>
<Button Content="Edit color" Command="{Binding EditColorCommand}"/>
<Button Content="Edit" Command="{Binding EditCommand}"/>
<Button Content="Copy" Command="{Binding CopyHeadMaterialCommand}"/>
<Button Content="Delete" Command="{Binding DeleteMaterialCommand}"/>
</StackPanel>
<StackPanel Grid.Column="2">
<StackPanel x:Name="MatProps" Grid.Column="2">
<TextBlock Text="Name"/>
<TextBox Text="{Binding SelectedMaterial.Name}"/>
<StackPanel x:Name="StpMaterialProperties"/>
</StackPanel>
</Grid>
</Window>

View File

@@ -22,7 +22,7 @@ namespace StructureHelper.Windows.ViewModels.Forces
{
if (parameter is not null)
{
ActionType paramType = (ActionType)parameter;
var paramType = (ActionType)parameter;
if (paramType == ActionType.ForceCombination)
{
NewItem = new ForceCombinationList() { Name = "New Force Combination" };
@@ -34,7 +34,6 @@ namespace StructureHelper.Windows.ViewModels.Forces
else throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown + $": Actual type: {nameof(paramType)}");
base.AddMethod(parameter);
}
}
public override void DeleteMethod(object parameter)
@@ -42,25 +41,13 @@ namespace StructureHelper.Windows.ViewModels.Forces
var dialogResult = MessageBox.Show("Delete action?", "Please, confirm deleting", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (dialogResult == DialogResult.Yes)
{
var calcRepository = repository.CalculatorsList;
foreach (var item in calcRepository)
{
if (item is IForceCalculator)
{
var forceCalculator = item as IForceCalculator;
var containSelected = forceCalculator.ForceActions.Contains(SelectedItem);
if (containSelected)
{
var dialogResultCalc = MessageBox.Show($"Action is contained in calculator {item.Name}", "Please, confirm deleting", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (dialogResultCalc == DialogResult.OK) { forceCalculator.ForceActions.Remove(SelectedItem); }
else return;
}
}
}
DeleteAction();
base.DeleteMethod(parameter);
}
}
public override void EditMethod(object parameter)
{
System.Windows.Window wnd;
@@ -83,5 +70,24 @@ namespace StructureHelper.Windows.ViewModels.Forces
{
this.repository = repository;
}
private void DeleteAction()
{
var calcRepository = repository.CalculatorsList;
foreach (var item in calcRepository)
{
if (item is IForceCalculator)
{
var forceCalculator = item as IForceCalculator;
var containSelected = forceCalculator.ForceActions.Contains(SelectedItem);
if (containSelected)
{
var dialogResultCalc = MessageBox.Show($"Action is contained in calculator {item.Name}", "Please, confirm deleting", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (dialogResultCalc == DialogResult.OK) { forceCalculator.ForceActions.Remove(SelectedItem); }
else return;
}
}
}
}
}
}

View File

@@ -0,0 +1,60 @@
using LoaderCalculator.Data.Materials;
using StructureHelper.Infrastructure;
using StructureHelperCommon.Infrastructures.Enums;
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Settings;
using StructureHelperCommon.Infrastructures.Strings;
using StructureHelperCommon.Models.Materials.Libraries;
using StructureHelperLogics.Models.Materials;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelper.Windows.ViewModels.Materials
{
internal class ConcreteViewModel : LibMaterialViewModel
{
readonly IConcreteLibMaterial concreteMaterial;
public bool TensionForULS
{
get => concreteMaterial.TensionForULS;
set
{
concreteMaterial.TensionForULS = value;
OnPropertyChanged(nameof(TensionForULS));
}
}
public bool TensionForSLS
{
get => concreteMaterial.TensionForSLS;
set
{
concreteMaterial.TensionForSLS = value;
OnPropertyChanged(nameof(TensionForSLS));
}
}
public double Humidity
{
get => concreteMaterial.Humidity;
set
{
concreteMaterial.Humidity = value;
OnPropertyChanged(nameof(Humidity));
}
}
public override IEnumerable<ILibMaterialEntity> MaterialLibrary => LibMaterialPepository.GetConcreteRepository(ProgramSetting.CodeType);
public ConcreteViewModel(ILibMaterial material) : base(material)
{
if (material is not IConcreteLibMaterial)
{
throw new StructureHelperException(ErrorStrings.DataIsInCorrect + $". Expected: {typeof(IConcreteLibMaterial)}, but was: {material.GetType()}");
}
this.concreteMaterial = material as IConcreteLibMaterial;
}
}
}

View File

@@ -0,0 +1,48 @@
using LoaderCalculator.Data.Materials;
using StructureHelperCommon.Infrastructures.Enums;
using StructureHelperLogics.Models.Materials;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelper.Windows.ViewModels.Materials
{
internal class ElasticViewModel : HelperMaterialViewModel
{
IElasticMaterial material;
public double Modulus
{
get => material.Modulus;
set
{
material.Modulus = value;
OnPropertyChanged(nameof(Modulus));
}
}
public double CompressiveStrength
{
get => material.CompressiveStrength;
set
{
material.CompressiveStrength = value;
OnPropertyChanged(nameof(CompressiveStrength));
}
}
public double TensileStrength
{
get => material.TensileStrength;
set
{
material.TensileStrength = value;
OnPropertyChanged(nameof(TensileStrength));
}
}
public ElasticViewModel(IElasticMaterial material)
{
this.material = material;
}
}
}

View File

@@ -0,0 +1,94 @@
using StructureHelper.Infrastructure;
using StructureHelper.Models.Materials;
using StructureHelper.Windows.AddMaterialWindow;
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Strings;
using StructureHelperCommon.Services.ColorServices;
using StructureHelperLogics.Models.Materials;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using System.Windows.Media;
namespace StructureHelper.Windows.ViewModels.Materials
{
internal class HeadMaterialViewModel : ViewModelBase
{
IHeadMaterial headMaterial;
HelperMaterialViewModel helperMaterialViewModel;
private ICommand showSafetyFactors;
private ICommand editColorCommand;
public string Name
{
get => headMaterial.Name;
set
{
headMaterial.Name = value;
OnPropertyChanged(nameof(Name));
}
}
public Color Color
{
get => headMaterial.Color;
}
public HelperMaterialViewModel HelperMaterialViewModel => helperMaterialViewModel;
public ICommand ShowSafetyFactors
{
get
{
return showSafetyFactors ??= new RelayCommand(o =>
{
if (headMaterial is ILibMaterial)
{
var material = headMaterial as ILibMaterial;
var wnd = new SafetyFactorsView(material.SafetyFactors);
wnd.ShowDialog();
}
}, o => headMaterial is LibMaterial
);
}
}
public ICommand EditColorCommand => editColorCommand ??= new RelayCommand(o => EditColor());
private void EditColor()
{
Color color = headMaterial.Color;
ColorProcessor.EditColor(ref color);
headMaterial.Color = color;
OnPropertyChanged(nameof(Color));
}
public HeadMaterialViewModel(IHeadMaterial headMaterial)
{
this.headMaterial = headMaterial;
var helperMaterial = headMaterial.HelperMaterial;
if (helperMaterial is IConcreteLibMaterial)
{
var material = helperMaterial as IConcreteLibMaterial;
helperMaterialViewModel = new ConcreteViewModel(material);
}
else if (helperMaterial is IReinforcementLibMaterial)
{
var material = helperMaterial as IReinforcementLibMaterial;
helperMaterialViewModel = new ReinforcementViewModel(material);
}
else if (helperMaterial is IElasticMaterial)
{
var material = helperMaterial as IElasticMaterial;
helperMaterialViewModel = new ElasticViewModel(material);
}
else
{
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown + $". Expected: {typeof(IHelperMaterial)}, but was: {helperMaterial.GetType()}");
}
}
}
}

View File

@@ -54,19 +54,24 @@ namespace StructureHelper.Windows.ViewModels.Materials
}
public ICommand CopyHeadMaterialCommand { get; set; }
public ICommand EditColorCommand { get; set; }
public ICommand DeleteMaterialCommand { get; set; }
public ICommand EditHeadMaterial;
public ICommand EditColorCommand => editColorCommand ??= new RelayCommand(o => EditColor(), o => SelectedMaterial is not null);
public ICommand EditCommand => editCommand ??= new RelayCommand(o => Edit(), o => SelectedMaterial is not null);
private ICommand showSafetyfactors;
private void Edit()
{
var wnd = new HeadMaterialView(SelectedMaterial);
wnd.ShowDialog();
}
public ICommand DeleteMaterialCommand { get; set; }
private ICommand showSafetyFactors;
public ICommand ShowSafetyFactors
{
get
{
return showSafetyfactors ??
(
showSafetyfactors = new RelayCommand(o =>
return showSafetyFactors ??= new RelayCommand(o =>
{
if (selectedMaterial.HelperMaterial is ILibMaterial)
{
@@ -76,7 +81,7 @@ namespace StructureHelper.Windows.ViewModels.Materials
OnPropertyChanged(nameof(Items));
}
}, o=> SelectedLibMaterial != null
));
);
}
}
@@ -98,6 +103,8 @@ namespace StructureHelper.Windows.ViewModels.Materials
private ICommand? addElasticMaterialCommand;
private ICommand? showMaterialDiagram;
private ICommand? editColorCommand;
private ICommand editCommand;
public ObservableCollection<IHeadMaterial> HeadMaterials { get; private set; }
public IHeadMaterial SelectedMaterial
@@ -183,7 +190,6 @@ namespace StructureHelper.Windows.ViewModels.Materials
AddNewConcreteMaterialCommand = new RelayCommand(o => AddConcreteMaterial());
AddNewReinforcementMaterialCommand = new RelayCommand(o => AddReinforcementMaterial());
CopyHeadMaterialCommand = new RelayCommand(o => CopyMaterial(), o => !(SelectedMaterial is null));
EditColorCommand = new RelayCommand(o => EditColor(), o=> ! (SelectedMaterial is null));
DeleteMaterialCommand = new RelayCommand(o => DeleteMaterial(), o => !(SelectedMaterial is null));
}

View File

@@ -0,0 +1,14 @@
using StructureHelper.Infrastructure;
using StructureHelperLogics.Models.Materials;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelper.Windows.ViewModels.Materials
{
internal abstract class HelperMaterialViewModel : ViewModelBase
{
}
}

View File

@@ -0,0 +1,50 @@
using LoaderCalculator.Data.Materials;
using StructureHelper.Infrastructure;
using StructureHelper.Windows.AddMaterialWindow;
using StructureHelperCommon.Infrastructures.Enums;
using StructureHelperCommon.Models.Materials.Libraries;
using StructureHelperLogics.Models.Materials;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
namespace StructureHelper.Windows.ViewModels.Materials
{
internal abstract class LibMaterialViewModel : HelperMaterialViewModel
{
ILibMaterial material;
ICommand showSafetyFactors;
SafetyFactorsViewModel safetyFactorsViewModel;
public ILibMaterialEntity MaterialEntity
{
get => material.MaterialEntity;
set
{
material.MaterialEntity = value;
OnPropertyChanged(nameof(MaterialEntity));
}
}
public abstract IEnumerable<ILibMaterialEntity> MaterialLibrary { get; }
public SafetyFactorsViewModel SafetyFactors => safetyFactorsViewModel;
public ICommand ShowSafetyFactors =>
showSafetyFactors ??= new RelayCommand(o =>
{
var wnd = new SafetyFactorsView(material.SafetyFactors);
wnd.ShowDialog();
safetyFactorsViewModel = new SafetyFactorsViewModel(material.SafetyFactors);
OnPropertyChanged(nameof(SafetyFactors));
});
public LibMaterialViewModel(ILibMaterial material)
{
this.material = material;
safetyFactorsViewModel = new SafetyFactorsViewModel(material.SafetyFactors);
}
}
}

View File

@@ -1,14 +1,18 @@
using LiveCharts;
using LiveCharts.Wpf;
using StructureHelper.Infrastructure.UI.Converters.Units;
using StructureHelper.Models.Materials;
using StructureHelperCommon.Infrastructures.Enums;
using StructureHelperLogics.Models.Materials;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
using Brushes = System.Windows.Media.Brushes;
namespace StructureHelper.Windows.ViewModels.Materials
{
@@ -56,7 +60,9 @@ namespace StructureHelper.Windows.ViewModels.Materials
var title = titles[n];
for (double s = minValue; s < maxValue; s += step)
{
double diagramValue = loaderMaterial.Diagram.Invoke(loaderMaterial.DiagramParameters,s);
double diagramValue = Math.Round(loaderMaterial.Diagram.Invoke(loaderMaterial.DiagramParameters,s)) * UnitConstants.Stress;
//var point = new PointF() { X = (float)s, Y = (float)diagramValue };
//chartValues.Add(point);
chartValues.Add(diagramValue);
labels.Add(Convert.ToString(Math.Round(s,4)));
}

View File

@@ -0,0 +1,66 @@
using StructureHelper.Infrastructure.Enums;
using StructureHelper.Models.Materials;
using StructureHelper.Windows.MainWindow.Materials;
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Settings;
using StructureHelperCommon.Infrastructures.Strings;
using StructureHelperCommon.Models.Forces;
using StructureHelperLogics.Models.Materials;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelper.Windows.ViewModels.Materials
{
internal class MaterialsViewModel : CRUDViewModelBase<IHeadMaterial>
{
public override void AddMethod(object parameter)
{
CheckParameters(parameter);
var paramType = (MaterialType)parameter;
if (paramType == MaterialType.Concrete) { AddConcrete(); }
else if (paramType == MaterialType.Reinforcement) { AddReinforcement(); }
else if (paramType == MaterialType.Elastic) { AddElastic(); }
else throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown + $". Expected: {typeof(MaterialType)}, Actual type: {nameof(paramType)}");
base.AddMethod(parameter);
}
public override void DeleteMethod(object parameter)
{
#error
//to do delete method
base.DeleteMethod(parameter);
}
public override void EditMethod(object parameter)
{
var wnd = new HeadMaterialView(SelectedItem);
wnd.ShowDialog();
base.EditMethod(parameter);
}
private void AddElastic()
{
var material = HeadMaterialFactory.GetHeadMaterial(HeadmaterialType.Elastic200, ProgramSetting.CodeType);
material.Name = "New Elastic Material";
NewItem = material;
}
private void AddReinforcement()
{
var material = HeadMaterialFactory.GetHeadMaterial(HeadmaterialType.Reinforecement400, ProgramSetting.CodeType);
material.Name = "New Reinforcement";
NewItem = material;
}
private void AddConcrete()
{
var material = HeadMaterialFactory.GetHeadMaterial(HeadmaterialType.Concrete40, ProgramSetting.CodeType);
material.Name = "New Concrete";
NewItem = material;
}
private void CheckParameters(object parameter)
{
if (parameter is null) { throw new StructureHelperException(ErrorStrings.ParameterIsNull); }
if (parameter is not MaterialType) { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown + $". Expected: {typeof(MaterialType)} . Actual type: {nameof(parameter)}"); }
}
}
}

View File

@@ -0,0 +1,25 @@
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Settings;
using StructureHelperCommon.Infrastructures.Strings;
using StructureHelperCommon.Models.Materials.Libraries;
using StructureHelperLogics.Models.Materials;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelper.Windows.ViewModels.Materials
{
internal class ReinforcementViewModel : LibMaterialViewModel
{
public override IEnumerable<ILibMaterialEntity> MaterialLibrary => LibMaterialPepository.GetReinforcementRepository(ProgramSetting.CodeType);
public ReinforcementViewModel(ILibMaterial material) : base(material)
{
if (material is not IReinforcementLibMaterial)
{
throw new StructureHelperException(ErrorStrings.DataIsInCorrect + $". Expected: {typeof(IConcreteLibMaterial)}, but was: {material.GetType()}");
}
}
}
}

View File

@@ -17,5 +17,6 @@
public static string LongitudinalForceMustBeLessThanZero => "#0012: Longitudinal force must be less than zero";
public static string LongitudinalForceMustBeLessThanCriticalForce => "#0013: Absolute value of longitudinal force must be greater than critical force";
public static string SizeMustBeGreaterThanZero => "#0014: Size must be greater than zero";
public static string ParameterIsNull => "#0015: Parameter is null";
}
}

View File

@@ -20,6 +20,7 @@ namespace StructureHelperLogics.Models.Materials
public List<IMaterialSafetyFactor> SafetyFactors { get; }
public bool TensionForULS { get ; set; }
public bool TensionForSLS { get; set; }
public double Humidity { get; set; }
private IMaterialOptionLogic optionLogic;
private LoaderMaterialLogic.ITrueStrengthLogic strengthLogic;
@@ -31,6 +32,7 @@ namespace StructureHelperLogics.Models.Materials
optionLogic = new MaterialOptionLogic(new LoaderMaterialBuilders.ConcreteOptions());
TensionForULS = false;
TensionForSLS = true;
Humidity = 0.55d;
}
public object Clone()

View File

@@ -11,5 +11,6 @@ namespace StructureHelperLogics.Models.Materials
{
bool TensionForULS { get; set; }
bool TensionForSLS { get; set; }
double Humidity { get; set; }
}
}