UnitSystem inplementation started, Calculation started

This commit is contained in:
NickAppLab
2022-08-26 01:49:22 +05:00
parent e73702d133
commit 51748407e8
29 changed files with 252 additions and 290 deletions

View File

@@ -4,8 +4,9 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:StructureHelper"
xmlns:colorPickerWindow="clr-namespace:StructureHelper.Windows.ColorPickerWindow"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance local:ColorPickerViewModel}"
d:DataContext="{d:DesignInstance colorPickerWindow:ColorPickerViewModel}"
Title="Выбрать цвет" Height="200" Width="500" Topmost="True" ResizeMode="NoResize">
<Grid>
<Grid.RowDefinitions>
@@ -28,6 +29,7 @@
<Rectangle Fill="{Binding SelectedColor}"/>
</Border>
<TextBlock Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="10" Text="Зеленый"/>
<Slider Grid.Row="1" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Stretch" Margin="10" Value="{Binding Green}" Minimum="0" Maximum="255"/>
<TextBox Grid.Row="1" Grid.Column="2" VerticalAlignment="Center" HorizontalAlignment="Stretch" Margin="10" Text="{Binding Green}"/>

View File

@@ -31,7 +31,7 @@ namespace StructureHelper.Windows.ColorPickerWindow
public Brush SelectedColor
{
get => selectedColor;
set => OnPropertyChanged(value, selectedColor);
set => OnPropertyChanged(value, ref selectedColor);
}
public ICommand SetColor { get; }
public ColorPickerViewModel(PrimitiveBase primitive)

View File

@@ -1,7 +1,30 @@
namespace StructureHelper.Windows.MainWindow
using LoaderCalculator.Data.Matrix;
using StructureHelper.Services;
using StructureHelper.UnitSystem;
using StructureHelperLogics.Services;
using System.Linq;
namespace StructureHelper.Windows.MainWindow
{
public class MainModel
{
private IPrimitiveRepository primitiveRepository;
private CalculationService calculationService;
private UnitSystemService unitSystemService;
public MainModel(IPrimitiveRepository primitiveRepository, CalculationService calculationService, UnitSystemService unitSystemService)
{
this.primitiveRepository = primitiveRepository;
this.calculationService = calculationService;
this.unitSystemService = unitSystemService;
}
public IStrainMatrix Calculate(double mx, double my, double nz)
{
var unitSystem = unitSystemService.GetCurrentSystem();
return calculationService.GetPrimitiveStrainMatrix(primitiveRepository.GetPoints()
.Select(x => x.GetNdmPrimitive(unitSystem))
.Concat(primitiveRepository.GetRectangles().Select(x => x.GetNdmPrimitive(unitSystem))).ToArray(), mx, my, nz);
}
}
}

View File

