Circle Primitive Added
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
public enum PrimitiveType
|
||||
{
|
||||
Point,
|
||||
Rectangle
|
||||
Rectangle,
|
||||
Circle
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
using StructureHelper.Infrastructure.UI.Converters.Units;
|
||||
using StructureHelperCommon.Infrastructures.Exceptions;
|
||||
using StructureHelperCommon.Infrastructures.Strings;
|
||||
using StructureHelperLogics.NdmCalculations.Primitives;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace StructureHelper.Infrastructure.UI.DataContexts
|
||||
{
|
||||
public class CircleViewPrimitive : PrimitiveBase, IHasDivision, IHasCenter
|
||||
{
|
||||
ICirclePrimitive primitive;
|
||||
public double Diameter
|
||||
{ get
|
||||
{
|
||||
return primitive.Diameter;
|
||||
}
|
||||
set
|
||||
{
|
||||
primitive.Diameter = value;
|
||||
RefreshPlacement();
|
||||
}
|
||||
}
|
||||
public int NdmMinDivision { get; set; }
|
||||
public double NdmMaxSize { get; set; }
|
||||
|
||||
public double PrimitiveLeft => DeltaX - Diameter / 2d;
|
||||
public double PrimitiveTop => DeltaY - Diameter / 2d;
|
||||
|
||||
public CircleViewPrimitive(INdmPrimitive primitive) : base(primitive)
|
||||
{
|
||||
if (primitive is not ICirclePrimitive)
|
||||
{
|
||||
throw new StructureHelperException(ErrorStrings.DataIsInCorrect + $"\nExpected: {nameof(ICirclePrimitive)}, But was: {nameof(primitive)}");
|
||||
}
|
||||
this.primitive = primitive as ICirclePrimitive;
|
||||
}
|
||||
|
||||
public override INdmPrimitive GetNdmPrimitive()
|
||||
{
|
||||
return primitive;
|
||||
}
|
||||
|
||||
private void RefreshPlacement()
|
||||
{
|
||||
OnPropertyChanged(nameof(Diameter));
|
||||
OnPropertyChanged(nameof(CenterX));
|
||||
OnPropertyChanged(nameof(CenterY));
|
||||
OnPropertyChanged(nameof(PrimitiveLeft));
|
||||
OnPropertyChanged(nameof(PrimitiveTop));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -19,16 +19,21 @@ namespace StructureHelper.Infrastructure.UI.DataContexts
|
||||
ObservableCollection<PrimitiveBase> viewItems = new ObservableCollection<PrimitiveBase>();
|
||||
foreach (var item in primitives)
|
||||
{
|
||||
if (item is IPointPrimitive)
|
||||
{
|
||||
var point = item as IPointPrimitive;
|
||||
viewItems.Add(new PointViewPrimitive(point));
|
||||
}
|
||||
else if (item is IRectanglePrimitive)
|
||||
if (item is IRectanglePrimitive)
|
||||
{
|
||||
var rect = item as IRectanglePrimitive;
|
||||
viewItems.Add(new RectangleViewPrimitive(rect));
|
||||
}
|
||||
else if (item is ICirclePrimitive)
|
||||
{
|
||||
var circle = item as ICirclePrimitive;
|
||||
viewItems.Add(new CircleViewPrimitive(circle));
|
||||
}
|
||||
else if (item is IPointPrimitive)
|
||||
{
|
||||
var point = item as IPointPrimitive;
|
||||
viewItems.Add(new PointViewPrimitive(point));
|
||||
}
|
||||
else throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown);
|
||||
}
|
||||
return viewItems;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
xmlns:userControls="clr-namespace:StructureHelper.Infrastructure.UI.UserControls"
|
||||
mc:Ignorable="d">
|
||||
<StackPanel>
|
||||
<Ellipse Style="{StaticResource EllipseStyle}" d:DataContext="{d:DesignInstance dataContexts:PointViewPrimitive}">
|
||||
<Ellipse Style="{StaticResource EllipseStyle}" d:DataContext="{d:DesignInstance dataContexts:PointViewPrimitive}" Tag ="{Binding}">
|
||||
<Ellipse.ToolTip>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
@@ -43,6 +43,5 @@
|
||||
</TransformGroup>
|
||||
</Ellipse.RenderTransform>
|
||||
</Ellipse>
|
||||
<userControls:PrimitivePopup Type="Rectangle" IsOpen="{Binding ParamsPanelVisibilty}" d:DataContext="{d:DesignInstance dataContexts:PrimitiveBase}"/>
|
||||
</StackPanel>
|
||||
</UserControl>
|
||||
|
||||
@@ -52,6 +52,5 @@
|
||||
</Rectangle.RenderTransform>
|
||||
</Rectangle>
|
||||
</Grid>
|
||||
<userControls:PrimitivePopup IsOpen="{Binding ParamsPanelVisibilty}"/>
|
||||
</StackPanel>
|
||||
</UserControl>
|
||||
|
||||
Binary file not shown.
@@ -18,6 +18,9 @@
|
||||
<DataTemplate DataType="{x:Type dataContexts:RectangleViewPrimitive}">
|
||||
<dataTemplates:RectangleTemplate/>
|
||||
</DataTemplate>
|
||||
<DataTemplate DataType="{x:Type dataContexts:CircleViewPrimitive}">
|
||||
<dataTemplates:EllipseTemplate/>
|
||||
</DataTemplate>
|
||||
<DataTemplate DataType="{x:Type dataContexts:PointViewPrimitive}">
|
||||
<dataTemplates:EllipseTemplate/>
|
||||
</DataTemplate>
|
||||
@@ -97,23 +100,24 @@
|
||||
<ListBox ItemsSource="{Binding HeadMaterials}" ItemTemplate="{StaticResource ColoredItemTemplate}">
|
||||
</ListBox>
|
||||
</Expander>
|
||||
<Expander Header="Geometry" MinWidth="20" DataContext="{Binding PrimitiveLogic}">
|
||||
<Expander Header="Geometry" MinWidth="20">
|
||||
<Expander.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Add">
|
||||
<Button Content="Add Rectangle" Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Rectangle}"/>
|
||||
<Button Content="Add Point" Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Point}"/>
|
||||
<Button Content="Add Rectangle" Command="{Binding PrimitiveLogic.Add}" CommandParameter="{x:Static enums:PrimitiveType.Rectangle}"/>
|
||||
<Button Content="Add Circle" Command="{Binding PrimitiveLogic.Add}" CommandParameter="{x:Static enums:PrimitiveType.Circle}"/>
|
||||
<Button Content="Add Point" Command="{Binding PrimitiveLogic.Add}" CommandParameter="{x:Static enums:PrimitiveType.Point}"/>
|
||||
</MenuItem>
|
||||
</ContextMenu>
|
||||
</Expander.ContextMenu>
|
||||
<ListBox ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" ItemTemplate="{StaticResource ColoredItemTemplate}">
|
||||
<ListBox.ContextMenu>
|
||||
<ContextMenu>
|
||||
<Button Content="Edit" Command="{Binding Edit}"/>
|
||||
<Button Content="Copy" Command="{Binding Copy}"/>
|
||||
<Button Content="Delete" Command="{Binding Delete}"/>
|
||||
<Button Content="To Foreground" Command="{Binding SetToFront}"/>
|
||||
<Button Content="To Background" Command="{Binding SetToBack}"/>
|
||||
<Button Content="Edit" Command="{Binding PrimitiveLogic.Edit}"/>
|
||||
<Button Content="Copy" Command="{Binding PrimitiveLogic.Copy}"/>
|
||||
<Button Content="Delete" Command="{Binding PrimitiveLogic.Delete}"/>
|
||||
<Button Content="To Foreground" Command="{Binding PrimitiveLogic.SetToFront}"/>
|
||||
<Button Content="To Background" Command="{Binding PrimitiveLogic.SetToBack}"/>
|
||||
</ContextMenu>
|
||||
</ListBox.ContextMenu>
|
||||
</ListBox>
|
||||
@@ -152,6 +156,15 @@
|
||||
</i:Interaction.Triggers>
|
||||
<ScrollViewer VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Visible">
|
||||
<Canvas Name="WorkPlane" ClipToBounds="True" Width="{Binding CanvasWidth}" Height="{Binding CanvasHeight}">
|
||||
<Canvas.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Add">
|
||||
<Button Content="Add Rectangle" Command="{Binding PrimitiveLogic.Add}" CommandParameter="{x:Static enums:PrimitiveType.Rectangle}"/>
|
||||
<Button Content="Add Circle" Command="{Binding PrimitiveLogic.Add}" CommandParameter="{x:Static enums:PrimitiveType.Circle}"/>
|
||||
<Button Content="Add Point" Command="{Binding PrimitiveLogic.Add}" CommandParameter="{x:Static enums:PrimitiveType.Point}"/>
|
||||
</MenuItem>
|
||||
</ContextMenu>
|
||||
</Canvas.ContextMenu>
|
||||
<i:Interaction.Behaviors>
|
||||
<infrastructure:MouseBehaviour MouseX="{Binding PanelX, Mode=OneWayToSource}" MouseY="{Binding PanelY, Mode=OneWayToSource}"/>
|
||||
</i:Interaction.Behaviors>
|
||||
@@ -182,9 +195,9 @@
|
||||
<Line X1="{Binding YX1}" X2="{Binding YX1}" Y1="0" Y2="{Binding YY2}" Stroke="ForestGreen" StrokeThickness="{Binding AxisLineThickness}"/>
|
||||
<ItemsControl ItemsSource="{Binding PrimitiveLogic.Items}" d:DataContext="{d:DesignInstance vm:MainViewModel}">
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<Canvas/>
|
||||
</ItemsPanelTemplate>
|
||||
<ItemsPanelTemplate>
|
||||
<Canvas/>
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
<ItemsControl.ItemContainerStyle>
|
||||
<Style TargetType="ContentPresenter">
|
||||
@@ -192,8 +205,18 @@
|
||||
<Setter Property="Canvas.Left" Value="{Binding PrimitiveLeft}"/>
|
||||
<Setter Property="Canvas.Top" Value="{Binding PrimitiveTop}"/>
|
||||
<Setter Property="Visibility" Value="{Binding IsVisible, Converter={StaticResource BooleanToVisibilityConverter}}"/>
|
||||
<EventSetter Event="MouseDown" Handler="ContentPresenter_MouseLeftButtonDown"/>
|
||||
</Style>
|
||||
</ItemsControl.ItemContainerStyle>
|
||||
<ItemsControl.ContextMenu>
|
||||
<ContextMenu>
|
||||
<Button Content="Edit primitive" Command="{Binding PrimitiveLogic.Edit}"/>
|
||||
<Button Content="Copy" Command="{Binding PrimitiveLogic.Copy}"/>
|
||||
<Button Content="Delete" Command="{Binding PrimitiveLogic.Delete}"/>
|
||||
<Button Content="To Foreground" Command="{Binding PrimitiveLogic.SetToFront}"/>
|
||||
<Button Content="To Background" Command="{Binding PrimitiveLogic.SetToBack}"/>
|
||||
</ContextMenu>
|
||||
</ItemsControl.ContextMenu>
|
||||
</ItemsControl>
|
||||
</Canvas>
|
||||
</ScrollViewer>
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using StructureHelper.Infrastructure.UI.DataContexts;
|
||||
using StructureHelper.Services;
|
||||
using StructureHelper.Services.Primitives;
|
||||
|
||||
@@ -6,13 +8,22 @@ namespace StructureHelper.Windows.MainWindow
|
||||
{
|
||||
public partial class MainView : Window
|
||||
{
|
||||
private MainViewModel viewModel;
|
||||
public IPrimitiveRepository PrimitiveRepository { get; }
|
||||
|
||||
public MainView(IPrimitiveRepository primitiveRepository, MainViewModel viewModel)
|
||||
{
|
||||
PrimitiveRepository = primitiveRepository;
|
||||
DataContext = viewModel;
|
||||
this.viewModel = viewModel;
|
||||
DataContext = this.viewModel;
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void ContentPresenter_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
|
||||
{
|
||||
var contentPresenter = sender as ContentPresenter;
|
||||
var item = contentPresenter?.Content as PrimitiveBase;
|
||||
viewModel.PrimitiveLogic.SelectedItem = item;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -191,10 +191,26 @@ namespace StructureHelper.Windows.MainWindow
|
||||
}
|
||||
}
|
||||
|
||||
public RelayCommand SelectPrimitiveCommand
|
||||
{
|
||||
get
|
||||
{
|
||||
return selectPrimitive ??
|
||||
(selectPrimitive = new RelayCommand(obj=>
|
||||
{
|
||||
if (obj is PrimitiveBase)
|
||||
{
|
||||
SelectedPrimitive = obj as PrimitiveBase;
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
private double delta = 0.0005;
|
||||
private ActionsViewModel combinationsLogic;
|
||||
private IPrimitiveViewModelLogic primitiveLogic;
|
||||
private RelayCommand showVisualProperty;
|
||||
private RelayCommand selectPrimitive;
|
||||
|
||||
public MainViewModel(MainModel model)
|
||||
{
|
||||
@@ -208,7 +224,7 @@ namespace StructureHelper.Windows.MainWindow
|
||||
XY1 = CanvasHeight / 2d;
|
||||
YX1 = CanvasWidth / 2d;
|
||||
YY2 = CanvasHeight;
|
||||
scaleValue = 400d;
|
||||
scaleValue = 300d;
|
||||
|
||||
LeftButtonUp = new RelayCommand(o =>
|
||||
{
|
||||
|
||||
@@ -28,6 +28,21 @@
|
||||
</Grid>
|
||||
</Expander>
|
||||
</DataTemplate>
|
||||
<DataTemplate x:Key="CircleProperties">
|
||||
<Expander Header="Circle" IsExpanded="True">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="22"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="100"/>
|
||||
<ColumnDefinition/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Row="0" Text="Diameter"/>
|
||||
<TextBox Grid.Row="0" Grid.Column="1" Margin="1" Text="{Binding Diameter, Converter={StaticResource LengthConverter}, ValidatesOnExceptions=True}"/>
|
||||
</Grid>
|
||||
</Expander>
|
||||
</DataTemplate>
|
||||
<DataTemplate x:Key="PointProperties">
|
||||
<Expander Header="Point" IsExpanded="True">
|
||||
<Grid>
|
||||
|
||||
@@ -36,6 +36,7 @@ namespace StructureHelper.Windows.PrimitiveProperiesWindow
|
||||
this.DataContext = viewModel;
|
||||
InitializeComponent();
|
||||
if (primitive is RectangleViewPrimitive) { AddPrimitiveProperties(PrimitiveType.Rectangle); }
|
||||
else if (primitive is CircleViewPrimitive) { AddPrimitiveProperties(PrimitiveType.Circle); }
|
||||
else if (primitive is PointViewPrimitive) { AddPrimitiveProperties(PrimitiveType.Point); }
|
||||
else { throw new Exception("Type of object is unknown"); }
|
||||
}
|
||||
@@ -44,6 +45,7 @@ namespace StructureHelper.Windows.PrimitiveProperiesWindow
|
||||
List<string> names = new List<string>();
|
||||
if (primitive is IHasDivision) { names.Add("TriangulationProperties");}
|
||||
if (primitive is RectangleViewPrimitive) { names.Add("RectangleProperties"); }
|
||||
else if (primitive is CircleViewPrimitive) { names.Add("CircleProperties"); }
|
||||
else if (primitive is PointViewPrimitive) { names.Add("PointProperties"); }
|
||||
foreach (var name in names)
|
||||
{
|
||||
|
||||
@@ -19,8 +19,8 @@ namespace StructureHelper.Windows.ViewModels.NdmCrossSections
|
||||
AxisLineThickness = 2d;
|
||||
GridLineThickness = 0.25d;
|
||||
GridSize = 0.05d;
|
||||
WorkPlainWidth = 2d;
|
||||
WorkPlainHeight = 1.6d;
|
||||
WorkPlainWidth = 2.4d;
|
||||
WorkPlainHeight = 2.0d;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,7 +78,15 @@ namespace StructureHelper.Windows.ViewModels.NdmCrossSections
|
||||
ndmPrimitive = primitive;
|
||||
viewPrimitive = new PointViewPrimitive(primitive);
|
||||
}
|
||||
|
||||
else if (primitiveType == PrimitiveType.Circle)
|
||||
{
|
||||
var primitive = new CirclePrimitive
|
||||
{
|
||||
Diameter = 0.5d
|
||||
};
|
||||
ndmPrimitive = primitive;
|
||||
viewPrimitive = new CircleViewPrimitive(primitive);
|
||||
}
|
||||
else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown + nameof(primitiveType)); }
|
||||
viewPrimitive.RegisterDeltas(CanvasWidth / 2, CanvasHeight / 2);
|
||||
repository.Primitives.Add(ndmPrimitive);
|
||||
@@ -159,6 +167,7 @@ namespace StructureHelper.Windows.ViewModels.NdmCrossSections
|
||||
repository.Primitives.Add(newPrimitive);
|
||||
PrimitiveBase primitiveBase;
|
||||
if (newPrimitive is IRectanglePrimitive) { primitiveBase = new RectangleViewPrimitive(newPrimitive as IRectanglePrimitive); }
|
||||
else if (newPrimitive is ICirclePrimitive) { primitiveBase = new CircleViewPrimitive(newPrimitive as ICirclePrimitive); }
|
||||
else if (newPrimitive is IPointPrimitive) { primitiveBase = new PointViewPrimitive(newPrimitive as IPointPrimitive); }
|
||||
else throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown);
|
||||
primitiveBase.RegisterDeltas(CanvasWidth / 2, CanvasHeight / 2);
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace StructureHelper.Windows.ViewModels.PrimitiveTemplates.RCs
|
||||
{
|
||||
public IRectangleBeamTemplate Model;
|
||||
|
||||
private RectangleShape rectangle => (Model.Shape as RectangleShape);
|
||||
private RectangleShape rectangle => Model.Shape as RectangleShape;
|
||||
|
||||
public Window ParentWindow { get; set; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user