diff --git a/App.xaml b/App.xaml
index 52c6648..6c920ed 100644
--- a/App.xaml
+++ b/App.xaml
@@ -4,6 +4,10 @@
xmlns:local="clr-namespace:StructureHelper"
StartupUri="Windows/MainWindow/MainView.xaml">
-
+
+
+
+
+
diff --git a/Infrastructure/Enums/PrimitiveType.cs b/Infrastructure/Enums/PrimitiveType.cs
new file mode 100644
index 0000000..6cd5693
--- /dev/null
+++ b/Infrastructure/Enums/PrimitiveType.cs
@@ -0,0 +1,8 @@
+namespace StructureHelper.Infrastructure.Enums
+{
+ public enum PrimitiveType
+ {
+ Ellipse,
+ Rectangle
+ }
+}
\ No newline at end of file
diff --git a/Infrastructure/EventArgs.cs b/Infrastructure/EventArgs.cs
index d22d52a..8a607dd 100644
--- a/Infrastructure/EventArgs.cs
+++ b/Infrastructure/EventArgs.cs
@@ -1,6 +1,6 @@
using System;
-namespace StructureHelper
+namespace StructureHelper.Infrastructure
{
public class EventArgs : EventArgs
{
diff --git a/Infrastructure/EventTriggerBase.cs b/Infrastructure/EventTriggerBase.cs
index 55172f4..46bd6b2 100644
--- a/Infrastructure/EventTriggerBase.cs
+++ b/Infrastructure/EventTriggerBase.cs
@@ -2,7 +2,7 @@
using System.Windows;
using EventTrigger = System.Windows.Interactivity.EventTrigger;
-namespace StructureHelper
+namespace StructureHelper.Infrastructure
{
public class EventTriggerBase : EventTrigger where T : RoutedEventArgs
{
diff --git a/Infrastructure/Extensions/ObservableCollectionExtensions.cs b/Infrastructure/Extensions/ObservableCollectionExtensions.cs
index 4133fbd..1c49bb8 100644
--- a/Infrastructure/Extensions/ObservableCollectionExtensions.cs
+++ b/Infrastructure/Extensions/ObservableCollectionExtensions.cs
@@ -1,7 +1,7 @@
using System.Collections.Generic;
using System.Collections.ObjectModel;
-namespace StructureHelper
+namespace StructureHelper.Infrastructure.Extensions
{
public static class ObservableCollectionExtensions
{
diff --git a/Infrastructure/MouseBehaviour.cs b/Infrastructure/MouseBehaviour.cs
index c6eae71..c261472 100644
--- a/Infrastructure/MouseBehaviour.cs
+++ b/Infrastructure/MouseBehaviour.cs
@@ -3,7 +3,7 @@ using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Interactivity;
-namespace StructureHelper
+namespace StructureHelper.Infrastructure
{
public class MouseBehaviour : Behavior
{
diff --git a/Infrastructure/RelayCommand.cs b/Infrastructure/RelayCommand.cs
index 61ccaf4..cee1a9a 100644
--- a/Infrastructure/RelayCommand.cs
+++ b/Infrastructure/RelayCommand.cs
@@ -1,7 +1,7 @@
using System;
using System.Windows.Input;
-namespace StructureHelper
+namespace StructureHelper.Infrastructure
{
public class RelayCommand : ICommand
{
diff --git a/Infrastructure/UI/DataContexts/Ellipse.cs b/Infrastructure/UI/DataContexts/Ellipse.cs
new file mode 100644
index 0000000..79e9eb6
--- /dev/null
+++ b/Infrastructure/UI/DataContexts/Ellipse.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Windows.Media;
+using StructureHelper.Infrastructure.Enums;
+using StructureHelper.Windows.MainWindow;
+
+namespace StructureHelper.Infrastructure.UI.DataContexts
+{
+ public class Ellipse : PrimitiveBase
+ {
+ private double square;
+ public double Square
+ {
+ get => square;
+ set
+ {
+ square = value;
+ PrimitiveWidth = Math.Round(Math.Sqrt(4 * value / Math.PI), 2);
+ OnPropertyChanged(nameof(PrimitiveWidth));
+ OnPropertyChanged();
+ }
+ }
+
+ public Ellipse(double square, double ellipseX, double ellipseY, MainViewModel mainViewModel) : base(PrimitiveType.Ellipse, ellipseX, ellipseY, mainViewModel)
+ {
+ Square = square;
+ ShowedX = 0;
+ ShowedY = 0;
+ }
+ }
+}
diff --git a/Infrastructure/UI/DataContexts/PrimitiveBase.cs b/Infrastructure/UI/DataContexts/PrimitiveBase.cs
new file mode 100644
index 0000000..88acc99
--- /dev/null
+++ b/Infrastructure/UI/DataContexts/PrimitiveBase.cs
@@ -0,0 +1,258 @@
+using System;
+using System.Windows.Input;
+using System.Windows.Media;
+using StructureHelper.Infrastructure.Enums;
+using StructureHelper.Models.Materials;
+using StructureHelper.Windows.MainWindow;
+
+namespace StructureHelper.Infrastructure.UI.DataContexts
+{
+ public abstract class PrimitiveBase : ViewModelBase
+ {
+ #region Поля
+
+ private readonly PrimitiveType type;
+ private bool captured, parameterCaptured, elementLock, paramsPanelVisibilty, popupCanBeClosed = true, borderCaptured;
+ private Brush brush;
+ private MaterialDefinitionBase material;
+ private double opacity = 1, showedOpacity = 0, x, y, xY1, yX1, primitiveWidth, primitiveHeight, showedX, showedY, delta = 0.5;
+ private int showedZIndex = 1, zIndex;
+
+ #endregion
+
+ #region Свойства
+
+ public PrimitiveType Type => type;
+ public bool Captured
+ {
+ set => OnPropertyChanged(value, ref captured);
+ get => captured;
+ }
+ public bool ParameterCaptured
+ {
+ set => OnPropertyChanged(value, ref parameterCaptured);
+ get => parameterCaptured;
+ }
+ public bool ElementLock
+ {
+ get => elementLock;
+ set => OnPropertyChanged(value, ref elementLock);
+ }
+ public Brush Brush
+ {
+ get => brush;
+ set => OnPropertyChanged(value, ref brush);
+ }
+ public MaterialDefinitionBase Material
+ {
+ get => material;
+ set
+ {
+ MaterialName = material.MaterialClass;
+ OnPropertyChanged(value, ref material);
+ OnPropertyChanged(nameof(MaterialName));
+ }
+ }
+ private string materialName = string.Empty;
+ public string MaterialName
+ {
+ get => materialName;
+ set => OnPropertyChanged(value, ref materialName);
+ }
+ public bool ParamsPanelVisibilty
+ {
+ get => paramsPanelVisibilty;
+ set => OnPropertyChanged(value, ref paramsPanelVisibilty);
+ }
+ public bool PopupCanBeClosed
+ {
+ get => popupCanBeClosed;
+ set => OnPropertyChanged(value, ref popupCanBeClosed);
+ }
+ public double ShowedOpacity
+ {
+ get => showedOpacity;
+ set
+ {
+ Opacity = (100 - value) / 100;
+ OnPropertyChanged(nameof(Opacity));
+ OnPropertyChanged(value, ref showedOpacity);
+ }
+ }
+ public double Opacity
+ {
+ get => opacity;
+ set => OnPropertyChanged(value, ref opacity);
+ }
+ public int ShowedZIndex
+ {
+ get => showedZIndex;
+ set
+ {
+ ZIndex = value - 1;
+ OnPropertyChanged(nameof(ZIndex));
+ OnPropertyChanged(value, ref showedZIndex);
+ }
+ }
+ public int ZIndex
+ {
+ get => zIndex;
+ set => OnPropertyChanged(value, ref zIndex);
+ }
+ public double X
+ {
+ get => x;
+ set => OnPropertyChanged(value, ref x);
+ }
+ public double Y
+ {
+ get => y;
+ set => OnPropertyChanged(value, ref y);
+ }
+ public double Xy1
+ {
+ get => xY1;
+ set => OnPropertyChanged(value, ref xY1);
+ }
+ public double Yx1
+ {
+ get => yX1;
+ set => OnPropertyChanged(value, ref yX1);
+ }
+ public double PrimitiveWidth
+ {
+ get => primitiveWidth;
+ set => OnPropertyChanged(value, ref primitiveWidth);
+ }
+ public double PrimitiveHeight
+ {
+ get => primitiveHeight;
+ set => OnPropertyChanged(value, ref primitiveHeight);
+ }
+ public double ShowedX
+ {
+ get => showedX;
+ set
+ {
+ UpdateCoordinatesX(value);
+ OnPropertyChanged(value, ref showedX);
+ OnPropertyChanged(nameof(X));
+ }
+ }
+ public double ShowedY
+ {
+ get => showedY;
+ set
+ {
+ UpdateCoordinatesY(value);
+ OnPropertyChanged(value, ref showedY);
+ OnPropertyChanged(nameof(Y));
+ }
+ }
+ public bool BorderCaptured
+ {
+ get => borderCaptured;
+ set => OnPropertyChanged(value, ref borderCaptured);
+ }
+
+ #endregion
+
+ #region Команды
+ public ICommand PrimitiveLeftButtonDown { get; }
+ public ICommand PrimitiveLeftButtonUp { get; }
+ public ICommand RectanglePreviewMouseMove { get; }
+ public ICommand EllipsePreviewMouseMove { get; }
+ public ICommand PrimitiveDoubleClick { get; }
+
+ #endregion
+
+ protected PrimitiveBase(PrimitiveType type, double rectX, double rectY, MainViewModel mainViewModel)
+ {
+ this.type = type;
+ Yx1 = rectX;
+ Xy1 = rectY;
+ var randomR = new Random().Next(150, 255);
+ var randomG = new Random().Next(0, 255);
+ var randomB = new Random().Next(30, 130);
+ var color = Color.FromRgb((byte)randomR, (byte)randomG, (byte)randomB);
+ Brush = new SolidColorBrush(color);
+ PrimitiveLeftButtonUp = new RelayCommand(o => Captured = false);
+ PrimitiveLeftButtonDown = new RelayCommand(o => Captured = true);
+ RectanglePreviewMouseMove = new RelayCommand(o =>
+ {
+ if (!(o is Rectangle rect)) return;
+ if (Captured && !rect.BorderCaptured && !ElementLock)
+ {
+ var deltaX = PrimitiveWidth / 2;
+ var deltaY = PrimitiveHeight / 2;
+
+ if (rect.ShowedX % 10 <= delta || rect.ShowedX % 10 >= 10 - delta)
+ rect.ShowedX = Math.Round((mainViewModel.PanelX - deltaX - Yx1) / 10) * 10;
+ else
+ rect.ShowedX = mainViewModel.PanelX - deltaX - Yx1;
+
+ if (rect.ShowedY % 10 <= delta || rect.ShowedY % 10 >= 10 - delta)
+ rect.ShowedY = -(Math.Round((mainViewModel.PanelY - deltaY - Xy1 + rect.PrimitiveHeight) / 10) * 10);
+ else
+ rect.ShowedY = -(mainViewModel.PanelY - deltaY - Xy1 + rect.PrimitiveHeight);
+ }
+ if (ParameterCaptured)
+ {
+ //RectParameterX = rect.ShowedX;
+ //RectParameterY = rect.ShowedY;
+ //RectParameterWidth = rect.PrimitiveWidth;
+ //RectParameterHeight = rect.PrimitiveHeight;
+ //ParameterOpacity = rect.ShowedOpacity;
+ //ElementLock = rect.ElementLock;
+ }
+ });
+ EllipsePreviewMouseMove = new RelayCommand(o =>
+ {
+ if (!(o is Ellipse ellipse)) return;
+ if (ellipse.Captured && !ellipse.ElementLock)
+ {
+ var ellipseDelta = ellipse.PrimitiveWidth / 2;
+
+ if (ellipse.ShowedX % 10 <= ellipseDelta || ellipse.ShowedX % 10 >= 10 - ellipseDelta)
+ ellipse.ShowedX = Math.Round((mainViewModel.PanelX - Yx1) / 10) * 10;
+ else
+ ellipse.ShowedX = mainViewModel.PanelX - ellipseDelta - Yx1;
+
+ if (ellipse.ShowedY % 10 <= ellipseDelta || ellipse.ShowedY % 10 >= 10 - ellipseDelta)
+ ellipse.ShowedY = -(Math.Round((mainViewModel.PanelY - Xy1) / 10) * 10);
+ else
+ ellipse.ShowedY = -(mainViewModel.PanelY - ellipseDelta - Xy1);
+ }
+ if (ParameterCaptured)
+ {
+ //EllipseParameterX = ellipse.ShowedX;
+ //EllipseParameterY = ellipse.ShowedY;
+ //EllipseParameterSquare = ellipse.Square;
+ //ParameterOpacity = ellipse.ShowedOpacity;
+ //ElementLock = ellipse.ElementLock;
+ }
+ });
+ PrimitiveDoubleClick = new RelayCommand(o =>
+ {
+ PopupCanBeClosed = false;
+ Captured = false;
+ ParamsPanelVisibilty = true;
+
+ //if (primitive is Rectangle rect)
+ // rect.BorderCaptured = false;
+ });
+
+ }
+
+ private void UpdateCoordinatesX(double showedX)
+ {
+ if (Type == PrimitiveType.Rectangle) X = showedX + Yx1;
+ if (Type == PrimitiveType.Ellipse) X = showedX + Yx1 - PrimitiveWidth / 2;
+ }
+ private void UpdateCoordinatesY(double showedY)
+ {
+ if (Type == PrimitiveType.Rectangle) Y = -showedY + Xy1 - PrimitiveHeight;
+ if (Type == PrimitiveType.Ellipse) Y = -showedY + Xy1 - PrimitiveWidth / 2;
+ }
+ }
+}
diff --git a/Infrastructure/UI/DataContexts/Rectangle.cs b/Infrastructure/UI/DataContexts/Rectangle.cs
new file mode 100644
index 0000000..3847e3a
--- /dev/null
+++ b/Infrastructure/UI/DataContexts/Rectangle.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Windows.Input;
+using System.Windows.Media;
+using StructureHelper.Infrastructure.Enums;
+using StructureHelper.Windows.MainWindow;
+
+namespace StructureHelper.Infrastructure.UI.DataContexts
+{
+ public class Rectangle : PrimitiveBase
+ {
+ public Rectangle(double primitiveWidth, double primitiveHeight, double rectX, double rectY, MainViewModel mainViewModel) : base(PrimitiveType.Rectangle, rectX, rectY, mainViewModel)
+ {
+ PrimitiveWidth = primitiveWidth;
+ PrimitiveHeight = primitiveHeight;
+ ShowedX = 0;
+ ShowedY = 0;
+ }
+ }
+}
diff --git a/Infrastructure/UI/DataTemplates/EllipseTemplate.xaml b/Infrastructure/UI/DataTemplates/EllipseTemplate.xaml
new file mode 100644
index 0000000..66dfa6e
--- /dev/null
+++ b/Infrastructure/UI/DataTemplates/EllipseTemplate.xaml
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/Infrastructure/UI/DataTemplates/EllipseTemplate.xaml.cs b/Infrastructure/UI/DataTemplates/EllipseTemplate.xaml.cs
new file mode 100644
index 0000000..c406719
--- /dev/null
+++ b/Infrastructure/UI/DataTemplates/EllipseTemplate.xaml.cs
@@ -0,0 +1,16 @@
+using System.Windows;
+using System.Windows.Controls;
+
+namespace StructureHelper.Infrastructure.UI.DataTemplates
+{
+ ///
+ /// Логика взаимодействия для EllipseTemplate.xaml
+ ///
+ public partial class EllipseTemplate : UserControl
+ {
+ public EllipseTemplate()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Infrastructure/UI/DataTemplates/RectangleTemplate.xaml b/Infrastructure/UI/DataTemplates/RectangleTemplate.xaml
new file mode 100644
index 0000000..2230f86
--- /dev/null
+++ b/Infrastructure/UI/DataTemplates/RectangleTemplate.xaml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Infrastructure/UI/DataTemplates/RectangleTemplate.xaml.cs b/Infrastructure/UI/DataTemplates/RectangleTemplate.xaml.cs
new file mode 100644
index 0000000..4a08178
--- /dev/null
+++ b/Infrastructure/UI/DataTemplates/RectangleTemplate.xaml.cs
@@ -0,0 +1,16 @@
+using System.Windows;
+using System.Windows.Controls;
+
+namespace StructureHelper.Infrastructure.UI.DataTemplates
+{
+ ///
+ /// Логика взаимодействия для RectangleTemplate.xaml
+ ///
+ public partial class RectangleTemplate : UserControl
+ {
+ public RectangleTemplate()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Infrastructure/UI/Styles.xaml b/Infrastructure/UI/Styles.xaml
new file mode 100644
index 0000000..a502d4c
--- /dev/null
+++ b/Infrastructure/UI/Styles.xaml
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Infrastructure/MouseEventTriggers/DoubleClickEventTrigger.cs b/Infrastructure/UI/Triggers/MouseEventTriggers/DoubleClickEventTrigger.cs
similarity index 74%
rename from Infrastructure/MouseEventTriggers/DoubleClickEventTrigger.cs
rename to Infrastructure/UI/Triggers/MouseEventTriggers/DoubleClickEventTrigger.cs
index 0219791..317b21d 100644
--- a/Infrastructure/MouseEventTriggers/DoubleClickEventTrigger.cs
+++ b/Infrastructure/UI/Triggers/MouseEventTriggers/DoubleClickEventTrigger.cs
@@ -1,6 +1,6 @@
using System.Windows.Input;
-namespace StructureHelper.Infrastructure
+namespace StructureHelper.Infrastructure.UI.Triggers.MouseEventTriggers
{
public class DoubleClickEventTrigger : EventTriggerBase
{
diff --git a/Infrastructure/MouseEventTriggers/MouseWheelDownEventTrigger.cs b/Infrastructure/UI/Triggers/MouseEventTriggers/MouseWheelDownEventTrigger.cs
similarity index 74%
rename from Infrastructure/MouseEventTriggers/MouseWheelDownEventTrigger.cs
rename to Infrastructure/UI/Triggers/MouseEventTriggers/MouseWheelDownEventTrigger.cs
index bea8b3b..9639310 100644
--- a/Infrastructure/MouseEventTriggers/MouseWheelDownEventTrigger.cs
+++ b/Infrastructure/UI/Triggers/MouseEventTriggers/MouseWheelDownEventTrigger.cs
@@ -1,6 +1,6 @@
using System.Windows.Input;
-namespace StructureHelper.Infrastructure
+namespace StructureHelper.Infrastructure.UI.Triggers.MouseEventTriggers
{
public class MouseWheelDownEventTrigger : EventTriggerBase
{
diff --git a/Infrastructure/MouseEventTriggers/MouseWheelUpEventTrigger.cs b/Infrastructure/UI/Triggers/MouseEventTriggers/MouseWheelUpEventTrigger.cs
similarity index 74%
rename from Infrastructure/MouseEventTriggers/MouseWheelUpEventTrigger.cs
rename to Infrastructure/UI/Triggers/MouseEventTriggers/MouseWheelUpEventTrigger.cs
index 18195c8..c7203a2 100644
--- a/Infrastructure/MouseEventTriggers/MouseWheelUpEventTrigger.cs
+++ b/Infrastructure/UI/Triggers/MouseEventTriggers/MouseWheelUpEventTrigger.cs
@@ -1,6 +1,6 @@
using System.Windows.Input;
-namespace StructureHelper.Infrastructure
+namespace StructureHelper.Infrastructure.UI.Triggers.MouseEventTriggers
{
public class MouseWheelUpEventTrigger : EventTriggerBase
{
diff --git a/Infrastructure/UI/UserControls/PrimitivePopup.xaml b/Infrastructure/UI/UserControls/PrimitivePopup.xaml
new file mode 100644
index 0000000..316963c
--- /dev/null
+++ b/Infrastructure/UI/UserControls/PrimitivePopup.xaml
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Infrastructure/UI/UserControls/PrimitivePopup.xaml.cs b/Infrastructure/UI/UserControls/PrimitivePopup.xaml.cs
new file mode 100644
index 0000000..023bd9e
--- /dev/null
+++ b/Infrastructure/UI/UserControls/PrimitivePopup.xaml.cs
@@ -0,0 +1,47 @@
+using System.Windows;
+using System.Windows.Controls;
+using StructureHelper.Infrastructure.Enums;
+
+namespace StructureHelper.Infrastructure.UI.UserControls
+{
+ ///
+ /// Interaction logic for PrimitivePopup.xaml
+ ///
+ public partial class PrimitivePopup : UserControl
+ {
+ public static readonly DependencyProperty TypeProperty =
+ DependencyProperty.Register("Type", typeof(PrimitiveType), typeof(PrimitivePopup));
+
+ public static readonly DependencyProperty IsOpenProperty =
+ DependencyProperty.Register("IsOpen", typeof(bool), typeof(PrimitivePopup));
+
+ private PrimitiveType type;
+ private bool isOpen;
+ public PrimitiveType Type
+ {
+ get => type;
+ set
+ {
+ if (value != type)
+ {
+ type = value;
+ }
+ }
+ }
+
+ public bool IsOpen
+ {
+ get => isOpen;
+ set
+ {
+ if (value != isOpen)
+ isOpen = value;
+ }
+ }
+
+ public PrimitivePopup()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Infrastructure/ViewModelBase.cs b/Infrastructure/ViewModelBase.cs
index 2784acc..0e9d025 100644
--- a/Infrastructure/ViewModelBase.cs
+++ b/Infrastructure/ViewModelBase.cs
@@ -1,12 +1,18 @@
using System.ComponentModel;
using System.Runtime.CompilerServices;
-using StructureHelper.Annotations;
+using StructureHelper.Properties;
namespace StructureHelper.Infrastructure
{
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
+ [NotifyPropertyChangedInvocator]
+ protected virtual void OnPropertyChanged(T value, T prop, [CallerMemberName] string propertyName = null)
+ {
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
+ }
+
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged(T value, ref T prop, [CallerMemberName] string propertyName = null)
{
diff --git a/MaterialCatalogWindow/MaterialCatalogModel.cs b/MaterialCatalogWindow/MaterialCatalogModel.cs
index 2fb270b..908104e 100644
--- a/MaterialCatalogWindow/MaterialCatalogModel.cs
+++ b/MaterialCatalogWindow/MaterialCatalogModel.cs
@@ -1,7 +1,8 @@
using System.Collections.Generic;
using StructureHelper.Infrastructure;
+using StructureHelper.Models.Materials;
-namespace StructureHelper
+namespace StructureHelper.MaterialCatalogWindow
{
public class MaterialCatalogModel
{
diff --git a/MaterialCatalogWindow/MaterialCatalogView.xaml b/MaterialCatalogWindow/MaterialCatalogView.xaml
index 48e0a1c..47ea9c0 100644
--- a/MaterialCatalogWindow/MaterialCatalogView.xaml
+++ b/MaterialCatalogWindow/MaterialCatalogView.xaml
@@ -1,4 +1,4 @@
-
/// Логика взаимодействия для MaterialCatalogView.xaml
///
public partial class MaterialCatalogView : Window
{
- public MaterialCatalogView(bool isMaterialCanBeSelected = false, PrimitiveDefinitionBase primitive = null)
+ public MaterialCatalogView(bool isMaterialCanBeSelected = false, PrimitiveBase primitive = null)
{
var materialCatalogModel = new MaterialCatalogModel();
var materialCatalogViewModel = new MaterialCatalogViewModel(materialCatalogModel, this, isMaterialCanBeSelected, primitive);
diff --git a/MaterialCatalogWindow/MaterialCatalogViewModel.cs b/MaterialCatalogWindow/MaterialCatalogViewModel.cs
index 49fc43a..98527d8 100644
--- a/MaterialCatalogWindow/MaterialCatalogViewModel.cs
+++ b/MaterialCatalogWindow/MaterialCatalogViewModel.cs
@@ -6,11 +6,15 @@ using System.Windows;
using System.Windows.Forms;
using System.Windows.Input;
using Newtonsoft.Json;
-using StructureHelper.Annotations;
+using StructureHelper.Infrastructure;
+using StructureHelper.Infrastructure.UI.DataContexts;
+using StructureHelper.Models.Materials;
+using StructureHelper.Properties;
+using StructureHelper.Windows.AddMaterialWindow;
using OpenFileDialog = System.Windows.Forms.OpenFileDialog;
using SaveFileDialog = System.Windows.Forms.SaveFileDialog;
-namespace StructureHelper
+namespace StructureHelper.MaterialCatalogWindow
{
[JsonObject(MemberSerialization.OptIn)]
public class MaterialCatalogViewModel : INotifyPropertyChanged
@@ -54,7 +58,7 @@ namespace StructureHelper
public Visibility SelectMaterialButtonVisibility => IsMaterialCanBeSelected ? Visibility.Visible : Visibility.Hidden;
public MaterialCatalogViewModel() { }
- public MaterialCatalogViewModel(MaterialCatalogModel materialCatalogModel, MaterialCatalogView materialCatalogView, bool isMaterialCanBeSelected, PrimitiveDefinitionBase primitive = null)
+ public MaterialCatalogViewModel(MaterialCatalogModel materialCatalogModel, MaterialCatalogView materialCatalogView, bool isMaterialCanBeSelected, PrimitiveBase primitive = null)
{
this.materialCatalogModel = materialCatalogModel;
this.materialCatalogView = materialCatalogView;
diff --git a/Models/MaterialDefinition/ConcreteDefinition.cs b/Models/Materials/ConcreteDefinition.cs
similarity index 94%
rename from Models/MaterialDefinition/ConcreteDefinition.cs
rename to Models/Materials/ConcreteDefinition.cs
index d5b8714..fbf1b48 100644
--- a/Models/MaterialDefinition/ConcreteDefinition.cs
+++ b/Models/Materials/ConcreteDefinition.cs
@@ -1,6 +1,6 @@
using System;
-namespace StructureHelper
+namespace StructureHelper.Models.Materials
{
public class ConcreteDefinition : MaterialDefinitionBase
{
diff --git a/Models/MaterialDefinition/MaterialDefinitionBase.cs b/Models/Materials/MaterialDefinitionBase.cs
similarity index 96%
rename from Models/MaterialDefinition/MaterialDefinitionBase.cs
rename to Models/Materials/MaterialDefinitionBase.cs
index 5e47163..8733206 100644
--- a/Models/MaterialDefinition/MaterialDefinitionBase.cs
+++ b/Models/Materials/MaterialDefinitionBase.cs
@@ -1,6 +1,6 @@
using System;
-namespace StructureHelper
+namespace StructureHelper.Models.Materials
{
public class MaterialDefinitionBase
{
diff --git a/Models/MaterialDefinition/RebarDefinition.cs b/Models/Materials/RebarDefinition.cs
similarity index 93%
rename from Models/MaterialDefinition/RebarDefinition.cs
rename to Models/Materials/RebarDefinition.cs
index c9d8fe3..d3a5be4 100644
--- a/Models/MaterialDefinition/RebarDefinition.cs
+++ b/Models/Materials/RebarDefinition.cs
@@ -1,4 +1,4 @@
-namespace StructureHelper
+namespace StructureHelper.Models.Materials
{
public class RebarDefinition : MaterialDefinitionBase
{
diff --git a/Models/PrimitiveDefinition/EllipseDefinition.cs b/Models/PrimitiveDefinition/EllipseDefinition.cs
deleted file mode 100644
index e2ae828..0000000
--- a/Models/PrimitiveDefinition/EllipseDefinition.cs
+++ /dev/null
@@ -1,103 +0,0 @@
-using System;
-using System.Windows.Media;
-
-namespace StructureHelper
-{
- public class EllipseDefinition : PrimitiveDefinitionBase
- {
- private double diameter, showedDiameter, ellipseX, ellipseY;
- public double Diameter
- {
- get => diameter;
- set
- {
- diameter = value;
- ShowedDiameter = Math.Round(value, 2);
- OnPropertyChanged();
- }
- }
- public double ShowedDiameter
- {
- get => showedDiameter;
- set
- {
- showedDiameter = value;
- OnPropertyChanged();
- }
- }
-
- public double EllipseX
- {
- get => ellipseX;
- set
- {
- ellipseX = value;
- OnPropertyChanged();
- }
- }
- public double EllipseY
- {
- get => ellipseY;
- set
- {
- ellipseY = value;
- OnPropertyChanged();
- }
- }
-
-
- private double showedEllipseX, showedEllipseY;
- private double initialEllipseX, initialEllipseY;
- public double ShowedEllipseX
- {
- get => showedEllipseX;
- set
- {
- showedEllipseX = value;
- EllipseX = value + initialEllipseX - Diameter / 2;
- OnPropertyChanged(nameof(EllipseX));
- OnPropertyChanged();
- }
- }
- public double ShowedEllipseY
- {
- get => showedEllipseY;
- set
- {
- showedEllipseY = value;
- EllipseY = -value + initialEllipseY - Diameter / 2;
- OnPropertyChanged(nameof(ShowedEllipseY));
- OnPropertyChanged();
- }
- }
-
-
-
- private double square;
- public double Square
- {
- get => square;
- set
- {
- square = value;
- Diameter = Math.Sqrt(4 * value / Math.PI);
- OnPropertyChanged(nameof(Diameter));
- OnPropertyChanged();
- }
- }
-
- public EllipseDefinition(double square, double ellipseX, double ellipseY)
- {
- Square = square;
- initialEllipseX = ellipseX;
- initialEllipseY = ellipseY;
- ShowedEllipseX = 0;
- ShowedEllipseY = 0;
- var randomR = new Random().Next(150, 255);
- var randomG = new Random().Next(0, 255);
- var randomB = new Random().Next(30, 130);
- var color = Color.FromRgb((byte)randomR, (byte)randomG, (byte)randomB);
- Brush = new SolidColorBrush(color);
- }
- }
-}
diff --git a/Models/PrimitiveDefinition/PrimitiveDefinitionBase.cs b/Models/PrimitiveDefinition/PrimitiveDefinitionBase.cs
deleted file mode 100644
index 8c6b23e..0000000
--- a/Models/PrimitiveDefinition/PrimitiveDefinitionBase.cs
+++ /dev/null
@@ -1,146 +0,0 @@
-using System.ComponentModel;
-using System.Runtime.CompilerServices;
-using System.Windows.Media;
-using StructureHelper.Annotations;
-
-namespace StructureHelper
-{
- public class PrimitiveDefinitionBase : INotifyPropertyChanged
- {
- private bool captured, parameterCaptured, elementLock;
-
- public bool Captured
- {
- set
- {
- captured = value;
- OnPropertyChanged();
- }
- get => captured;
- }
- public bool ParameterCaptured
- {
- set
- {
- parameterCaptured = value;
- OnPropertyChanged();
- }
- get => parameterCaptured;
- }
- public bool ElementLock
- {
- get => elementLock;
- set
- {
- elementLock = value;
- OnPropertyChanged();
- }
- }
- private SolidColorBrush brush = null;
- public SolidColorBrush Brush
- {
- get => brush;
- set
- {
- brush = value;
- OnPropertyChanged();
- }
- }
- private MaterialDefinitionBase material = null;
- public MaterialDefinitionBase Material
- {
- get => material;
- set
- {
- material = value;
- MaterialName = material.MaterialClass;
- OnPropertyChanged();
- OnPropertyChanged(nameof(MaterialName));
- }
- }
- private string materialName = string.Empty;
- public string MaterialName
- {
- get => materialName;
- set
- {
- materialName = value;
- OnPropertyChanged();
- }
- }
- private bool paramsPanelVisibilty;
- public bool ParamsPanelVisibilty
- {
- get => paramsPanelVisibilty;
- set
- {
- paramsPanelVisibilty = value;
- OnPropertyChanged();
- }
- }
- private bool popupCanBeClosed = true;
- public bool PopupCanBeClosed
- {
- get => popupCanBeClosed;
- set
- {
- popupCanBeClosed = value;
- OnPropertyChanged();
- }
- }
- private double opacity = 1;
- private double showedOpacity = 0;
- public double ShowedOpacity
- {
- get => showedOpacity;
- set
- {
- showedOpacity = value;
- Opacity = (100 - value) / 100;
- OnPropertyChanged(nameof(Opacity));
- OnPropertyChanged();
- }
- }
- public double Opacity
- {
- get => opacity;
- set
- {
- opacity = value;
- OnPropertyChanged();
- }
- }
- private int showedZIndex = 1;
- public int ShowedZIndex
- {
- get => showedZIndex;
- set
- {
- showedZIndex = value;
- ZIndex = value - 1;
- OnPropertyChanged(nameof(ZIndex));
- OnPropertyChanged();
- }
- }
-
- private int zIndex;
- public int ZIndex
- {
- get => zIndex;
- set
- {
- zIndex = value;
- OnPropertyChanged();
- }
- }
-
-
- public event PropertyChangedEventHandler PropertyChanged;
-
- [NotifyPropertyChangedInvocator]
- protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
- {
- PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
- }
- }
-}
diff --git a/Models/PrimitiveDefinition/RectangleDefinition.cs b/Models/PrimitiveDefinition/RectangleDefinition.cs
deleted file mode 100644
index bad86f7..0000000
--- a/Models/PrimitiveDefinition/RectangleDefinition.cs
+++ /dev/null
@@ -1,97 +0,0 @@
-using System;
-using System.Windows.Media;
-
-namespace StructureHelper
-{
- public class RectangleDefinition : PrimitiveDefinitionBase
- {
- private bool borderCaptured = false;
- private double rectX, rectY, borderWidth, borderHeight;
-
- public bool BorderCaptured
- {
- set
- {
- borderCaptured = value;
- OnPropertyChanged();
- }
- get => borderCaptured;
- }
-
- public double RectX
- {
- get => rectX;
- set
- {
- rectX = value;
- OnPropertyChanged();
- }
- }
- public double RectY
- {
- get => rectY;
- set
- {
- rectY = value;
- OnPropertyChanged();
- }
- }
- private double showedRectX, showedRectY;
- private double initialRectX, initialRectY;
- public double ShowedRectX
- {
- get => showedRectX;
- set
- {
- showedRectX = value;
- RectX = value + initialRectX;
- OnPropertyChanged(nameof(RectX));
- OnPropertyChanged();
- }
- }
- public double ShowedRectY
- {
- get => showedRectY;
- set
- {
- showedRectY = value;
- RectY = -value + initialRectY - BorderHeight;
- OnPropertyChanged(nameof(RectY));
- OnPropertyChanged();
- }
- }
- public double BorderWidth
- {
- get => borderWidth;
- set
- {
- borderWidth = value;
- OnPropertyChanged();
- }
- }
- public double BorderHeight
- {
- get => borderHeight;
- set
- {
- borderHeight = value;
- OnPropertyChanged();
- }
- }
-
- public RectangleDefinition(double borderWidth, double borderHeight, double rectX, double rectY)
- {
- BorderWidth = borderWidth;
- BorderHeight = borderHeight;
- initialRectX = rectX;
- initialRectY = rectY;
- ShowedRectX = 0;
- ShowedRectY = 0;
- var randomR = new Random().Next(150, 255);
- var randomG = new Random().Next(0, 255);
- var randomB = new Random().Next(30, 130);
- var color = Color.FromRgb((byte)randomR, (byte)randomG, (byte)randomB);
- Brush = new SolidColorBrush(color);
- }
- }
-}
diff --git a/Properties/Annotations.cs b/Properties/Annotations.cs
index 7523de5..ff05b7a 100644
--- a/Properties/Annotations.cs
+++ b/Properties/Annotations.cs
@@ -21,6 +21,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. */
using System;
+
// ReSharper disable UnusedType.Global
#pragma warning disable 1591
@@ -31,7 +32,7 @@ using System;
// ReSharper disable MemberCanBeProtected.Global
// ReSharper disable InconsistentNaming
-namespace StructureHelper.Annotations
+namespace StructureHelper.Properties
{
///
/// Indicates that the value of the marked element could be null sometimes,
diff --git a/StructureHelper.csproj b/StructureHelper.csproj
index 73e59fd..b2aed7f 100644
--- a/StructureHelper.csproj
+++ b/StructureHelper.csproj
@@ -65,6 +65,10 @@
MSBuild:Compile
Designer
+
+
+ PrimitivePopup.xaml
+
AddMaterialView.xaml
@@ -79,24 +83,30 @@
-
-
+
+
-
+
-
-
-
+
+
+
-
-
+
+
+
+ EllipseTemplate.xaml
+
+
+ RectangleTemplate.xaml
+
-
+
@@ -111,6 +121,14 @@
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
@@ -123,10 +141,18 @@
MSBuild:Compile
Designer
+
+ Designer
+ MSBuild:Compile
+
MSBuild:Compile
Designer
+
+ Designer
+ MSBuild:Compile
+
diff --git a/Windows/AddMaterialWindow/AddMaterialView.xaml b/Windows/AddMaterialWindow/AddMaterialView.xaml
index 0817184..e08c9fd 100644
--- a/Windows/AddMaterialWindow/AddMaterialView.xaml
+++ b/Windows/AddMaterialWindow/AddMaterialView.xaml
@@ -1,11 +1,12 @@
-
diff --git a/Windows/AddMaterialWindow/AddMaterialView.xaml.cs b/Windows/AddMaterialWindow/AddMaterialView.xaml.cs
index cf9c865..310dae3 100644
--- a/Windows/AddMaterialWindow/AddMaterialView.xaml.cs
+++ b/Windows/AddMaterialWindow/AddMaterialView.xaml.cs
@@ -1,6 +1,7 @@
using System.Windows;
+using StructureHelper.MaterialCatalogWindow;
-namespace StructureHelper
+namespace StructureHelper.Windows.AddMaterialWindow
{
///
/// Логика взаимодействия для AddMaterialView.xaml
diff --git a/Windows/AddMaterialWindow/AddMaterialViewModel.cs b/Windows/AddMaterialWindow/AddMaterialViewModel.cs
index 4e5b790..21dce53 100644
--- a/Windows/AddMaterialWindow/AddMaterialViewModel.cs
+++ b/Windows/AddMaterialWindow/AddMaterialViewModel.cs
@@ -2,8 +2,10 @@
using System.Linq;
using System.Windows.Input;
using StructureHelper.Infrastructure;
+using StructureHelper.MaterialCatalogWindow;
+using StructureHelper.Models.Materials;
-namespace StructureHelper
+namespace StructureHelper.Windows.AddMaterialWindow
{
public class AddMaterialViewModel : ViewModelBase
{
diff --git a/Windows/ColorPickerWindow/ColorPickerView.xaml b/Windows/ColorPickerWindow/ColorPickerView.xaml
index 0a7a9e9..ae0afa2 100644
--- a/Windows/ColorPickerWindow/ColorPickerView.xaml
+++ b/Windows/ColorPickerWindow/ColorPickerView.xaml
@@ -1,4 +1,4 @@
-
/// Логика взаимодействия для ColorPickerView.xaml
///
public partial class ColorPickerView : Window
{
- public ColorPickerView(PrimitiveDefinitionBase primitive)
+ public ColorPickerView(PrimitiveBase primitive)
{
var viewModel = new ColorPickerViewModel(primitive);
DataContext = viewModel;
diff --git a/Windows/ColorPickerWindow/ColorPickerViewModel.cs b/Windows/ColorPickerWindow/ColorPickerViewModel.cs
index fb93e59..5287416 100644
--- a/Windows/ColorPickerWindow/ColorPickerViewModel.cs
+++ b/Windows/ColorPickerWindow/ColorPickerViewModel.cs
@@ -1,69 +1,12 @@
using System;
-using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows.Input;
using System.Windows.Media;
-using StructureHelper.Annotations;
using StructureHelper.Infrastructure;
+using StructureHelper.Infrastructure.UI.DataContexts;
-namespace StructureHelper
+namespace StructureHelper.Windows.ColorPickerWindow
{
- //public class ColorPickerViewModel : ViewModelBase
- //{
- // private int red, green, blue;
-
- // public int Red
- // {
- // get => red;
- // set => OnColorItemChanged(value, ref red);
- // }
- // public int Green
- // {
- // get => green;
- // set => OnColorItemChanged(value, ref green);
- // }
- // public int Blue
- // {
- // get => blue;
- // set => OnColorItemChanged(value, ref blue);
- // }
-
- // private SolidColorBrush selectedColor;
- // public SolidColorBrush SelectedColor
- // {
- // get => selectedColor;
- // set => OnPropertyChanged(value, selectedColor);
- // }
- // public ICommand SetColor { get; }
- // public ColorPickerViewModel(PrimitiveDefinitionBase primitive)
- // {
- // if (primitive != null)
- // {
- // var solidBrush = primitive.Brush;
- // Red = solidBrush.Color.R;
- // Green = solidBrush.Color.G;
- // Blue = solidBrush.Color.B;
-
- // SetColor = new RelayCommand(o => primitive.Brush = SelectedColor);
- // }
- // }
- // private void OnColorItemChanged(int value, ref int colorItem, [CallerMemberName] string propertyName = null)
- // {
- // if (value >= 0 && value <= 255 && Math.Abs(colorItem - value) > 0.001)
- // {
- // colorItem = value;
- // OnPropertyChanged(propertyName);
- // UpdateSelectedColor();
- // }
- // }
- // private void UpdateSelectedColor()
- // {
- // var color = Color.FromRgb((byte)Red, (byte)Green, (byte)Blue);
- // SelectedColor = new SolidColorBrush(color);
- // OnPropertyChanged(nameof(SelectedColor));
- // }
- //}
-
public class ColorPickerViewModel : ViewModelBase
{
private int red, green, blue;
@@ -84,19 +27,18 @@ namespace StructureHelper
set => OnColorItemChanged(value, ref blue);
}
- private SolidColorBrush selectedColor;
- public SolidColorBrush SelectedColor
+ private Brush selectedColor;
+ public Brush SelectedColor
{
get => selectedColor;
- //selectedColor = value;
- set => OnPropertyChanged(value, ref selectedColor);
+ set => OnPropertyChanged(value, selectedColor);
}
public ICommand SetColor { get; }
- public ColorPickerViewModel(PrimitiveDefinitionBase primitive)
+ public ColorPickerViewModel(PrimitiveBase primitive)
{
if (primitive != null)
{
- var solidBrush = primitive.Brush;
+ var solidBrush = (SolidColorBrush)primitive.Brush;
Red = solidBrush.Color.R;
Green = solidBrush.Color.G;
Blue = solidBrush.Color.B;
diff --git a/Windows/MainWindow/MainModel.cs b/Windows/MainWindow/MainModel.cs
index 70dfd26..46e94fe 100644
--- a/Windows/MainWindow/MainModel.cs
+++ b/Windows/MainWindow/MainModel.cs
@@ -1,4 +1,4 @@
-namespace StructureHelper
+namespace StructureHelper.Windows.MainWindow
{
public class MainModel
{
diff --git a/Windows/MainWindow/MainView.xaml b/Windows/MainWindow/MainView.xaml
index 9d8e51b..149ed70 100644
--- a/Windows/MainWindow/MainView.xaml
+++ b/Windows/MainWindow/MainView.xaml
@@ -1,11 +1,14 @@
-
@@ -13,238 +16,11 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -262,15 +38,15 @@