diff --git a/StructureHelper/Infrastructure/UI/DataContexts/CircleViewPrimitive.cs b/StructureHelper/Infrastructure/UI/DataContexts/CircleViewPrimitive.cs
index f94a001..4673237 100644
--- a/StructureHelper/Infrastructure/UI/DataContexts/CircleViewPrimitive.cs
+++ b/StructureHelper/Infrastructure/UI/DataContexts/CircleViewPrimitive.cs
@@ -14,11 +14,12 @@ namespace StructureHelper.Infrastructure.UI.DataContexts
{
ICirclePrimitive primitive;
public double Diameter
- { get
+ {
+ get
{
return primitive.Diameter;
}
- set
+ set
{
primitive.Diameter = value;
RefreshPlacement();
diff --git a/StructureHelper/Infrastructure/UI/DataTemplates/EllipseTemplate.xaml b/StructureHelper/Infrastructure/UI/DataTemplates/EllipseTemplate.xaml
index ce12680..c4de6d7 100644
--- a/StructureHelper/Infrastructure/UI/DataTemplates/EllipseTemplate.xaml
+++ b/StructureHelper/Infrastructure/UI/DataTemplates/EllipseTemplate.xaml
@@ -7,7 +7,6 @@
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:mouseEventTriggers="clr-namespace:StructureHelper.Infrastructure.UI.Triggers.MouseEventTriggers"
xmlns:dataContexts="clr-namespace:StructureHelper.Infrastructure.UI.DataContexts"
- xmlns:userControls="clr-namespace:StructureHelper.Infrastructure.UI.UserControls"
mc:Ignorable="d">
diff --git a/StructureHelper/Infrastructure/UI/DataTemplates/RectangleTemplate.xaml b/StructureHelper/Infrastructure/UI/DataTemplates/RectangleTemplate.xaml
index 89eb81a..0985cfe 100644
--- a/StructureHelper/Infrastructure/UI/DataTemplates/RectangleTemplate.xaml
+++ b/StructureHelper/Infrastructure/UI/DataTemplates/RectangleTemplate.xaml
@@ -7,7 +7,6 @@
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:infrastructure="clr-namespace:StructureHelper.Infrastructure"
xmlns:mouseEventTriggers="clr-namespace:StructureHelper.Infrastructure.UI.Triggers.MouseEventTriggers"
- xmlns:userControls="clr-namespace:StructureHelper.Infrastructure.UI.UserControls"
xmlns:dataContexts="clr-namespace:StructureHelper.Infrastructure.UI.DataContexts"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance dataContexts:RectangleViewPrimitive}">
diff --git a/StructureHelper/Infrastructure/UI/Resources/ShapeEditTemplates.xaml b/StructureHelper/Infrastructure/UI/Resources/ShapeEditTemplates.xaml
index b660237..c83a468 100644
--- a/StructureHelper/Infrastructure/UI/Resources/ShapeEditTemplates.xaml
+++ b/StructureHelper/Infrastructure/UI/Resources/ShapeEditTemplates.xaml
@@ -18,4 +18,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/StructureHelper/Properties/PublishProfiles/FolderProfile.pubxml b/StructureHelper/Properties/PublishProfiles/FolderProfile.pubxml
new file mode 100644
index 0000000..bafcfeb
--- /dev/null
+++ b/StructureHelper/Properties/PublishProfiles/FolderProfile.pubxml
@@ -0,0 +1,18 @@
+
+
+
+
+ Release
+ Any CPU
+ bin\Release\net6.0-windows7.0\win-x64\publish\win-x64\
+ FileSystem
+ <_TargetId>Folder
+ net6.0-windows7.0
+ win-x64
+ true
+ false
+ false
+
+
\ No newline at end of file
diff --git a/StructureHelper/Properties/PublishProfiles/FolderProfile.pubxml.user b/StructureHelper/Properties/PublishProfiles/FolderProfile.pubxml.user
new file mode 100644
index 0000000..6310abc
--- /dev/null
+++ b/StructureHelper/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -0,0 +1,10 @@
+
+
+
+
+ True|2023-02-25T08:37:39.2738786Z;False|2023-02-25T13:37:24.0284261+05:00;True|2023-02-25T13:34:01.6858860+05:00;True|2023-02-25T13:31:18.8295711+05:00;False|2023-02-25T13:25:21.5807199+05:00;False|2023-02-25T13:24:41.7164398+05:00;
+
+
+
\ No newline at end of file
diff --git a/StructureHelper/StructureHelper.csproj b/StructureHelper/StructureHelper.csproj
index 4f9ef4f..017ad6e 100644
--- a/StructureHelper/StructureHelper.csproj
+++ b/StructureHelper/StructureHelper.csproj
@@ -3,6 +3,7 @@
WinExe
net6.0-windows7.0
+ true
enable
true
disable
diff --git a/StructureHelper/StructureHelper.csproj.bak b/StructureHelper/StructureHelper.csproj.bak
new file mode 100644
index 0000000..4f9ef4f
--- /dev/null
+++ b/StructureHelper/StructureHelper.csproj.bak
@@ -0,0 +1,49 @@
+
+
+
+ WinExe
+ net6.0-windows7.0
+ enable
+ true
+ disable
+ 7.0
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Libraries\LoaderCalculator.dll
+
+
+
+
+
+ PreserveNewest
+
+
+
+
diff --git a/StructureHelper/StructureHelper.csproj.user b/StructureHelper/StructureHelper.csproj.user
index e8da786..bb58652 100644
--- a/StructureHelper/StructureHelper.csproj.user
+++ b/StructureHelper/StructureHelper.csproj.user
@@ -1,10 +1,27 @@
-
+
+ <_LastSelectedProfileId>C:\Source\Repos\StructureHelper\StructureHelper\Properties\PublishProfiles\FolderProfile.pubxml
+
Designer
-
+
+
+ Code
+
+
+ Code
+
+
+
+
+ Designer
+
+
+ Designer
+
+
\ No newline at end of file
diff --git a/StructureHelper/Windows/MainWindow/AboutView.xaml b/StructureHelper/Windows/MainWindow/AboutView.xaml
new file mode 100644
index 0000000..360c4c0
--- /dev/null
+++ b/StructureHelper/Windows/MainWindow/AboutView.xaml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/StructureHelper/Windows/MainWindow/AboutView.xaml.cs b/StructureHelper/Windows/MainWindow/AboutView.xaml.cs
new file mode 100644
index 0000000..84f93c7
--- /dev/null
+++ b/StructureHelper/Windows/MainWindow/AboutView.xaml.cs
@@ -0,0 +1,36 @@
+using StructureHelper.Windows.ViewModels.Help;
+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
+{
+ ///
+ /// Логика взаимодействия для AboutView.xaml
+ ///
+ public partial class AboutView : Window
+ {
+ public AboutView()
+ {
+ var vm = new AboutViewModel();
+ vm.ParentWindow = this;
+ this.DataContext = vm;
+ InitializeComponent();
+ }
+
+ private void Button_Click(object sender, RoutedEventArgs e)
+ {
+ this.Close();
+ }
+ }
+}
diff --git a/StructureHelper/Windows/MainWindow/MainView.xaml b/StructureHelper/Windows/MainWindow/MainView.xaml
index 0234fdb..58b339e 100644
--- a/StructureHelper/Windows/MainWindow/MainView.xaml
+++ b/StructureHelper/Windows/MainWindow/MainView.xaml
@@ -41,11 +41,12 @@
-
+
+
+
@@ -100,24 +103,24 @@
-
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
@@ -163,6 +166,12 @@
+
+
+
+
+
+
diff --git a/StructureHelper/Windows/MainWindow/MainViewModel.cs b/StructureHelper/Windows/MainWindow/MainViewModel.cs
index c11bf65..a0586ea 100644
--- a/StructureHelper/Windows/MainWindow/MainViewModel.cs
+++ b/StructureHelper/Windows/MainWindow/MainViewModel.cs
@@ -1,31 +1,27 @@
-using LoaderCalculator.Data.Ndms;
-using LoaderCalculator.Logics.Geometry;
+using LoaderCalculator.Logics.Geometry;
using StructureHelper.Infrastructure;
using StructureHelper.Infrastructure.UI.DataContexts;
using StructureHelper.MaterialCatalogWindow;
using StructureHelper.Models.Materials;
-using StructureHelper.Windows.CalculationWindows.CalculationPropertyWindow;
-using StructureHelper.Windows.CalculationWindows.CalculationResultWindow;
using StructureHelper.Windows.ColorPickerWindow;
using StructureHelper.Windows.MainWindow.Materials;
+using StructureHelper.Windows.PrimitiveTemplates.RCs.Beams;
using StructureHelper.Windows.PrimitiveTemplates.RCs.RectangleBeam;
-using StructureHelper.Windows.ViewModels.Calculations.CalculationProperies;
-using StructureHelper.Windows.ViewModels.Calculations.CalculationResult;
using StructureHelper.Windows.ViewModels.Forces;
using StructureHelper.Windows.ViewModels.NdmCrossSections;
using StructureHelperCommon.Infrastructures.Enums;
+using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Strings;
using StructureHelperCommon.Models.Forces;
-using StructureHelperLogics.Models.Calculations.CalculationProperties;
using StructureHelperLogics.Models.CrossSections;
using StructureHelperLogics.Models.Templates.CrossSections.RCs;
using StructureHelperLogics.Models.Templates.RCs;
-using StructureHelperLogics.Services.NdmCalculations;
using StructureHelperLogics.Services.NdmPrimitives;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
+using System.Windows;
using System.Windows.Forms;
using System.Windows.Input;
@@ -47,6 +43,7 @@ namespace StructureHelper.Windows.MainWindow
public AnalysisVewModelLogic CalculatorsLogic { get => calculatorsLogic;}
public ActionsViewModel CombinationsLogic { get => combinationsLogic; }
public IPrimitiveViewModelLogic PrimitiveLogic => primitiveLogic;
+ public HelpLogic HelpLogic => new HelpLogic();
private MainModel Model { get; }
@@ -157,6 +154,15 @@ namespace StructureHelper.Windows.MainWindow
public ICommand Calculate { get; }
public ICommand EditCalculationPropertyCommand { get; }
public ICommand EditHeadMaterialsCommand { get; }
+ public ICommand AddRCCircleCase
+ { get
+ {
+ return new RelayCommand(o =>
+ {
+ PrimitiveLogic.AddItems(GetRCCirclePrimitives());
+ });
+ }
+ }
public ICommand AddBeamCase { get; }
public ICommand AddColumnCase { get; }
public ICommand AddSlabCase { get; }
@@ -286,7 +292,6 @@ namespace StructureHelper.Windows.MainWindow
AddBeamCase = new RelayCommand(o =>
{
PrimitiveLogic.AddItems(GetBeamCasePrimitives());
- //OnPropertyChanged(nameof(PrimitivesCount));
});
AddColumnCase = new RelayCommand(o =>
@@ -348,12 +353,17 @@ namespace StructureHelper.Windows.MainWindow
{
if (item.HeadMaterial == null)
{
- MessageBox.Show($"Primitive {item.Name} does not has material", "Check data for analisys", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+ System.Windows.Forms.MessageBox.Show($"Primitive {item.Name} does not has material", "Check data for analisys", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return false;
}
}
return true;
}
+ private IEnumerable GetRCCirclePrimitives()
+ {
+ var template = new CircleTemplate();
+ return GetCasePrimitives(template);
+ }
private IEnumerable GetBeamCasePrimitives()
{
var template = new RectangleBeamTemplate();
@@ -370,13 +380,28 @@ namespace StructureHelper.Windows.MainWindow
return GetCasePrimitives(template);
}
- private IEnumerable GetCasePrimitives(RectangleBeamTemplate template)
+ private IEnumerable GetCasePrimitives(IRCSectionTemplate template)
{
- var wnd = new RectangleBeamView(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(new RectGeometryLogic(template)).GetCrossSection();
+
+ var newSection = new SectionTemplate(geometryLogic).GetCrossSection();
var newRepository = newSection.SectionRepository;
repository.HeadMaterials.AddRange(newRepository.HeadMaterials);
repository.Primitives.AddRange(newRepository.Primitives);
diff --git a/StructureHelper/Windows/PrimitiveTemplates/RCs/Beams/CircleView.xaml b/StructureHelper/Windows/PrimitiveTemplates/RCs/Beams/CircleView.xaml
new file mode 100644
index 0000000..4da1b97
--- /dev/null
+++ b/StructureHelper/Windows/PrimitiveTemplates/RCs/Beams/CircleView.xaml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/StructureHelper/Windows/PrimitiveTemplates/RCs/Beams/CircleView.xaml.cs b/StructureHelper/Windows/PrimitiveTemplates/RCs/Beams/CircleView.xaml.cs
new file mode 100644
index 0000000..9ede319
--- /dev/null
+++ b/StructureHelper/Windows/PrimitiveTemplates/RCs/Beams/CircleView.xaml.cs
@@ -0,0 +1,34 @@
+using StructureHelper.Windows.ViewModels.PrimitiveTemplates.RCs;
+using StructureHelperLogics.Models.Templates.CrossSections.RCs;
+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.PrimitiveTemplates.RCs.Beams
+{
+ ///
+ /// Логика взаимодействия для CircleView.xaml
+ ///
+ public partial class CircleView : Window
+ {
+ private CircleViewModel viewModel;
+
+ public CircleView(ICircleTemplate template)
+ {
+ viewModel = new CircleViewModel(template);
+ viewModel.ParentWindow = this;
+ DataContext = viewModel;
+ InitializeComponent();
+ }
+ }
+}
diff --git a/StructureHelper/Windows/PrimitiveTemplates/RCs/RectangleBeam/RectangleBeamView.xaml b/StructureHelper/Windows/PrimitiveTemplates/RCs/Beams/RectangleBeamView.xaml
similarity index 95%
rename from StructureHelper/Windows/PrimitiveTemplates/RCs/RectangleBeam/RectangleBeamView.xaml
rename to StructureHelper/Windows/PrimitiveTemplates/RCs/Beams/RectangleBeamView.xaml
index 1a68ce0..3bc67bd 100644
--- a/StructureHelper/Windows/PrimitiveTemplates/RCs/RectangleBeam/RectangleBeamView.xaml
+++ b/StructureHelper/Windows/PrimitiveTemplates/RCs/Beams/RectangleBeamView.xaml
@@ -8,7 +8,7 @@
xmlns:vm ="clr-namespace:StructureHelper.Windows.ViewModels.PrimitiveTemplates.RCs"
d:DataContext="{d:DesignInstance vm:RectangleBeamViewModel}"
mc:Ignorable="d"
- Title="Reinforced beam template" Height="220" Width="300" SizeToContent="Height" WindowStartupLocation="CenterScreen" ResizeMode="NoResize">
+ Title="Reinforced rectangle template" Height="220" Width="300" SizeToContent="Height" WindowStartupLocation="CenterScreen" ResizeMode="NoResize">
@@ -46,6 +46,5 @@
-
diff --git a/StructureHelper/Windows/PrimitiveTemplates/RCs/RectangleBeam/RectangleBeamView.xaml.cs b/StructureHelper/Windows/PrimitiveTemplates/RCs/Beams/RectangleBeamView.xaml.cs
similarity index 100%
rename from StructureHelper/Windows/PrimitiveTemplates/RCs/RectangleBeam/RectangleBeamView.xaml.cs
rename to StructureHelper/Windows/PrimitiveTemplates/RCs/Beams/RectangleBeamView.xaml.cs
diff --git a/StructureHelper/Windows/ViewModels/CRUDViewModelBase.cs b/StructureHelper/Windows/ViewModels/CRUDViewModelBase.cs
index 055c9a8..aea589b 100644
--- a/StructureHelper/Windows/ViewModels/CRUDViewModelBase.cs
+++ b/StructureHelper/Windows/ViewModels/CRUDViewModelBase.cs
@@ -31,9 +31,9 @@ namespace StructureHelper.Windows.ViewModels
{
return addCommand ??
(
- addCommand = new RelayCommand(o =>
+ addCommand = new RelayCommand(param =>
{
- AddMethod(o);
+ AddMethod(param);
}
));
}
@@ -49,14 +49,14 @@ namespace StructureHelper.Windows.ViewModels
{
return deleteCommand ??
(
- deleteCommand = new RelayCommand(o =>
+ deleteCommand = new RelayCommand(param =>
{
- DeleteMethod();
+ DeleteMethod(param);
}, o => SelectedItem != null
));
}
}
- public virtual void DeleteMethod()
+ public virtual void DeleteMethod(object parameter)
{
Collection.Remove(SelectedItem);
Items.Remove(SelectedItem);
@@ -66,9 +66,9 @@ namespace StructureHelper.Windows.ViewModels
get
{
return editCommand ??
- (editCommand = new RelayCommand(o=>
+ (editCommand = new RelayCommand(param=>
{
- EditMethod(o);
+ EditMethod(param);
}, o => SelectedItem != null
));
}
@@ -89,14 +89,14 @@ namespace StructureHelper.Windows.ViewModels
get
{
return copyCommand ??
- (copyCommand = new RelayCommand (o=>
+ (copyCommand = new RelayCommand (param=>
{
- CopyMethod();
+ CopyMethod(param);
}, o => SelectedItem != null
));
}
}
- public virtual void CopyMethod()
+ public virtual void CopyMethod(object parameter)
{
if (SelectedItem is ICloneable)
{
diff --git a/StructureHelper/Windows/ViewModels/Forces/ActionsViewModel.cs b/StructureHelper/Windows/ViewModels/Forces/ActionsViewModel.cs
index bc3f1db..a6ac6f4 100644
--- a/StructureHelper/Windows/ViewModels/Forces/ActionsViewModel.cs
+++ b/StructureHelper/Windows/ViewModels/Forces/ActionsViewModel.cs
@@ -21,7 +21,7 @@ namespace StructureHelper.Windows.ViewModels.Forces
base.AddMethod(parameter);
}
- public override void DeleteMethod()
+ public override void DeleteMethod(object parameter)
{
var dialogResult = MessageBox.Show("Delete action?", "Please, confirm deleting", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (dialogResult == DialogResult.Yes)
@@ -41,7 +41,7 @@ namespace StructureHelper.Windows.ViewModels.Forces
}
}
}
- base.DeleteMethod();
+ base.DeleteMethod(parameter);
}
}
diff --git a/StructureHelper/Windows/ViewModels/Help/AboutViewModel.cs b/StructureHelper/Windows/ViewModels/Help/AboutViewModel.cs
new file mode 100644
index 0000000..39408e7
--- /dev/null
+++ b/StructureHelper/Windows/ViewModels/Help/AboutViewModel.cs
@@ -0,0 +1,25 @@
+using StructureHelper.Infrastructure;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+
+
+namespace StructureHelper.Windows.ViewModels.Help
+{
+ internal class AboutViewModel : OkCancelViewModelBase
+ {
+ public string Authors => "Redikultsev Evgeny, Petrov Sergey, Smirnov Nikolay";
+ public string Version
+ {
+ get
+ {
+ string version;
+ version = Assembly.GetExecutingAssembly().GetName().Version.ToString();
+ return version;
+ }
+ }
+ }
+}
diff --git a/StructureHelper/Windows/ViewModels/NdmCrossSections/AnalysisVewModelLogic.cs b/StructureHelper/Windows/ViewModels/NdmCrossSections/AnalysisVewModelLogic.cs
index 2fdb818..2f5340c 100644
--- a/StructureHelper/Windows/ViewModels/NdmCrossSections/AnalysisVewModelLogic.cs
+++ b/StructureHelper/Windows/ViewModels/NdmCrossSections/AnalysisVewModelLogic.cs
@@ -37,12 +37,12 @@ namespace StructureHelper.Windows.ViewModels.NdmCrossSections
}
base.EditMethod(parameter);
}
- public override void DeleteMethod()
+ public override void DeleteMethod(object parameter)
{
var dialogResult = MessageBox.Show("Delete calculator?", "Please, confirm deleting", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (dialogResult == DialogResult.Yes)
{
- base.DeleteMethod();
+ base.DeleteMethod(parameter);
}
}
public RelayCommand Run
diff --git a/StructureHelper/Windows/ViewModels/NdmCrossSections/HelpLogic.cs b/StructureHelper/Windows/ViewModels/NdmCrossSections/HelpLogic.cs
new file mode 100644
index 0000000..7610076
--- /dev/null
+++ b/StructureHelper/Windows/ViewModels/NdmCrossSections/HelpLogic.cs
@@ -0,0 +1,30 @@
+using StructureHelper.Infrastructure;
+using StructureHelper.Windows.MainWindow;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StructureHelper.Windows.ViewModels.NdmCrossSections
+{
+ public class HelpLogic : ViewModelBase
+ {
+ private RelayCommand showAbout;
+
+ public RelayCommand ShowAbout
+ {
+ get
+ {
+ return showAbout ??
+ (
+ showAbout = new RelayCommand(param =>
+ {
+ var wnd = new AboutView();
+ wnd.ShowDialog();
+ }
+ ));
+ }
+ }
+ }
+}
diff --git a/StructureHelper/Windows/ViewModels/NdmCrossSections/PrimitiveViewModelLogic.cs b/StructureHelper/Windows/ViewModels/NdmCrossSections/PrimitiveViewModelLogic.cs
index c674ee4..8b11950 100644
--- a/StructureHelper/Windows/ViewModels/NdmCrossSections/PrimitiveViewModelLogic.cs
+++ b/StructureHelper/Windows/ViewModels/NdmCrossSections/PrimitiveViewModelLogic.cs
@@ -193,7 +193,7 @@ namespace StructureHelper.Windows.ViewModels.NdmCrossSections
}
private bool CheckMaxIndex()
{
- if (SelectedItem is null) return false;
+ if (SelectedItem is null || Items.Count == 0) return false;
int maxZIndex = Items.Select(x => x.GetNdmPrimitive().VisualProperty.ZIndex).Max();
if (SelectedItem.ZIndex <= maxZIndex) return true;
else return false;
@@ -201,7 +201,7 @@ namespace StructureHelper.Windows.ViewModels.NdmCrossSections
private bool CheckMinIndex()
{
- if (SelectedItem is null) return false;
+ if (SelectedItem is null || Items.Count == 0) return false;
int minZIndex = Items.Select(x => x.GetNdmPrimitive().VisualProperty.ZIndex).Min();
if (SelectedItem.ZIndex >= minZIndex) return true;
else return false;
diff --git a/StructureHelper/Windows/ViewModels/OkCancelViewModelBase.cs b/StructureHelper/Windows/ViewModels/OkCancelViewModelBase.cs
index f74c65e..efd31b6 100644
--- a/StructureHelper/Windows/ViewModels/OkCancelViewModelBase.cs
+++ b/StructureHelper/Windows/ViewModels/OkCancelViewModelBase.cs
@@ -7,11 +7,26 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Input;
namespace StructureHelper.Windows.ViewModels
{
public abstract class OkCancelViewModelBase : ViewModelBase
{
+ public Window ParentWindow { get; set; }
+ public ICommand OkCommand => new RelayCommand(o => OkAction());
+ public ICommand CancelCommand => new RelayCommand(o => CancelAction());
+ private void CancelAction()
+ {
+ ParentWindow.DialogResult = false;
+ ParentWindow.Close();
+ }
+ private void OkAction()
+ {
+ ParentWindow.DialogResult = true;
+ ParentWindow.Close();
+ }
}
}
diff --git a/StructureHelper/Windows/ViewModels/PrimitiveProperties/PrimitivePropertiesViewModel.cs b/StructureHelper/Windows/ViewModels/PrimitiveProperties/PrimitivePropertiesViewModel.cs
index 9bd423f..cb14d56 100644
--- a/StructureHelper/Windows/ViewModels/PrimitiveProperties/PrimitivePropertiesViewModel.cs
+++ b/StructureHelper/Windows/ViewModels/PrimitiveProperties/PrimitivePropertiesViewModel.cs
@@ -181,6 +181,29 @@ namespace StructureHelper.Windows.ViewModels.PrimitiveProperties
}
}
+ public double Diameter
+ {
+ get
+ {
+ if (primitive is CircleViewPrimitive)
+ {
+ var shape = primitive as CircleViewPrimitive;
+ return shape.Diameter;
+ }
+ return 0d;
+ }
+ set
+ {
+ if (primitive is CircleViewPrimitive)
+ {
+ var shape = primitive as CircleViewPrimitive;
+ shape.Diameter = value;
+ OnPropertyChanged(nameof(Area));
+ OnPropertyChanged(nameof(shape.Diameter));
+ }
+ }
+ }
+
public Color Color
{
get => primitive.Color;
diff --git a/StructureHelper/Windows/ViewModels/PrimitiveTemplates/RCs/CircleViewModel.cs b/StructureHelper/Windows/ViewModels/PrimitiveTemplates/RCs/CircleViewModel.cs
new file mode 100644
index 0000000..8178251
--- /dev/null
+++ b/StructureHelper/Windows/ViewModels/PrimitiveTemplates/RCs/CircleViewModel.cs
@@ -0,0 +1,75 @@
+using StructureHelperCommon.Models.Shapes;
+using StructureHelperLogics.Models.Templates.CrossSections.RCs;
+using StructureHelperLogics.Models.Templates.RCs;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StructureHelper.Windows.ViewModels.PrimitiveTemplates.RCs
+{
+ internal class CircleViewModel : OkCancelViewModelBase, IDataErrorInfo
+ {
+ public ICircleTemplate Model;
+
+ public double Diameter
+ {
+ get { return Model.Shape.Diameter; }
+ set { Model.Shape.Diameter = value; }
+ }
+ public double CoverGap
+ {
+ get { return Model.CoverGap; }
+ set { Model.CoverGap = value; }
+ }
+ public double BarDiameter
+ {
+ get { return Model.BarDiameter; }
+ set { Model.BarDiameter = value; }
+ }
+ public int BarCount
+ {
+ get { return Model.BarCount; }
+ set { Model.BarCount = value; }
+ }
+
+ public string Error => throw new NotImplementedException();
+
+ public string this[string columnName]
+ {
+ get
+ {
+ string error = null;
+
+ if (columnName == nameof(Diameter))
+ {
+ if (this.Diameter <= 0)
+ {
+ error = "Diameter of section must be greater than zero";
+ }
+ }
+ else if (columnName == nameof(BarDiameter))
+ {
+ if (BarDiameter < 0)
+ {
+ error = "Diameter must be greater than zero";
+ }
+ }
+ else if (columnName == nameof(CoverGap))
+ {
+ if (CoverGap > Diameter / 2)
+ {
+ error = "Cover gap is too big";
+ }
+ }
+ return error;
+ }
+ }
+ public CircleViewModel(ICircleTemplate model)
+ {
+ Model = model;
+ }
+ }
+}
diff --git a/StructureHelper/Windows/ViewModels/PrimitiveTemplates/RCs/RectangleBeamViewModel.cs b/StructureHelper/Windows/ViewModels/PrimitiveTemplates/RCs/RectangleBeamViewModel.cs
index 2157442..07617cc 100644
--- a/StructureHelper/Windows/ViewModels/PrimitiveTemplates/RCs/RectangleBeamViewModel.cs
+++ b/StructureHelper/Windows/ViewModels/PrimitiveTemplates/RCs/RectangleBeamViewModel.cs
@@ -13,17 +13,11 @@ using System.Windows.Input;
namespace StructureHelper.Windows.ViewModels.PrimitiveTemplates.RCs
{
- internal class RectangleBeamViewModel : ViewModelBase, IDataErrorInfo
+ internal class RectangleBeamViewModel : OkCancelViewModelBase, IDataErrorInfo
{
public IRectangleBeamTemplate Model;
-
private RectangleShape rectangle => Model.Shape as RectangleShape;
- public Window ParentWindow { get; set; }
-
- public ICommand OkCommand { get; private set; }
- public ICommand CancelCommand { get; private set; }
-
public double Width
{
get { return rectangle.Width; }
@@ -79,9 +73,16 @@ namespace StructureHelper.Windows.ViewModels.PrimitiveTemplates.RCs
}
else if (columnName == nameof(TopDiameter) || columnName == nameof(BottomDiameter))
{
- if (CoverGap <0 )
+ if (TopDiameter < 0 || BottomDiameter < 0)
{
- error = "Diameter must be grater than zero";
+ error = "Diameter must be greater than zero";
+ }
+ }
+ else if (columnName == nameof(CoverGap))
+ {
+ if (CoverGap < 0)
+ {
+ error = "Cover gap must be greater than zero";
}
}
return error;
@@ -91,23 +92,10 @@ namespace StructureHelper.Windows.ViewModels.PrimitiveTemplates.RCs
public RectangleBeamViewModel(IRectangleBeamTemplate template)
{
Model = template;
-
- OkCommand = new RelayCommand(o => OkAction());
- CancelCommand = new RelayCommand(o => CancelAction());
}
- private void CancelAction()
- {
- ParentWindow.DialogResult = false;
- ParentWindow.Close();
- }
- private void OkAction()
- {
- ParentWindow.DialogResult = true;
- ParentWindow.Close();
- }
}
}
diff --git a/StructureHelperCommon/Models/Shapes/CircleShape.cs b/StructureHelperCommon/Models/Shapes/CircleShape.cs
new file mode 100644
index 0000000..a48fb1f
--- /dev/null
+++ b/StructureHelperCommon/Models/Shapes/CircleShape.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StructureHelperCommon.Models.Shapes
+{
+ public class CircleShape : ICircleShape
+ {
+ public double Diameter { get; set; }
+ }
+}
diff --git a/StructureHelperCommon/Services/ColorServices/ColorProcessor.cs b/StructureHelperCommon/Services/ColorServices/ColorProcessor.cs
index b21442e..56dbfec 100644
--- a/StructureHelperCommon/Services/ColorServices/ColorProcessor.cs
+++ b/StructureHelperCommon/Services/ColorServices/ColorProcessor.cs
@@ -9,7 +9,6 @@ namespace StructureHelperCommon.Services.ColorServices
{
public static Color GetRandomColor()
{
- Thread.Sleep(100);
var randomR = new Random(new Random((int)DateTime.Now.Ticks % 1000).Next(50)).Next(0, 255);
var randomG = new Random(new Random((int)DateTime.Now.Ticks % 200).Next(100, 200)).Next(0, 255);
var randomB = new Random(new Random((int)DateTime.Now.Ticks % 50).Next(500, 1000)).Next(0, 255);
diff --git a/StructureHelperLogics/Models/Templates/CrossSections/RCs/CircleGeometryLogic.cs b/StructureHelperLogics/Models/Templates/CrossSections/RCs/CircleGeometryLogic.cs
index 6cdfb08..fd65e2f 100644
--- a/StructureHelperLogics/Models/Templates/CrossSections/RCs/CircleGeometryLogic.cs
+++ b/StructureHelperLogics/Models/Templates/CrossSections/RCs/CircleGeometryLogic.cs
@@ -12,12 +12,12 @@ namespace StructureHelperLogics.Models.Templates.CrossSections.RCs
{
public class CircleGeometryLogic : IRCGeometryLogic
{
- ICircleBeamTemplate template;
+ ICircleTemplate template;
public IEnumerable HeadMaterials { get; set; }
- public CircleGeometryLogic(ICircleBeamTemplate template)
+ public CircleGeometryLogic(ICircleTemplate template)
{
this.template = template;
}
@@ -32,7 +32,7 @@ namespace StructureHelperLogics.Models.Templates.CrossSections.RCs
private IEnumerable GetConcretePrimitives()
{
- var diameter = template.SectionDiameter;
+ var diameter = template.Shape.Diameter;
var concreteMaterial = HeadMaterials.ToList()[0];
var primitives = new List();
var rectangle = new CirclePrimitive() { Diameter = diameter, Name = "Concrete block", HeadMaterial = concreteMaterial };
@@ -43,11 +43,11 @@ namespace StructureHelperLogics.Models.Templates.CrossSections.RCs
private IEnumerable GetReinfrocementPrimitives()
{
var reinforcementMaterial = HeadMaterials.ToList()[1];
- var radius = template.SectionDiameter / 2 - template.CoverGap;
- var dAngle = 2d * Math.PI / template.BarQuantity;
+ var radius = template.Shape.Diameter / 2 - template.CoverGap;
+ var dAngle = 2d * Math.PI / template.BarCount;
var barArea = Math.PI* template.BarDiameter* template.BarDiameter / 4d;
var primitives = new List();
- for (int i = 0; i < template.BarQuantity; i++)
+ for (int i = 0; i < template.BarCount; i++)
{
var angle = i * dAngle;
var x = radius * Math.Sin(angle);
diff --git a/StructureHelperLogics/Models/Templates/CrossSections/RCs/CircleTemplate.cs b/StructureHelperLogics/Models/Templates/CrossSections/RCs/CircleTemplate.cs
new file mode 100644
index 0000000..6d9c23b
--- /dev/null
+++ b/StructureHelperLogics/Models/Templates/CrossSections/RCs/CircleTemplate.cs
@@ -0,0 +1,25 @@
+using StructureHelperCommon.Models.Shapes;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StructureHelperLogics.Models.Templates.CrossSections.RCs
+{
+ public class CircleTemplate : ICircleTemplate
+ {
+ public ICircleShape Shape { get; }
+ public double CoverGap { get; set; }
+ public int BarCount { get; set; }
+ public double BarDiameter { get; set; }
+ public CircleTemplate()
+ {
+ Shape = new CircleShape();
+ Shape.Diameter = 0.5d;
+ CoverGap = 0.05d;
+ BarCount = 8;
+ BarDiameter = 0.025d;
+ }
+ }
+}
diff --git a/StructureHelperLogics/Models/Templates/CrossSections/RCs/ICircleBeamTemplate.cs b/StructureHelperLogics/Models/Templates/CrossSections/RCs/ICircleTemplate.cs
similarity index 66%
rename from StructureHelperLogics/Models/Templates/CrossSections/RCs/ICircleBeamTemplate.cs
rename to StructureHelperLogics/Models/Templates/CrossSections/RCs/ICircleTemplate.cs
index 179407e..cd5f9d6 100644
--- a/StructureHelperLogics/Models/Templates/CrossSections/RCs/ICircleBeamTemplate.cs
+++ b/StructureHelperLogics/Models/Templates/CrossSections/RCs/ICircleTemplate.cs
@@ -7,14 +7,11 @@ using System.Threading.Tasks;
namespace StructureHelperLogics.Models.Templates.CrossSections.RCs
{
- public interface ICircleBeamTemplate
+ public interface ICircleTemplate : IRCSectionTemplate
{
- ICircleShape Circle { get; }
+ ICircleShape Shape { get; }
double CoverGap { get; set; }
- double SectionDiameter { get; set; }
- int BarQuantity { get; set; }
+ int BarCount { get; set; }
double BarDiameter { get; set; }
-
-
}
}
diff --git a/StructureHelperLogics/Models/Templates/CrossSections/RCs/IRCSectionTemplate.cs b/StructureHelperLogics/Models/Templates/CrossSections/RCs/IRCSectionTemplate.cs
new file mode 100644
index 0000000..3f98c53
--- /dev/null
+++ b/StructureHelperLogics/Models/Templates/CrossSections/RCs/IRCSectionTemplate.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StructureHelperLogics.Models.Templates.CrossSections.RCs
+{
+ public interface IRCSectionTemplate
+ {
+ }
+}
diff --git a/StructureHelperLogics/Models/Templates/CrossSections/RCs/IRectangleBeamTemplate.cs b/StructureHelperLogics/Models/Templates/CrossSections/RCs/IRectangleBeamTemplate.cs
index 13c941e..b9fc479 100644
--- a/StructureHelperLogics/Models/Templates/CrossSections/RCs/IRectangleBeamTemplate.cs
+++ b/StructureHelperLogics/Models/Templates/CrossSections/RCs/IRectangleBeamTemplate.cs
@@ -1,4 +1,5 @@
using StructureHelperCommon.Models.Shapes;
+using StructureHelperLogics.Models.Templates.CrossSections.RCs;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -7,7 +8,7 @@ using System.Threading.Tasks;
namespace StructureHelperLogics.Models.Templates.RCs
{
- public interface IRectangleBeamTemplate
+ public interface IRectangleBeamTemplate : IRCSectionTemplate
{
IShape Shape { get; }
double CoverGap { get; set; }
diff --git a/StructureHelperLogics/Models/Templates/CrossSections/RCs/MaterialLogic.cs b/StructureHelperLogics/Models/Templates/CrossSections/RCs/MaterialLogic.cs
index f957c0e..c02e9b8 100644
--- a/StructureHelperLogics/Models/Templates/CrossSections/RCs/MaterialLogic.cs
+++ b/StructureHelperLogics/Models/Templates/CrossSections/RCs/MaterialLogic.cs
@@ -7,6 +7,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using System.Windows.Media;
namespace StructureHelperLogics.Models.Templates.CrossSections.RCs
{
@@ -17,9 +18,11 @@ namespace StructureHelperLogics.Models.Templates.CrossSections.RCs
var result = new List();
var concrete = HeadMaterialFactory.GetHeadMaterial(HeadmaterialType.Concrete40, ProgramSetting.CodeType);
concrete.Name = "Concrete";
+ concrete.Color = (Color)ColorConverter.ConvertFromString("AliceBlue");
result.Add(concrete);
var reinforcement = HeadMaterialFactory.GetHeadMaterial(HeadmaterialType.Reinforecement400, ProgramSetting.CodeType);
reinforcement.Name = "Reinforcement";
+ reinforcement.Color = (Color)ColorConverter.ConvertFromString("Red");
result.Add(reinforcement);
return result;
}
diff --git a/StructureHelperLogics/Models/Templates/CrossSections/RCs/RectGeometryLogic.cs b/StructureHelperLogics/Models/Templates/CrossSections/RCs/RectGeometryLogic.cs
index cc14ce3..c08a64e 100644
--- a/StructureHelperLogics/Models/Templates/CrossSections/RCs/RectGeometryLogic.cs
+++ b/StructureHelperLogics/Models/Templates/CrossSections/RCs/RectGeometryLogic.cs
@@ -14,7 +14,7 @@ namespace StructureHelperLogics.Models.Templates.CrossSections.RCs
{
public class RectGeometryLogic : IRCGeometryLogic
{
- RectangleBeamTemplate template;
+ IRectangleBeamTemplate template;
IHeadMaterial concrete => HeadMaterials.ToList()[0];
IHeadMaterial reinforcement => HeadMaterials.ToList()[1];
@@ -27,7 +27,7 @@ namespace StructureHelperLogics.Models.Templates.CrossSections.RCs
public IEnumerable HeadMaterials { get; set; }
- public RectGeometryLogic(RectangleBeamTemplate template)
+ public RectGeometryLogic(IRectangleBeamTemplate template)
{
this.template = template;
}
diff --git a/StructureHelperTests/FunctionalTests/Ndms/SteelSections/ReinforcementTest.cs b/StructureHelperTests/FunctionalTests/Ndms/SteelSections/ReinforcementTest.cs
index c815271..e1ab936 100644
--- a/StructureHelperTests/FunctionalTests/Ndms/SteelSections/ReinforcementTest.cs
+++ b/StructureHelperTests/FunctionalTests/Ndms/SteelSections/ReinforcementTest.cs
@@ -54,7 +54,7 @@ namespace StructureHelperTests.FunctionalTests.Ndms.SteelSections
[TestCase(0.3, 4e8, 0, 0, 706850.84713269188d, 0d, 0d, 5e-5d)]
[TestCase(0.3, 4e8, 0, 0, -706850.84713269188d, 0d, 0d, -5e-5d)]
- [TestCase(0.3, 4e8, 700000, 0, 0, 0.0076471604851248189d, 0d, 0d)]
+ [TestCase(0.3, 4e8, 700000, 0, 0, 0.0088353506243542181d, 0d, 0d)]
public void Run_ShouldPass_Circle(double diameter, double strength, double mx, double my, double nz, double expectedKx, double expectedKy, double expectedEpsilonZ)
{
//Arrange