Init commit
This commit is contained in:
58
MaterialCatalogWindow/MaterialCatalogModel.cs
Normal file
58
MaterialCatalogWindow/MaterialCatalogModel.cs
Normal file
@@ -0,0 +1,58 @@
|
||||
using System.Collections.Generic;
|
||||
using StructureHelper.Infrastructure;
|
||||
|
||||
namespace StructureHelper
|
||||
{
|
||||
public class MaterialCatalogModel
|
||||
{
|
||||
public NamedList<MaterialDefinitionBase> ConcreteDefinitions;
|
||||
public NamedList<MaterialDefinitionBase> RebarDefinitions;
|
||||
|
||||
public List<NamedList<MaterialDefinitionBase>> Materials;
|
||||
|
||||
public MaterialCatalogModel()
|
||||
{
|
||||
InitializeMaterialCollections();
|
||||
Materials = new List<NamedList<MaterialDefinitionBase>>();
|
||||
Materials.Add(ConcreteDefinitions);
|
||||
Materials.Add(RebarDefinitions);
|
||||
}
|
||||
|
||||
public void InitializeMaterialCollections()
|
||||
{
|
||||
InitializeConcreteDefinitions();
|
||||
InitializeRebarDefinitions();
|
||||
}
|
||||
|
||||
private void InitializeRebarDefinitions()
|
||||
{
|
||||
RebarDefinitions = new NamedList<MaterialDefinitionBase>()
|
||||
{
|
||||
new RebarDefinition("S240", 2, 240, 240, 1.15, 1.15),
|
||||
new RebarDefinition("S400", 2, 400, 400, 1.15, 1.15),
|
||||
new RebarDefinition("S500", 2, 500, 500, 1.15, 1.15)
|
||||
};
|
||||
RebarDefinitions.Name = "Арматура";
|
||||
}
|
||||
|
||||
private void InitializeConcreteDefinitions()
|
||||
{
|
||||
ConcreteDefinitions = new NamedList<MaterialDefinitionBase>()
|
||||
{
|
||||
new ConcreteDefinition("C10", 0, 10, 0, 1.3, 1.5),
|
||||
new ConcreteDefinition("C15", 0, 15, 0, 1.3, 1.5),
|
||||
new ConcreteDefinition("C20", 0, 20, 0, 1.3, 1.5),
|
||||
new ConcreteDefinition("C25", 0, 25, 0, 1.3, 1.5),
|
||||
new ConcreteDefinition("C30", 0, 30, 0, 1.3, 1.5),
|
||||
new ConcreteDefinition("C35", 0, 35, 0, 1.3, 1.5),
|
||||
new ConcreteDefinition("C40", 0, 40, 0, 1.3, 1.5),
|
||||
new ConcreteDefinition("C45", 0, 45, 0, 1.3, 1.5),
|
||||
new ConcreteDefinition("C50", 0, 50, 0, 1.3, 1.5),
|
||||
new ConcreteDefinition("C60", 0, 60, 0, 1.3, 1.5),
|
||||
new ConcreteDefinition("C70", 0, 70, 0, 1.3, 1.5),
|
||||
new ConcreteDefinition("C80", 0, 80, 0, 1.3, 1.5)
|
||||
};
|
||||
ConcreteDefinitions.Name = "Бетон";
|
||||
}
|
||||
}
|
||||
}
|
||||
80
MaterialCatalogWindow/MaterialCatalogView.xaml
Normal file
80
MaterialCatalogWindow/MaterialCatalogView.xaml
Normal file
@@ -0,0 +1,80 @@
|
||||
<Window x:Class="StructureHelper.MaterialCatalogView"
|
||||
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"
|
||||
mc:Ignorable="d"
|
||||
d:DataContext="{d:DesignInstance local:MaterialCatalogViewModel}"
|
||||
Title="Справочник материалов" Height="900" Width="1100">
|
||||
<Window.Resources>
|
||||
<DataTemplate x:Key="RebarYoungModulusTemplate">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBox VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5,0" Text="{Binding YoungModulus}"/>
|
||||
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Text=" x 10^11"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
<DataTemplate x:Key="CompressiveStrengthTemplate">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBox VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5,0" Text="{Binding CompressiveStrength}"/>
|
||||
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Text=" x 10^6"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
<DataTemplate x:Key="TensileStrengthTemplate">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBox VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5,0" Text="{Binding TensileStrength}"/>
|
||||
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Text=" x 10^6"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
<DataTemplate x:Key="MaterialClassTemplate">
|
||||
<TextBox VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5,0" Text="{Binding MaterialClass}"/>
|
||||
</DataTemplate>
|
||||
<DataTemplate x:Key="MaterialCoefInCompressTemplate">
|
||||
<TextBox VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5,0" Text="{Binding MaterialCoefInCompress}"/>
|
||||
</DataTemplate>
|
||||
<DataTemplate x:Key="MaterialCoefInTensionTemplate">
|
||||
<TextBox VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5,0" Text="{Binding MaterialCoefInTension}"/>
|
||||
</DataTemplate>
|
||||
</Window.Resources>
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="40"/>
|
||||
</Grid.RowDefinitions>
|
||||
<StackPanel Grid.Row="0" Margin="10">
|
||||
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Margin="10,20,10,10" Text="Бетон" FontSize="16"/>
|
||||
<DataGrid ItemsSource="{Binding ConcreteDefinitions}" AutoGenerateColumns="False" SelectedItem="{Binding SelectedMaterial}">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTemplateColumn Header="Класс" CellTemplate="{StaticResource MaterialClassTemplate}"/>
|
||||
<DataGridTextColumn Header="Модуль упругости" Binding="{Binding YoungModulus, StringFormat={}{0} x 10^6}" IsReadOnly="True"/>
|
||||
<DataGridTemplateColumn Header="Нормативная прочность на сжатие" CellTemplate="{StaticResource CompressiveStrengthTemplate}"/>
|
||||
<DataGridTextColumn Header="Нормативная прочность на растяжение" Binding="{Binding TensileStrength, StringFormat={}{0} x 10^3}" IsReadOnly="True"/>
|
||||
<DataGridTemplateColumn Header="Коэффициент надежности при сжатии" CellTemplate="{StaticResource MaterialCoefInCompressTemplate}"/>
|
||||
<DataGridTemplateColumn Header="Коэффициент надежности при растяжении" CellTemplate="{StaticResource MaterialCoefInTensionTemplate}"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Margin="10,20,10,10" Text="Арматура" FontSize="16"/>
|
||||
<DataGrid ItemsSource="{Binding RebarDefinitions}" AutoGenerateColumns="False" SelectedItem="{Binding SelectedMaterial}">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTemplateColumn Header="Класс" CellTemplate="{StaticResource MaterialClassTemplate}"/>
|
||||
<DataGridTemplateColumn Header="Модуль упругости" CellTemplate="{StaticResource RebarYoungModulusTemplate}"/>
|
||||
<DataGridTemplateColumn Header="Нормативная прочность на сжатие" CellTemplate="{StaticResource CompressiveStrengthTemplate}"/>
|
||||
<DataGridTemplateColumn Header="Нормативная прочность на растяжение" CellTemplate="{StaticResource TensileStrengthTemplate}"/>
|
||||
<DataGridTemplateColumn Header="Коэффициент надежности при сжатии" CellTemplate="{StaticResource MaterialCoefInCompressTemplate}"/>
|
||||
<DataGridTemplateColumn Header="Коэффициент надежности при растяжении" CellTemplate="{StaticResource MaterialCoefInTensionTemplate}"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</StackPanel>
|
||||
<Grid Grid.Row="1">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="300"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="300"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Button Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Left" Content="Добавить материал" Margin="10" Command="{Binding AddMaterial}"/>
|
||||
<Button Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Right" Content="Выбрать материал" Margin="10" Command="{Binding SelectMaterial}" Visibility="{Binding SelectMaterialButtonVisibility}"/>
|
||||
<Button Grid.Column="2" VerticalAlignment="Center" HorizontalAlignment="Left" Content="Сохранить справочник" Margin="10" Command="{Binding SaveCatalog}"/>
|
||||
<Button Grid.Column="2" VerticalAlignment="Center" HorizontalAlignment="Right" Content="Загрузить справочник" Margin="10" Command="{Binding LoadCatalog}"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Window>
|
||||
18
MaterialCatalogWindow/MaterialCatalogView.xaml.cs
Normal file
18
MaterialCatalogWindow/MaterialCatalogView.xaml.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
using System.Windows;
|
||||
|
||||
namespace StructureHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// Логика взаимодействия для MaterialCatalogView.xaml
|
||||
/// </summary>
|
||||
public partial class MaterialCatalogView : Window
|
||||
{
|
||||
public MaterialCatalogView(bool isMaterialCanBeSelected = false, PrimitiveDefinition primitive = null)
|
||||
{
|
||||
var materialCatalogModel = new MaterialCatalogModel();
|
||||
var materialCatalogViewModel = new MaterialCatalogViewModel(materialCatalogModel, this, isMaterialCanBeSelected, primitive);
|
||||
DataContext = materialCatalogViewModel;
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
117
MaterialCatalogWindow/MaterialCatalogViewModel.cs
Normal file
117
MaterialCatalogWindow/MaterialCatalogViewModel.cs
Normal file
@@ -0,0 +1,117 @@
|
||||
using System.Collections.ObjectModel;
|
||||
using System.ComponentModel;
|
||||
using System.IO;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Windows;
|
||||
using System.Windows.Forms;
|
||||
using System.Windows.Input;
|
||||
using Newtonsoft.Json;
|
||||
using StructureHelper.Annotations;
|
||||
using OpenFileDialog = System.Windows.Forms.OpenFileDialog;
|
||||
using SaveFileDialog = System.Windows.Forms.SaveFileDialog;
|
||||
|
||||
namespace StructureHelper
|
||||
{
|
||||
[JsonObject(MemberSerialization.OptIn)]
|
||||
public class MaterialCatalogViewModel : INotifyPropertyChanged
|
||||
{
|
||||
private MaterialCatalogModel materialCatalogModel;
|
||||
private MaterialCatalogView materialCatalogView;
|
||||
|
||||
[JsonProperty]
|
||||
public ObservableCollection<MaterialDefinitionBase> ConcreteDefinitions { get; set; }
|
||||
[JsonProperty]
|
||||
public ObservableCollection<MaterialDefinitionBase> RebarDefinitions { get; set; }
|
||||
public ICommand AddMaterial { get; }
|
||||
public ICommand SaveCatalog { get; }
|
||||
public ICommand LoadCatalog { get; }
|
||||
public ICommand SelectMaterial { get; }
|
||||
|
||||
private MaterialDefinitionBase selectedMaterial;
|
||||
public MaterialDefinitionBase SelectedMaterial
|
||||
{
|
||||
get => selectedMaterial;
|
||||
set
|
||||
{
|
||||
selectedMaterial = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private bool isMaterialCanBeSelected;
|
||||
|
||||
public bool IsMaterialCanBeSelected
|
||||
{
|
||||
get => isMaterialCanBeSelected;
|
||||
set
|
||||
{
|
||||
isMaterialCanBeSelected = value;
|
||||
OnPropertyChanged();
|
||||
OnPropertyChanged(nameof(SelectMaterialButtonVisibility));
|
||||
}
|
||||
}
|
||||
|
||||
public Visibility SelectMaterialButtonVisibility => IsMaterialCanBeSelected ? Visibility.Visible : Visibility.Hidden;
|
||||
public MaterialCatalogViewModel() { }
|
||||
|
||||
public MaterialCatalogViewModel(MaterialCatalogModel materialCatalogModel, MaterialCatalogView materialCatalogView, bool isMaterialCanBeSelected, PrimitiveDefinition primitive = null)
|
||||
{
|
||||
this.materialCatalogModel = materialCatalogModel;
|
||||
this.materialCatalogView = materialCatalogView;
|
||||
IsMaterialCanBeSelected = isMaterialCanBeSelected;
|
||||
|
||||
ConcreteDefinitions = new ObservableCollection<MaterialDefinitionBase>(materialCatalogModel.ConcreteDefinitions);
|
||||
RebarDefinitions = new ObservableCollection<MaterialDefinitionBase>(materialCatalogModel.RebarDefinitions);
|
||||
|
||||
AddMaterial = new RelayCommand(o =>
|
||||
{
|
||||
AddMaterialView addMaterialView = new AddMaterialView(this.materialCatalogModel, this);
|
||||
addMaterialView.ShowDialog();
|
||||
OnPropertyChanged(nameof(ConcreteDefinitions));
|
||||
OnPropertyChanged(nameof(RebarDefinitions));
|
||||
});
|
||||
SaveCatalog = new RelayCommand(o =>
|
||||
{
|
||||
string json = JsonConvert.SerializeObject(this, Formatting.Indented);
|
||||
SaveFileDialog saveDialog = new SaveFileDialog();
|
||||
saveDialog.InitialDirectory = @"C:\";
|
||||
saveDialog.Filter = "json files (*.json)|*.json|All files(*.*)|*.*";
|
||||
string path = null;
|
||||
if (saveDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
path = saveDialog.FileName;
|
||||
File.WriteAllText(path, json);
|
||||
}
|
||||
});
|
||||
LoadCatalog = new RelayCommand(o =>
|
||||
{
|
||||
OpenFileDialog openFileDialog = new OpenFileDialog();
|
||||
openFileDialog.InitialDirectory = @"C:\";
|
||||
openFileDialog.Filter = "json files (*.json)|*.json|All files(*.*)|*.*";
|
||||
if (openFileDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
var path = openFileDialog.FileName;
|
||||
var content = File.ReadAllText(path);
|
||||
var vm = JsonConvert.DeserializeObject<MaterialCatalogViewModel>(content);
|
||||
ConcreteDefinitions = vm.ConcreteDefinitions;
|
||||
OnPropertyChanged(nameof(ConcreteDefinitions));
|
||||
RebarDefinitions = vm.RebarDefinitions;
|
||||
OnPropertyChanged(nameof(RebarDefinitions));
|
||||
}
|
||||
});
|
||||
SelectMaterial = new RelayCommand(o =>
|
||||
{
|
||||
if (primitive != null)
|
||||
primitive.Material = SelectedMaterial;
|
||||
});
|
||||
}
|
||||
|
||||
public event PropertyChangedEventHandler PropertyChanged;
|
||||
|
||||
[NotifyPropertyChangedInvocator]
|
||||
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
|
||||
{
|
||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user