@@ -9,12 +9,10 @@
xmlns:dataContexts="clr-namespace:StructureHelper.Infrastructure.UI.DataContexts"
xmlns:mouseEventTriggers="clr-namespace:StructureHelper.Infrastructure.UI.Triggers.MouseEventTriggers"
xmlns:local="clr-namespace:StructureHelper.Windows.MainWindow"
xmlns:enums="clr-namespace:StructureHelper.Infrastructure.Enums"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance local:MainViewModel}"
Title="StructureHelper" Height="700" Width="1000">
<Window.InputBindings>
<KeyBinding Command="{Binding SetParameters}" Key="Enter"/>
</Window.InputBindings>
<Window.Resources>
<DataTemplate DataType="{x:Type dataContexts:Rectangle}">
<dataTemplates:RectangleTemplate/>
@@ -29,7 +27,10 @@
<RowDefinition Height="40"/>
<RowDefinition Height="40"/>
</Grid.RowDefinitions>
<Border BorderBrush="Black" Background="White" BorderThickness="1" Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border BorderBrush="Black" Background="White" BorderThickness="1" Margin="5" Grid.ColumnSpan="5">
<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewMouseDown">
<i:InvokeCommandAction Command="{Binding ClearSelection}" CommandParameter="{Binding}"/>
@@ -87,8 +88,15 @@
</Canvas>
</ScrollViewer>
</Border>
<Button Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="10" Content="Справочник" Command="{Binding OpenMaterialCatalog}"/>
<Button Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="10" Content="Добавить прямоугольник" Command="{Binding AddRectangle}"/>
<Button Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="10" Content="Добавить точку" Command="{Binding AddEllipse}"/>
<StackPanel Grid.Row="1" Orientation="Horizontal">
<Button VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5" Content="Справочник" Command="{Binding OpenMaterialCatalog}"/>
<Button VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5" Content="Система едениц" Command="{Binding OpenUnitsSystemSettings}"/>
<Label VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5" Content="{Binding UnitsSystemName}"/>
</StackPanel>
<StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Right">
<Button VerticalAlignment="Center" Margin="5" Content="Добавить прямоугольник" Command="{Binding AddPrimitive}" CommandParameter="{x:Static enums:PrimitiveType.Rectangle}"/>
<Button VerticalAlignment="Center" Margin="5" Content="Добавить точку" Command="{Binding AddPrimitive}" CommandParameter="{x:Static enums:PrimitiveType.Point}"/>
</StackPanel>
<Button Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="5" Content="Рассчитать" Command="{Binding Calculate}"/>
</Grid>
</Window>

View File

