diff --git a/App.xaml.cs b/App.xaml.cs
index eec8ad0..a4bac68 100644
--- a/App.xaml.cs
+++ b/App.xaml.cs
@@ -1,6 +1,7 @@
using System.Windows;
using Autofac;
using StructureHelper.Services;
+using StructureHelper.Services.Primitives;
using StructureHelper.UnitSystem;
using StructureHelper.Windows.MainWindow;
using StructureHelperLogics.Services;
diff --git a/Infrastructure/Exceptions/StructureHelperException.cs b/Infrastructure/Exceptions/StructureHelperException.cs
new file mode 100644
index 0000000..01d5cd8
--- /dev/null
+++ b/Infrastructure/Exceptions/StructureHelperException.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StructureHelper.Infrastructure.Exceptions
+{
+ internal class StructureHelperException : Exception
+ {
+ public StructureHelperException(string errorString) : base(errorString)
+ {
+ }
+ }
+}
diff --git a/Infrastructure/Strings/ErrorStrings.cs b/Infrastructure/Strings/ErrorStrings.cs
new file mode 100644
index 0000000..b864870
--- /dev/null
+++ b/Infrastructure/Strings/ErrorStrings.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StructureHelper.Infrastructure.Strings
+{
+ internal static class ErrorStrings
+ {
+ public static string ObjectTypeIsUnknown => "#0001: Object type is unknown";
+ public static string MaterialTypeIsUnknown => "#0002: Material type is unknown";
+ }
+}
diff --git a/Infrastructure/UI/Converters/Units/Area.cs b/Infrastructure/UI/Converters/Units/Area.cs
new file mode 100644
index 0000000..b4bce4f
--- /dev/null
+++ b/Infrastructure/UI/Converters/Units/Area.cs
@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Data;
+
+namespace StructureHelper.Infrastructure.UI.Converters.Units
+{
+ internal class Area : UnitBase
+ {
+ public override string unitName { get => "Area"; }
+ public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ double val;
+ if (value != null) { val = (double)value; }
+ else { throw new Exception($"{unitName} value is null"); }
+ val *= UnitConstatnts.LengthConstant * UnitConstatnts.LengthConstant;
+ return val;
+ }
+
+ public override object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ double val;
+ if (value != null)
+ {
+ var strVal = value as string;
+ double.TryParse(strVal, out val);
+ }
+ else { throw new Exception($"{unitName} value is null"); }
+ val /= (UnitConstatnts.LengthConstant * UnitConstatnts.LengthConstant);
+ return val;
+ }
+ }
+}
diff --git a/Infrastructure/UI/Converters/Units/Length.cs b/Infrastructure/UI/Converters/Units/Length.cs
new file mode 100644
index 0000000..f8e1805
--- /dev/null
+++ b/Infrastructure/UI/Converters/Units/Length.cs
@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Data;
+
+namespace StructureHelper.Infrastructure.UI.Converters.Units
+{
+ internal class Length : UnitBase
+ {
+ public override string unitName { get => "Length"; }
+
+ public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ double val;
+ if (value != null) { val = (double)value; }
+ else { throw new Exception($"{unitName} value is null"); }
+ val *= UnitConstatnts.LengthConstant;
+ return val;
+ }
+
+ public override object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ double val;
+ if (value != null)
+ {
+ var strVal = value as string;
+ double.TryParse(strVal, out val);
+ }
+ else { throw new Exception($"{unitName} value is null"); }
+ val /= UnitConstatnts.LengthConstant;
+ return val;
+ }
+ }
+}
diff --git a/Infrastructure/UI/Converters/Units/UnitBase.cs b/Infrastructure/UI/Converters/Units/UnitBase.cs
new file mode 100644
index 0000000..75b5fd3
--- /dev/null
+++ b/Infrastructure/UI/Converters/Units/UnitBase.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Data;
+
+namespace StructureHelper.Infrastructure.UI.Converters.Units
+{
+ internal abstract class UnitBase : IValueConverter
+ {
+ public abstract string unitName { get;}
+ public abstract object Convert(object value, Type targetType, object parameter, CultureInfo culture);
+ public abstract object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture);
+ }
+}
diff --git a/Infrastructure/UI/Converters/Units/UnitConstatnts.cs b/Infrastructure/UI/Converters/Units/UnitConstatnts.cs
new file mode 100644
index 0000000..aa99c9a
--- /dev/null
+++ b/Infrastructure/UI/Converters/Units/UnitConstatnts.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StructureHelper.Infrastructure.UI.Converters.Units
+{
+ internal static class UnitConstatnts
+ {
+ public static double LengthConstant = 1000d;
+ }
+}
diff --git a/Infrastructure/UI/DataContexts/Point.cs b/Infrastructure/UI/DataContexts/Point.cs
index b52fde7..7b0ab3b 100644
--- a/Infrastructure/UI/DataContexts/Point.cs
+++ b/Infrastructure/UI/DataContexts/Point.cs
@@ -10,10 +10,11 @@ namespace StructureHelper.Infrastructure.UI.DataContexts
{
public class Point : PrimitiveBase
{
- public Point(double d, double x, double y, MainViewModel ownerVm) : base(PrimitiveType.Point, x, y, ownerVm)
+ public double Area { get; set; }
+ public Point(double area, double x, double y, MainViewModel ownerVm) : base(PrimitiveType.Point, x, y, ownerVm)
{
- PrimitiveWidth = d;
- PrimitiveHeight = d;
+ Name = "New point";
+ Area = area;
PreviewMouseMove = new RelayCommand(o =>
{
if (!(o is Point point)) return;
@@ -32,17 +33,17 @@ namespace StructureHelper.Infrastructure.UI.DataContexts
point.ShowedY = -(ownerVm.PanelY - pointDelta - OwnerVm.XY1);
}
});
- ShowedX = x;
- ShowedY = y;
+ CenterX = x;
+ CenterY = y;
}
+ public double Diameter { get => Math.Sqrt(Area / Math.PI) * 2; }
+
public override INdmPrimitive GetNdmPrimitive(IUnitSystem unitSystem)
{
- var diam = unitSystem.ConvertLength(PrimitiveWidth);
- double area = diam * diam * Math.PI / 4;
string materialName = MaterialName;
- ICenter center = new Center { X = unitSystem.ConvertLength(ShowedX), Y = unitSystem.ConvertLength(ShowedY) };
- IShape shape = new StructureHelperCommon.Models.Shapes.Point { Area = area };
+ ICenter center = new Center { X = CenterX, Y = CenterY };
+ IShape shape = new StructureHelperCommon.Models.Shapes.Point { Area = this.Area };
IPrimitiveMaterial primitiveMaterial = new PrimitiveMaterial { MaterialType = GetMaterialTypes(), ClassName = materialName, Strength = Material.DesignCompressiveStrength };
INdmPrimitive ndmPrimitive = new NdmPrimitive { Center = center, Shape = shape, PrimitiveMaterial = primitiveMaterial };
return ndmPrimitive;
diff --git a/Infrastructure/UI/DataContexts/PrimitiveBase.cs b/Infrastructure/UI/DataContexts/PrimitiveBase.cs
index 413a824..6607e9b 100644
--- a/Infrastructure/UI/DataContexts/PrimitiveBase.cs
+++ b/Infrastructure/UI/DataContexts/PrimitiveBase.cs
@@ -3,6 +3,9 @@ using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using StructureHelper.Infrastructure.Enums;
+using StructureHelper.Infrastructure.Exceptions;
+using StructureHelper.Infrastructure.Strings;
+using StructureHelper.Infrastructure.UI.Converters.Units;
using StructureHelper.Models.Materials;
using StructureHelper.UnitSystem.Systems;
using StructureHelper.Windows.MainWindow;
@@ -16,9 +19,14 @@ namespace StructureHelper.Infrastructure.UI.DataContexts
#region Поля
private readonly PrimitiveType type;
+ private string name;
+ private double centerX, centerY;
+ private int minElementDivision;
+ private double maxElementSize;
private bool captured, parameterCaptured, elementLock, paramsPanelVisibilty, popupCanBeClosed = true, borderCaptured;
private Brush brush;
private MaterialDefinitionBase material;
+ private double prestrain_kx, prestrain_ky, prestrain_epsz;
private double opacity = 1, showedOpacity = 0, x, y, xY1, yX1, primitiveWidth, primitiveHeight, showedX, showedY;
protected double delta = 0.5;
private int showedZIndex = 1, zIndex;
@@ -39,6 +47,61 @@ namespace StructureHelper.Infrastructure.UI.DataContexts
}
}
+ public string Name
+ {
+ get => name;
+ set
+ {
+ OnPropertyChanged(value, ref name);
+ }
+ }
+ public double CenterX
+ {
+ get => centerX;
+ set
+ {
+ if (this is Rectangle)
+ {
+ ShowedX = value - primitiveWidth / 2d;
+ }
+ else if (this is Point)
+ {
+ Point point = this as Point;
+ ShowedX = value - point.Diameter / 2;
+ }
+ else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown); }
+ OnPropertyChanged(value, ref centerX);
+ }
+ }
+ public double CenterY
+ {
+ get => centerY;
+ set
+ {
+ if (this is Rectangle)
+ {
+ ShowedY = value - primitiveHeight / 2d;
+ }
+ else if (this is Point)
+ {
+ Point point = this as Point;
+ ShowedY = value - point.Diameter / 2;
+ }
+ else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown); }
+ OnPropertyChanged(value, ref centerY);
+ }
+ }
+ public int MinElementDivision
+ {
+ get => minElementDivision;
+ set { OnPropertyChanged(value, ref minElementDivision); }
+ }
+ public double MaxElementSize
+ {
+ get => maxElementSize;
+ set { OnPropertyChanged(value, ref maxElementSize); }
+ }
+
public bool Captured
{
set => OnPropertyChanged(value, ref captured);
@@ -203,10 +266,11 @@ namespace StructureHelper.Infrastructure.UI.DataContexts
PrimitiveDoubleClick = new RelayCommand(o =>
{
- PopupCanBeClosed = false;
- Captured = false;
- ParamsPanelVisibilty = true;
- ParameterCaptured = true;
+ //PopupCanBeClosed = false;
+ //Captured = false;
+ //ParamsPanelVisibilty = true;
+ //ParameterCaptured = true;
+
});
OwnerVm = ownerVM;
}
@@ -215,13 +279,29 @@ namespace StructureHelper.Infrastructure.UI.DataContexts
private void UpdateCoordinatesX(double showedX)
{
- if (Type == PrimitiveType.Rectangle) X = showedX + OwnerVm.YX1;
- if (Type == PrimitiveType.Point) X = showedX + OwnerVm.YX1 - PrimitiveWidth / 2;
+ if (this is Rectangle)
+ {
+ X = showedX + OwnerVm.YX1 / UnitConstatnts.LengthConstant;
+ }
+ else if (this is Point)
+ {
+ Point point = this as Point;
+ X = showedX + OwnerVm.YX1 / UnitConstatnts.LengthConstant;
+ }
+ else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown); }
}
private void UpdateCoordinatesY(double showedY)
{
- if (Type == PrimitiveType.Rectangle) Y = -showedY + OwnerVm.XY1 - PrimitiveHeight;
- if (Type == PrimitiveType.Point) Y = -showedY + OwnerVm.XY1 - PrimitiveWidth / 2;
+ if (this is Rectangle)
+ {
+ Y = -showedY + OwnerVm.XY1 / UnitConstatnts.LengthConstant - PrimitiveHeight;
+ }
+ else if (this is Point)
+ {
+ Point point = this as Point;
+ Y = -showedY + OwnerVm.XY1 / UnitConstatnts.LengthConstant - point.Diameter;
+ }
+ else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown); }
}
public abstract INdmPrimitive GetNdmPrimitive(IUnitSystem unitSystem);
@@ -230,7 +310,7 @@ namespace StructureHelper.Infrastructure.UI.DataContexts
MaterialTypes materialTypes;
if (Material is ConcreteDefinition) { materialTypes = MaterialTypes.Concrete; }
else if (Material is RebarDefinition) { materialTypes = MaterialTypes.Reinforcement; }
- else { throw new Exception("MaterialType is unknown"); }
+ else { throw new StructureHelperException(ErrorStrings.MaterialTypeIsUnknown); }
return materialTypes;
}
}
diff --git a/Infrastructure/UI/DataContexts/Rectangle.cs b/Infrastructure/UI/DataContexts/Rectangle.cs
index b8c5ef9..c10a57b 100644
--- a/Infrastructure/UI/DataContexts/Rectangle.cs
+++ b/Infrastructure/UI/DataContexts/Rectangle.cs
@@ -13,6 +13,7 @@ namespace StructureHelper.Infrastructure.UI.DataContexts
public Rectangle(double primitiveWidth, double primitiveHeight, double x, double y, MainViewModel ownerVm) : base(PrimitiveType.Rectangle, x, y, ownerVm)
{
Type = PrimitiveType.Rectangle;
+ Name = "New rectangle";
PrimitiveWidth = primitiveWidth;
PrimitiveHeight = primitiveHeight;
PreviewMouseMove = new RelayCommand(o =>
@@ -34,22 +35,23 @@ namespace StructureHelper.Infrastructure.UI.DataContexts
rect.ShowedY = -(OwnerVm.PanelY - deltaY - OwnerVm.XY1 + rect.PrimitiveHeight);
}
});
-
- ShowedX = x;
- ShowedY = y;
+ CenterX = x;
+ CenterY = y;
+ MinElementDivision = 10;
+ MaxElementSize = Math.Min(Math.Min(PrimitiveWidth, PrimitiveHeight) / MinElementDivision, 0.01);
}
public override INdmPrimitive GetNdmPrimitive(IUnitSystem unitSystem)
{
- var width = unitSystem.ConvertLength(PrimitiveWidth);
- var height = unitSystem.ConvertLength(PrimitiveHeight);
- double centerX = unitSystem.ConvertLength(ShowedX) + width / 2;
- double centerY = unitSystem.ConvertLength(ShowedY) + height / 2;
+ var width = PrimitiveWidth;
+ var height = PrimitiveHeight;
+ double centerX = CenterX;
+ double centerY = CenterY;
string materialName = MaterialName;
ICenter center = new Center { X = centerX, Y = centerY };
IShape shape = new StructureHelperCommon.Models.Shapes.Rectangle { Height = height, Width = width, Angle = 0 };
IPrimitiveMaterial primitiveMaterial = new PrimitiveMaterial { MaterialType = GetMaterialTypes(), ClassName = materialName, Strength = Material.DesignCompressiveStrength };
- INdmPrimitive ndmPrimitive = new NdmPrimitive { Center = center, Shape = shape, PrimitiveMaterial = primitiveMaterial, NdmMaxSize = 0.01, NdmMinDivision = 20 };
+ INdmPrimitive ndmPrimitive = new NdmPrimitive { Center = center, Shape = shape, PrimitiveMaterial = primitiveMaterial, NdmMaxSize = MaxElementSize, NdmMinDivision = MinElementDivision };
return ndmPrimitive;
}
}
diff --git a/Infrastructure/UI/DataTemplates/EllipseTemplate.xaml b/Infrastructure/UI/DataTemplates/EllipseTemplate.xaml
index 60bba73..16d51c2 100644
--- a/Infrastructure/UI/DataTemplates/EllipseTemplate.xaml
+++ b/Infrastructure/UI/DataTemplates/EllipseTemplate.xaml
@@ -12,7 +12,7 @@
-
+
+
diff --git a/Infrastructure/UI/DataTemplates/RectangleTemplate.xaml b/Infrastructure/UI/DataTemplates/RectangleTemplate.xaml
index 600342e..ce24c9f 100644
--- a/Infrastructure/UI/DataTemplates/RectangleTemplate.xaml
+++ b/Infrastructure/UI/DataTemplates/RectangleTemplate.xaml
@@ -15,7 +15,7 @@
-
+
+
-
+
diff --git a/Infrastructure/UI/Styles.xaml b/Infrastructure/UI/Styles.xaml
index b3058cc..d282a76 100644
--- a/Infrastructure/UI/Styles.xaml
+++ b/Infrastructure/UI/Styles.xaml
@@ -5,12 +5,16 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:dataContexts="clr-namespace:StructureHelper.Infrastructure.UI.DataContexts"
+ xmlns:converters ="clr-namespace:StructureHelper.Infrastructure.UI.Converters.Units"
mc:Ignorable="d" >
+
+
+
\ No newline at end of file
diff --git a/Services/PrimitiveService.cs b/Services/PrimitiveService.cs
deleted file mode 100644
index 0d8e183..0000000
--- a/Services/PrimitiveService.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using StructureHelper.Infrastructure.UI.DataContexts;
-using StructureHelperCommon.Models.NdmPrimitives;
-using StructureHelperCommon.Models.Shapes;
-using Point = StructureHelper.Infrastructure.UI.DataContexts.Point;
-using Rectangle = StructureHelper.Infrastructure.UI.DataContexts.Rectangle;
-
-namespace StructureHelper.Services
-{
- public interface IPrimitiveRepository
- {
- void Add(PrimitiveBase primitive);
- void Delete(PrimitiveBase primitive);
- IEnumerable GetPoints();
- IEnumerable GetRectangles();
- }
- class PrimitiveRepository : IPrimitiveRepository
- {
- List points = new List();
- List rectangles = new List();
-
- public void Add(PrimitiveBase primitive)
- {
- switch (primitive)
- {
- case Point point:
- points.Add(point);
- break;
- case Rectangle rectangle:
- rectangles.Add(rectangle);
- break;
- }
- }
- public void Delete(PrimitiveBase primitive)
- {
- switch (primitive)
- {
- case Point point:
- points.Remove(point);
- break;
- case Rectangle rectangle:
- rectangles.Remove(rectangle);
- break;
- }
- }
-
- public IEnumerable GetPoints() => points;
-
- public IEnumerable GetRectangles() => rectangles;
- }
-}
diff --git a/Services/Primitives/IPrimitiveRepository.cs b/Services/Primitives/IPrimitiveRepository.cs
new file mode 100644
index 0000000..e8300b2
--- /dev/null
+++ b/Services/Primitives/IPrimitiveRepository.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using StructureHelper.Infrastructure.UI.DataContexts;
+using StructureHelperCommon.Models.NdmPrimitives;
+using StructureHelperCommon.Models.Shapes;
+using Point = StructureHelper.Infrastructure.UI.DataContexts.Point;
+using Rectangle = StructureHelper.Infrastructure.UI.DataContexts.Rectangle;
+
+namespace StructureHelper.Services.Primitives
+{
+ public interface IPrimitiveRepository
+ {
+ IEnumerable Primitives { get; }
+ void Add(PrimitiveBase primitive);
+ void Delete(PrimitiveBase primitive);
+ void Clear();
+ }
+}
diff --git a/Services/Primitives/PrimitiveRepository.cs b/Services/Primitives/PrimitiveRepository.cs
new file mode 100644
index 0000000..47b0d55
--- /dev/null
+++ b/Services/Primitives/PrimitiveRepository.cs
@@ -0,0 +1,36 @@
+using StructureHelper.Infrastructure.UI.DataContexts;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StructureHelper.Services.Primitives
+{
+ public class PrimitiveRepository : IPrimitiveRepository
+ {
+ List primitives;
+
+ public IEnumerable Primitives { get => primitives; }
+
+ public PrimitiveRepository()
+ {
+ primitives = new List();
+ }
+
+ public void Add(PrimitiveBase primitive)
+ {
+ primitives.Add(primitive);
+ }
+
+ public void Clear()
+ {
+ primitives = new List();
+ }
+
+ public void Delete(PrimitiveBase primitive)
+ {
+ primitives.Remove(primitive);
+ }
+ }
+}
diff --git a/StructureHelper.csproj b/StructureHelper.csproj
index ec43f71..5d5fb92 100644
--- a/StructureHelper.csproj
+++ b/StructureHelper.csproj
@@ -15,6 +15,22 @@
true
true
+ false
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 1
+ 1.0.0.%2a
+ false
+ true
+ true
AnyCPU
@@ -34,6 +50,20 @@
TRACE
prompt
4
+ On
+ true
+
+
+ 485E3BCF396A57578712F0EAAD11D48E4FE19BD6
+
+
+ StructureHelper_TemporaryKey.pfx
+
+
+ true
+
+
+ true
@@ -102,10 +132,17 @@
Designer
+
+
+
+
+
+
PrimitivePopup.xaml
-
+
+
@@ -158,8 +195,12 @@
RectangleTemplate.xaml
+
+ PrimitivePropertiesView.xaml
+
+
@@ -172,6 +213,7 @@
Code
+
@@ -217,6 +259,10 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
@@ -235,5 +281,17 @@
StructureHelperLogics
+
+
+ False
+ Microsoft .NET Framework 4.7.2 %28x86 и x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
\ No newline at end of file
diff --git a/StructureHelper.csproj.user b/StructureHelper.csproj.user
new file mode 100644
index 0000000..1bbb2f7
--- /dev/null
+++ b/StructureHelper.csproj.user
@@ -0,0 +1,16 @@
+
+
+
+ publish\
+
+
+
+
+
+ ru-RU
+ false
+
+
+ false
+
+
\ No newline at end of file
diff --git a/StructureHelper_TemporaryKey.pfx b/StructureHelper_TemporaryKey.pfx
new file mode 100644
index 0000000..b98150c
Binary files /dev/null and b/StructureHelper_TemporaryKey.pfx differ
diff --git a/Windows/MainWindow/MainModel.cs b/Windows/MainWindow/MainModel.cs
index 30a2b16..bce403b 100644
--- a/Windows/MainWindow/MainModel.cs
+++ b/Windows/MainWindow/MainModel.cs
@@ -4,6 +4,7 @@ using LoaderCalculator.Data.Ndms;
using LoaderCalculator.Data.ResultData;
using LoaderCalculator.Data.SourceData;
using StructureHelper.Services;
+using StructureHelper.Services.Primitives;
using StructureHelper.UnitSystem;
using StructureHelper.UnitSystem.Systems;
using StructureHelperLogics.Infrastructures.CommonEnums;
@@ -37,17 +38,13 @@ namespace StructureHelper.Windows.MainWindow
public IStrainMatrix Calculate(double mx, double my, double nz)
{
var unitSystem = unitSystemService.GetCurrentSystem();
- return calculationService.GetPrimitiveStrainMatrix(primitiveRepository.GetRectangles()
- .Select(x => x.GetNdmPrimitive(unitSystem))
- .Concat(primitiveRepository.GetPoints().Select(x => x.GetNdmPrimitive(unitSystem))).ToArray(), mx, my, nz);
+ return calculationService.GetPrimitiveStrainMatrix(primitiveRepository.Primitives.Select(x => x.GetNdmPrimitive(unitSystem)).ToArray(), mx, my, nz);
}
public IEnumerable GetNdms()
{
var unitSystem = unitSystemService.GetCurrentSystem();
- var ndmPrimitives = primitiveRepository.GetRectangles()
- .Select(x => x.GetNdmPrimitive(unitSystem))
- .Concat(primitiveRepository.GetPoints().Select(x => x.GetNdmPrimitive(unitSystem))).ToArray();
+ var ndmPrimitives = primitiveRepository.Primitives.Select(x => x.GetNdmPrimitive(unitSystem)).ToArray();
//Настройки триангуляции, пока опции могут быть только такие
ITriangulationOptions options = new TriangulationOptions { LimiteState = LimitStates.Collapse, CalcTerm = CalcTerms.ShortTerm };
diff --git a/Windows/MainWindow/MainView.xaml b/Windows/MainWindow/MainView.xaml
index 197c77c..98d6a8e 100644
--- a/Windows/MainWindow/MainView.xaml
+++ b/Windows/MainWindow/MainView.xaml
@@ -10,10 +10,14 @@
xmlns:mouseEventTriggers="clr-namespace:StructureHelper.Infrastructure.UI.Triggers.MouseEventTriggers"
xmlns:local="clr-namespace:StructureHelper.Windows.MainWindow"
xmlns:enums="clr-namespace:StructureHelper.Infrastructure.Enums"
+ xmlns:converters ="clr-namespace:StructureHelper.Infrastructure.UI.Converters.Units"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance local:MainViewModel}"
Title="StructureHelper" Height="700" Width="1000">
+
+
+
@@ -36,8 +40,12 @@
@@ -55,8 +63,35 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -111,8 +146,8 @@
@@ -121,14 +156,12 @@
-
-
-
+
-
-
-
+
diff --git a/Windows/MainWindow/MainView.xaml.cs b/Windows/MainWindow/MainView.xaml.cs
index 936a74e..54fb619 100644
--- a/Windows/MainWindow/MainView.xaml.cs
+++ b/Windows/MainWindow/MainView.xaml.cs
@@ -1,5 +1,6 @@
using System.Windows;
using StructureHelper.Services;
+using StructureHelper.Services.Primitives;
namespace StructureHelper.Windows.MainWindow
{
diff --git a/Windows/MainWindow/MainViewModel.cs b/Windows/MainWindow/MainViewModel.cs
index 2a26936..13368dc 100644
--- a/Windows/MainWindow/MainViewModel.cs
+++ b/Windows/MainWindow/MainViewModel.cs
@@ -22,6 +22,10 @@ using StructureHelper.Windows.CalculationWindows.CalculationPropertyWindow;
using StructureHelperLogics.Services;
using StructureHelper.Windows.CalculationWindows.CalculationResultWindow;
using StructureHelper.Windows.ViewModels.Calculations.CalculationResult;
+using StructureHelper.Services.Primitives;
+using StructureHelper.Windows.PrimitiveProperiesWindow;
+using StructureHelper.Infrastructure.Exceptions;
+using StructureHelper.Infrastructure.Strings;
namespace StructureHelper.Windows.MainWindow
{
@@ -30,6 +34,8 @@ namespace StructureHelper.Windows.MainWindow
private readonly double scaleRate = 1.1;
private IPrimitiveRepository PrimitiveRepository { get; }
+ public PrimitiveBase SelectedPrimitive { get; set; }
+
private readonly UnitSystemService unitSystemService;
private MainModel Model { get; }
@@ -102,6 +108,10 @@ namespace StructureHelper.Windows.MainWindow
set => OnPropertyChanged(value, ref yY2);
}
public ICommand AddPrimitive { get; }
+ public ICommand Calculate { get; }
+ public ICommand DeletePrimitive { get; }
+ public ICommand EditCalculationPropertyCommand { get; }
+ public ICommand EditPrimitive { get; }
public ICommand AddTestCase { get; }
public ICommand LeftButtonDown { get; }
public ICommand LeftButtonUp { get; }
@@ -115,13 +125,12 @@ namespace StructureHelper.Windows.MainWindow
public ICommand SetInBackOfAll { get; }
public ICommand ScaleCanvasDown { get; }
public ICommand ScaleCanvasUp { get; }
- public ICommand Calculate { get; }
public ICommand SetPopupCanBeClosedTrue { get; }
public ICommand SetPopupCanBeClosedFalse { get; }
- public ICommand EditCalculationPropertyCommand { get; }
+
public string UnitsSystemName => unitSystemService.GetCurrentSystem().Name;
- private double delta = 0.5;
+ private double delta = 0.0005;
public MainViewModel(MainModel model, IPrimitiveRepository primitiveRepository, UnitSystemService unitSystemService)
{
@@ -131,8 +140,8 @@ namespace StructureHelper.Windows.MainWindow
CanvasWidth = 1500;
CanvasHeight = 1000;
XX2 = CanvasWidth;
- XY1 = CanvasHeight / 2;
- YX1 = CanvasWidth / 2;
+ XY1 = CanvasHeight / 2d;
+ YX1 = CanvasWidth / 2d;
YY2 = CanvasHeight;
calculationProperty = new CalculationProperty();
@@ -149,15 +158,15 @@ namespace StructureHelper.Windows.MainWindow
{
if (o is Rectangle rect && rect.BorderCaptured && !rect.ElementLock)
{
- if (rect.PrimitiveWidth % 10 < delta || rect.PrimitiveWidth % 10 >= delta)
- rect.PrimitiveWidth = Math.Round(PanelX / 10) * 10 - rect.X + 10;
+ if (rect.PrimitiveWidth % 10d < delta || rect.PrimitiveWidth % 10d >= delta)
+ rect.PrimitiveWidth = Math.Round(PanelX / 10d) * 10d - rect.X + 10d;
else
- rect.PrimitiveWidth = PanelX - rect.X + 10;
+ rect.PrimitiveWidth = PanelX - rect.X + 10d;
- if (rect.PrimitiveHeight % 10 < delta || rect.PrimitiveHeight % 10 >= delta)
- rect.PrimitiveHeight = Math.Round(PanelY / 10) * 10 - rect.Y + 10;
+ if (rect.PrimitiveHeight % 10d < delta || rect.PrimitiveHeight % 10d >= delta)
+ rect.PrimitiveHeight = Math.Round(PanelY / 10d) * 10d - rect.Y + 10d;
else
- rect.PrimitiveHeight = PanelY - rect.Y + 10;
+ rect.PrimitiveHeight = PanelY - rect.Y + 10d;
}
});
ClearSelection = new RelayCommand(o =>
@@ -228,13 +237,30 @@ namespace StructureHelper.Windows.MainWindow
AddPrimitive = new RelayCommand(o =>
{
if (!(o is PrimitiveType primitiveType)) return;
- var primitive = primitiveType == PrimitiveType.Point
- ? (PrimitiveBase)new Point(50, 0, 0, this)
- : (PrimitiveBase)new Rectangle(60, 40, 0, 0, this);
+ PrimitiveBase primitive;
+ if (primitiveType == PrimitiveType.Rectangle)
+ {
+ primitive = new Rectangle(0.60, 0.40, 0, 0, this);
+ }
+ else if (primitiveType == PrimitiveType.Point)
+ {
+ primitive = new Point(0.50, 0, 0, this);
+ }
+ else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown + nameof(primitiveType)); }
Primitives.Add(primitive);
PrimitiveRepository.Add(primitive);
});
+ DeletePrimitive = new RelayCommand(
+ o=>DeleteSelectedPrimitive(),
+ o => SelectedPrimitive != null
+ );
+
+ EditPrimitive = new RelayCommand(
+ o => EditSelectedPrimitive(),
+ o => SelectedPrimitive != null
+ );
+
AddTestCase = new RelayCommand(o =>
{
foreach (var primitive in GetTestCasePrimitives())
@@ -247,12 +273,6 @@ namespace StructureHelper.Windows.MainWindow
Calculate = new RelayCommand(o =>
{
- //var matrix = model.Calculate(10e3, 0d, 0d);
- //MessageBox.Show(
- // $"{nameof(matrix.EpsZ)} = {matrix.EpsZ};\n" +
- // $"{nameof(matrix.Kx)} = {matrix.Kx};\n" +
- // $"{nameof(matrix.Ky)} = {matrix.Ky}",
- // "StructureHelper");
CalculateResult();
});
@@ -271,6 +291,30 @@ namespace StructureHelper.Windows.MainWindow
});
}
+ private void DeleteSelectedPrimitive()
+ {
+ if (! (SelectedPrimitive is null))
+ {
+ var dialogResult = MessageBox.Show("Delete primitive?", "Please, confirm deleting", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
+ if (dialogResult == DialogResult.Yes)
+ {
+ Primitives.Remove(SelectedPrimitive);
+ PrimitiveRepository.Delete(SelectedPrimitive);
+ }
+ }
+ else { MessageBox.Show("Selection is changed", "Please, select primitive", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); }
+ }
+
+ private void EditSelectedPrimitive()
+ {
+ if (!(SelectedPrimitive is null))
+ {
+ var wnd = new PrimitiveProperties(SelectedPrimitive);
+ wnd.ShowDialog();
+ }
+ else { MessageBox.Show("Selection is changed", "Please, select primitive", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); }
+ }
+
private void CalculateResult()
{
IEnumerable ndms = Model.GetNdms();
@@ -282,17 +326,18 @@ namespace StructureHelper.Windows.MainWindow
private IEnumerable GetTestCasePrimitives()
{
- var width = 400;
- var height = 600;
- var d1 = 12;
- var d2 = 25;
+ var width = 0.4d;
+ var height = 0.6d;
+ var area1 = Math.PI * 0.012d * 0.012d / 4d;
+ var area2 = Math.PI * 0.025d * 0.025d / 4d;
+ var gap = 0.05d;
var rectMaterial = new ConcreteDefinition("C40", 0, 40, 0, 1.3, 1.5);
var pointMaterial = new RebarDefinition("S400", 2, 400, 400, 1.15, 1.15);
- yield return new Rectangle(width, height, -width / 2, -height / 2, this) { Material = rectMaterial, MaterialName = rectMaterial.MaterialClass };
- yield return new Point(d1, -width / 2 + 50, -height / 2 + 50, this) { Material = pointMaterial, MaterialName = pointMaterial.MaterialClass };
- yield return new Point(d1, width / 2 - 50, -height / 2 + 50, this) { Material = pointMaterial, MaterialName = pointMaterial.MaterialClass };
- yield return new Point(d2, -width / 2 + 50, height / 2 - 50, this) { Material = pointMaterial, MaterialName = pointMaterial.MaterialClass };
- yield return new Point(d2, width / 2 - 50, height / 2 - 50, this) { Material = pointMaterial, MaterialName = pointMaterial.MaterialClass };
+ yield return new Rectangle(width, height, 0, 0, this) { Material = rectMaterial, MaterialName = rectMaterial.MaterialClass };
+ yield return new Point(area1, -width / 2 + gap, -height / 2 + gap, this) { Material = pointMaterial, MaterialName = pointMaterial.MaterialClass };
+ yield return new Point(area1, width / 2 - gap, -height / 2 + gap, this) { Material = pointMaterial, MaterialName = pointMaterial.MaterialClass };
+ yield return new Point(area2, -width / 2 + gap, height / 2 - gap, this) { Material = pointMaterial, MaterialName = pointMaterial.MaterialClass };
+ yield return new Point(area2, width / 2 - gap, height / 2 - gap, this) { Material = pointMaterial, MaterialName = pointMaterial.MaterialClass };
}
private void EditCalculationProperty()
{
diff --git a/Windows/PrimitiveProperiesWindow/PrimitivePropertiesView.xaml b/Windows/PrimitiveProperiesWindow/PrimitivePropertiesView.xaml
new file mode 100644
index 0000000..de7ca81
--- /dev/null
+++ b/Windows/PrimitiveProperiesWindow/PrimitivePropertiesView.xaml
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Windows/PrimitiveProperiesWindow/PrimitivePropertiesView.xaml.cs b/Windows/PrimitiveProperiesWindow/PrimitivePropertiesView.xaml.cs
new file mode 100644
index 0000000..2bfd5a2
--- /dev/null
+++ b/Windows/PrimitiveProperiesWindow/PrimitivePropertiesView.xaml.cs
@@ -0,0 +1,64 @@
+using StructureHelper.Infrastructure.Enums;
+using StructureHelper.Infrastructure.UI.DataContexts;
+using StructureHelper.Windows.ViewModels.PrimitiveProperties;
+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;
+using System.Xml.Linq;
+using Point = StructureHelper.Infrastructure.UI.DataContexts.Point;
+using Rectangle = StructureHelper.Infrastructure.UI.DataContexts.Rectangle;
+
+namespace StructureHelper.Windows.PrimitiveProperiesWindow
+{
+ ///
+ /// Логика взаимодействия для PrimitiveProperties.xaml
+ ///
+ public partial class PrimitiveProperties : Window
+ {
+ PrimitiveBase primitive;
+ private PrimitivePropertiesViewModel viewModel;
+ public PrimitiveProperties(PrimitiveBase primitive)
+ {
+ this.primitive = primitive;
+ viewModel = new PrimitivePropertiesViewModel(this.primitive);
+ this.DataContext = viewModel;
+ InitializeComponent();
+ if (primitive is Rectangle) { AddPrimitiveProperties(PrimitiveType.Rectangle); }
+ else if (primitive is Point) { AddPrimitiveProperties(PrimitiveType.Point); }
+ else { throw new Exception("Type of object is unknown"); }
+ }
+ private void AddPrimitiveProperties(PrimitiveType type)
+ {
+ List names = new List();
+ if (type == PrimitiveType.Rectangle)
+ {
+ names.Add("TriangulationProperties");
+ names.Add("RectangleProperties");
+ }
+ else if (type == PrimitiveType.Point)
+ {
+ names.Add("PointProperties");
+ }
+ else { throw new Exception("Type of object is unknown"); }
+ foreach (var name in names)
+ {
+ ContentControl contentControl = new ContentControl();
+ contentControl.SetResourceReference(ContentControl.ContentTemplateProperty, name);
+ Binding binding = new Binding();
+ binding.Source = viewModel;
+ contentControl.SetBinding(ContentControl.ContentProperty, binding);
+ StpProperties.Children.Add(contentControl);
+ }
+ }
+ }
+}
diff --git a/Windows/ViewModels/Calculations/CalculationProperies/CalculationPropertyViewModel.cs b/Windows/ViewModels/Calculations/CalculationProperies/CalculationPropertyViewModel.cs
index 6cc512f..43a04f4 100644
--- a/Windows/ViewModels/Calculations/CalculationProperies/CalculationPropertyViewModel.cs
+++ b/Windows/ViewModels/Calculations/CalculationProperies/CalculationPropertyViewModel.cs
@@ -24,7 +24,7 @@ namespace StructureHelper.Windows.ViewModels.Calculations.CalculationProperies
set
{
calculationProperty.IterationProperty.Accuracy = value;
- OnPropertyChanged("Accuracy");
+ OnPropertyChanged(nameof(IterationAccuracy));
}
}
public int MaxIterationCount
@@ -36,7 +36,7 @@ namespace StructureHelper.Windows.ViewModels.Calculations.CalculationProperies
set
{
calculationProperty.IterationProperty.MaxIterationCount = value;
- OnPropertyChanged("MaxIterationCount");
+ OnPropertyChanged(nameof(MaxIterationCount));
}
}
public IForceCombination SelectedCombination { get; set; }
diff --git a/Windows/ViewModels/PrimitiveProperties/PrimitivePropertiesViewModel.cs b/Windows/ViewModels/PrimitiveProperties/PrimitivePropertiesViewModel.cs
new file mode 100644
index 0000000..ab8fb29
--- /dev/null
+++ b/Windows/ViewModels/PrimitiveProperties/PrimitivePropertiesViewModel.cs
@@ -0,0 +1,174 @@
+using StructureHelper.Infrastructure;
+using StructureHelper.Infrastructure.UI.DataContexts;
+using StructureHelperCommon.Models.Shapes;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+using Point = StructureHelper.Infrastructure.UI.DataContexts.Point;
+using Rectangle = StructureHelper.Infrastructure.UI.DataContexts.Rectangle;
+
+namespace StructureHelper.Windows.ViewModels.PrimitiveProperties
+{
+ public class PrimitivePropertiesViewModel : ViewModelBase, IDataErrorInfo
+ {
+ private PrimitiveBase primitive;
+
+ public string Name
+ {
+ get => primitive.Name;
+ set
+ {
+ primitive.Name = value;
+ OnPropertyChanged(nameof(Name));
+ }
+ }
+ public string MaterialName
+ {
+ get => primitive.MaterialName;
+ set
+ {
+ primitive.Name = value;
+ OnPropertyChanged(nameof(MaterialName));
+ }
+ }
+
+ public double CenterX
+ {
+ get => primitive.CenterX;
+ set
+ {
+ primitive.CenterX = value;
+ OnPropertyChanged(nameof(CenterX));
+ OnPropertyChanged(nameof(primitive.ShowedX));
+ OnPropertyChanged(nameof(primitive.X));
+ }
+
+ }
+
+ public double CenterY
+ {
+ get => primitive.CenterY;
+ set
+ {
+ primitive.CenterY = value;
+ OnPropertyChanged(nameof(CenterY));
+ OnPropertyChanged(nameof(primitive.ShowedY));
+ OnPropertyChanged("Y");
+ }
+ }
+
+ public double Prestrain_Kx
+ {
+ get => primitive.Pre
+ }
+
+ public int MinElementDivision
+ {
+ get => primitive.MinElementDivision;
+ set
+ {
+ primitive.MinElementDivision = value;
+ OnPropertyChanged(nameof(MinElementDivision));
+ }
+ }
+
+ public double MaxElementSize
+ {
+ get => primitive.MaxElementSize;
+ set { primitive.MaxElementSize = value; }
+ }
+
+ public double Width
+ {
+ get
+ {
+ if (primitive is Rectangle)
+ {
+ var shape = primitive as Rectangle;
+ return shape.PrimitiveWidth;
+ }
+ return 0d;
+ }
+ set
+ {
+ if (primitive is Rectangle)
+ {
+ var shape = primitive as Rectangle;
+ shape.PrimitiveWidth = value;
+ }
+ }
+ }
+
+ public double Height
+ {
+ get
+ {
+ if (primitive is Rectangle)
+ {
+ var shape = primitive as Rectangle;
+ return shape.PrimitiveHeight;
+ }
+ return 0d;
+ }
+ set
+ {
+ if (primitive is Rectangle)
+ {
+ var shape = primitive as Rectangle;
+ shape.PrimitiveHeight = value;
+ }
+ }
+ }
+
+ public double Area
+ {
+ get
+ {
+ if (primitive is Point)
+ {
+ var shape = primitive as Point;
+ return shape.Area;
+ }
+ return 0d;
+ }
+ set
+ {
+ if (primitive is Point)
+ {
+ var shape = primitive as Point;
+ shape.Area = value;
+ }
+ }
+ }
+
+ public string this[string columnName]
+ {
+ get
+ {
+ string error = null;
+
+ if (columnName == nameof(Width)
+ ||
+ columnName == nameof(Height))
+ {
+ if (this.Width <= 0 || this.Height <=0)
+ {
+ error = "Width and Height of rectangle must be greater than zero";
+ }
+ }
+ return error;
+ }
+ }
+
+ public string Error => throw new NotImplementedException();
+
+ public PrimitivePropertiesViewModel(PrimitiveBase primitive)
+ {
+ this.primitive = primitive;
+ }
+ }
+}
diff --git a/publish/Application Files/StructureHelper_1_0_0_0/Autofac.dll.deploy b/publish/Application Files/StructureHelper_1_0_0_0/Autofac.dll.deploy
new file mode 100644
index 0000000..e714c37
Binary files /dev/null and b/publish/Application Files/StructureHelper_1_0_0_0/Autofac.dll.deploy differ
diff --git a/publish/Application Files/StructureHelper_1_0_0_0/FieldVisualizer.dll.deploy b/publish/Application Files/StructureHelper_1_0_0_0/FieldVisualizer.dll.deploy
new file mode 100644
index 0000000..95dfa8d
Binary files /dev/null and b/publish/Application Files/StructureHelper_1_0_0_0/FieldVisualizer.dll.deploy differ
diff --git a/publish/Application Files/StructureHelper_1_0_0_0/LoaderCalculator.dll.deploy b/publish/Application Files/StructureHelper_1_0_0_0/LoaderCalculator.dll.deploy
new file mode 100644
index 0000000..75e5c75
Binary files /dev/null and b/publish/Application Files/StructureHelper_1_0_0_0/LoaderCalculator.dll.deploy differ
diff --git a/publish/Application Files/StructureHelper_1_0_0_0/Microsoft.Bcl.AsyncInterfaces.dll.deploy b/publish/Application Files/StructureHelper_1_0_0_0/Microsoft.Bcl.AsyncInterfaces.dll.deploy
new file mode 100644
index 0000000..476f1b1
Binary files /dev/null and b/publish/Application Files/StructureHelper_1_0_0_0/Microsoft.Bcl.AsyncInterfaces.dll.deploy differ
diff --git a/publish/Application Files/StructureHelper_1_0_0_0/Microsoft.Expression.Interactions.dll.deploy b/publish/Application Files/StructureHelper_1_0_0_0/Microsoft.Expression.Interactions.dll.deploy
new file mode 100644
index 0000000..979c965
Binary files /dev/null and b/publish/Application Files/StructureHelper_1_0_0_0/Microsoft.Expression.Interactions.dll.deploy differ
diff --git a/publish/Application Files/StructureHelper_1_0_0_0/Newtonsoft.Json.dll.deploy b/publish/Application Files/StructureHelper_1_0_0_0/Newtonsoft.Json.dll.deploy
new file mode 100644
index 0000000..7af125a
Binary files /dev/null and b/publish/Application Files/StructureHelper_1_0_0_0/Newtonsoft.Json.dll.deploy differ
diff --git a/publish/Application Files/StructureHelper_1_0_0_0/StructureHelper.application b/publish/Application Files/StructureHelper_1_0_0_0/StructureHelper.application
new file mode 100644
index 0000000..4b6ad9f
--- /dev/null
+++ b/publish/Application Files/StructureHelper_1_0_0_0/StructureHelper.application
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SHyyPpiu/G7izGrKPX4ZMq35RGjief8+4X75T8JO5f4=
+
+
+
+E1adO37wivdqDVYQ3FJdqUBxIoyoYoFdNAELzYPbBuU=jstl5R6h+8dI94bEy4n2y/7PgG5Rom+bvC3fLkm/yCktU5o91C/ItwnXyN4hXfhdppkoE62mkP0/OW1zEXb4FwpavdtdHWwc+43UJTMeTvCkNdCg7xF9OLjJJAz+ULupVTydzxWTYPStGTVnZz4LtPJe/vFYX3n/AxMC7NFMiJg=634Yi+GrNI9reFjdsZpwN2SEF2r/nZDEIiBEJTECXqFOxqBh++16dsyDzSgYOxZOR+kEIek8aFKM/2WxvOEzC2X/ptJNWNkrZ51XK4WxI22xifoEC1S0OqcxwKlnOv+89l86L3hm1s7eeUqFGFxTKO1rktlS6XJTzZ/SHiraBKU=AQABCN=EAHOME\UserXMjKJ4t/nikM8DHg6HJIJ3BPIByWkckFtu6nTCUUoN0=VWaDWp9QUuoggLKiadG/ndRKmowvoeC007/3DeuPPAVpZI4UpXa+U5bVIlA8Cv3ftfLG+IAGgpMUa7nR0inH73ifELEvnd+484B5g66ExCNaEYfSVogRUIQmrBTYyCfCQDokGIDdcIUHvonZ2wX1zSD9w/moG5REV5RXVr7k7T8=634Yi+GrNI9reFjdsZpwN2SEF2r/nZDEIiBEJTECXqFOxqBh++16dsyDzSgYOxZOR+kEIek8aFKM/2WxvOEzC2X/ptJNWNkrZ51XK4WxI22xifoEC1S0OqcxwKlnOv+89l86L3hm1s7eeUqFGFxTKO1rktlS6XJTzZ/SHiraBKU=AQABMIIBxTCCAS6gAwIBAgIQdW4a4i1B6ZpEyHZPHlrayTANBgkqhkiG9w0BAQsFADAhMR8wHQYDVQQDHhYARQBBAEgATwBNAEUAXABVAHMAZQByMB4XDTIyMTAyMjE1MDY0M1oXDTIzMTAyMjIxMDY0M1owITEfMB0GA1UEAx4WAEUAQQBIAE8ATQBFAFwAVQBzAGUAcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA634Yi+GrNI9reFjdsZpwN2SEF2r/nZDEIiBEJTECXqFOxqBh++16dsyDzSgYOxZOR+kEIek8aFKM/2WxvOEzC2X/ptJNWNkrZ51XK4WxI22xifoEC1S0OqcxwKlnOv+89l86L3hm1s7eeUqFGFxTKO1rktlS6XJTzZ/SHiraBKUCAwEAATANBgkqhkiG9w0BAQsFAAOBgQCmSBRoEJkrYAzHutpnML6GlC5QoBTOBhEtsZk2LeCDob8oDAtVCmI9MwthBMQnEHdGsiCcsnj4D/Orjbdw2ZTqHcNQSvX7aMqvyQQOGguQA3vi49D08p/TL+wKrpWHmOBdpIxj/x5GtKsqQSe3CUAhvkaHPuq+cn+iRyBAHkoTrA==
\ No newline at end of file
diff --git a/publish/Application Files/StructureHelper_1_0_0_0/StructureHelper.exe.config.deploy b/publish/Application Files/StructureHelper_1_0_0_0/StructureHelper.exe.config.deploy
new file mode 100644
index 0000000..d5dbf25
--- /dev/null
+++ b/publish/Application Files/StructureHelper_1_0_0_0/StructureHelper.exe.config.deploy
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/publish/Application Files/StructureHelper_1_0_0_0/StructureHelper.exe.deploy b/publish/Application Files/StructureHelper_1_0_0_0/StructureHelper.exe.deploy
new file mode 100644
index 0000000..84aa147
Binary files /dev/null and b/publish/Application Files/StructureHelper_1_0_0_0/StructureHelper.exe.deploy differ
diff --git a/publish/Application Files/StructureHelper_1_0_0_0/StructureHelper.exe.manifest b/publish/Application Files/StructureHelper_1_0_0_0/StructureHelper.exe.manifest
new file mode 100644
index 0000000..1d04588
--- /dev/null
+++ b/publish/Application Files/StructureHelper_1_0_0_0/StructureHelper.exe.manifest
@@ -0,0 +1,245 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ R6ACRqrKX5Pm39qTeRyqQfJyN4HN7to8/JL96pswMu0=
+
+
+
+
+
+
+
+
+
+
+
+ UlD3DiTPy4phiibEHSCCRHF9VpOrvcOT+PthozJQbOM=
+
+
+
+
+
+
+
+
+
+
+
+ PS8gJ9hXTUKJj+t7ARGVNofbd6bG7vOlyFm9mY8QXP4=
+
+
+
+
+
+
+
+
+
+
+
+ KVryFC2SFPP9hOr+R3jcoRm+fgIp8UtrqNUmnC8eLng=
+
+
+
+
+
+
+
+
+
+
+
+ 87FN770FSTuFcwFrCLhuW11TtIawRX/XX2e/i/8Evjg=
+
+
+
+
+
+
+
+
+
+
+
+ tiSUnfiw46YVP9+3MKfG9JkLZZLuDZIuF4hDPSdmEPM=
+
+
+
+
+
+
+
+
+
+
+
+ 0vbv6pftc2FgDvLoEYF4NLRhEHyorHVGwM7EaMz3ncQ=
+
+
+
+
+
+
+
+
+
+
+
+ 2XjfxDPsF5OqDx/eSoF05PNVKULLhmzMxZikCy8r4vg=
+
+
+
+
+
+
+
+
+
+
+
+ woG+HEcR/ptJ4ZmmmZz8ScaJL8CfdM0rheZEiESS2AM=
+
+
+
+
+
+
+
+
+
+
+
+ rMzPvkXZ8I/+7ZkW43sz6YxlvgEs//bn+ntnIQzh/vs=
+
+
+
+
+
+
+
+
+
+
+
+ geZkiABC5FFJWhviJiSrSrXooGgD7tpb3afGnfJDmBU=
+
+
+
+
+
+
+
+
+
+
+
+ vz+4RmT0CX8aipvHGlHc+M8akF1AgKTSkNoXMIZuhW8=
+
+
+
+
+
+
+
+
+
+
+
+ HT74aYKB589zcdFVSv71hys5+Wwm2nciEKM9oEG6EYM=
+
+
+
+
+
+
+
+
+
+
+
+ N3aEiOjvRXKbx9miZ3YzxkUAQpdbuWUW4YbabLnNDc8=
+
+
+
+
+
+
+
+
+
+
+
+ T4H/0NxyBNt1r8NepCkXabB8RAWS8oiUJg7qdmJqI8Y=
+
+
+
+
+
+
+
+
+
+
+
+ SqzoyKMwroQpzYzBtoBAdtOp/9YzRw+R/Ta90lu1eHY=
+
+
+
+
+
+
+
+
+
+ XJ4UTVCHY1fDfJcmuGAB8NgEOj0ea/C98clia7y2xfM=
+
+
+OB2DVefJbT397h8VuZEn1Dj805PagjlGkjvQ+eg2rZ4=blDp7n3tL7B1tDTyhS2pXE7hbjOoSslxxHaYDHdaoZInj6XCPN7cKeMbg4HUGCv11OElENrxDwGjmOJsJpVVZwneCtqvVBLm1kz/Qd/NmLdgSWD0RbUFjz0P1/5CrubPVt1vqv2qlwM+qomMvhkMsXHQUhx+wT2E6sGKM1zfymI=634Yi+GrNI9reFjdsZpwN2SEF2r/nZDEIiBEJTECXqFOxqBh++16dsyDzSgYOxZOR+kEIek8aFKM/2WxvOEzC2X/ptJNWNkrZ51XK4WxI22xifoEC1S0OqcxwKlnOv+89l86L3hm1s7eeUqFGFxTKO1rktlS6XJTzZ/SHiraBKU=AQABCN=EAHOME\UseruL0dDdGJ5ceym4EDYSov7My9JtKZZg+sFgYtfJPhsbQ=AK6PzCIEn5wVIj5tMRbAFvkEmilmeKKyeQFXYwtcApYq0BH75EeguTu+Od7oKaJPvgpdlIRK6tvtg8VS4TtiYj8Q/g9v+H9e0OZrtk/p790F53Z+HDFVEyf+MmAmlOX/SxA53HZ5TeUwdZJO/qxDzEASwZSESwXcHP76dTiEvRY=634Yi+GrNI9reFjdsZpwN2SEF2r/nZDEIiBEJTECXqFOxqBh++16dsyDzSgYOxZOR+kEIek8aFKM/2WxvOEzC2X/ptJNWNkrZ51XK4WxI22xifoEC1S0OqcxwKlnOv+89l86L3hm1s7eeUqFGFxTKO1rktlS6XJTzZ/SHiraBKU=AQABMIIBxTCCAS6gAwIBAgIQdW4a4i1B6ZpEyHZPHlrayTANBgkqhkiG9w0BAQsFADAhMR8wHQYDVQQDHhYARQBBAEgATwBNAEUAXABVAHMAZQByMB4XDTIyMTAyMjE1MDY0M1oXDTIzMTAyMjIxMDY0M1owITEfMB0GA1UEAx4WAEUAQQBIAE8ATQBFAFwAVQBzAGUAcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA634Yi+GrNI9reFjdsZpwN2SEF2r/nZDEIiBEJTECXqFOxqBh++16dsyDzSgYOxZOR+kEIek8aFKM/2WxvOEzC2X/ptJNWNkrZ51XK4WxI22xifoEC1S0OqcxwKlnOv+89l86L3hm1s7eeUqFGFxTKO1rktlS6XJTzZ/SHiraBKUCAwEAATANBgkqhkiG9w0BAQsFAAOBgQCmSBRoEJkrYAzHutpnML6GlC5QoBTOBhEtsZk2LeCDob8oDAtVCmI9MwthBMQnEHdGsiCcsnj4D/Orjbdw2ZTqHcNQSvX7aMqvyQQOGguQA3vi49D08p/TL+wKrpWHmOBdpIxj/x5GtKsqQSe3CUAhvkaHPuq+cn+iRyBAHkoTrA==
\ No newline at end of file
diff --git a/publish/Application Files/StructureHelper_1_0_0_0/StructureHelperCommon.dll.deploy b/publish/Application Files/StructureHelper_1_0_0_0/StructureHelperCommon.dll.deploy
new file mode 100644
index 0000000..c4c7059
Binary files /dev/null and b/publish/Application Files/StructureHelper_1_0_0_0/StructureHelperCommon.dll.deploy differ
diff --git a/publish/Application Files/StructureHelper_1_0_0_0/StructureHelperLogics.dll.deploy b/publish/Application Files/StructureHelper_1_0_0_0/StructureHelperLogics.dll.deploy
new file mode 100644
index 0000000..50d3e7b
Binary files /dev/null and b/publish/Application Files/StructureHelper_1_0_0_0/StructureHelperLogics.dll.deploy differ
diff --git a/publish/Application Files/StructureHelper_1_0_0_0/System.Buffers.dll.deploy b/publish/Application Files/StructureHelper_1_0_0_0/System.Buffers.dll.deploy
new file mode 100644
index 0000000..f2d83c5
Binary files /dev/null and b/publish/Application Files/StructureHelper_1_0_0_0/System.Buffers.dll.deploy differ
diff --git a/publish/Application Files/StructureHelper_1_0_0_0/System.Diagnostics.DiagnosticSource.dll.deploy b/publish/Application Files/StructureHelper_1_0_0_0/System.Diagnostics.DiagnosticSource.dll.deploy
new file mode 100644
index 0000000..0774d46
Binary files /dev/null and b/publish/Application Files/StructureHelper_1_0_0_0/System.Diagnostics.DiagnosticSource.dll.deploy differ
diff --git a/publish/Application Files/StructureHelper_1_0_0_0/System.Memory.dll.deploy b/publish/Application Files/StructureHelper_1_0_0_0/System.Memory.dll.deploy
new file mode 100644
index 0000000..4617199
Binary files /dev/null and b/publish/Application Files/StructureHelper_1_0_0_0/System.Memory.dll.deploy differ
diff --git a/publish/Application Files/StructureHelper_1_0_0_0/System.Numerics.Vectors.dll.deploy b/publish/Application Files/StructureHelper_1_0_0_0/System.Numerics.Vectors.dll.deploy
new file mode 100644
index 0000000..0865972
Binary files /dev/null and b/publish/Application Files/StructureHelper_1_0_0_0/System.Numerics.Vectors.dll.deploy differ
diff --git a/publish/Application Files/StructureHelper_1_0_0_0/System.Runtime.CompilerServices.Unsafe.dll.deploy b/publish/Application Files/StructureHelper_1_0_0_0/System.Runtime.CompilerServices.Unsafe.dll.deploy
new file mode 100644
index 0000000..c5ba4e4
Binary files /dev/null and b/publish/Application Files/StructureHelper_1_0_0_0/System.Runtime.CompilerServices.Unsafe.dll.deploy differ
diff --git a/publish/Application Files/StructureHelper_1_0_0_0/System.Threading.Tasks.Extensions.dll.deploy b/publish/Application Files/StructureHelper_1_0_0_0/System.Threading.Tasks.Extensions.dll.deploy
new file mode 100644
index 0000000..eeec928
Binary files /dev/null and b/publish/Application Files/StructureHelper_1_0_0_0/System.Threading.Tasks.Extensions.dll.deploy differ
diff --git a/publish/Application Files/StructureHelper_1_0_0_0/System.Windows.Interactivity.dll.deploy b/publish/Application Files/StructureHelper_1_0_0_0/System.Windows.Interactivity.dll.deploy
new file mode 100644
index 0000000..0419e95
Binary files /dev/null and b/publish/Application Files/StructureHelper_1_0_0_0/System.Windows.Interactivity.dll.deploy differ
diff --git a/publish/StructureHelper.application b/publish/StructureHelper.application
new file mode 100644
index 0000000..4b6ad9f
--- /dev/null
+++ b/publish/StructureHelper.application
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SHyyPpiu/G7izGrKPX4ZMq35RGjief8+4X75T8JO5f4=
+
+
+
+E1adO37wivdqDVYQ3FJdqUBxIoyoYoFdNAELzYPbBuU=jstl5R6h+8dI94bEy4n2y/7PgG5Rom+bvC3fLkm/yCktU5o91C/ItwnXyN4hXfhdppkoE62mkP0/OW1zEXb4FwpavdtdHWwc+43UJTMeTvCkNdCg7xF9OLjJJAz+ULupVTydzxWTYPStGTVnZz4LtPJe/vFYX3n/AxMC7NFMiJg=634Yi+GrNI9reFjdsZpwN2SEF2r/nZDEIiBEJTECXqFOxqBh++16dsyDzSgYOxZOR+kEIek8aFKM/2WxvOEzC2X/ptJNWNkrZ51XK4WxI22xifoEC1S0OqcxwKlnOv+89l86L3hm1s7eeUqFGFxTKO1rktlS6XJTzZ/SHiraBKU=AQABCN=EAHOME\UserXMjKJ4t/nikM8DHg6HJIJ3BPIByWkckFtu6nTCUUoN0=VWaDWp9QUuoggLKiadG/ndRKmowvoeC007/3DeuPPAVpZI4UpXa+U5bVIlA8Cv3ftfLG+IAGgpMUa7nR0inH73ifELEvnd+484B5g66ExCNaEYfSVogRUIQmrBTYyCfCQDokGIDdcIUHvonZ2wX1zSD9w/moG5REV5RXVr7k7T8=634Yi+GrNI9reFjdsZpwN2SEF2r/nZDEIiBEJTECXqFOxqBh++16dsyDzSgYOxZOR+kEIek8aFKM/2WxvOEzC2X/ptJNWNkrZ51XK4WxI22xifoEC1S0OqcxwKlnOv+89l86L3hm1s7eeUqFGFxTKO1rktlS6XJTzZ/SHiraBKU=AQABMIIBxTCCAS6gAwIBAgIQdW4a4i1B6ZpEyHZPHlrayTANBgkqhkiG9w0BAQsFADAhMR8wHQYDVQQDHhYARQBBAEgATwBNAEUAXABVAHMAZQByMB4XDTIyMTAyMjE1MDY0M1oXDTIzMTAyMjIxMDY0M1owITEfMB0GA1UEAx4WAEUAQQBIAE8ATQBFAFwAVQBzAGUAcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA634Yi+GrNI9reFjdsZpwN2SEF2r/nZDEIiBEJTECXqFOxqBh++16dsyDzSgYOxZOR+kEIek8aFKM/2WxvOEzC2X/ptJNWNkrZ51XK4WxI22xifoEC1S0OqcxwKlnOv+89l86L3hm1s7eeUqFGFxTKO1rktlS6XJTzZ/SHiraBKUCAwEAATANBgkqhkiG9w0BAQsFAAOBgQCmSBRoEJkrYAzHutpnML6GlC5QoBTOBhEtsZk2LeCDob8oDAtVCmI9MwthBMQnEHdGsiCcsnj4D/Orjbdw2ZTqHcNQSvX7aMqvyQQOGguQA3vi49D08p/TL+wKrpWHmOBdpIxj/x5GtKsqQSe3CUAhvkaHPuq+cn+iRyBAHkoTrA==
\ No newline at end of file
diff --git a/publish/setup.exe b/publish/setup.exe
new file mode 100644
index 0000000..e6603ed
Binary files /dev/null and b/publish/setup.exe differ