diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Add point.png b/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Add point.png
new file mode 100644
index 0000000..82726a0
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Add point.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Add rectangle.png b/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Add rectangle.png
new file mode 100644
index 0000000..58157a3
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Add rectangle.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Concrete beam.png b/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Concrete beam.png
new file mode 100644
index 0000000..647dc86
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Concrete beam.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Concrete column.png b/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Concrete column.png
new file mode 100644
index 0000000..60604c6
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Concrete column.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Concrete slab.png b/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Concrete slab.png
new file mode 100644
index 0000000..2988be3
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Concrete slab.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Delete primitive.png b/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Delete primitive.png
new file mode 100644
index 0000000..d841698
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Delete primitive.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Edit primitive.png b/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Edit primitive.png
new file mode 100644
index 0000000..f1ba002
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Edit primitive.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Materials.png b/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Materials.png
new file mode 100644
index 0000000..ffea5ac
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Materials.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Move primitives to center.png b/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Move primitives to center.png
new file mode 100644
index 0000000..6b90ede
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32/Edit_Move primitives to center.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32/Tools_Settings.png b/StructureHelper/Infrastructure/UI/Icons/32х32/Tools_Settings.png
new file mode 100644
index 0000000..42ba7e6
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32/Tools_Settings.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Add_Circle.png b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Add_Circle.png
new file mode 100644
index 0000000..5b22c6e
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Add_Circle.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Add_Rebar.png b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Add_Rebar.png
new file mode 100644
index 0000000..12fa188
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Add_Rebar.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Copy.png b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Copy.png
new file mode 100644
index 0000000..1284fd4
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Copy.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Delete.png b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Delete.png
new file mode 100644
index 0000000..44a634b
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Delete.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Edit.png b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Edit.png
new file mode 100644
index 0000000..acd82e7
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Edit.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Edit_Add point.png b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Edit_Add point.png
new file mode 100644
index 0000000..141055f
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Edit_Add point.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Edit_Add rectangle.png b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Edit_Add rectangle.png
new file mode 100644
index 0000000..7b80f5e
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Edit_Add rectangle.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Edit_Circle_RC.png b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Edit_Circle_RC.png
new file mode 100644
index 0000000..588f2d1
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Edit_Circle_RC.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Edit_Concrete beam.png b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Edit_Concrete beam.png
new file mode 100644
index 0000000..49a5abe
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Edit_Concrete beam.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Edit_Concrete column.png b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Edit_Concrete column.png
new file mode 100644
index 0000000..7ab8673
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Edit_Concrete column.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Edit_Concrete slab.png b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Edit_Concrete slab.png
new file mode 100644
index 0000000..690717c
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Edit_Concrete slab.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Materials.png b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Materials.png
new file mode 100644
index 0000000..bba6546
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Materials.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Move primitives to center.png b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Move primitives to center.png
new file mode 100644
index 0000000..85d4e1c
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Move primitives to center.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32_Border/ToBackground.png b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/ToBackground.png
new file mode 100644
index 0000000..afaf6ca
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/ToBackground.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32_Border/ToForeground.png b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/ToForeground.png
new file mode 100644
index 0000000..b75f7e9
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/ToForeground.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Tools_Settings.png b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Tools_Settings.png
new file mode 100644
index 0000000..f94e364
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/32х32_Border/Tools_Settings.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Add point.png b/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Add point.png
new file mode 100644
index 0000000..64b5048
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Add point.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Add rectangle.png b/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Add rectangle.png
new file mode 100644
index 0000000..8671fcd
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Add rectangle.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Concrete beam.png b/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Concrete beam.png
new file mode 100644
index 0000000..1313cf3
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Concrete beam.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Concrete column.png b/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Concrete column.png
new file mode 100644
index 0000000..feb6683
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Concrete column.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Concrete slab.png b/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Concrete slab.png
new file mode 100644
index 0000000..2913216
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Concrete slab.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Delete primitive.png b/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Delete primitive.png
new file mode 100644
index 0000000..afe9f09
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Delete primitive.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Edit primitive.png b/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Edit primitive.png
new file mode 100644
index 0000000..cf52c2e
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Edit primitive.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Materials.png b/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Materials.png
new file mode 100644
index 0000000..4411c12
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Materials.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Move primitives to center.png b/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Move primitives to center.png
new file mode 100644
index 0000000..4c1c0fa
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/500х500/Edit_Move primitives to center.png differ
diff --git a/StructureHelper/Infrastructure/UI/Icons/500х500/Tools_Settings.png b/StructureHelper/Infrastructure/UI/Icons/500х500/Tools_Settings.png
new file mode 100644
index 0000000..566184e
Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/500х500/Tools_Settings.png differ
diff --git a/StructureHelper/Libraries/LoaderCalculator.dll b/StructureHelper/Libraries/LoaderCalculator.dll
index 45d14f0..aa14427 100644
Binary files a/StructureHelper/Libraries/LoaderCalculator.dll and b/StructureHelper/Libraries/LoaderCalculator.dll differ
diff --git a/StructureHelper/Properties/Resources.Designer.cs b/StructureHelper/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..2eae76d
--- /dev/null
+++ b/StructureHelper/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+//
+// Этот код создан программой.
+// Исполняемая версия:4.0.30319.42000
+//
+// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+// повторной генерации кода.
+//
+//------------------------------------------------------------------------------
+
+namespace StructureHelper.Properties {
+ using System;
+
+
+ ///
+ /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
+ ///
+ // Этот класс создан автоматически классом StronglyTypedResourceBuilder
+ // с помощью такого средства, как ResGen или Visual Studio.
+ // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
+ // с параметром /str или перестройте свой проект VS.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("StructureHelper.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Перезаписывает свойство CurrentUICulture текущего потока для всех
+ /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/StructureHelper/Properties/Resources.resx b/StructureHelper/Properties/Resources.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/StructureHelper/Properties/Resources.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/StructureHelper/StructureHelper.csproj b/StructureHelper/StructureHelper.csproj
index 76dd3e7..944f740 100644
--- a/StructureHelper/StructureHelper.csproj
+++ b/StructureHelper/StructureHelper.csproj
@@ -22,6 +22,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -51,6 +68,44 @@
+
+
+
+
+
+
+
+
+
+
+
+ Always
+
+
+ Always
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ Resources.resx
+
+
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
diff --git a/StructureHelper/Windows/MainWindow/Add_Circle.png b/StructureHelper/Windows/MainWindow/Add_Circle.png
new file mode 100644
index 0000000..5b22c6e
Binary files /dev/null and b/StructureHelper/Windows/MainWindow/Add_Circle.png differ
diff --git a/StructureHelper/Windows/MainWindow/Add_Rebar.png b/StructureHelper/Windows/MainWindow/Add_Rebar.png
new file mode 100644
index 0000000..12fa188
Binary files /dev/null and b/StructureHelper/Windows/MainWindow/Add_Rebar.png differ
diff --git a/StructureHelper/Windows/MainWindow/Copy.png b/StructureHelper/Windows/MainWindow/Copy.png
new file mode 100644
index 0000000..1284fd4
Binary files /dev/null and b/StructureHelper/Windows/MainWindow/Copy.png differ
diff --git a/StructureHelper/Windows/MainWindow/Delete.png b/StructureHelper/Windows/MainWindow/Delete.png
new file mode 100644
index 0000000..44a634b
Binary files /dev/null and b/StructureHelper/Windows/MainWindow/Delete.png differ
diff --git a/StructureHelper/Windows/MainWindow/Edit.png b/StructureHelper/Windows/MainWindow/Edit.png
new file mode 100644
index 0000000..acd82e7
Binary files /dev/null and b/StructureHelper/Windows/MainWindow/Edit.png differ
diff --git a/StructureHelper/Windows/MainWindow/Edit_Circle_RC.png b/StructureHelper/Windows/MainWindow/Edit_Circle_RC.png
new file mode 100644
index 0000000..588f2d1
Binary files /dev/null and b/StructureHelper/Windows/MainWindow/Edit_Circle_RC.png differ
diff --git a/StructureHelper/Windows/MainWindow/Edit_Concrete beam.png b/StructureHelper/Windows/MainWindow/Edit_Concrete beam.png
new file mode 100644
index 0000000..49a5abe
Binary files /dev/null and b/StructureHelper/Windows/MainWindow/Edit_Concrete beam.png differ
diff --git a/StructureHelper/Windows/MainWindow/Edit_Concrete column.png b/StructureHelper/Windows/MainWindow/Edit_Concrete column.png
new file mode 100644
index 0000000..7ab8673
Binary files /dev/null and b/StructureHelper/Windows/MainWindow/Edit_Concrete column.png differ
diff --git a/StructureHelper/Windows/MainWindow/Edit_Concrete slab.png b/StructureHelper/Windows/MainWindow/Edit_Concrete slab.png
new file mode 100644
index 0000000..690717c
Binary files /dev/null and b/StructureHelper/Windows/MainWindow/Edit_Concrete slab.png differ
diff --git a/StructureHelper/Windows/MainWindow/MainModel.cs b/StructureHelper/Windows/MainWindow/MainModel.cs
index b9e8526..24ce8a7 100644
--- a/StructureHelper/Windows/MainWindow/MainModel.cs
+++ b/StructureHelper/Windows/MainWindow/MainModel.cs
@@ -56,10 +56,7 @@ namespace StructureHelper.Windows.MainWindow
ITriangulationOptions options = new TriangulationOptions { LimiteState = calculationProperty.LimitState, CalcTerm = calculationProperty.CalcTerm };
//Формируем коллекцию элементарных участков для расчета в библитеке (т.е. выполняем триангуляцию)
- List ndmCollection = new List();
- ndmCollection.AddRange(Triangulation.GetNdms(ndmPrimitives, options));
-
- return ndmCollection;
+ return ndmPrimitives.SelectMany(x => x.GetNdms(options));
}
}
}
diff --git a/StructureHelper/Windows/MainWindow/MainView.xaml b/StructureHelper/Windows/MainWindow/MainView.xaml
index e8ae614..17084c4 100644
--- a/StructureHelper/Windows/MainWindow/MainView.xaml
+++ b/StructureHelper/Windows/MainWindow/MainView.xaml
@@ -15,6 +15,14 @@
d:DataContext="{d:DesignInstance local:MainViewModel}"
Title="StructureHelper" Height="700" Width="1000" MinHeight="400" MinWidth="600">
+
@@ -25,17 +33,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
diff --git a/StructureHelper/Windows/MainWindow/MainViewModel.cs b/StructureHelper/Windows/MainWindow/MainViewModel.cs
index e3ad7bd..c81f1de 100644
--- a/StructureHelper/Windows/MainWindow/MainViewModel.cs
+++ b/StructureHelper/Windows/MainWindow/MainViewModel.cs
@@ -306,8 +306,8 @@ namespace StructureHelper.Windows.MainWindow
var center = GeometryOperations.GetGravityCenter(ndms);
foreach (var item in PrimitiveLogic.Items)
{
- item.CenterX -= center.CenterX;
- item.CenterY -= center.CenterY;
+ item.CenterX -= center.Cx;
+ item.CenterY -= center.Cy;
}
},
o => repository.Primitives.Count() > 0
diff --git a/StructureHelper/Windows/MainWindow/Materials.png b/StructureHelper/Windows/MainWindow/Materials.png
new file mode 100644
index 0000000..bba6546
Binary files /dev/null and b/StructureHelper/Windows/MainWindow/Materials.png differ
diff --git a/StructureHelper/Windows/MainWindow/Point_Primitive.png b/StructureHelper/Windows/MainWindow/Point_Primitive.png
new file mode 100644
index 0000000..141055f
Binary files /dev/null and b/StructureHelper/Windows/MainWindow/Point_Primitive.png differ
diff --git a/StructureHelper/Windows/MainWindow/Rectangle_Primitive.png b/StructureHelper/Windows/MainWindow/Rectangle_Primitive.png
new file mode 100644
index 0000000..7b80f5e
Binary files /dev/null and b/StructureHelper/Windows/MainWindow/Rectangle_Primitive.png differ
diff --git a/StructureHelper/Windows/MainWindow/ToBackground.png b/StructureHelper/Windows/MainWindow/ToBackground.png
new file mode 100644
index 0000000..afaf6ca
Binary files /dev/null and b/StructureHelper/Windows/MainWindow/ToBackground.png differ
diff --git a/StructureHelper/Windows/MainWindow/ToForeground.png b/StructureHelper/Windows/MainWindow/ToForeground.png
new file mode 100644
index 0000000..b75f7e9
Binary files /dev/null and b/StructureHelper/Windows/MainWindow/ToForeground.png differ
diff --git a/StructureHelper/Windows/ViewModels/Calculations/CalculationProperies/CalculationPropertyViewModel.cs b/StructureHelper/Windows/ViewModels/Calculations/CalculationProperies/CalculationPropertyViewModel.cs
index 78d87b2..3a5ab80 100644
--- a/StructureHelper/Windows/ViewModels/Calculations/CalculationProperies/CalculationPropertyViewModel.cs
+++ b/StructureHelper/Windows/ViewModels/Calculations/CalculationProperies/CalculationPropertyViewModel.cs
@@ -19,11 +19,11 @@ namespace StructureHelper.Windows.ViewModels.Calculations.CalculationProperies
{
get
{
- return calculationProperty.IterationProperty.Accuracy;
+ return calculationProperty.Accuracy.IterationAccuracy;
}
set
{
- calculationProperty.IterationProperty.Accuracy = value;
+ calculationProperty.Accuracy.IterationAccuracy = value;
OnPropertyChanged(nameof(IterationAccuracy));
}
}
@@ -31,11 +31,11 @@ namespace StructureHelper.Windows.ViewModels.Calculations.CalculationProperies
{
get
{
- return calculationProperty.IterationProperty.MaxIterationCount;
+ return calculationProperty.Accuracy.MaxIterationCount;
}
set
{
- calculationProperty.IterationProperty.MaxIterationCount = value;
+ calculationProperty.Accuracy.MaxIterationCount = value;
OnPropertyChanged(nameof(MaxIterationCount));
}
}
diff --git a/StructureHelper/Windows/ViewModels/Calculations/Calculators/ForcesResultsViewModel.cs b/StructureHelper/Windows/ViewModels/Calculations/Calculators/ForcesResultsViewModel.cs
index 60779c9..a5ca4cc 100644
--- a/StructureHelper/Windows/ViewModels/Calculations/Calculators/ForcesResultsViewModel.cs
+++ b/StructureHelper/Windows/ViewModels/Calculations/Calculators/ForcesResultsViewModel.cs
@@ -29,6 +29,7 @@ using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
using StructureHelperLogics.NdmCalculations.Analyses.Geometry;
using StructureHelperLogics.NdmCalculations.Cracking;
using StructureHelperLogics.NdmCalculations.Primitives;
+using StructureHelperLogics.NdmCalculations.Triangulations;
using StructureHelperLogics.Services.NdmCalculations;
using StructureHelperLogics.Services.NdmPrimitives;
using System;
@@ -264,6 +265,7 @@ namespace StructureHelper.Windows.ViewModels.Calculations.Calculators
{
var limitState = SelectedResult.DesignForceTuple.LimitState;
var calcTerm = SelectedResult.DesignForceTuple.CalcTerm;
+ var triangulationOptions = new TriangulationOptions() { LimiteState = limitState, CalcTerm = calcTerm };
var orderedNdmPrimitives = ndmPrimitives.OrderBy(x => x.VisualProperty.ZIndex);
var ndmRange = new List();
foreach (var item in orderedNdmPrimitives)
@@ -278,7 +280,8 @@ namespace StructureHelper.Windows.ViewModels.Calculations.Calculators
}
if (selectedNdmPrimitives.Contains(item) & item.Triangulate == true)
{
- ndmRange.AddRange(NdmPrimitivesService.GetNdms(item, limitState, calcTerm));
+
+ ndmRange.AddRange(item.GetNdms(triangulationOptions));
}
}
ndms = ndmRange;
diff --git a/StructureHelperCommon/Infrastructures/Exceptions/ErrorString.cs b/StructureHelperCommon/Infrastructures/Exceptions/ErrorString.cs
index d03c4b7..a4d0c0f 100644
--- a/StructureHelperCommon/Infrastructures/Exceptions/ErrorString.cs
+++ b/StructureHelperCommon/Infrastructures/Exceptions/ErrorString.cs
@@ -20,5 +20,6 @@
public static string ParameterIsNull => "#0015: Parameter is null";
public static string ResultIsNotValid => "#0016: Result is not valid";
public static string ErrorOfExuting => "#0017: Error of executing";
+ public static string ExpectedWas(System.Type expected, System.Type was) => $"{DataIsInCorrect}: Expected {expected}, but was {was}";
}
}
diff --git a/StructureHelperLogics/Models/Calculations/CalculationProperties/CalculationProperty.cs b/StructureHelperLogics/Models/Calculations/CalculationProperties/CalculationProperty.cs
index dc08f1f..ef9bb48 100644
--- a/StructureHelperLogics/Models/Calculations/CalculationProperties/CalculationProperty.cs
+++ b/StructureHelperLogics/Models/Calculations/CalculationProperties/CalculationProperty.cs
@@ -1,4 +1,5 @@
using StructureHelperCommon.Infrastructures.Enums;
+using StructureHelperCommon.Models.Calculators;
using System.Collections.Generic;
namespace StructureHelperLogics.Models.Calculations.CalculationProperties
@@ -8,7 +9,7 @@ namespace StructureHelperLogics.Models.Calculations.CalculationProperties
public List ForceCombinations { get; set; }
public LimitStates LimitState { get; set; }
public CalcTerms CalcTerm { get; set; }
- public IIterationProperty IterationProperty { get; }
+ public IAccuracy Accuracy { get; }
public CalculationProperty()
{
@@ -18,7 +19,7 @@ namespace StructureHelperLogics.Models.Calculations.CalculationProperties
};
LimitState = LimitStates.ULS;
CalcTerm = CalcTerms.ShortTerm;
- IterationProperty = new IterationProperty() { Accuracy = 0.001d, MaxIterationCount = 100};
+ Accuracy = new Accuracy () { IterationAccuracy = 0.001d, MaxIterationCount = 100};
}
}
}
diff --git a/StructureHelperLogics/Models/Calculations/CalculationProperties/ICalculationProperty.cs b/StructureHelperLogics/Models/Calculations/CalculationProperties/ICalculationProperty.cs
index 3530460..1233544 100644
--- a/StructureHelperLogics/Models/Calculations/CalculationProperties/ICalculationProperty.cs
+++ b/StructureHelperLogics/Models/Calculations/CalculationProperties/ICalculationProperty.cs
@@ -1,4 +1,5 @@
using StructureHelperCommon.Infrastructures.Enums;
+using StructureHelperCommon.Models.Calculators;
using System.Collections.Generic;
namespace StructureHelperLogics.Models.Calculations.CalculationProperties
@@ -8,6 +9,6 @@ namespace StructureHelperLogics.Models.Calculations.CalculationProperties
List ForceCombinations { get; set; }
LimitStates LimitState { get; set; }
CalcTerms CalcTerm { get; set; }
- IIterationProperty IterationProperty {get;}
+ IAccuracy Accuracy {get;}
}
}
diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ForceCalculator.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ForceCalculator.cs
index 9d977c0..5090764 100644
--- a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ForceCalculator.cs
+++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ForceCalculator.cs
@@ -55,7 +55,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
if (combination.SetInGravityCenter == true)
{
var loaderPoint = LoaderCalculator.Logics.Geometry.GeometryOperations.GetGravityCenter(ndms);
- point2D = new Point2D() { X = loaderPoint.CenterX, Y = loaderPoint.CenterY };
+ point2D = new Point2D() { X = loaderPoint.Cx, Y = loaderPoint.Cy };
}
else point2D = combination.ForcePoint;
var newTuple = ForceTupleService.MoveTupleIntoPoint(tuple.ForceTuple, point2D) as ForceTuple;
diff --git a/StructureHelperLogics/NdmCalculations/Analyses/RC/InputDataFactory.cs b/StructureHelperLogics/NdmCalculations/Analyses/RC/InputDataFactory.cs
index f8f25a4..ed5f010 100644
--- a/StructureHelperLogics/NdmCalculations/Analyses/RC/InputDataFactory.cs
+++ b/StructureHelperLogics/NdmCalculations/Analyses/RC/InputDataFactory.cs
@@ -4,6 +4,7 @@ using StructureHelperCommon.Infrastructures.Enums;
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperLogics.Models.Materials;
using StructureHelperLogics.NdmCalculations.Primitives;
+using StructureHelperLogics.NdmCalculations.Triangulations;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -28,8 +29,8 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.RC
{
throw new StructureHelperException(ErrorStrings.DataIsInCorrect + ": main material is incorrect or null");
}
- var material = ndmPrimitive.HeadMaterial.GetLoaderMaterial(limitState, calcTerm);
- var ndm = ndmPrimitive.GetNdms(material).Single();
+ var triangulationOptions = new TriangulationOptions() { LimiteState = limitState, CalcTerm = calcTerm };
+ var ndm = ndmPrimitive.GetNdms(triangulationOptions).Single();
if (strainMatrix is not null)
{
inputData.ReinforcementStress = stressLogic.GetStress(strainMatrix, ndm);
diff --git a/StructureHelperLogics/NdmCalculations/Buckling/ConcreteBucklingCalculator.cs b/StructureHelperLogics/NdmCalculations/Buckling/ConcreteBucklingCalculator.cs
index b5d972d..77d83db 100644
--- a/StructureHelperLogics/NdmCalculations/Buckling/ConcreteBucklingCalculator.cs
+++ b/StructureHelperLogics/NdmCalculations/Buckling/ConcreteBucklingCalculator.cs
@@ -81,10 +81,10 @@ namespace StructureHelperLogics.NdmCalculations.Buckling
var otherInertia = GeometryOperations.GetReducedMomentsOfInertia(otherNdms, gravityCenter);
var stiffnessX = stiffnessLogicX.GetStiffnessCoeffitients();
- var dX = stiffnessX.Kc * concreteInertia.MomentX + stiffnessX.Ks * otherInertia.MomentX;
+ var dX = stiffnessX.Kc * concreteInertia.EIx + stiffnessX.Ks * otherInertia.EIx;
var stiffnessY = stiffnessLogicY.GetStiffnessCoeffitients();
- var dY = stiffnessY.Kc * concreteInertia.MomentY + stiffnessY.Ks * otherInertia.MomentY;
+ var dY = stiffnessY.Kc * concreteInertia.EIy + stiffnessY.Ks * otherInertia.EIy;
return (dX, dY);
}
diff --git a/StructureHelperLogics/NdmCalculations/Cracking/AverageDiameterLogic.cs b/StructureHelperLogics/NdmCalculations/Cracking/AverageDiameterLogic.cs
new file mode 100644
index 0000000..23cde59
--- /dev/null
+++ b/StructureHelperLogics/NdmCalculations/Cracking/AverageDiameterLogic.cs
@@ -0,0 +1,33 @@
+using LoaderCalculator.Data.Ndms;
+using StructureHelperCommon.Infrastructures.Exceptions;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StructureHelperLogics.NdmCalculations.Cracking
+{
+ public class AverageDiameterLogic : IAverageDiameterLogic
+ {
+ public IEnumerable Rebars { get; set; }
+
+ public double GetAverageDiameter()
+ {
+ Check();
+ var rebarArea = Rebars
+ .Sum(x => x.Area);
+ var rebarCount = Rebars.Count();
+ var averageArea = rebarArea / rebarCount;
+ var diameter = Math.Sqrt(averageArea / Math.PI);
+ return diameter;
+ }
+ private void Check()
+ {
+ if (!Rebars.Any())
+ {
+ throw new StructureHelperException(ErrorStrings.DataIsInCorrect + $": rebars count must be greater then zero");
+ }
+ }
+ }
+}
diff --git a/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthLogicSP63.cs b/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthLogicSP63.cs
new file mode 100644
index 0000000..8a57d41
--- /dev/null
+++ b/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthLogicSP63.cs
@@ -0,0 +1,53 @@
+using StructureHelperCommon.Infrastructures.Exceptions;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StructureHelperLogics.NdmCalculations.Cracking
+{
+ public class CrackWidthLogicSP63 : ICrackWidthLogic
+ {
+ public double RebarStrain { get; set; }
+ public double ConcreteStrain { get; set; }
+ public double Length { get; set; }
+ public double TermFactor { get; set; }
+ public double BondFactor { get; set; }
+ public double StressStateFactor { get; set; }
+ public double PsiSFactor { get; set; }
+ public double GetCrackWidth()
+ {
+ CheckOptions();
+ //check if strain of concrete greater than strain of rebar
+ if (ConcreteStrain > RebarStrain) { return 0d; }
+ double width = (RebarStrain - ConcreteStrain) * Length;
+ width *= TermFactor * BondFactor * StressStateFactor * PsiSFactor;
+ return width;
+ }
+
+ private void CheckOptions()
+ {
+ if (Length <=0d)
+ {
+ throw new StructureHelperException(ErrorStrings.DataIsInCorrect + $": length between cracks L={Length} must be greate than zero");
+ }
+ if (TermFactor <= 0d)
+ {
+ throw new StructureHelperException(ErrorStrings.DataIsInCorrect + $": Term factor {TermFactor} must be greate than zero");
+ }
+ if (BondFactor <= 0d)
+ {
+ throw new StructureHelperException(ErrorStrings.DataIsInCorrect + $": Bond factor {BondFactor} must be greate than zero");
+ }
+ if (StressStateFactor <= 0d)
+ {
+ throw new StructureHelperException(ErrorStrings.DataIsInCorrect + $": Bond factor {StressStateFactor} must be greate than zero");
+ }
+ if (PsiSFactor <= 0d)
+ {
+ throw new StructureHelperException(ErrorStrings.DataIsInCorrect + $": PsiS factor {PsiSFactor} must be greate than zero");
+ }
+ }
+ }
+}
diff --git a/StructureHelperLogics/NdmCalculations/Cracking/IAverageDiameterLogic.cs b/StructureHelperLogics/NdmCalculations/Cracking/IAverageDiameterLogic.cs
new file mode 100644
index 0000000..8ff8be3
--- /dev/null
+++ b/StructureHelperLogics/NdmCalculations/Cracking/IAverageDiameterLogic.cs
@@ -0,0 +1,15 @@
+using LoaderCalculator.Data.Ndms;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StructureHelperLogics.NdmCalculations.Cracking
+{
+ public interface IAverageDiameterLogic
+ {
+ IEnumerable Rebars { get; set; }
+ double GetAverageDiameter();
+ }
+}
diff --git a/StructureHelperLogics/NdmCalculations/Cracking/ICrackWidthLogic.cs b/StructureHelperLogics/NdmCalculations/Cracking/ICrackWidthLogic.cs
new file mode 100644
index 0000000..ed741b3
--- /dev/null
+++ b/StructureHelperLogics/NdmCalculations/Cracking/ICrackWidthLogic.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StructureHelperLogics.NdmCalculations.Cracking
+{
+ ///
+ /// Logic for calculating width of crack
+ ///
+ public interface ICrackWidthLogic
+ {
+ ///
+ /// strain of rebar, dimensionless
+ ///
+ double RebarStrain { get; set; }
+ ///
+ /// strain of concrete, dimensionless
+ ///
+ double ConcreteStrain { get; set; }
+ ///
+ /// Length between cracks in meters
+ ///
+ double Length { get; set; }
+ ///
+ /// return width of crack in meters
+ ///
+ double GetCrackWidth();
+ }
+}
diff --git a/StructureHelperLogics/NdmCalculations/Cracking/ILengthBetweenCracksLogic.cs b/StructureHelperLogics/NdmCalculations/Cracking/ILengthBetweenCracksLogic.cs
new file mode 100644
index 0000000..5226e07
--- /dev/null
+++ b/StructureHelperLogics/NdmCalculations/Cracking/ILengthBetweenCracksLogic.cs
@@ -0,0 +1,17 @@
+using LoaderCalculator.Data.Matrix;
+using LoaderCalculator.Data.Ndms;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StructureHelperLogics.NdmCalculations.Cracking
+{
+ public interface ILengthBetweenCracksLogic
+ {
+ IEnumerable NdmCollection { get; set; }
+ IStrainMatrix StrainMatrix { get; set; }
+ double GetLength();
+ }
+}
diff --git a/StructureHelperLogics/NdmCalculations/Cracking/ITensileAreaLogic.cs b/StructureHelperLogics/NdmCalculations/Cracking/ITensileAreaLogic.cs
new file mode 100644
index 0000000..47eab43
--- /dev/null
+++ b/StructureHelperLogics/NdmCalculations/Cracking/ITensileAreaLogic.cs
@@ -0,0 +1,21 @@
+using LoaderCalculator.Data.Matrix;
+using LoaderCalculator.Data.Ndms;
+using StructureHelperCommon.Models.Forces;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StructureHelperLogics.NdmCalculations.Cracking
+{
+ ///
+ /// Logic fo calculating of tensile area of RC crosssection
+ ///
+ public interface ITensileAreaLogic
+ {
+ IEnumerable NdmCollection { get; set; }
+ IStrainMatrix StrainMatrix { get; set; }
+ double GetTensileArea();
+ }
+}
diff --git a/StructureHelperLogics/NdmCalculations/Cracking/LengthBetweenCracksLogicSP63.cs b/StructureHelperLogics/NdmCalculations/Cracking/LengthBetweenCracksLogicSP63.cs
new file mode 100644
index 0000000..8e2811c
--- /dev/null
+++ b/StructureHelperLogics/NdmCalculations/Cracking/LengthBetweenCracksLogicSP63.cs
@@ -0,0 +1,49 @@
+using LoaderCalculator.Data.Matrix;
+using LoaderCalculator.Data.Ndms;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StructureHelperLogics.NdmCalculations.Cracking
+{
+ public class LengthBetweenCracksLogicSP63 : ILengthBetweenCracksLogic
+ {
+ const double minDiameterFactor = 10d;
+ const double maxDiameterFactor = 40d;
+ const double minLength = 0.1d;
+ const double maxLength = 0.4d;
+
+ readonly IAverageDiameterLogic diameterLogic;
+ readonly ITensileAreaLogic tensileAreaLogic;
+ public IEnumerable NdmCollection { get; set; }
+ public IStrainMatrix StrainMatrix { get; set; }
+ public LengthBetweenCracksLogicSP63(IAverageDiameterLogic diameterLogic, ITensileAreaLogic tensileAreaLogic)
+ {
+ this.diameterLogic = diameterLogic;
+ this.tensileAreaLogic = tensileAreaLogic;
+ }
+ public LengthBetweenCracksLogicSP63() :
+ this
+ ( new AverageDiameterLogic(),
+ new TensileAreaLogicSP63())
+ { }
+ public double GetLength()
+ {
+ var rebars = NdmCollection
+ .Where(x => x is RebarNdm)
+ .Select(x => x as RebarNdm);
+ var rebarArea = rebars.Sum(x => x.Area * x.StressScale);
+ diameterLogic.Rebars = rebars;
+ var rebarDiameter = diameterLogic.GetAverageDiameter();
+ tensileAreaLogic.NdmCollection = NdmCollection;
+ tensileAreaLogic.StrainMatrix = StrainMatrix;
+ var concreteArea = tensileAreaLogic.GetTensileArea();
+ var length = concreteArea / rebarArea * rebarDiameter;
+ length = new List { length, minDiameterFactor * rebarDiameter, minLength }.Max();
+ length = new List { length, maxDiameterFactor * rebarDiameter, maxLength }.Min();
+ return length;
+ }
+ }
+}
diff --git a/StructureHelperLogics/NdmCalculations/Cracking/TensileAreaLogicSP63.cs b/StructureHelperLogics/NdmCalculations/Cracking/TensileAreaLogicSP63.cs
new file mode 100644
index 0000000..845aa73
--- /dev/null
+++ b/StructureHelperLogics/NdmCalculations/Cracking/TensileAreaLogicSP63.cs
@@ -0,0 +1,45 @@
+using LoaderCalculator.Data.Materials;
+using LoaderCalculator.Data.Matrix;
+using LoaderCalculator.Data.Ndms;
+using LoaderCalculator.Logics;
+using StructureHelperCommon.Models.Forces;
+using StructureHelperCommon.Services.Forces;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StructureHelperLogics.NdmCalculations.Cracking
+{
+ public class TensileAreaLogicSP63 : ITensileAreaLogic
+ {
+ const double maxConcreteFactor = 0.5d;
+ const double minConcreteFactor = 0.1d;
+ const double minRebarFactor = 3d;
+ private static IStressLogic stressLogic => new StressLogic();
+ public IEnumerable NdmCollection { get; set; }
+ public IStrainMatrix StrainMatrix { get; set; }
+
+ public double GetTensileArea()
+ {
+ var rebarCollection = NdmCollection
+ .Where(x => x is RebarNdm);
+ var rebarArea = rebarCollection.
+ Sum(x => x.Area * x.StressScale);
+ var concreteCollection = NdmCollection
+ .Where(x => x.Material is ConcreteMaterial);
+ var concreteArea = concreteCollection
+ .Sum(x => x.Area * x.StressScale);
+ var concreteTensileArea = concreteCollection
+ .Where(x => stressLogic.GetTotalStrainWithPresrain(StrainMatrix, x) > 0d)
+ .Sum(x => x.Area * x.StressScale);
+
+ concreteTensileArea = Math.Max(concreteTensileArea, rebarArea * minRebarFactor);
+ concreteTensileArea = Math.Max(concreteTensileArea, concreteArea * minConcreteFactor);
+ concreteTensileArea = Math.Min(concreteTensileArea, concreteArea * maxConcreteFactor);
+
+ return concreteTensileArea;
+ }
+ }
+}
diff --git a/StructureHelperLogics/NdmCalculations/Primitives/CirclePrimitive.cs b/StructureHelperLogics/NdmCalculations/Primitives/CirclePrimitive.cs
index a7638fd..36713a2 100644
--- a/StructureHelperLogics/NdmCalculations/Primitives/CirclePrimitive.cs
+++ b/StructureHelperLogics/NdmCalculations/Primitives/CirclePrimitive.cs
@@ -52,12 +52,15 @@ namespace StructureHelperLogics.NdmCalculations.Primitives
return primitive;
}
///
- public IEnumerable GetNdms(IMaterial material)
+ public IEnumerable GetNdms(ITriangulationOptions triangulationOptions)
{
var ndms = new List();
- var options = new CircleTriangulationLogicOptions(this);
+ var options = new CircleTriangulationLogicOptions(this)
+ {
+ triangulationOptions = triangulationOptions
+ };
var logic = new CircleTriangulationLogic(options);
- ndms.AddRange(logic.GetNdmCollection(material));
+ ndms.AddRange(logic.GetNdmCollection());
return ndms;
}
///
diff --git a/StructureHelperLogics/NdmCalculations/Primitives/INdmPrimitive.cs b/StructureHelperLogics/NdmCalculations/Primitives/INdmPrimitive.cs
index d407ba8..b9de980 100644
--- a/StructureHelperLogics/NdmCalculations/Primitives/INdmPrimitive.cs
+++ b/StructureHelperLogics/NdmCalculations/Primitives/INdmPrimitive.cs
@@ -9,6 +9,7 @@ using StructureHelperCommon.Infrastructures.Interfaces;
using System;
using StructureHelperCommon.Models.Forces;
using StructureHelperLogics.Models.CrossSections;
+using StructureHelperLogics.NdmCalculations.Triangulations;
namespace StructureHelperLogics.NdmCalculations.Primitives
{
@@ -26,6 +27,6 @@ namespace StructureHelperLogics.NdmCalculations.Primitives
StrainTuple AutoPrestrain { get; }
IVisualProperty VisualProperty {get; }
- IEnumerable GetNdms(IMaterial material);
+ IEnumerable GetNdms(ITriangulationOptions triangulationOptions);
}
}
diff --git a/StructureHelperLogics/NdmCalculations/Primitives/PointPrimitive.cs b/StructureHelperLogics/NdmCalculations/Primitives/PointPrimitive.cs
index b17e102..341eb1d 100644
--- a/StructureHelperLogics/NdmCalculations/Primitives/PointPrimitive.cs
+++ b/StructureHelperLogics/NdmCalculations/Primitives/PointPrimitive.cs
@@ -1,16 +1,10 @@
-using StructureHelperLogics.Models.Materials;
-using StructureHelperCommon.Models.Shapes;
+using LoaderCalculator.Data.Ndms;
using StructureHelper.Models.Materials;
-using System.Collections.Generic;
-using LoaderCalculator.Data.Ndms;
-using LoaderCalculator.Data.Materials;
-using StructureHelperCommon.Infrastructures.Interfaces;
-using System;
+using StructureHelperCommon.Models.Forces;
+using StructureHelperCommon.Models.Shapes;
+using StructureHelperLogics.Models.CrossSections;
using StructureHelperLogics.NdmCalculations.Primitives;
using StructureHelperLogics.NdmCalculations.Triangulations;
-using StructureHelperLogics.Services.NdmPrimitives;
-using StructureHelperCommon.Models.Forces;
-using StructureHelperLogics.Models.CrossSections;
namespace StructureHelperLogics.Models.Primitives
{
@@ -47,18 +41,18 @@ namespace StructureHelperLogics.Models.Primitives
{}
public PointPrimitive(IHeadMaterial material) : this() { HeadMaterial = material; }
- public IEnumerable GetNdms(IMaterial material)
- {
- var options = new PointTriangulationLogicOptions(this);
- IPointTriangulationLogic logic = new PointTriangulationLogic(options);
- return logic.GetNdmCollection(material);
- }
-
public object Clone()
{
var primitive = new PointPrimitive();
updateStrategy.Update(primitive, this);
return primitive;
}
+
+ public IEnumerable GetNdms(ITriangulationOptions triangulationOptions)
+ {
+ var options = new PointTriangulationLogicOptions(this) { triangulationOptions = triangulationOptions};
+ var logic = new PointTriangulationLogic(options);
+ return logic.GetNdmCollection();
+ }
}
}
diff --git a/StructureHelperLogics/NdmCalculations/Primitives/RebarPrimitive.cs b/StructureHelperLogics/NdmCalculations/Primitives/RebarPrimitive.cs
index 87d7291..ed5e21f 100644
--- a/StructureHelperLogics/NdmCalculations/Primitives/RebarPrimitive.cs
+++ b/StructureHelperLogics/NdmCalculations/Primitives/RebarPrimitive.cs
@@ -22,7 +22,7 @@ namespace StructureHelperLogics.NdmCalculations.Primitives
public class RebarPrimitive : IPointPrimitive, IHasHostPrimitive
{
static readonly RebarUpdateStrategy updateStrategy = new();
- IDataRepository repository;
+
///
public string Name { get; set; }
///
@@ -66,16 +66,14 @@ namespace StructureHelperLogics.NdmCalculations.Primitives
return primitive;
}
- public IEnumerable GetNdms(IMaterial material)
+ public IEnumerable GetNdms(ITriangulationOptions triangulationOptions)
{
- var options = new PointTriangulationLogicOptions(this);
- IPointTriangulationLogic logic = new PointTriangulationLogic(options);
- return logic.GetNdmCollection(material);
- }
-
- public void Save()
- {
- repository.Create(this);
+ var options = new RebarTriangulationLogicOptions(this)
+ {
+ triangulationOptions = triangulationOptions
+ };
+ var logic = new RebarTriangulationLogic(options);
+ return logic.GetNdmCollection();
}
}
}
diff --git a/StructureHelperLogics/NdmCalculations/Primitives/RectanglePrimitive.cs b/StructureHelperLogics/NdmCalculations/Primitives/RectanglePrimitive.cs
index a75678b..bee6bf9 100644
--- a/StructureHelperLogics/NdmCalculations/Primitives/RectanglePrimitive.cs
+++ b/StructureHelperLogics/NdmCalculations/Primitives/RectanglePrimitive.cs
@@ -55,12 +55,15 @@ namespace StructureHelperLogics.NdmCalculations.Primitives
return primitive;
}
- public IEnumerable GetNdms(IMaterial material)
+ public IEnumerable GetNdms(ITriangulationOptions triangulationOptions)
{
var ndms = new List();
- var options = new RectangleTriangulationLogicOptions(this);
+ var options = new RectangleTriangulationLogicOptions(this)
+ {
+ triangulationOptions = triangulationOptions
+ };
var logic = new RectangleTriangulationLogic(options);
- ndms.AddRange(logic.GetNdmCollection(material));
+ ndms.AddRange(logic.GetNdmCollection());
return ndms;
}
diff --git a/StructureHelperLogics/NdmCalculations/Triangulations/CircleTriangulationLogic.cs b/StructureHelperLogics/NdmCalculations/Triangulations/CircleTriangulationLogic.cs
index d704477..3f71f5a 100644
--- a/StructureHelperLogics/NdmCalculations/Triangulations/CircleTriangulationLogic.cs
+++ b/StructureHelperLogics/NdmCalculations/Triangulations/CircleTriangulationLogic.cs
@@ -12,16 +12,14 @@ namespace StructureHelperLogics.NdmCalculations.Triangulations
{
internal class CircleTriangulationLogic : ITriangulationLogic
{
- CircleTriangulationLogicOptions options;
- public ITriangulationLogicOptions Options { get; private set; }
+ private readonly CircleTriangulationLogicOptions options;
public CircleTriangulationLogic(ITriangulationLogicOptions options)
{
ValidateOptions(options);
this.options = options as CircleTriangulationLogicOptions;
- Options = options;
}
- public IEnumerable GetNdmCollection(IMaterial material)
+ public IEnumerable GetNdmCollection()
{
double diameter = options.Circle.Diameter;
@@ -29,7 +27,10 @@ namespace StructureHelperLogics.NdmCalculations.Triangulations
int ndmMinDivision = options.NdmMinDivision;
var logicOptions = new LoaderCalculator.Triangulations.CircleTriangulationLogicOptions(diameter, ndmMaxSize, ndmMinDivision);
var logic = LoaderCalculator.Triangulations.Triangulation.GetLogicInstance(logicOptions);
- var ndmCollection = logic.GetNdmCollection(new LoaderCalculator.Data.Planes.CirclePlane { Material = material });
+ var ndmCollection = logic.GetNdmCollection(new LoaderCalculator.Data.Planes.CirclePlane
+ {
+ Material = options.HeadMaterial.GetLoaderMaterial(options.triangulationOptions.LimiteState, options.triangulationOptions.CalcTerm)
+ });
TriangulationService.CommonTransform(ndmCollection, options);
TriangulationService.SetPrestrain(ndmCollection, options.Prestrain);
return ndmCollection;
@@ -37,9 +38,9 @@ namespace StructureHelperLogics.NdmCalculations.Triangulations
public void ValidateOptions(ITriangulationLogicOptions options)
{
- if (options is not ICircleTriangulationLogicOptions )
+ if (options is not CircleTriangulationLogicOptions )
{
- throw new StructureHelperException(ErrorStrings.DataIsInCorrect + $"\n Expected: {nameof(ICircleTriangulationLogicOptions)}, But was: {nameof(options)}");
+ throw new StructureHelperException(ErrorStrings.ExpectedWas(typeof(CircleTriangulationLogicOptions), options.GetType()));
}
}
}
diff --git a/StructureHelperLogics/NdmCalculations/Triangulations/CircleTriangulationLogicOptions.cs b/StructureHelperLogics/NdmCalculations/Triangulations/CircleTriangulationLogicOptions.cs
index 1c8bfed..6fe6c4f 100644
--- a/StructureHelperLogics/NdmCalculations/Triangulations/CircleTriangulationLogicOptions.cs
+++ b/StructureHelperLogics/NdmCalculations/Triangulations/CircleTriangulationLogicOptions.cs
@@ -1,5 +1,7 @@
-using StructureHelperCommon.Models.Forces;
+using StructureHelper.Models.Materials;
+using StructureHelperCommon.Models.Forces;
using StructureHelperCommon.Models.Shapes;
+using StructureHelperCommon.Services.Forces;
using StructureHelperLogics.NdmCalculations.Primitives;
using System;
using System.Collections.Generic;
@@ -9,7 +11,7 @@ using System.Threading.Tasks;
namespace StructureHelperLogics.NdmCalculations.Triangulations
{
- public class CircleTriangulationLogicOptions : ICircleTriangulationLogicOptions
+ public class CircleTriangulationLogicOptions : IShapeTriangulationLogicOptions
{
public ICircleShape Circle { get; }
@@ -20,19 +22,17 @@ namespace StructureHelperLogics.NdmCalculations.Triangulations
public int NdmMinDivision { get; }
public StrainTuple Prestrain { get; set; }
+ public ITriangulationOptions triangulationOptions { get; set; }
+ public IHeadMaterial HeadMaterial { get; set; }
public CircleTriangulationLogicOptions(ICirclePrimitive primitive)
{
- Center = new Point2D() { X = primitive.Center.X, Y = primitive.Center.Y };
+ Center = primitive.Center.Clone() as Point2D;
Circle = primitive;
NdmMaxSize = primitive.NdmMaxSize;
NdmMinDivision = primitive.NdmMinDivision;
- Prestrain = new StrainTuple
- {
- Mx = primitive.UsersPrestrain.Mx + primitive.AutoPrestrain.Mx,
- My = primitive.UsersPrestrain.My + primitive.AutoPrestrain.My,
- Nz = primitive.UsersPrestrain.Nz + primitive.AutoPrestrain.Nz
- };
+ HeadMaterial = primitive.HeadMaterial;
+ Prestrain = ForceTupleService.SumTuples(primitive.UsersPrestrain, primitive.AutoPrestrain) as StrainTuple;
}
}
}
diff --git a/StructureHelperLogics/NdmCalculations/Triangulations/ICircleTriangulationLogicOptions.cs b/StructureHelperLogics/NdmCalculations/Triangulations/ICircleTriangulationLogicOptions.cs
deleted file mode 100644
index 414792d..0000000
--- a/StructureHelperLogics/NdmCalculations/Triangulations/ICircleTriangulationLogicOptions.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using StructureHelperCommon.Models.Shapes;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace StructureHelperLogics.NdmCalculations.Triangulations
-{
- internal interface ICircleTriangulationLogicOptions : IShapeTriangulationLogicOptions
- {
- ///
- /// Shape
- ///
- ICircleShape Circle { get; }
-
- }
-}
diff --git a/StructureHelperLogics/NdmCalculations/Triangulations/IPointTriangulationLogic.cs b/StructureHelperLogics/NdmCalculations/Triangulations/IPointTriangulationLogic.cs
deleted file mode 100644
index 16f3c63..0000000
--- a/StructureHelperLogics/NdmCalculations/Triangulations/IPointTriangulationLogic.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace StructureHelperLogics.NdmCalculations.Triangulations
-{
- interface IPointTriangulationLogic : ITriangulationLogic
- {
- }
-}
diff --git a/StructureHelperLogics/NdmCalculations/Triangulations/IPointTriangulationLogicOptions.cs b/StructureHelperLogics/NdmCalculations/Triangulations/IPointTriangulationLogicOptions.cs
deleted file mode 100644
index 9d64cce..0000000
--- a/StructureHelperLogics/NdmCalculations/Triangulations/IPointTriangulationLogicOptions.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using StructureHelperCommon.Models.Shapes;
-
-namespace StructureHelperLogics.NdmCalculations.Triangulations
-{
- public interface IPointTriangulationLogicOptions : ITriangulationLogicOptions
- {
- IPoint2D Center { get; }
- double Area { get; }
- }
-}
diff --git a/StructureHelperLogics/NdmCalculations/Triangulations/IRectangleTriangulationLogic.cs b/StructureHelperLogics/NdmCalculations/Triangulations/IRectangleTriangulationLogic.cs
deleted file mode 100644
index f2d285d..0000000
--- a/StructureHelperLogics/NdmCalculations/Triangulations/IRectangleTriangulationLogic.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace StructureHelperLogics.NdmCalculations.Triangulations
-{
- public interface IRectangleTriangulationLogic : ITriangulationLogic
- {
- }
-}
diff --git a/StructureHelperLogics/NdmCalculations/Triangulations/IRectangleTriangulationLogicOptions.cs b/StructureHelperLogics/NdmCalculations/Triangulations/IRectangleTriangulationLogicOptions.cs
deleted file mode 100644
index 5f62a22..0000000
--- a/StructureHelperLogics/NdmCalculations/Triangulations/IRectangleTriangulationLogicOptions.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using StructureHelperCommon.Models.Shapes;
-
-namespace StructureHelperLogics.NdmCalculations.Triangulations
-{
- ///
- /// Parameter of triangulation of rectangle part of section
- /// Параметры триангуляции прямоугольного участка сечения
- ///
- public interface IRectangleTriangulationLogicOptions : IShapeTriangulationLogicOptions
- {
- ///
- ///
- ///
- IRectangleShape Rectangle { get; }
- }
-}
diff --git a/StructureHelperLogics/NdmCalculations/Triangulations/ITriangulationLogic.cs b/StructureHelperLogics/NdmCalculations/Triangulations/ITriangulationLogic.cs
index ad313e1..4f0639b 100644
--- a/StructureHelperLogics/NdmCalculations/Triangulations/ITriangulationLogic.cs
+++ b/StructureHelperLogics/NdmCalculations/Triangulations/ITriangulationLogic.cs
@@ -6,8 +6,7 @@ namespace StructureHelperLogics.NdmCalculations.Triangulations
{
public interface ITriangulationLogic
{
- ITriangulationLogicOptions Options { get; }
- IEnumerable GetNdmCollection(IMaterial material);
+ IEnumerable GetNdmCollection();
void ValidateOptions(ITriangulationLogicOptions options);
}
}
diff --git a/StructureHelperLogics/NdmCalculations/Triangulations/ITriangulationLogicOptions.cs b/StructureHelperLogics/NdmCalculations/Triangulations/ITriangulationLogicOptions.cs
index 020a656..329d1fd 100644
--- a/StructureHelperLogics/NdmCalculations/Triangulations/ITriangulationLogicOptions.cs
+++ b/StructureHelperLogics/NdmCalculations/Triangulations/ITriangulationLogicOptions.cs
@@ -1,9 +1,13 @@
-using StructureHelperCommon.Models.Forces;
+using StructureHelper.Models.Materials;
+using StructureHelperCommon.Infrastructures.Enums;
+using StructureHelperCommon.Models.Forces;
namespace StructureHelperLogics.NdmCalculations.Triangulations
{
public interface ITriangulationLogicOptions
{
+ ITriangulationOptions triangulationOptions { get; set; }
StrainTuple Prestrain { get; set; }
+ IHeadMaterial HeadMaterial { get; set; }
}
}
diff --git a/StructureHelperLogics/NdmCalculations/Triangulations/PointTriangulationLogic.cs b/StructureHelperLogics/NdmCalculations/Triangulations/PointTriangulationLogic.cs
index 09db366..77501a0 100644
--- a/StructureHelperLogics/NdmCalculations/Triangulations/PointTriangulationLogic.cs
+++ b/StructureHelperLogics/NdmCalculations/Triangulations/PointTriangulationLogic.cs
@@ -1,37 +1,40 @@
-using LoaderCalculator.Data.Materials;
-using LoaderCalculator.Data.Ndms;
-using System;
-using System.Collections.Generic;
-using StructureHelperCommon.Models.Shapes;
-using LoaderCalculator.Data.Matrix;
+using LoaderCalculator.Data.Ndms;
using LoaderCalculator.Data.Ndms.Transformations;
+using StructureHelperCommon.Infrastructures.Exceptions;
+using StructureHelperCommon.Services.Forces;
namespace StructureHelperLogics.NdmCalculations.Triangulations
{
- public class PointTriangulationLogic : IPointTriangulationLogic
+ public class PointTriangulationLogic : ITriangulationLogic
{
- public ITriangulationLogicOptions Options { get; }
+ private readonly PointTriangulationLogicOptions options;
public PointTriangulationLogic(ITriangulationLogicOptions options)
{
- Options = options;
+ ValidateOptions(options);
+ this.options = options as PointTriangulationLogicOptions;
}
- public IEnumerable GetNdmCollection(IMaterial material)
+ public IEnumerable GetNdmCollection()
{
- IPointTriangulationLogicOptions options = Options as IPointTriangulationLogicOptions;
- IPoint2D center = options.Center;
- double area = options.Area;
- List ndmCollection = new List();
- INdm ndm = new Ndm { CenterX = center.X, CenterY = center.Y, Area = area, Material = material };
- ndmCollection.Add(ndm);
- NdmTransform.SetPrestrain(ndmCollection, new StrainMatrix() { Kx = options.Prestrain.Mx, Ky = options.Prestrain.My, EpsZ = options.Prestrain.Nz });
+ var ndm = new Ndm
+ {
+ CenterX = options.Center.X,
+ CenterY = options.Center.Y,
+ Area = options.Area,
+ Material = options.HeadMaterial.GetLoaderMaterial(options.triangulationOptions.LimiteState, options.triangulationOptions.CalcTerm)
+ };
+ List ndmCollection = new () { ndm};
+ NdmTransform.SetPrestrain(ndmCollection, StrainTupleService.ConvertToLoaderStrainMatrix(options.Prestrain));
return ndmCollection;
}
public void ValidateOptions(ITriangulationLogicOptions options)
{
- throw new NotImplementedException();
+ if (options is not PointTriangulationLogicOptions)
+ {
+ throw new StructureHelperException(ErrorStrings.ExpectedWas(typeof(PointTriangulationLogicOptions), options.GetType()));
+ }
}
}
}
diff --git a/StructureHelperLogics/NdmCalculations/Triangulations/PointTriangulationLogicOptions.cs b/StructureHelperLogics/NdmCalculations/Triangulations/PointTriangulationLogicOptions.cs
index 958e364..15301af 100644
--- a/StructureHelperLogics/NdmCalculations/Triangulations/PointTriangulationLogicOptions.cs
+++ b/StructureHelperLogics/NdmCalculations/Triangulations/PointTriangulationLogicOptions.cs
@@ -1,5 +1,8 @@
-using StructureHelperCommon.Models.Forces;
+using LoaderCalculator.Data.Materials;
+using StructureHelper.Models.Materials;
+using StructureHelperCommon.Models.Forces;
using StructureHelperCommon.Models.Shapes;
+using StructureHelperCommon.Services.Forces;
using StructureHelperLogics.NdmCalculations.Primitives;
namespace StructureHelperLogics.NdmCalculations.Triangulations
@@ -7,8 +10,9 @@ namespace StructureHelperLogics.NdmCalculations.Triangulations
///
///
///
- public class PointTriangulationLogicOptions : IPointTriangulationLogicOptions
+ public class PointTriangulationLogicOptions : ITriangulationLogicOptions
{
+ public ITriangulationOptions triangulationOptions { get; set; }
///
///
///
@@ -16,26 +20,16 @@ namespace StructureHelperLogics.NdmCalculations.Triangulations
///
public double Area { get; }
public StrainTuple Prestrain { get; set; }
+ public IHeadMaterial HeadMaterial { get; set; }
///
- public PointTriangulationLogicOptions(IPoint2D center, double area)
- {
- Center = center;
- Area = area;
- Prestrain = new StrainTuple();
- }
-
public PointTriangulationLogicOptions(IPointPrimitive primitive)
{
- Center = new Point2D() { X = primitive.Center.X, Y = primitive.Center.Y };
+ Center = primitive.Center.Clone() as Point2D;
Area = primitive.Area;
- Prestrain = new StrainTuple
- {
- Mx = primitive.UsersPrestrain.Mx + primitive.AutoPrestrain.Mx,
- My = primitive.UsersPrestrain.My + primitive.AutoPrestrain.My,
- Nz = primitive.UsersPrestrain.Nz + primitive.AutoPrestrain.Nz
- };
+ HeadMaterial = primitive.HeadMaterial;
+ Prestrain = ForceTupleService.SumTuples(primitive.UsersPrestrain, primitive.AutoPrestrain) as StrainTuple;
}
}
}
diff --git a/StructureHelperLogics/NdmCalculations/Triangulations/RebarTriangulationLogic.cs b/StructureHelperLogics/NdmCalculations/Triangulations/RebarTriangulationLogic.cs
new file mode 100644
index 0000000..a03399a
--- /dev/null
+++ b/StructureHelperLogics/NdmCalculations/Triangulations/RebarTriangulationLogic.cs
@@ -0,0 +1,55 @@
+using LoaderCalculator.Data.Materials;
+using LoaderCalculator.Data.Matrix;
+using LoaderCalculator.Data.Ndms;
+using LoaderCalculator.Data.Ndms.Transformations;
+using StructureHelperCommon.Infrastructures.Exceptions;
+using StructureHelperCommon.Models.Shapes;
+using StructureHelperCommon.Services.Forces;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StructureHelperLogics.NdmCalculations.Triangulations
+{
+ internal class RebarTriangulationLogic : ITriangulationLogic
+ {
+ private readonly RebarTriangulationLogicOptions options;
+ public RebarTriangulationLogic(ITriangulationLogicOptions options)
+ {
+ ValidateOptions(options);
+ this.options = options as RebarTriangulationLogicOptions;
+ }
+ public IEnumerable GetNdmCollection()
+ {
+ var concreteNdm = new Ndm
+ {
+ CenterX = options.Center.X,
+ CenterY = options.Center.Y,
+ Area = options.Area,
+ Material = options.HostMaterial.GetLoaderMaterial(options.triangulationOptions.LimiteState, options.triangulationOptions.CalcTerm),
+ StressScale = -1d
+ };
+ var rebarNdm = new RebarNdm
+ {
+ CenterX = options.Center.X,
+ CenterY = options.Center.Y,
+ Area = options.Area,
+ Material = options.HeadMaterial.GetLoaderMaterial(options.triangulationOptions.LimiteState, options.triangulationOptions.CalcTerm)
+ };
+ List ndmCollection = new() { concreteNdm, rebarNdm};
+ //List ndmCollection = new() { rebarNdm };
+ NdmTransform.SetPrestrain(ndmCollection, StrainTupleService.ConvertToLoaderStrainMatrix(options.Prestrain));
+ return ndmCollection;
+ }
+
+ public void ValidateOptions(ITriangulationLogicOptions options)
+ {
+ if (options is not RebarTriangulationLogicOptions)
+ {
+ throw new StructureHelperException(ErrorStrings.ExpectedWas(typeof(RebarTriangulationLogicOptions), options.GetType()));
+ }
+ }
+ }
+}
diff --git a/StructureHelperLogics/NdmCalculations/Triangulations/RebarTriangulationLogicOptions.cs b/StructureHelperLogics/NdmCalculations/Triangulations/RebarTriangulationLogicOptions.cs
new file mode 100644
index 0000000..e3d13d6
--- /dev/null
+++ b/StructureHelperLogics/NdmCalculations/Triangulations/RebarTriangulationLogicOptions.cs
@@ -0,0 +1,37 @@
+using StructureHelper.Models.Materials;
+using StructureHelperCommon.Models.Forces;
+using StructureHelperCommon.Models.Shapes;
+using StructureHelperCommon.Services.Forces;
+using StructureHelperLogics.NdmCalculations.Primitives;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StructureHelperLogics.NdmCalculations.Triangulations
+{
+ public class RebarTriangulationLogicOptions : ITriangulationLogicOptions
+ {
+ public ITriangulationOptions triangulationOptions { get; set; }
+ ///
+ ///
+ ///
+ public IPoint2D Center { get; }
+ ///
+ public double Area { get; }
+ public StrainTuple Prestrain { get; set; }
+ public IHeadMaterial HeadMaterial { get; set; }
+ public IHeadMaterial HostMaterial { get; set; }
+
+ ///
+ public RebarTriangulationLogicOptions(RebarPrimitive primitive)
+ {
+ Center = primitive.Center.Clone() as Point2D;
+ Area = primitive.Area;
+ HeadMaterial = primitive.HeadMaterial;
+ HostMaterial = primitive.HostPrimitive.HeadMaterial;
+ Prestrain = ForceTupleService.SumTuples(primitive.UsersPrestrain, primitive.AutoPrestrain) as StrainTuple;
+ }
+ }
+}
diff --git a/StructureHelperLogics/NdmCalculations/Triangulations/RectangleTriangulationLogic.cs b/StructureHelperLogics/NdmCalculations/Triangulations/RectangleTriangulationLogic.cs
index 909b000..a7aeb21 100644
--- a/StructureHelperLogics/NdmCalculations/Triangulations/RectangleTriangulationLogic.cs
+++ b/StructureHelperLogics/NdmCalculations/Triangulations/RectangleTriangulationLogic.cs
@@ -1,19 +1,18 @@
-using LoaderCalculator.Data.Materials;
-using LoaderCalculator.Data.Ndms;
-using System;
-using System.Collections.Generic;
+using LoaderCalculator.Data.Ndms;
using LoaderCalculator.Data.Ndms.Transformations;
-using LoaderCalculator.Data.Matrix;
using StructureHelperCommon.Infrastructures.Exceptions;
namespace StructureHelperLogics.NdmCalculations.Triangulations
{
- public class RectangleTriangulationLogic : IRectangleTriangulationLogic
+ public class RectangleTriangulationLogic : ITriangulationLogic
{
- IRectangleTriangulationLogicOptions options;
- public ITriangulationLogicOptions Options { get; }
-
- public IEnumerable GetNdmCollection(IMaterial material)
+ private readonly RectangleTriangulationLogicOptions options;
+ public RectangleTriangulationLogic(ITriangulationLogicOptions options)
+ {
+ ValidateOptions(options);
+ this.options = options as RectangleTriangulationLogicOptions;
+ }
+ public IEnumerable GetNdmCollection()
{
double width = options.Rectangle.Width;
double height = options.Rectangle.Height;
@@ -21,7 +20,10 @@ namespace StructureHelperLogics.NdmCalculations.Triangulations
int ndmMinDivision = options.NdmMinDivision;
LoaderCalculator.Triangulations.RectangleTriangulationLogicOptions logicOptions = new LoaderCalculator.Triangulations.RectangleTriangulationLogicOptions(width, height, ndmMaxSize, ndmMinDivision);
var logic = LoaderCalculator.Triangulations.Triangulation.GetLogicInstance(logicOptions);
- var ndmCollection = logic.GetNdmCollection(new LoaderCalculator.Data.Planes.RectangularPlane { Material = material });
+ var ndmCollection = logic.GetNdmCollection(new LoaderCalculator.Data.Planes.RectangularPlane
+ {
+ Material = options.HeadMaterial.GetLoaderMaterial(options.triangulationOptions.LimiteState, options.triangulationOptions.CalcTerm)
+ });
TriangulationService.CommonTransform(ndmCollection, options);
double angle = options.Rectangle.Angle;
NdmTransform.Rotate(ndmCollection, angle);
@@ -31,17 +33,11 @@ namespace StructureHelperLogics.NdmCalculations.Triangulations
public void ValidateOptions(ITriangulationLogicOptions options)
{
- if (options is not IRectangleTriangulationLogicOptions)
+ if (options is not RectangleTriangulationLogicOptions)
{
- throw new StructureHelperException(ErrorStrings.DataIsInCorrect + $"\n Expected: {nameof(IRectangleTriangulationLogicOptions)}, But was: {nameof(options)}");
+ throw new StructureHelperException(ErrorStrings.ExpectedWas(typeof(RectangleTriangulationLogicOptions), options.GetType()));
}
}
- public RectangleTriangulationLogic(ITriangulationLogicOptions options)
- {
- ValidateOptions(options);
- this.options = options as IRectangleTriangulationLogicOptions;
- Options = options;
- }
}
}
diff --git a/StructureHelperLogics/NdmCalculations/Triangulations/RectangleTriangulationLogicOptions.cs b/StructureHelperLogics/NdmCalculations/Triangulations/RectangleTriangulationLogicOptions.cs
index 5a8616e..7d67513 100644
--- a/StructureHelperLogics/NdmCalculations/Triangulations/RectangleTriangulationLogicOptions.cs
+++ b/StructureHelperLogics/NdmCalculations/Triangulations/RectangleTriangulationLogicOptions.cs
@@ -1,11 +1,13 @@
-using StructureHelperCommon.Models.Forces;
+using StructureHelper.Models.Materials;
+using StructureHelperCommon.Models.Forces;
using StructureHelperCommon.Models.Shapes;
+using StructureHelperCommon.Services.Forces;
using StructureHelperLogics.NdmCalculations.Primitives;
namespace StructureHelperLogics.NdmCalculations.Triangulations
{
///
- public class RectangleTriangulationLogicOptions : IRectangleTriangulationLogicOptions
+ public class RectangleTriangulationLogicOptions : IShapeTriangulationLogicOptions
{
///
public IPoint2D Center { get; }
@@ -17,6 +19,8 @@ namespace StructureHelperLogics.NdmCalculations.Triangulations
public int NdmMinDivision { get; }
///
public StrainTuple Prestrain { get; set; }
+ public ITriangulationOptions triangulationOptions { get; set; }
+ public IHeadMaterial HeadMaterial { get; set; }
public RectangleTriangulationLogicOptions(IPoint2D center, IRectangleShape rectangle, double ndmMaxSize, int ndmMinDivision)
{
@@ -33,12 +37,8 @@ namespace StructureHelperLogics.NdmCalculations.Triangulations
Rectangle = primitive;
NdmMaxSize = primitive.NdmMaxSize;
NdmMinDivision = primitive.NdmMinDivision;
- Prestrain = new StrainTuple
- {
- Mx = primitive.UsersPrestrain.Mx + primitive.AutoPrestrain.Mx,
- My = primitive.UsersPrestrain.My + primitive.AutoPrestrain.My,
- Nz = primitive.UsersPrestrain.Nz + primitive.AutoPrestrain.Nz
- };
+ HeadMaterial = primitive.HeadMaterial;
+ Prestrain = ForceTupleService.SumTuples(primitive.UsersPrestrain, primitive.AutoPrestrain) as StrainTuple;
}
}
}
diff --git a/StructureHelperLogics/NdmCalculations/Triangulations/Triangulation.cs b/StructureHelperLogics/NdmCalculations/Triangulations/Triangulation.cs
index 5d78e04..03d303b 100644
--- a/StructureHelperLogics/NdmCalculations/Triangulations/Triangulation.cs
+++ b/StructureHelperLogics/NdmCalculations/Triangulations/Triangulation.cs
@@ -6,22 +6,21 @@ using StructureHelperLogics.NdmCalculations.Primitives;
namespace StructureHelperLogics.NdmCalculations.Triangulations
{
- public static class Triangulation
+ public static class Triangulation1
{
public static IEnumerable GetNdms(IEnumerable ndmPrimitives, ITriangulationOptions options)
{
- List ndms = new List();
- var headMaterials = GetPrimitiveMaterials(ndmPrimitives);
- Dictionary materials = GetMaterials(headMaterials, options);
- foreach (var ndmPrimitive in ndmPrimitives)
- {
- IHeadMaterial headMaterial = ndmPrimitive.HeadMaterial;
- IMaterial material;
- if (materials.TryGetValue(headMaterial.Id, out material) == false) { throw new Exception("Material dictionary is not valid"); }
- IEnumerable localNdms = GetNdmsByPrimitive(ndmPrimitive, material);
- ndms.AddRange(localNdms);
- }
- return ndms;
+ return ndmPrimitives.SelectMany(x => x.GetNdms(options));
+ //var headMaterials = GetPrimitiveMaterials(ndmPrimitives);
+ //Dictionary materials = GetMaterials(headMaterials, options);
+ //foreach (var ndmPrimitive in ndmPrimitives)
+ //{
+ // IHeadMaterial headMaterial = ndmPrimitive.HeadMaterial;
+ // IMaterial material;
+ // if (materials.TryGetValue(headMaterial.Id, out material) == false) { throw new Exception("Material dictionary is not valid"); }
+ // IEnumerable localNdms = GetNdmsByPrimitive(ndmPrimitive, options);
+ // ndms.AddRange(localNdms);
+ //}
}
///
/// Returns dictionary of unique materials by collection of primitives
@@ -60,10 +59,10 @@ namespace StructureHelperLogics.NdmCalculations.Triangulations
return materials;
}
- private static IEnumerable GetNdmsByPrimitive(INdmPrimitive primitive, IMaterial material)
+ private static IEnumerable GetNdmsByPrimitive(INdmPrimitive primitive, ITriangulationOptions options)
{
- List ndms = new List();
- ndms.AddRange(primitive.GetNdms(material));
+ List ndms = new ();
+ ndms.AddRange(primitive.GetNdms(options));
return ndms;
}
}
diff --git a/StructureHelperLogics/Services/NdmCalculations/CalculationService.cs b/StructureHelperLogics/Services/NdmCalculations/CalculationService.cs
index dbc039d..b9b290d 100644
--- a/StructureHelperLogics/Services/NdmCalculations/CalculationService.cs
+++ b/StructureHelperLogics/Services/NdmCalculations/CalculationService.cs
@@ -25,13 +25,13 @@ namespace StructureHelperLogics.Services.NdmCalculations
{
var ndmCollection = new List();
ITriangulationOptions options = new TriangulationOptions { LimiteState = calculationProperty.LimitState, CalcTerm = calculationProperty.CalcTerm };
- ndmCollection.AddRange(Triangulation.GetNdms(ndmPrimitives, options));
+ ndmCollection.AddRange(ndmPrimitives.SelectMany(x => x.GetNdms(options)));
var loaderData = new LoaderOptions
{
Preconditions = new Preconditions
{
- ConditionRate = calculationProperty.IterationProperty.Accuracy,
- MaxIterationCount = calculationProperty.IterationProperty.MaxIterationCount,
+ ConditionRate = calculationProperty.Accuracy.IterationAccuracy,
+ MaxIterationCount = calculationProperty.Accuracy.MaxIterationCount,
StartForceMatrix = new ForceMatrix { Mx = mx, My = my, Nz = nz }
},
NdmCollection = ndmCollection
@@ -47,7 +47,7 @@ namespace StructureHelperLogics.Services.NdmCalculations
foreach (var forceCombinations in calculationProperty.ForceCombinations)
{
var forceMatrix = forceCombinations.ForceMatrix;
- results.Add(GetCalculationResult(forceMatrix, ndms, calculationProperty.IterationProperty.Accuracy, calculationProperty.IterationProperty.MaxIterationCount));
+ results.Add(GetCalculationResult(forceMatrix, ndms, calculationProperty.Accuracy.IterationAccuracy, calculationProperty.Accuracy.MaxIterationCount));
}
return results;
}
diff --git a/StructureHelperLogics/Services/NdmPrimitives/NdmPrimitivesService.cs b/StructureHelperLogics/Services/NdmPrimitives/NdmPrimitivesService.cs
index 21f5118..977d4b0 100644
--- a/StructureHelperLogics/Services/NdmPrimitives/NdmPrimitivesService.cs
+++ b/StructureHelperLogics/Services/NdmPrimitives/NdmPrimitivesService.cs
@@ -19,18 +19,11 @@ namespace StructureHelperLogics.Services.NdmPrimitives
{
public static class NdmPrimitivesService
{
- public static List GetNdms(INdmPrimitive primitive, LimitStates limitState, CalcTerms calcTerm)
- {
- //Формируем коллекцию элементарных участков для расчета в библитеке (т.е. выполняем триангуляцию)
- List ndmCollection = new List();
- var material = primitive.HeadMaterial.GetLoaderMaterial(limitState, calcTerm);
- ndmCollection.AddRange(primitive.GetNdms(material));
- return ndmCollection;
- }
public static List GetNdms(IEnumerable primitives, LimitStates limitState, CalcTerms calcTerm)
{
var orderedNdmPrimitives = primitives.OrderBy(x => x.VisualProperty.ZIndex);
var ndms = new List();
+ var triangulationOptions = new TriangulationOptions() { LimiteState = limitState, CalcTerm = calcTerm };
foreach (var item in orderedNdmPrimitives)
{
if (item is IHasDivisionSize)
@@ -43,7 +36,7 @@ namespace StructureHelperLogics.Services.NdmPrimitives
}
if (item.Triangulate == true)
{
- ndms.AddRange(GetNdms(item, limitState, calcTerm));
+ ndms.AddRange(item.GetNdms(triangulationOptions));
}
}
return ndms;
diff --git a/StructureHelperLogics/Services/NdmPrimitives/TextParametersLogic.cs b/StructureHelperLogics/Services/NdmPrimitives/TextParametersLogic.cs
index 85ec072..b4fbd24 100644
--- a/StructureHelperLogics/Services/NdmPrimitives/TextParametersLogic.cs
+++ b/StructureHelperLogics/Services/NdmPrimitives/TextParametersLogic.cs
@@ -94,8 +94,8 @@ namespace StructureHelperLogics.Services.NdmPrimitives
try
{
var gravityCenter = GeometryOperations.GetReducedMomentsOfInertia(locNdms, locStrainMatrix);
- firstParameter.Value = (gravityCenter.MomentX * unitMultiPlayer).ToString();
- secondParameter.Value = (gravityCenter.MomentY * unitMultiPlayer).ToString();
+ firstParameter.Value = (gravityCenter.EIx * unitMultiPlayer).ToString();
+ secondParameter.Value = (gravityCenter.EIy * unitMultiPlayer).ToString();
}
catch (Exception ex)
{
@@ -134,8 +134,8 @@ namespace StructureHelperLogics.Services.NdmPrimitives
try
{
var actualMoments = GeometryOperations.GetSofteningsFactors(locNdms, locStrainMatrix);
- firstParameter.Value = actualMoments.MxFactor.ToString();
- secondParameter.Value = actualMoments.MyFactor.ToString();
+ firstParameter.Value = actualMoments.EIxFactor.ToString();
+ secondParameter.Value = actualMoments.EIy.ToString();
}
catch (Exception ex)
{
@@ -196,7 +196,7 @@ namespace StructureHelperLogics.Services.NdmPrimitives
try
{
var actual = GeometryOperations.GetSofteningsFactors(locNdms, locStrainMatrix);
- firstParameter.Value = actual.NzFactor.ToString();
+ firstParameter.Value = actual.EAFactor.ToString();
}
catch (Exception ex)
{
@@ -238,8 +238,8 @@ namespace StructureHelperLogics.Services.NdmPrimitives
try
{
var gravityCenter = GeometryOperations.GetGravityCenter(locNdms, locStrainMatrix);
- firstParameter.Value = (gravityCenter.CenterX * unitMultiPlayer).ToString();
- secondParameter.Value = (gravityCenter.CenterY * unitMultiPlayer).ToString();
+ firstParameter.Value = (gravityCenter.Cx * unitMultiPlayer).ToString();
+ secondParameter.Value = (gravityCenter.Cy * unitMultiPlayer).ToString();
}
catch (Exception ex)
{
diff --git a/StructureHelperTests/FunctionalTests/Ndms/Calculators/CrackCalculatorTests/CrackCalculatorTest.cs b/StructureHelperTests/FunctionalTests/Ndms/Calculators/CrackCalculatorTests/CrackCalculatorTest.cs
index 7332b83..04d7fe1 100644
--- a/StructureHelperTests/FunctionalTests/Ndms/Calculators/CrackCalculatorTests/CrackCalculatorTest.cs
+++ b/StructureHelperTests/FunctionalTests/Ndms/Calculators/CrackCalculatorTests/CrackCalculatorTest.cs
@@ -25,7 +25,7 @@ namespace StructureHelperTests.FunctionalTests.Ndms.Calculators.CrackCalculatorT
var newSection = new SectionTemplate(new RectGeometryLogic(template)).GetCrossSection();
var ndmPrimitives = newSection.SectionRepository.Primitives;
ITriangulationOptions options = new TriangulationOptions { LimiteState = LimitStates.SLS, CalcTerm = CalcTerms.ShortTerm };
- var ndms = Triangulation.GetNdms(ndmPrimitives, options);
+ var ndms = ndmPrimitives.SelectMany(x => x.GetNdms(options));
var calculator = new CrackForceCalculator();
calculator.EndTuple = new ForceTuple() { Mx = -50e3d, My = -50e3d, Nz = 0d };
calculator.NdmCollection = ndms;
diff --git a/StructureHelperTests/FunctionalTests/Ndms/Calculators/ForceCalculatorTests/RCSectionsTest.cs b/StructureHelperTests/FunctionalTests/Ndms/Calculators/ForceCalculatorTests/RCSectionsTest.cs
index 17f3304..2429e64 100644
--- a/StructureHelperTests/FunctionalTests/Ndms/Calculators/ForceCalculatorTests/RCSectionsTest.cs
+++ b/StructureHelperTests/FunctionalTests/Ndms/Calculators/ForceCalculatorTests/RCSectionsTest.cs
@@ -11,12 +11,12 @@ namespace StructureHelperTests.FunctionalTests.Ndms.Calculators.ForceCalculatorT
{
public class RCSectionsTest
{
- [TestCase(0.4d, 0.6d, 0.012d, 0.025d, 2, 2, false, -0.00062544561815463693d, -0.0029292919541166911d, 0.00035383082501577246d)]
- [TestCase(0.4d, 0.6d, 0.012d, 0.025d, 3, 2, false, -0.00046762265275279838d, -0.0025101896869558888d, 0.00027185795017719519d)]
- [TestCase(0.5d, 0.5d, 0.025d, 0.025d, 3, 3, false, -0.00080914991212906239d, -0.00080914991212906184d, 0.00011900072665826425d)]
- [TestCase(0.5d, 0.5d, 0.025d, 0.025d, 3, 3, true, -0.0008126213321004612d, -0.00081262133210046055d, 0.00011963568117586145d)]
- [TestCase(0.5d, 0.6d, 0.025d, 0.025d, 3, 3, true, -0.00047720148631058529d, -0.00077269031816753532d, 0.00010610472872420363d)]
- [TestCase(0.6d, 0.5d, 0.025d, 0.025d, 3, 3, true, -0.00077269031816753478d, -0.00047720148631058437d, 0.00010610472872420363d)]
+ [TestCase(0.4d, 0.6d, 0.012d, 0.025d, 2, 2, false, -0.00062729176929923703d, -0.0029292919541166911d, 0.00035383082501577246d)]
+ [TestCase(0.4d, 0.6d, 0.012d, 0.025d, 3, 2, false, -0.00046857734823565632d, -0.0025101896869558888d, 0.00027185795017719519d)]
+ [TestCase(0.5d, 0.5d, 0.025d, 0.025d, 3, 3, false, -0.00081656737668168479d, -0.00081656737668168414d, 0.00011865117209051567d)]
+ [TestCase(0.5d, 0.5d, 0.025d, 0.025d, 3, 3, true, -0.00081971887286298598d, -0.00081971887286298544d, 0.00011922273439756063d)]
+ [TestCase(0.5d, 0.6d, 0.025d, 0.025d, 3, 3, true, -0.00048146233319312662d, -0.00077822315770951882d, 0.00010599549196849429d)]
+ [TestCase(0.6d, 0.5d, 0.025d, 0.025d, 3, 3, true, -0.00077822315770951947d, -0.00048146233319312478d, 0.00010599549196849413d)]
public void Run_ShouldPass(double width, double height, double topDiametr, double bottomDiametr, int widthCount, int heightCount, bool isBuckling, double expectedKx, double expectedKy, double expectedEpsZ)
{
//Arrange
diff --git a/StructureHelperTests/FunctionalTests/Ndms/RCSections/RCSectionTest.cs b/StructureHelperTests/FunctionalTests/Ndms/RCSections/RCSectionTest.cs
index 7213919..7c7effa 100644
--- a/StructureHelperTests/FunctionalTests/Ndms/RCSections/RCSectionTest.cs
+++ b/StructureHelperTests/FunctionalTests/Ndms/RCSections/RCSectionTest.cs
@@ -37,7 +37,7 @@ namespace StructureHelperTests.FunctionalTests.Ndms.RCSections
var primitives = new List();
primitives.AddRange(GetConcreteNdms(width, height));
primitives.AddRange(GetReinforcementNdms(width, height, topArea, bottomArea));
- ndmCollection.AddRange(Triangulation.GetNdms(primitives, options));
+ ndmCollection.AddRange(primitives.SelectMany(x => x.GetNdms(options)));
var loaderData = new LoaderOptions
{
Preconditions = new Preconditions
diff --git a/StructureHelperTests/FunctionalTests/Ndms/SteelSections/ReinforcementTest.cs b/StructureHelperTests/FunctionalTests/Ndms/SteelSections/ReinforcementTest.cs
index bcae722..8103597 100644
--- a/StructureHelperTests/FunctionalTests/Ndms/SteelSections/ReinforcementTest.cs
+++ b/StructureHelperTests/FunctionalTests/Ndms/SteelSections/ReinforcementTest.cs
@@ -29,7 +29,7 @@ namespace StructureHelperTests.FunctionalTests.Ndms.SteelSections
var options = new TriangulationOptions { LimiteState = LimitStates.ULS, CalcTerm = CalcTerms.ShortTerm };
var primitive = new RectanglePrimitive { Width = width, Height = height, HeadMaterial = headMaterial, NdmMaxSize = 1, NdmMinDivision = 100 };
var primitives = new List() { primitive};
- var ndmCollection = Triangulation.GetNdms(primitives, options);
+ var ndmCollection = primitives.SelectMany(x => x.GetNdms(options));
var loaderData = new LoaderOptions
{
Preconditions = new Preconditions
@@ -64,7 +64,7 @@ namespace StructureHelperTests.FunctionalTests.Ndms.SteelSections
var options = new TriangulationOptions { LimiteState = LimitStates.ULS, CalcTerm = CalcTerms.ShortTerm };
var primitive = new CirclePrimitive { Diameter = diameter, HeadMaterial = headMaterial, NdmMaxSize = 1, NdmMinDivision = 100 };
var primitives = new List() { primitive };
- var ndmCollection = Triangulation.GetNdms(primitives, options);
+ var ndmCollection = primitives.SelectMany(x => x.GetNdms(options));
var loaderData = new LoaderOptions
{
Preconditions = new Preconditions
diff --git a/StructureHelperTests/UnitTests/Ndms/Cracks/CrackWidthLogicTest.cs b/StructureHelperTests/UnitTests/Ndms/Cracks/CrackWidthLogicTest.cs
new file mode 100644
index 0000000..3fec330
--- /dev/null
+++ b/StructureHelperTests/UnitTests/Ndms/Cracks/CrackWidthLogicTest.cs
@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using NUnit.Framework;
+using StructureHelperLogics.NdmCalculations.Cracking;
+
+namespace StructureHelperTests.UnitTests.Ndms.Cracks
+{
+ public class CrackWidthLogicTest
+ {
+ [TestCase(1.4d, 0.001d, 0d, 0.3d, 0.00020999999999999998d)]
+ [TestCase(1.4d, 0.001d, 0.001d, 0.3d, 0d)]
+ public void Run_ShouldPass(double termFactor, double rebarStrain, double concreteStrain, double length, double expectedWidth)
+ {
+ //Arrange
+ var logic = new CrackWidthLogicSP63()
+ {
+ TermFactor = termFactor,
+ BondFactor = 0.5d,
+ StressStateFactor = 1d,
+ PsiSFactor = 1d,
+ RebarStrain = rebarStrain,
+ ConcreteStrain = concreteStrain,
+ Length = length
+ };
+ //Act
+ var width = logic.GetCrackWidth();
+ //Assert
+ Assert.AreEqual(expectedWidth, width, 0.000001d);
+ }
+
+ }
+}
diff --git a/StructureHelperTests/UnitTests/Ndms/Triangulations/RectangleTriangulationTest.cs b/StructureHelperTests/UnitTests/Ndms/Triangulations/RectangleTriangulationTest.cs
index b723d5c..e9e5ff4 100644
--- a/StructureHelperTests/UnitTests/Ndms/Triangulations/RectangleTriangulationTest.cs
+++ b/StructureHelperTests/UnitTests/Ndms/Triangulations/RectangleTriangulationTest.cs
@@ -9,11 +9,19 @@ using StructureHelperLogics.Services.NdmPrimitives;
using StructureHelperCommon.Infrastructures.Enums;
using LoaderCalculator.Logics.Geometry;
using StructureHelperCommon.Infrastructures.Settings;
+using StructureHelper.Models.Materials;
+using Moq;
namespace StructureHelperTests.UnitTests.Ndms.Triangulations
{
public class RectangleTriangulationTest
{
+ private Mock materialMock;
+ [SetUp]
+ public void Setup()
+ {
+ materialMock = new Mock();
+ }
//Участок по центру
[TestCase(0d, 0d, 1.0d, 1.0d, 0d, 0.02d, 1, 50 * 50, -0.49d, -0.49d)]
//Участок со смещением от центра
@@ -26,13 +34,20 @@ namespace StructureHelperTests.UnitTests.Ndms.Triangulations
public void Run_ShouldPass (double centerX, double centerY, double width, double height, double angle, double ndmMaxSize, int ndmMinDivision, int expectedCount, double expectedFirstCenterX, double expectedFirstCenterY)
{
//Arrange
- IMaterial material = new Material();
+ materialMock
+ .Setup(x => x.GetLoaderMaterial(It.IsAny(), It.IsAny()))
+ .Returns(new Material());
+
IPoint2D center = new Point2D { X = centerX, Y = centerY };
IRectangleShape rectangle = new RectangleShape { Width = width, Height = height, Angle = angle };
- IRectangleTriangulationLogicOptions options = new RectangleTriangulationLogicOptions(center, rectangle, ndmMaxSize, ndmMinDivision);
- IRectangleTriangulationLogic logic = new RectangleTriangulationLogic(options);
+ var options = new RectangleTriangulationLogicOptions(center, rectangle, ndmMaxSize, ndmMinDivision)
+ {
+ triangulationOptions = new TriangulationOptions() { LimiteState = LimitStates.ULS, CalcTerm = CalcTerms.ShortTerm },
+ HeadMaterial = materialMock.Object
+ };
+ var logic = new RectangleTriangulationLogic(options);
//Act
- var result = logic.GetNdmCollection(material);
+ var result = logic.GetNdmCollection();
//Assert
Assert.NotNull(result);
Assert.AreEqual(expectedCount, result.Count());
@@ -65,8 +80,8 @@ namespace StructureHelperTests.UnitTests.Ndms.Triangulations
var area = ndms.Sum(x => x.Area);
var moments = GeometryOperations.GetReducedMomentsOfInertia(ndms);
Assert.AreEqual(expectedArea, area, 0.001d);
- Assert.AreEqual(expectedMomX, moments.MomentX, 0.001d);
- Assert.AreEqual(expectedMomY, moments.MomentY, 1d);
+ Assert.AreEqual(expectedMomX, moments.EIx, 0.001d);
+ Assert.AreEqual(expectedMomY, moments.EIy, 1d);
}
[TestCase(0d, 0d, 1.0d, 1.0d, true, 1d, 3020017308.3574591d, 3020017308.3574591d)]
[TestCase(0d, 0d, 1.0d, 1.0d, false, 0.92839999999991407d, 3005633713.5049105d, 3005633713.5049105d)]
@@ -96,8 +111,8 @@ namespace StructureHelperTests.UnitTests.Ndms.Triangulations
var area = ndms.Sum(x => x.Area);
var moments = GeometryOperations.GetReducedMomentsOfInertia(ndms);
Assert.AreEqual(expectedArea, area, 0.001d);
- Assert.AreEqual(expectedMomX, moments.MomentX, 0.001d);
- Assert.AreEqual(expectedMomY, moments.MomentY, 1d);
+ Assert.AreEqual(expectedMomX, moments.EIx, 0.001d);
+ Assert.AreEqual(expectedMomY, moments.EIy, 1d);
}
[TestCase(0d, 0d, 1.0d, true, 0.78079430967489682d, 1777730450.3666615d, 1776732530.5957441d)]
[TestCase(0d, 0d, 1.0d, false, 0.72079430967490343d, 1770498845.4396176d, 1760438764.1059904d)]
@@ -128,8 +143,8 @@ namespace StructureHelperTests.UnitTests.Ndms.Triangulations
var area = ndms.Sum(x => x.Area);
var moments = GeometryOperations.GetReducedMomentsOfInertia(ndms);
Assert.AreEqual(expectedArea, area, 0.001d);
- Assert.AreEqual(expectedMomX, moments.MomentX, 0.001d);
- Assert.AreEqual(expectedMomY, moments.MomentY, 1d);
+ Assert.AreEqual(expectedMomX, moments.EIx, 0.001d);
+ Assert.AreEqual(expectedMomY, moments.EIy, 1d);
}
}
}