@@ -6,12 +6,10 @@ namespace StructureHelper.Windows.MainWindow
public partial class MainView : Window
{
public IPrimitiveRepository PrimitiveRepository { get; }
public IPrimitiveService PrimitiveService { get; }
public MainView(IPrimitiveRepository primitiveRepository, IPrimitiveService primitiveService, MainViewModel viewModel)
public MainView(IPrimitiveRepository primitiveRepository, MainViewModel viewModel)
{
PrimitiveRepository = primitiveRepository;
PrimitiveService = primitiveService;
DataContext = viewModel;
InitializeComponent();
}

View File

@@ -3,21 +3,25 @@ using System.Collections.ObjectModel;
using System.Linq;
using System.Windows.Input;
using StructureHelper.Infrastructure;
using StructureHelper.Infrastructure.Enums;
using StructureHelper.Infrastructure.Extensions;
using StructureHelper.Infrastructure.UI.DataContexts;
using StructureHelper.MaterialCatalogWindow;
using StructureHelper.Services;
using StructureHelper.Windows.ColorPickerWindow;
using StructureHelper.UnitSystem;
namespace StructureHelper.Windows.MainWindow
{
public class MainViewModel : ViewModelBase
{
private IPrimitiveService PrimitiveService { get; }
private readonly double scaleRate = 1.1;
private IPrimitiveRepository PrimitiveRepository { get; }
private readonly UnitSystemService unitSystemService;
private MainModel Model { get; }
public ObservableCollection<PrimitiveBase> Primitives { get; set; }
public ICommand AddRectangle { get; }
private double panelX, panelY, scrollPanelX, scrollPanelY;
@@ -42,85 +46,9 @@ namespace StructureHelper.Windows.MainWindow
set => OnPropertyChanged(value, ref scrollPanelY);
}
private double rectParameterX, rectParameterY, rectParameterWidth, rectParameterHeight;
public double RectParameterX
{
get => rectParameterX;
set => OnPropertyChanged(value, ref rectParameterX);
}
public double RectParameterY
{
get => rectParameterY;
set => OnPropertyChanged(value, ref rectParameterY);
}
public double RectParameterWidth
{
get => rectParameterWidth;
set => OnPropertyChanged(value, ref rectParameterWidth);
}
public double RectParameterHeight
{
get => rectParameterHeight;
set => OnPropertyChanged(value, ref rectParameterHeight);
}
private double parameterOpacity = 0;
public double ParameterOpacity
{
get => parameterOpacity;
set
{
if (value >= 0 && value <= 100)
OnPropertyChanged(value, ref parameterOpacity);
}
}
private double pointParameterX, pointParameterY, pointParameterSquare;
public double EllipseParameterX
{
get => pointParameterX;
set => OnPropertyChanged(value, ref pointParameterX);
}
public double EllipseParameterY
{
get => pointParameterY;
set => OnPropertyChanged(value, ref pointParameterY);
}
public double EllipseParameterSquare
{
get => pointParameterSquare;
set => OnPropertyChanged(value, ref pointParameterSquare);
}
private bool elementLock;
public bool ElementLock
{
get => elementLock;
set => OnPropertyChanged(value, ref elementLock);
}
private int primitivesCount;
public int PrimitivesCount
{
get => primitivesCount;
set => OnPropertyChanged(value, ref primitivesCount);
}
private int primitiveIndex = 1;
public int PrimitiveIndex
{
get => primitiveIndex;
set
{
if (value >= 0 && value <= primitivesCount)
OnPropertyChanged(value, ref primitiveIndex);
}
}
public int PrimitivesCount => Primitives.Count;
private double scaleValue = 1.0;
public double ScaleValue
{
get => scaleValue;
@@ -160,42 +88,37 @@ namespace StructureHelper.Windows.MainWindow
get => yY2;
set => OnPropertyChanged(value, ref yY2);
}
public ICommand AddPrimitive { get; }
public ICommand LeftButtonDown { get; }
public ICommand LeftButtonUp { get; }
public ICommand PreviewMouseMove { get; }
public ICommand SetParameters { get; }
public ICommand ClearSelection { get; }
public ICommand OpenMaterialCatalog { get; }
public ICommand OpenMaterialCatalogWithSelection { get; }
public ICommand OpenUnitsSystemSettings { get; }
public ICommand SetColor { get; }
public ICommand SetInFrontOfAll { get; }
public ICommand SetInBackOfAll { get; }
public ICommand ScaleCanvasDown { get; }
public ICommand ScaleCanvasUp { get; }
public ICommand AddEllipse { get; }
public ICommand Calculate { get; }
public ICommand SetPopupCanBeClosedTrue { get; }
public ICommand SetPopupCanBeClosedFalse { get; }
public string UnitsSystemName => unitSystemService.GetCurrentSystem().Name;
private double delta = 0.5;
public MainViewModel(MainModel model, IPrimitiveService primitiveService, IPrimitiveRepository primitiveRepository)
public MainViewModel(MainModel model, IPrimitiveRepository primitiveRepository, UnitSystemService unitSystemService)
{
PrimitiveService = primitiveService;
PrimitiveRepository = primitiveRepository;
Model = model;
this.unitSystemService = unitSystemService;
CanvasWidth = 1500;
CanvasHeight = 1000;
XX2 = CanvasWidth;
XY1 = CanvasHeight / 2;
YX1 = CanvasWidth / 2;
YY2 = CanvasHeight;
LeftButtonUp = new RelayCommand(o =>
{
if (o is Rectangle rect) rect.BorderCaptured = false;
@@ -219,44 +142,15 @@ namespace StructureHelper.Windows.MainWindow
rect.PrimitiveHeight = PanelY - rect.Y + 10;
}
});
SetParameters = new RelayCommand(o =>
{
var primitive = Primitives.FirstOrDefault(x => x.ParameterCaptured);
if (primitive != null)
{
primitive.ElementLock = ElementLock;
primitive.ShowedOpacity = ParameterOpacity;
Primitives.MoveElementToSelectedIndex(primitive, PrimitiveIndex);
foreach (var primitiveDefinition in Primitives)
primitiveDefinition.ShowedZIndex = Primitives.IndexOf(primitiveDefinition) + 1;
switch (primitive)
{
case Rectangle rectangle:
rectangle.ShowedX = RectParameterX;
rectangle.ShowedY = RectParameterY;
rectangle.PrimitiveWidth = RectParameterWidth;
rectangle.PrimitiveHeight = RectParameterHeight;
break;
case Point point:
point.Square = EllipseParameterSquare;
point.ShowedX = EllipseParameterX;
point.ShowedY = EllipseParameterY;
break;
}
}
});
ClearSelection = new RelayCommand(o =>
{
var primitive = Primitives.FirstOrDefault(x => x.ParamsPanelVisibilty);
var primitive = Primitives?.FirstOrDefault(x => x.ParamsPanelVisibilty);
if (primitive != null && primitive.PopupCanBeClosed)
{
primitive.ParamsPanelVisibilty = false;
primitive.ParameterCaptured = false;
}
});
OpenMaterialCatalog = new RelayCommand(o =>
{
var materialCatalogView = new MaterialCatalogView();
@@ -268,6 +162,10 @@ namespace StructureHelper.Windows.MainWindow
var materialCatalogView = new MaterialCatalogView(true, primitive);
materialCatalogView.ShowDialog();
});
OpenUnitsSystemSettings = new RelayCommand(o =>
{
OnPropertyChanged(nameof(UnitsSystemName));
});
SetColor = new RelayCommand(o =>
{
var primitive = o as PrimitiveBase;
@@ -287,21 +185,21 @@ namespace StructureHelper.Windows.MainWindow
{
if (!(o is PrimitiveBase primitive)) return;
foreach (var primitiveDefinition in Primitives)
if (primitiveDefinition.ShowedZIndex < primitive.ShowedZIndex && primitiveDefinition != primitive)
if (primitiveDefinition != primitive && primitiveDefinition.ShowedZIndex < primitive.ShowedZIndex)
primitiveDefinition.ShowedZIndex++;
primitive.ShowedZIndex = 1;
OnPropertyChanged(nameof(primitive.ShowedZIndex));
});
ScaleCanvasDown = new RelayCommand(o =>
{
var scaleRate = 1.1;
ScrollPanelX = PanelX;
ScrollPanelY = PanelY;
ScaleValue *= scaleRate;
});
ScaleCanvasUp = new RelayCommand(o =>
{
var scaleRate = 1.1;
ScrollPanelX = PanelX;
ScrollPanelY = PanelY;
ScaleValue /= scaleRate;
@@ -309,20 +207,19 @@ namespace StructureHelper.Windows.MainWindow
Primitives = new ObservableCollection<PrimitiveBase>();
AddRectangle = new RelayCommand(o =>
AddPrimitive = new RelayCommand(o =>
{
var rectangle = new Rectangle(60, 40, YX1, XY1, this);
Primitives.Add(rectangle);
PrimitivesCount = Primitives.Count;
PrimitiveRepository.Add(rectangle);
if (!(o is PrimitiveType primitiveType)) return;
var primitive = primitiveType == PrimitiveType.Point
? (PrimitiveBase) new Point(50, YX1, XY1, this)
: (PrimitiveBase) new Rectangle(60, 40, YX1, XY1, this);
Primitives.Add(primitive);
PrimitiveRepository.Add(primitive);
});
AddEllipse = new RelayCommand(o =>
Calculate = new RelayCommand(o =>
{
var point = new Point(2000, YX1, XY1, this);
Primitives.Add(point);
PrimitivesCount = Primitives.Count;
PrimitiveRepository.Add(point);
model.Calculate(-50e3, 0d, 0d);
});
SetPopupCanBeClosedTrue = new RelayCommand(o =>
@@ -330,6 +227,7 @@ namespace StructureHelper.Windows.MainWindow
if (!(o is PrimitiveBase primitive)) return;
primitive.PopupCanBeClosed = true;
});
SetPopupCanBeClosedFalse = new RelayCommand(o =>
{
if (!(o is PrimitiveBase primitive)) return;