From 971b5d6204a47d3a9384a054418f8baf41e7115c Mon Sep 17 00:00:00 2001 From: avpon Date: Mon, 5 Feb 2024 19:54:11 +0300 Subject: [PATCH] Start localization --- .../UI/Resources/Strings.en-US.xaml | 53 ++ .../UI/Resources/Strings.ru-RU.xaml | 53 ++ StructureHelper/StructureHelper.csproj.user | 6 + .../Windows/MainWindow/CrossSectionView.xaml | 50 +- .../MainWindow/CrossSectionView.xaml.cs | 45 +- .../MainWindow/CrossSectionViewModel.cs | 721 ++++++++++-------- 6 files changed, 549 insertions(+), 379 deletions(-) create mode 100644 StructureHelper/Infrastructure/UI/Resources/Strings.en-US.xaml create mode 100644 StructureHelper/Infrastructure/UI/Resources/Strings.ru-RU.xaml diff --git a/StructureHelper/Infrastructure/UI/Resources/Strings.en-US.xaml b/StructureHelper/Infrastructure/UI/Resources/Strings.en-US.xaml new file mode 100644 index 0000000..bf20547 --- /dev/null +++ b/StructureHelper/Infrastructure/UI/Resources/Strings.en-US.xaml @@ -0,0 +1,53 @@ + + + Actions + Geometry + Materials + Show Materials + Analisis + Analises + Add Full Combination + Add Factored Combination + Concrete + Reinforcement + Elastic + CarbonFiber + GlassFiber + Rectangle + Circle + Rebar + Point + Run + Add + Edit + Copy + Copy To + Delete + To Foreground + To Background + Add Force Calculator + Add Interaction Diagram Calculator + Add Rectangle Primitive + Add Circle Primitive + Add Rebar Primitive + Add Point Primitive + Add Rectangle RC Column + Add Circle RC Column + Add RC Beam + Add RC Slab + Add Reinforcement Material + Add Elastic Material + Add Carbon Fiber Material + Change Language + Visual Settings + EN + RC Templates + Base Primitives + Tools + Grid size: + Number of primitives: + + \ No newline at end of file diff --git a/StructureHelper/Infrastructure/UI/Resources/Strings.ru-RU.xaml b/StructureHelper/Infrastructure/UI/Resources/Strings.ru-RU.xaml new file mode 100644 index 0000000..8e4beb4 --- /dev/null +++ b/StructureHelper/Infrastructure/UI/Resources/Strings.ru-RU.xaml @@ -0,0 +1,53 @@ + + + Усилия + Геометрия + Материалы + Показать материалы + Расчет + Расчеты + Создать комбинацию явно + Создать комбинацию коэффициентами + Бетон + Арматура + Упругий + Углеволокно + Стекловолокно + Прямоугольник + Окружность + Стержень + Точка + Выполнить + Создать + Изменить + Копировать + Копировать в + Удалить + На передний план + На задний план + Создать расчет по усилиям + Создать расчет области прочности + Создать прямоугольник + Создать окружность + Создать арматурный стержень + Создать точку + Создать прямоугольную ЖБ колонну + Создать круглую ЖБ колонну + Создать ЖБ балку + Создать ЖБ плиту + Создать материал армирования + Создать упругий материал + Создать углеволокно + Смена языка + Настройки изображения + RU + ЖБ шаблоны + Базовые примитивы + Инструменты + Шаг сетки: + Кол-во примитивов: + + \ No newline at end of file diff --git a/StructureHelper/StructureHelper.csproj.user b/StructureHelper/StructureHelper.csproj.user index 6fee5a1..c68390d 100644 --- a/StructureHelper/StructureHelper.csproj.user +++ b/StructureHelper/StructureHelper.csproj.user @@ -74,6 +74,12 @@ Designer + + Designer + + + Designer + Designer diff --git a/StructureHelper/Windows/MainWindow/CrossSectionView.xaml b/StructureHelper/Windows/MainWindow/CrossSectionView.xaml index 79d5191..e7401a2 100644 --- a/StructureHelper/Windows/MainWindow/CrossSectionView.xaml +++ b/StructureHelper/Windows/MainWindow/CrossSectionView.xaml @@ -205,6 +205,8 @@ + @@ -250,33 +252,33 @@ - + - + - + - + - + - + @@ -289,26 +291,26 @@ ItemTemplate="{StaticResource ColoredItemTemplate}" ContextMenu="{StaticResource EditCopyDelete}"/> - + - - + + - + - + - + @@ -330,7 +332,7 @@ - + @@ -367,39 +369,39 @@ - + - + - + - + - + - + - + @@ -471,14 +473,14 @@ - - + + - - + + diff --git a/StructureHelper/Windows/MainWindow/CrossSectionView.xaml.cs b/StructureHelper/Windows/MainWindow/CrossSectionView.xaml.cs index e94de2f..1590945 100644 --- a/StructureHelper/Windows/MainWindow/CrossSectionView.xaml.cs +++ b/StructureHelper/Windows/MainWindow/CrossSectionView.xaml.cs @@ -1,29 +1,36 @@ -using System.Windows; +using System; +using System.Windows; using System.Windows.Controls; + using StructureHelper.Infrastructure.UI.DataContexts; using StructureHelper.Services; using StructureHelper.Services.Primitives; namespace StructureHelper.Windows.MainWindow { - public partial class CrossSectionView : Window - { - private CrossSectionViewModel viewModel; - public IPrimitiveRepository PrimitiveRepository { get; } + public partial class CrossSectionView : Window + { + private CrossSectionViewModel viewModel; + public IPrimitiveRepository PrimitiveRepository { get; } - public CrossSectionView(IPrimitiveRepository primitiveRepository, CrossSectionViewModel viewModel) - { - PrimitiveRepository = primitiveRepository; - this.viewModel = viewModel; - DataContext = this.viewModel; - InitializeComponent(); - } + public CrossSectionView(IPrimitiveRepository primitiveRepository, CrossSectionViewModel viewModel) + { + PrimitiveRepository = primitiveRepository; + this.viewModel = viewModel; + DataContext = this.viewModel; + viewModel.MV = this; + ResourceDictionary dict = new ResourceDictionary(); + dict.Source = new Uri("..\\Infrastructure\\UI\\Resources\\Strings.en-US.xaml", + UriKind.Relative); + this.Resources.MergedDictionaries.Add(dict); + InitializeComponent(); + } - private void ContentPresenter_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e) - { - var contentPresenter = sender as ContentPresenter; - var item = contentPresenter?.Content as PrimitiveBase; - viewModel.PrimitiveLogic.SelectedItem = item; - } - } + private void ContentPresenter_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e) + { + var contentPresenter = sender as ContentPresenter; + var item = contentPresenter?.Content as PrimitiveBase; + viewModel.PrimitiveLogic.SelectedItem = item; + } + } } diff --git a/StructureHelper/Windows/MainWindow/CrossSectionViewModel.cs b/StructureHelper/Windows/MainWindow/CrossSectionViewModel.cs index 2629b08..0753918 100644 --- a/StructureHelper/Windows/MainWindow/CrossSectionViewModel.cs +++ b/StructureHelper/Windows/MainWindow/CrossSectionViewModel.cs @@ -1,4 +1,5 @@ using LoaderCalculator.Logics.Geometry; + using StructureHelper.Infrastructure; using StructureHelper.Infrastructure.UI.DataContexts; using StructureHelper.Models.Materials; @@ -9,12 +10,15 @@ using StructureHelper.Windows.ViewModels; using StructureHelper.Windows.ViewModels.Forces; using StructureHelper.Windows.ViewModels.Materials; using StructureHelper.Windows.ViewModels.NdmCrossSections; + using StructureHelperCommon.Infrastructures.Enums; using StructureHelperCommon.Infrastructures.Exceptions; + using StructureHelperLogics.Models.CrossSections; using StructureHelperLogics.Models.Templates.CrossSections.RCs; using StructureHelperLogics.Models.Templates.RCs; using StructureHelperLogics.Services.NdmPrimitives; + using System; using System.Collections.Generic; using System.Collections.ObjectModel; @@ -25,375 +29,420 @@ using System.Windows.Input; namespace StructureHelper.Windows.MainWindow { - public class CrossSectionViewModel : ViewModelBase - { - private ICrossSection section; - private ICrossSectionRepository repository => section.SectionRepository; - private readonly double scaleRate = 1.1d; + public class CrossSectionViewModel : ViewModelBase + { + private ICrossSection section; + private ICrossSectionRepository repository => section.SectionRepository; + private readonly double scaleRate = 1.1d; - public CrossSectionVisualPropertyVM VisualProperty { get; private set; } + public CrossSectionVisualPropertyVM VisualProperty { get; private set; } - public PrimitiveBase SelectedPrimitive { get; set; } + public PrimitiveBase SelectedPrimitive { get; set; } - public AnalysisVewModelLogic CalculatorsLogic { get; private set; } - public ActionsViewModel CombinationsLogic { get; } - public MaterialsViewModel MaterialsLogic { get; } - public PrimitiveViewModelLogic PrimitiveLogic { get; } - public HelpLogic HelpLogic => new HelpLogic(); + public AnalysisVewModelLogic CalculatorsLogic { get; private set; } + public ActionsViewModel CombinationsLogic { get; } + public MaterialsViewModel MaterialsLogic { get; } + public PrimitiveViewModelLogic PrimitiveLogic { get; } + public HelpLogic HelpLogic => new HelpLogic(); - private CrossSectionModel Model { get; } + private CrossSectionModel Model { get; } - private double panelX, panelY, scrollPanelX, scrollPanelY; + private double panelX, panelY, scrollPanelX, scrollPanelY; - public double PanelX - { - get => panelX; - set => OnPropertyChanged(value, ref panelX); - } - public double PanelY - { - get => panelY; - set => OnPropertyChanged(value, ref panelY); - } - public double ScrollPanelX - { - get => scrollPanelX; - set => OnPropertyChanged(value, ref scrollPanelX); - } - public double ScrollPanelY - { - get => scrollPanelY; - set => OnPropertyChanged(value, ref scrollPanelY); - } + public double PanelX + { + get => panelX; + set => OnPropertyChanged(value, ref panelX); + } + public double PanelY + { + get => panelY; + set => OnPropertyChanged(value, ref panelY); + } + public double ScrollPanelX + { + get => scrollPanelX; + set => OnPropertyChanged(value, ref scrollPanelX); + } + public double ScrollPanelY + { + get => scrollPanelY; + set => OnPropertyChanged(value, ref scrollPanelY); + } - private double scaleValue; + private double scaleValue; - public double ScaleValue - { - get => Math.Round(scaleValue); - set + public double ScaleValue + { + get => Math.Round(scaleValue); + set + { + OnPropertyChanged(value, ref scaleValue); + OnPropertyChanged(nameof(AxisLineThickness)); + OnPropertyChanged(nameof(GridLineThickness)); + } + } + + public double AxisLineThickness + { + get => VisualProperty.AxisLineThickness / scaleValue; + } + + public double GridLineThickness + { + get => VisualProperty.GridLineThickness / scaleValue; + } + + public string CanvasViewportSize + { + get + { + string s = VisualProperty.GridSize.ToString(); + s = s.Replace(',', '.'); + return $"0,0,{s},{s}"; + } + + } + + public double GridSize => VisualProperty.GridSize; + + public ObservableCollection HeadMaterials + { + get + { + var collection = new ObservableCollection(); + foreach (var obj in Model.Section.SectionRepository.HeadMaterials) { - OnPropertyChanged(value, ref scaleValue); - OnPropertyChanged(nameof(AxisLineThickness)); - OnPropertyChanged(nameof(GridLineThickness)); + collection.Add(obj); } - } + return collection; + } + } - public double AxisLineThickness - { - get => VisualProperty.AxisLineThickness / scaleValue; - } + /// + /// Right edge of work plane, coordinate X + /// + public double RightLimitX => VisualProperty.WorkPlainWidth; + /// + /// Bottom edge of work plane Y + /// + public double BottomLimitY => VisualProperty.WorkPlainHeight; + /// + /// Middle of coordinate X + /// + public double MiddleLimitX => VisualProperty.WorkPlainWidth / 2d; + /// + /// Middle of coordinate Y + /// + public double MiddleLimitY => VisualProperty.WorkPlainHeight / 2d; - public double GridLineThickness - { - get => VisualProperty.GridLineThickness / scaleValue; - } + private int langID = 0; + public int LangID { get => langID; set { langID = value; OnPropertyChanged(); } } + public RelayCommand ChangeLanguage + { + get + { + return changeLanguage ?? (changeLanguage = new RelayCommand(obj => { ChangeLang(); })); + } + } - public string CanvasViewportSize - { - get + public void ChangeLang() + { + if (LangID == 0) + { + LangID = 1; + SetLanguageDictionary(LangID); + } + else + { + LangID = 0; + SetLanguageDictionary(LangID); + } + } + + // Загрузка файлов ресурсов для выбранного языка + private void SetLanguageDictionary(int local) + { + ResourceDictionary dict = new ResourceDictionary(); + switch (local) + { + case 0: + dict.Source = new Uri("..\\Infrastructure\\UI\\Resources\\Strings.en-US.xaml", + UriKind.Relative); + break; + case 1: + dict.Source = new Uri("..\\Infrastructure\\UI\\Resources\\Strings.ru-RU.xaml", + UriKind.Relative); + break; + } + MV.Resources.MergedDictionaries.Add(dict); + } + + internal CrossSectionView MV; + + public ICommand Calculate { get; } + public ICommand EditCalculationPropertyCommand { get; } + public ICommand EditHeadMaterialsCommand { get; } + public ICommand AddRCCircleCase + { + get + { + return new RelayCommand(o => { - string s = VisualProperty.GridSize.ToString(); - s = s.Replace(',', '.'); - return $"0,0,{s},{s}"; - } - - } - - public double GridSize => VisualProperty.GridSize; - - public ObservableCollection HeadMaterials - { - get - { - var collection = new ObservableCollection(); - foreach (var obj in Model.Section.SectionRepository.HeadMaterials) + PrimitiveLogic.AddItems(GetRCCirclePrimitives()); + MaterialsLogic.Refresh(); + }); + } + } + public ICommand AddBeamCase { get; } + public ICommand AddColumnCase { get; } + public ICommand AddSlabCase { get; } + public ICommand LeftButtonDown { get; } + public ICommand LeftButtonUp { get; } + public ICommand MovePrimitiveToGravityCenterCommand { get; } + public ICommand PreviewMouseMove { get; } + public ICommand ClearSelection { get; } + public ICommand OpenMaterialCatalog { get; } + public ICommand OpenMaterialCatalogWithSelection { get; } + public ICommand OpenUnitsSystemSettings { get; } + public ICommand SetColor { get; } + public ICommand SetInFrontOfAll { get; } + public ICommand SetInBackOfAll { get; } + public ICommand ScaleCanvasDown { get; } + public ICommand ScaleCanvasUp { get; } + public ICommand SetPopupCanBeClosedTrue { get; } + public ICommand SetPopupCanBeClosedFalse { get; } + public RelayCommand ShowVisualProperty + { + get + { + return showVisualProperty ?? + (showVisualProperty = new RelayCommand(o => { - collection.Add(obj); - } - return collection; - } - } + var wnd = new VisualPropertyView(VisualProperty); + wnd.ShowDialog(); + OnPropertyChanged(nameof(AxisLineThickness)); + OnPropertyChanged(nameof(CanvasViewportSize)); + OnPropertyChanged(nameof(GridSize)); + OnPropertyChanged(nameof(RightLimitX)); + OnPropertyChanged(nameof(BottomLimitY)); + OnPropertyChanged(nameof(MiddleLimitX)); + OnPropertyChanged(nameof(MiddleLimitY)); + PrimitiveLogic.WorkPlaneWidth = VisualProperty.WorkPlainWidth; + PrimitiveLogic.WorkPlaneHeight = VisualProperty.WorkPlainHeight; + PrimitiveLogic.Refresh(); + })); + } + } - /// - /// Right edge of work plane, coordinate X - /// - public double RightLimitX => VisualProperty.WorkPlainWidth; - /// - /// Bottom edge of work plane Y - /// - public double BottomLimitY => VisualProperty.WorkPlainHeight; - /// - /// Middle of coordinate X - /// - public double MiddleLimitX => VisualProperty.WorkPlainWidth / 2d; - /// - /// Middle of coordinate Y - /// - public double MiddleLimitY => VisualProperty.WorkPlainHeight / 2d; - - public ICommand Calculate { get; } - public ICommand EditCalculationPropertyCommand { get; } - public ICommand EditHeadMaterialsCommand { get; } - public ICommand AddRCCircleCase - { - get - { - return new RelayCommand(o => + public RelayCommand SelectPrimitiveCommand + { + get + { + return selectPrimitive ?? + (selectPrimitive = new RelayCommand(obj => { - PrimitiveLogic.AddItems(GetRCCirclePrimitives()); - MaterialsLogic.Refresh(); - }); + if (obj is PrimitiveBase) + { + SelectedPrimitive = obj as PrimitiveBase; + } + })); + } + } + + private double delta = 0.0005; + private RelayCommand showVisualProperty; + private RelayCommand selectPrimitive; + private RelayCommand changeLanguage; + + public CrossSectionViewModel(CrossSectionModel model) + { + VisualProperty = new CrossSectionVisualPropertyVM(); + Model = model; + section = model.Section; + CombinationsLogic = new ActionsViewModel(repository); + MaterialsLogic = new MaterialsViewModel(repository); + MaterialsLogic.AfterItemsEdit += afterMaterialEdit; + CalculatorsLogic = new AnalysisVewModelLogic(repository); + PrimitiveLogic = new PrimitiveViewModelLogic(section) + { + WorkPlaneWidth = VisualProperty.WorkPlainWidth, + WorkPlaneHeight = VisualProperty.WorkPlainHeight + }; + scaleValue = 500d; + + LeftButtonUp = new RelayCommand(o => + { + if (o is RectangleViewPrimitive rect) rect.BorderCaptured = false; + }); + LeftButtonDown = new RelayCommand(o => + { + if (o is RectangleViewPrimitive rect) rect.BorderCaptured = true; + }); + PreviewMouseMove = new RelayCommand(o => + { + if (o is RectangleViewPrimitive rect && rect.BorderCaptured && !rect.ElementLock) + { + if (rect.PrimitiveWidth % 10d < delta || rect.PrimitiveWidth % 10d >= delta) + rect.PrimitiveWidth = Math.Round(PanelX / 10d) * 10d - rect.PrimitiveLeft + 10d; + else + rect.PrimitiveWidth = PanelX - rect.PrimitiveLeft + 10d; + + if (rect.PrimitiveHeight % 10d < delta || rect.PrimitiveHeight % 10d >= delta) + rect.PrimitiveHeight = Math.Round(PanelY / 10d) * 10d - rect.PrimitiveTop + 10d; + else + rect.PrimitiveHeight = PanelY - rect.PrimitiveTop + 10d; } - } - public ICommand AddBeamCase { get; } - public ICommand AddColumnCase { get; } - public ICommand AddSlabCase { get; } - public ICommand LeftButtonDown { get; } - public ICommand LeftButtonUp { get; } - public ICommand MovePrimitiveToGravityCenterCommand { get; } - public ICommand PreviewMouseMove { get; } - public ICommand ClearSelection { get; } - public ICommand OpenMaterialCatalog { get; } - public ICommand OpenMaterialCatalogWithSelection { get; } - public ICommand OpenUnitsSystemSettings { get; } - public ICommand SetColor { get; } - public ICommand SetInFrontOfAll { get; } - public ICommand SetInBackOfAll { get; } - public ICommand ScaleCanvasDown { get; } - public ICommand ScaleCanvasUp { get; } - public ICommand SetPopupCanBeClosedTrue { get; } - public ICommand SetPopupCanBeClosedFalse { get; } - public RelayCommand ShowVisualProperty - { - get - { - return showVisualProperty ?? - (showVisualProperty = new RelayCommand(o=> - { - var wnd = new VisualPropertyView(VisualProperty); - wnd.ShowDialog(); - OnPropertyChanged(nameof(AxisLineThickness)); - OnPropertyChanged(nameof(CanvasViewportSize)); - OnPropertyChanged(nameof(GridSize)); - OnPropertyChanged(nameof(RightLimitX)); - OnPropertyChanged(nameof(BottomLimitY)); - OnPropertyChanged(nameof(MiddleLimitX)); - OnPropertyChanged(nameof(MiddleLimitY)); - PrimitiveLogic.WorkPlaneWidth = VisualProperty.WorkPlainWidth; - PrimitiveLogic.WorkPlaneHeight = VisualProperty.WorkPlainHeight; - PrimitiveLogic.Refresh(); - })); - } - } + }); - public RelayCommand SelectPrimitiveCommand - { - get - { - return selectPrimitive ?? - (selectPrimitive = new RelayCommand(obj=> - { - if (obj is PrimitiveBase) - { - SelectedPrimitive = obj as PrimitiveBase; - } - })); - } - } + ScaleCanvasDown = new RelayCommand(o => + { + ScrollPanelX = PanelX; + ScrollPanelY = PanelY; + ScaleValue *= scaleRate; + }); - private double delta = 0.0005; - private RelayCommand showVisualProperty; - private RelayCommand selectPrimitive; + ScaleCanvasUp = new RelayCommand(o => + { + ScrollPanelX = PanelX; + ScrollPanelY = PanelY; + ScaleValue /= scaleRate; + }); - public CrossSectionViewModel(CrossSectionModel model) - { - VisualProperty = new CrossSectionVisualPropertyVM(); - Model = model; - section = model.Section; - CombinationsLogic = new ActionsViewModel(repository); - MaterialsLogic = new MaterialsViewModel(repository); - MaterialsLogic.AfterItemsEdit += afterMaterialEdit; - CalculatorsLogic = new AnalysisVewModelLogic(repository); - PrimitiveLogic = new PrimitiveViewModelLogic(section) - { - WorkPlaneWidth = VisualProperty.WorkPlainWidth, - WorkPlaneHeight = VisualProperty.WorkPlainHeight - }; - scaleValue = 500d; + AddBeamCase = new RelayCommand(o => + { + PrimitiveLogic.AddItems(GetBeamCasePrimitives()); + MaterialsLogic.Refresh(); + }); - LeftButtonUp = new RelayCommand(o => - { - if (o is RectangleViewPrimitive rect) rect.BorderCaptured = false; - }); - LeftButtonDown = new RelayCommand(o => - { - if (o is RectangleViewPrimitive rect) rect.BorderCaptured = true; - }); - PreviewMouseMove = new RelayCommand(o => - { - if (o is RectangleViewPrimitive rect && rect.BorderCaptured && !rect.ElementLock) - { - if (rect.PrimitiveWidth % 10d < delta || rect.PrimitiveWidth % 10d >= delta) - rect.PrimitiveWidth = Math.Round(PanelX / 10d) * 10d - rect.PrimitiveLeft + 10d; - else - rect.PrimitiveWidth = PanelX - rect.PrimitiveLeft + 10d; + AddColumnCase = new RelayCommand(o => + { + PrimitiveLogic.AddItems(GetColumnCasePrimitives()); + MaterialsLogic.Refresh(); + }); - if (rect.PrimitiveHeight % 10d < delta || rect.PrimitiveHeight % 10d >= delta) - rect.PrimitiveHeight = Math.Round(PanelY / 10d) * 10d - rect.PrimitiveTop + 10d; - else - rect.PrimitiveHeight = PanelY - rect.PrimitiveTop + 10d; - } - }); + AddSlabCase = new RelayCommand(o => + { + PrimitiveLogic.AddItems(GetSlabCasePrimitives()); + MaterialsLogic.Refresh(); + }); - ScaleCanvasDown = new RelayCommand(o => - { - ScrollPanelX = PanelX; - ScrollPanelY = PanelY; - ScaleValue *= scaleRate; - }); - - ScaleCanvasUp = new RelayCommand(o => - { - ScrollPanelX = PanelX; - ScrollPanelY = PanelY; - ScaleValue /= scaleRate; - }); - - AddBeamCase = new RelayCommand(o => - { - PrimitiveLogic.AddItems(GetBeamCasePrimitives()); - MaterialsLogic.Refresh(); - }); - - AddColumnCase = new RelayCommand(o => - { - PrimitiveLogic.AddItems(GetColumnCasePrimitives()); - MaterialsLogic.Refresh(); - }); - - AddSlabCase = new RelayCommand(o => - { - PrimitiveLogic.AddItems(GetSlabCasePrimitives()); - MaterialsLogic.Refresh(); - }); - - MovePrimitiveToGravityCenterCommand = new RelayCommand(o => - { - if (CheckMaterials() == false) { return;} - var ndms = NdmPrimitivesService.GetNdms(repository.Primitives, LimitStates.SLS, CalcTerms.ShortTerm); - var center = GeometryOperations.GetGravityCenter(ndms); - foreach (var item in PrimitiveLogic.Items) - { - item.CenterX -= center.Cx; - item.CenterY -= center.Cy; - } - }, - o => repository.Primitives.Count() > 0 - ); - - SetPopupCanBeClosedTrue = new RelayCommand(o => - { - if (!(o is PrimitiveBase primitive)) return; - primitive.PopupCanBeClosed = true; - }); - - SetPopupCanBeClosedFalse = new RelayCommand(o => - { - if (!(o is PrimitiveBase primitive)) return; - primitive.PopupCanBeClosed = false; - }); - } - - private void afterMaterialEdit(SelectItemVM sender, CRUDVMEventArgs e) - { - foreach (var primitive in PrimitiveLogic.Items) - { - primitive.RefreshColor(); - } - } - - private bool CheckMaterials() - { + MovePrimitiveToGravityCenterCommand = new RelayCommand(o => + { + if (CheckMaterials() == false) { return; } + var ndms = NdmPrimitivesService.GetNdms(repository.Primitives, LimitStates.SLS, CalcTerms.ShortTerm); + var center = GeometryOperations.GetGravityCenter(ndms); foreach (var item in PrimitiveLogic.Items) { - if (item.HeadMaterial == null) - { - System.Windows.Forms.MessageBox.Show($"Primitive {item.Name} does not has material", "Check data for analisys", MessageBoxButtons.OK, MessageBoxIcon.Warning); - return false; - } + item.CenterX -= center.Cx; + item.CenterY -= center.Cy; } - return true; - } - private IEnumerable GetRCCirclePrimitives() - { - var template = new CircleTemplate(); - return GetCasePrimitives(template); - } - private IEnumerable GetBeamCasePrimitives() - { - var template = new RectangleBeamTemplate(); - return GetCasePrimitives(template); - } - private IEnumerable GetColumnCasePrimitives() - { - var template = new RectangleBeamTemplate(0.5d, 0.5d) { CoverGap = 0.05, WidthCount = 3, HeightCount = 3, TopDiameter = 0.025d, BottomDiameter = 0.025d }; - return GetCasePrimitives(template); - } - private IEnumerable GetSlabCasePrimitives() - { - var template = new RectangleBeamTemplate(1d, 0.2d) { CoverGap = 0.04, WidthCount = 5, HeightCount = 2, TopDiameter = 0.012d, BottomDiameter = 0.012d }; - return GetCasePrimitives(template); - } + }, + o => repository.Primitives.Count() > 0 + ); - private IEnumerable GetCasePrimitives(IRCSectionTemplate template) - { - Window wnd; - IRCGeometryLogic geometryLogic; - if (template is IRectangleBeamTemplate) + SetPopupCanBeClosedTrue = new RelayCommand(o => + { + if (!(o is PrimitiveBase primitive)) return; + primitive.PopupCanBeClosed = true; + }); + + SetPopupCanBeClosedFalse = new RelayCommand(o => + { + if (!(o is PrimitiveBase primitive)) return; + primitive.PopupCanBeClosed = false; + }); + } + + private void afterMaterialEdit(SelectItemVM sender, CRUDVMEventArgs e) + { + foreach (var primitive in PrimitiveLogic.Items) + { + primitive.RefreshColor(); + } + } + + private bool CheckMaterials() + { + foreach (var item in PrimitiveLogic.Items) + { + if (item.HeadMaterial == null) { - var rectTemplate = template as IRectangleBeamTemplate; - geometryLogic = new RectGeometryLogic(rectTemplate); - wnd = new RectangleBeamView(rectTemplate); + System.Windows.Forms.MessageBox.Show($"Primitive {item.Name} does not has material", "Check data for analisys", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return false; } - else if (template is ICircleTemplate) + } + return true; + } + private IEnumerable GetRCCirclePrimitives() + { + var template = new CircleTemplate(); + return GetCasePrimitives(template); + } + private IEnumerable GetBeamCasePrimitives() + { + var template = new RectangleBeamTemplate(); + return GetCasePrimitives(template); + } + private IEnumerable GetColumnCasePrimitives() + { + var template = new RectangleBeamTemplate(0.5d, 0.5d) { CoverGap = 0.05, WidthCount = 3, HeightCount = 3, TopDiameter = 0.025d, BottomDiameter = 0.025d }; + return GetCasePrimitives(template); + } + private IEnumerable GetSlabCasePrimitives() + { + var template = new RectangleBeamTemplate(1d, 0.2d) { CoverGap = 0.04, WidthCount = 5, HeightCount = 2, TopDiameter = 0.012d, BottomDiameter = 0.012d }; + return GetCasePrimitives(template); + } + + private IEnumerable GetCasePrimitives(IRCSectionTemplate template) + { + Window wnd; + IRCGeometryLogic geometryLogic; + if (template is IRectangleBeamTemplate) + { + var rectTemplate = template as IRectangleBeamTemplate; + geometryLogic = new RectGeometryLogic(rectTemplate); + wnd = new RectangleBeamView(rectTemplate); + } + else if (template is ICircleTemplate) + { + var circleTemplate = template as ICircleTemplate; + geometryLogic = new CircleGeometryLogic(circleTemplate); + wnd = new CircleView(circleTemplate); + } + else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown + $"Was: {nameof(template)}"); } + wnd.ShowDialog(); + if (wnd.DialogResult == true) + { + + var newSection = new SectionTemplate(geometryLogic).GetCrossSection(); + var newRepository = newSection.SectionRepository; + repository.HeadMaterials.AddRange(newRepository.HeadMaterials); + repository.Primitives.AddRange(newRepository.Primitives); + repository.ForceActions.AddRange(newRepository.ForceActions); + repository.CalculatorsList.AddRange(newRepository.CalculatorsList); + OnPropertyChanged(nameof(HeadMaterials)); + CombinationsLogic.AddItems(newRepository.ForceActions); + CalculatorsLogic.AddItems(newRepository.CalculatorsList); + var primitives = PrimitiveOperations.ConvertNdmPrimitivesToPrimitiveBase(newRepository.Primitives); + foreach (var item in primitives) { - var circleTemplate = template as ICircleTemplate; - geometryLogic = new CircleGeometryLogic(circleTemplate); - wnd = new CircleView(circleTemplate); + item.RegisterDeltas(VisualProperty.WorkPlainWidth / 2, VisualProperty.WorkPlainHeight / 2); } - else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown + $"Was: {nameof(template)}"); } - wnd.ShowDialog(); - if (wnd.DialogResult == true) + PrimitiveLogic.Refresh(); + foreach (var item in newRepository.HeadMaterials) { - - var newSection = new SectionTemplate(geometryLogic).GetCrossSection(); - var newRepository = newSection.SectionRepository; - repository.HeadMaterials.AddRange(newRepository.HeadMaterials); - repository.Primitives.AddRange(newRepository.Primitives); - repository.ForceActions.AddRange(newRepository.ForceActions); - repository.CalculatorsList.AddRange(newRepository.CalculatorsList); - OnPropertyChanged(nameof(HeadMaterials)); - CombinationsLogic.AddItems(newRepository.ForceActions); - CalculatorsLogic.AddItems(newRepository.CalculatorsList); - var primitives = PrimitiveOperations.ConvertNdmPrimitivesToPrimitiveBase(newRepository.Primitives); - foreach (var item in primitives) - { - item.RegisterDeltas(VisualProperty.WorkPlainWidth / 2, VisualProperty.WorkPlainHeight / 2); - } - PrimitiveLogic.Refresh(); - foreach (var item in newRepository.HeadMaterials) - { - GlobalRepository.Materials.Create(item); - } - foreach (var item in newRepository.ForceActions) - { - GlobalRepository.Actions.Create(item); - } - return primitives; + GlobalRepository.Materials.Create(item); } - return new List(); - } - } + foreach (var item in newRepository.ForceActions) + { + GlobalRepository.Actions.Create(item); + } + return primitives; + } + return new List(); + } + } } \ No newline at end of file