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 @@ - + + + + + + + + + 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