动画demo完成

This commit is contained in:
艾竹
2023-01-27 14:54:03 +08:00
parent 64ea56f01e
commit 72e3efb052
81 changed files with 1211 additions and 503 deletions

View File

@@ -1236,6 +1236,16 @@
</DockPanel>
</DataTemplate>
</Fluent:ComboBox.ItemTemplate>
</Fluent:ComboBox>
</StackPanel>
<StackPanel>
<TextBlock Text="线条动画" Margin="5"/>
<Fluent:ComboBox Size="Small" Width="140" Margin="5" IsEditable="False" helper:EnumHelper.Enum="{x:Type dd:LineAnimation}" SelectedItem="{Binding ColorViewModel.LineAnimation}">
<Fluent:ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding .,Converter={StaticResource EnumDescriptionConverter}}" />
</DataTemplate>
</Fluent:ComboBox.ItemTemplate>
</Fluent:ComboBox>
</StackPanel>
</StackPanel>
@@ -1246,7 +1256,7 @@
</Fluent:DropDownButton.ToolTip>
</Fluent:DropDownButton>
<Fluent:SplitButton IsCheckable="True" IsChecked="{Binding LockObjectViewModel.LockObject[0].IsChecked}" SizeDefinition="Middle" MaxDropDownHeight="500">
<Fluent:SplitButton IsCheckable="True" Icon="{iconPacks:Material Kind=Lock}" IsChecked="{Binding LockObjectViewModel.LockObject[0].IsChecked}" SizeDefinition="Middle" MaxDropDownHeight="500">
<Fluent:SplitButton.Style>
<Style TargetType="{x:Type Fluent:SplitButton}" BasedOn="{StaticResource RibbonSplitButtonStyle}">
<Style.Triggers>

View File

@@ -297,24 +297,7 @@
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="LineAnimationStyle" TargetType="{x:Type ContentControl}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid DataContext="{Binding Path=DataContext,RelativeSource={RelativeSource AncestorType={x:Type ContentControl}}}">
<Fluent:ComboBox Size="Small" BorderThickness="0" Height="Auto" IsEditable="False" helper:EnumHelper.Enum="{x:Type dd:LineAnimation}" SelectedItem="{Binding LineAnimation}">
<Fluent:ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding .,Converter={StaticResource EnumDescriptionConverter}}" />
</DataTemplate>
</Fluent:ComboBox.ItemTemplate>
</Fluent:ComboBox>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</Style>
</dd:PropertiesView.Resources>
</dd:PropertiesView>
</ControlTemplate>

View File

@@ -10,7 +10,12 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels
{
private IUIVisualizerService visualiserService;
public BarcodeDesignerItemViewModel() : base()
public BarcodeDesignerItemViewModel() : this(null)
{
}
public BarcodeDesignerItemViewModel(IDiagramViewModel root) : base(root)
{
}
@@ -29,16 +34,16 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels
return new DesignerItemBase(this, Format.ToString());
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService;
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is DesignerItemBase designer)
{

View File

@@ -10,7 +10,12 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels
public class OutLineTextDesignerItemViewModel : TextDesignerItemViewModel
{
private IUIVisualizerService visualiserService;
public OutLineTextDesignerItemViewModel() : base()
public OutLineTextDesignerItemViewModel() : this(null)
{
}
public OutLineTextDesignerItemViewModel(IDiagramViewModel root) : base(root)
{
}
@@ -30,9 +35,9 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels
return new TextDesignerItem(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService;

View File

@@ -7,7 +7,12 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels
{
public class PathItemViewModel : DesignerItemViewModelBase
{
public PathItemViewModel() : base()
public PathItemViewModel() : this(null)
{
}
public PathItemViewModel(IDiagramViewModel root) : base(root)
{
}
@@ -17,7 +22,6 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels
}
public PathItemViewModel(IDiagramViewModel root, SerializableItem serializableItem, string serializableType) : base(root, serializableItem, serializableType)
{
@@ -28,9 +32,9 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels
return new PathDesignerItem(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
this.ShowConnectors = false;
}

View File

@@ -10,7 +10,12 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels
{
private IUIVisualizerService visualiserService;
public PersistDesignerItemViewModel() : base()
public PersistDesignerItemViewModel() : this(null)
{
}
public PersistDesignerItemViewModel(IDiagramViewModel root) : base(root)
{
}
@@ -30,17 +35,17 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels
return new PersistDesignerItem(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService;
this.ShowConnectors = false;
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is PersistDesignerItem designer)
{

View File

@@ -10,7 +10,12 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels
{
private IUIVisualizerService visualiserService;
public SettingsDesignerItemViewModel() : base()
public SettingsDesignerItemViewModel() : this(null)
{
}
public SettingsDesignerItemViewModel(IDiagramViewModel root) : base(root)
{
}
@@ -30,17 +35,17 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels
return new SettingsDesignerItem(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService;
this.ShowConnectors = false;
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is SettingsDesignerItem designer)
{

View File

@@ -16,11 +16,7 @@
</ItemGroup>
<ItemGroup>
<Folder Include="Views\Algorithms\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="AIStudio.Wpf.Controls" Version="1.1.44" />
<PackageReference Include="AIStudio.Wpf.Controls" Version="1.1.45" />
</ItemGroup>
<ItemGroup>

View File

@@ -0,0 +1,12 @@
<UserControl x:Class="AIStudio.Wpf.DiagramDesigner.Demo.Controls.NotDoneYetControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:AIStudio.Wpf.DiagramDesigner.Demo.Controls"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<TextBlock Text="暂未完成,敬请期待!" FontSize="28" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>
</UserControl>

View File

@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Text;
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.Navigation;
using System.Windows.Shapes;
namespace AIStudio.Wpf.DiagramDesigner.Demo.Controls
{
/// <summary>
/// NotDoneYetControl.xaml 的交互逻辑
/// </summary>
public partial class NotDoneYetControl : UserControl
{
public NotDoneYetControl()
{
InitializeComponent();
}
}
}

View File

@@ -3,19 +3,10 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:AIStudio.Wpf.DiagramDesigner.Demo.Controls"
xmlns:ac="https://gitee.com/akwkevin/AI-wpf-controls"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<Border MaxWidth="350" Margin="10" HorizontalAlignment="Right" VerticalAlignment="Bottom" BorderBrush="#b8daff" BorderThickness="1" Background="#cce5ff" CornerRadius="3" IsHitTestVisible="False">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock FontSize="18" Text="{Binding Title}" Margin="10" Foreground="#004085"/>
<TextBlock Grid.Row="1" Text="{Binding Info}" Margin="10,0,10,10" TextWrapping="WrapWithOverflow" Foreground="#004085" />
</Grid>
</Border>
</Grid>
<ac:OptionsPanel HeaderText="{Binding Title}" HorizontalAlignment="Right" VerticalAlignment="Top" BorderBrush="#b8daff" BorderThickness="1" Background="#cce5ff" ac:ControlAttach.CornerRadius="3">
<TextBlock MaxWidth="350" Grid.Row="1" Text="{Binding Info}" Margin="10" TextWrapping="WrapWithOverflow" Foreground="#004085" />
</ac:OptionsPanel>
</UserControl>

View File

@@ -14,9 +14,20 @@
<ColumnDefinition Width="Auto" MinWidth="100" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ListBox x:Name="listbox" SelectionChanged="ListBox_SelectionChanged">
<!--<ListBox x:Name="listbox" SelectionChanged="ListBox_SelectionChanged">
</ListBox>
</ListBox>-->
<TreeView x:Name="treeview"
Style="{StaticResource AIStudio.Styles.TreeView.Menu}"
SelectedItemChanged="treeview_SelectedItemChanged">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type ac:HamburgerTreeMenuGlyphItem}" ItemsSource="{Binding Path=Children}">
<Grid Margin="5">
<TextBlock VerticalAlignment="Center" Text="{Binding Title}" />
</Grid>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
<GridSplitter Width="2"
VerticalAlignment="Stretch" />
<ContentControl x:Name="ContentControl"

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -35,17 +36,75 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo
assembly.GetTypes().Where(x => x.Namespace.StartsWith("AIStudio.Wpf.DiagramDesigner.Demo.ViewModels") && x.Name.Contains("ViewModel")).ToList().ForEach(x => _viewModelDic.Add(x.Name.Remove(x.Name.Length - 9), x));
}
#endregion
List<MenuItemViewModel> _menus;
public MainWindow()
{
InitializeComponent();
this.Loaded += MainWindow_Loaded;
listbox.ItemsSource = _viewDic.Keys.ToList();
_menus = new List<MenuItemViewModel>()
{
new MenuItemViewModel(){Title = "Simple"},
new MenuItemViewModel(){Title = "Locked"},
new MenuItemViewModel(){Title = "Events"},
new MenuItemViewModel(){Title = "DynamicInsertions"},
new MenuItemViewModel(){Title = "Performance"},
new MenuItemViewModel(){Title = "Zoom"},
new MenuItemViewModel(){Title = "SnapToGrid"},
new MenuItemViewModel(){Title = "DragAndDrop"},
new MenuItemViewModel(){Title = "Nodes",
Children=new List<MenuItemViewModel>
{
new MenuItemViewModel(){Title = "Svg"},
new MenuItemViewModel(){Title = "Portless"},
}
},
new MenuItemViewModel(){Title = "Links",
Children=new List<MenuItemViewModel>
{
new MenuItemViewModel(){Title = "Snapping"},
new MenuItemViewModel(){Title = "Labels"},
new MenuItemViewModel(){Title = "Vertices"},
new MenuItemViewModel(){Title = "Markers"},
new MenuItemViewModel(){Title = "Routers"},
new MenuItemViewModel(){Title = "PathGenerators"},
}
},
new MenuItemViewModel(){Title = "Groups",
Children=new List<MenuItemViewModel>
{
new MenuItemViewModel(){Title = "Grouping"},
}
},
new MenuItemViewModel(){Title = "Customization",
Children=new List<MenuItemViewModel>
{
new MenuItemViewModel(){Title = "CustomNode"},
new MenuItemViewModel(){Title = "CustomLink"},
new MenuItemViewModel(){Title = "CustomPort"},
new MenuItemViewModel(){Title = "CustomGroup"},
}
},
new MenuItemViewModel(){Title = "Algorithms",
Children=new List<MenuItemViewModel>
{
}
},
new MenuItemViewModel(){Title = "Animations",
Children=new List<MenuItemViewModel>
{
new MenuItemViewModel(){Title = "PathAnimation"},
new MenuItemViewModel(){Title = "LineAnimation"},
}
},
};
treeview.ItemsSource = _menus;
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
listbox.SelectedIndex = 0;
treeview.SelectObject(_menus.FirstOrDefault());
}
private void Button_Click(object sender, RoutedEventArgs e)
@@ -74,17 +133,33 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo
ContentControl.Content = control;
}
else
ContentControl.Content = null;
{
ContentControl.Content = new Controls.NotDoneYetControl();
}
}
private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
private void treeview_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
if (!IsLoaded)
return;
var tag = listbox.SelectedItem as string;
ShowContent(tag);
if (e.NewValue is MenuItemViewModel menuItemViewModel && menuItemViewModel.Children == null)
{
ShowContent(menuItemViewModel.Title);
}
}
}
}
public class MenuItemViewModel
{
public string Title
{
get; set;
}
public List<MenuItemViewModel> Children
{
get; set;
}
}
}

View File

@@ -12,26 +12,26 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
{
Title = "Reconnect links";
Info = "An example of reconnecting links to the closest ports.";
_service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DiagramViewModel = new DiagramViewModel();
DiagramViewModel.PageSizeType = PageSizeType.Custom;
DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
DiagramViewModel.ColorViewModel = new ColorViewModel();
DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" };
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 300, Text = "2" };
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Text = "2" };
DiagramViewModel.DirectAddItemCommand.Execute(node2);
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 300, Top = 50, Text = "3" };
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" };
DiagramViewModel.DirectAddItemCommand.Execute(node3);
ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
DiagramViewModel.DirectAddItemCommand.Execute(connector2);
ReconnectLinksCommand = new SimpleCommand(ReconnectLinks);

View File

@@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
{
class LineAnimationViewModel : BaseViewModel
{
public LineAnimationViewModel()
{
Title = "Line Animation";
Info = "Line path motion animationr.";
DiagramViewModel = new DiagramViewModel();
DiagramViewModel.PageSizeType = PageSizeType.Custom;
DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
DiagramViewModel.ColorViewModel = new ColorViewModel();
DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Text = "2" };
DiagramViewModel.DirectAddItemCommand.Execute(node2);
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" };
DiagramViewModel.DirectAddItemCommand.Execute(node3);
ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
connector1.ColorViewModel.LineDashStyle = LineDashStyle.Dash1;
connector1.ColorViewModel.LineAnimation = LineAnimation.DashAnimation;
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
connector2.ColorViewModel.LineDashStyle = LineDashStyle.Dash1;
connector2.ColorViewModel.LineAnimation = LineAnimation.DashAnimation;
DiagramViewModel.DirectAddItemCommand.Execute(connector2);
DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
}
}
}

View File

@@ -0,0 +1,41 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
{
class PathAnimationViewModel : BaseViewModel
{
public PathAnimationViewModel()
{
Title = "Path Animation";
Info = "Line flow motion animation.";
DiagramViewModel = new DiagramViewModel();
DiagramViewModel.PageSizeType = PageSizeType.Custom;
DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
DiagramViewModel.ColorViewModel = new ColorViewModel();
DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Text = "2" };
DiagramViewModel.DirectAddItemCommand.Execute(node2);
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" };
DiagramViewModel.DirectAddItemCommand.Execute(node3);
ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
connector1.ColorViewModel.LineAnimation = LineAnimation.PathAnimation;
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
connector2.ColorViewModel.LineAnimation = LineAnimation.PathAnimation;
DiagramViewModel.DirectAddItemCommand.Execute(connector2);
DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
}
}
}

View File

@@ -6,14 +6,6 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
{
class BaseViewModel : BindableBase
{
protected IDiagramServiceProvider _service
{
get
{
return DiagramServicesProvider.Instance.Provider;
}
}
public DiagramViewModel DiagramViewModel
{
get; set;
@@ -28,15 +20,5 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
{
get; set;
}
public int Index
{
get; set;
}
public int ParentIndex
{
get; set;
}
}
}

View File

@@ -6,29 +6,29 @@ using System.Windows;
namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
{
class ThickLinkViewModel : BaseViewModel
class CustomLinkViewModel : BaseViewModel
{
public ThickLinkViewModel()
public CustomLinkViewModel()
{
Title = "Custom link";
Info = "Creating your own custom links is very easy!";
_service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DiagramViewModel = new DiagramViewModel();
DiagramViewModel.PageSizeType = PageSizeType.Custom;
DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
DiagramViewModel.ColorViewModel = new ColorViewModel();
DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" };
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 300, Text = "2" };
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Text = "2" };
DiagramViewModel.DirectAddItemCommand.Execute(node2);
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 300, Top = 50, Text = "3" };
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" };
DiagramViewModel.DirectAddItemCommand.Execute(node3);
ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
connector1.ColorViewModel.LineWidth = 6;
connector1.ColorViewModel.LineColor.BrushType = BrushType.LinearGradientBrush;
connector1.ColorViewModel.LineColor.GradientStop = new ObservableCollection<GradientStop>();
@@ -36,7 +36,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
connector1.ColorViewModel.LineColor.GradientStop.Add(new GradientStop(System.Windows.Media.Colors.Gray, 1));
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
connector2.ColorViewModel.LineWidth = 6;
connector2.ColorViewModel.LineColor.Color = System.Windows.Media.Colors.Blue;
DiagramViewModel.DirectAddItemCommand.Execute(connector2);

View File

@@ -13,13 +13,13 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
Title = "Custom node";
Info = "Creating your own custom design is very easy!";
//_service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DiagramViewModel = new DiagramViewModel();
DiagramViewModel.CellHorizontalAlignment = CellHorizontalAlignment.Center;
DiagramViewModel.CellVerticalAlignment = CellVerticalAlignment.Center;
DiagramViewModel.PageSizeType = PageSizeType.Custom;
DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
DiagramViewModel.ColorViewModel = new ColorViewModel();
DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
@@ -42,7 +42,12 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
public class CustomDesignerItemViewModel : DesignerItemViewModelBase
{
public CustomDesignerItemViewModel() : base()
public CustomDesignerItemViewModel() : this(null)
{
}
public CustomDesignerItemViewModel(IDiagramViewModel root) : base(root)
{
}
@@ -62,9 +67,9 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
return new DesignerItemBase(this, Answer);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
this.ItemWidth = 150;
this.ItemHeight = 80;
@@ -77,9 +82,9 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
connectors.Add(new FullyCreatedConnectorInfo(this, ConnectorOrientation.Bottom));
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is DesignerItemBase designer)
{

View File

@@ -12,25 +12,25 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
Title = "Simple";
Info = "A simple example of AIStudio.Wpf.DiagramDesigner.";
_service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DiagramViewModel = new DiagramViewModel();
DiagramViewModel.PageSizeType = PageSizeType.Custom;
DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
DiagramViewModel.ColorViewModel = new ColorViewModel();
DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" };
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 300, Text = "2" };
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Text = "2" };
DiagramViewModel.DirectAddItemCommand.Execute(node2);
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 300, Top = 50, Text = "3" };
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" };
DiagramViewModel.DirectAddItemCommand.Execute(node3);
ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
DiagramViewModel.DirectAddItemCommand.Execute(connector2);
DiagramViewModel.GroupCommand.Execute(new List<DesignerItemViewModelBase> { node1, node2 });

View File

@@ -12,52 +12,52 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
Title = "Link Labels";
Info = "Labels help you show more information through out a link. You can specify a distance or an offset." +
"The content of the labels is still limited because of Blazor's poor SVG support.";
_service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DiagramViewModel = new DiagramViewModel();
DiagramViewModel.PageSizeType = PageSizeType.Custom;
DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
DiagramViewModel.ColorViewModel = new ColorViewModel();
DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50 };
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 400, Top = 50 };
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 400, Top = 50, Text = "2" };
DiagramViewModel.DirectAddItemCommand.Execute(node2);
ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector);
ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector);
connector1.AddLabel("Content");
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 160, Text = "1" };
node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 160, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
node2 = new DefaultDesignerItemViewModel() { Left = 400, Top = 160, Text = "2" };
node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 400, Top = 160, Text = "2" };
DiagramViewModel.DirectAddItemCommand.Execute(node2);
connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector);
connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector);
connector1.AddLabel("0.25", 0.3);
connector1.AddLabel("0.75", 0.7);
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 270, Text = "1" };
node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 270, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
node2 = new DefaultDesignerItemViewModel() { Left = 400, Top = 270, Text = "2" };
node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 400, Top = 270, Text = "2" };
DiagramViewModel.DirectAddItemCommand.Execute(node2);
connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector);
connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector);
connector1.AddLabel("50", 50);
connector1.AddLabel("-50", -50);
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 380, Text = "1" };
node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 380, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
node2 = new DefaultDesignerItemViewModel() { Left = 400, Top = 380, Text = "2" };
node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 400, Top = 380, Text = "2" };
DiagramViewModel.DirectAddItemCommand.Execute(node2);
connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector);
connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector);
connector1.AddLabel("(0,-20)", 50, new Point(0, -20));
connector1.AddLabel("(0,20)", -50, new Point(0, 20));
DiagramViewModel.DirectAddItemCommand.Execute(connector1);

View File

@@ -12,67 +12,67 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
Title = "Link Markers";
Info = "Markers are SVG Paths that you can put at the beginning or at the end of your links.";
_service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DiagramViewModel = new DiagramViewModel();
DiagramViewModel.PageSizeType = PageSizeType.Custom;
DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
DiagramViewModel.ColorViewModel = new ColorViewModel();
DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" };
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 400, Top = 50, Text = "2" };
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 400, Top = 50, Text = "2" };
DiagramViewModel.DirectAddItemCommand.Execute(node2);
ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector);
ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector);
connector1.ShapeViewModel.SourceMarker = LinkMarker.Arrow;
connector1.ShapeViewModel.SinkMarker = LinkMarker.Arrow;
connector1.AddLabel("Arrow");
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 160, Text = "1" };
node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 160, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
node2 = new DefaultDesignerItemViewModel() { Left = 400, Top = 160, Text = "2" };
node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 400, Top = 160, Text = "2" };
DiagramViewModel.DirectAddItemCommand.Execute(node2);
connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector);
connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector);
connector1.ShapeViewModel.SourceMarker = LinkMarker.Circle;
connector1.ShapeViewModel.SinkMarker = LinkMarker.Circle;
connector1.AddLabel("Circle");
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 270, Text = "1" };
node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 270, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
node2 = new DefaultDesignerItemViewModel() { Left = 400, Top = 270, Text = "2" };
node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 400, Top = 270, Text = "2" };
DiagramViewModel.DirectAddItemCommand.Execute(node2);
connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector);
connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector);
connector1.ShapeViewModel.SourceMarker = LinkMarker.Square;
connector1.ShapeViewModel.SinkMarker = LinkMarker.Square;
connector1.AddLabel("Square");
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 380, Text = "1" };
node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 380, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
node2 = new DefaultDesignerItemViewModel() { Left = 400, Top = 380, Text = "2" };
node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 400, Top = 380, Text = "2" };
DiagramViewModel.DirectAddItemCommand.Execute(node2);
connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector);
connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector);
connector1.ShapeViewModel.SourceMarker = LinkMarker.NewRectangle(10, 20);
connector1.ShapeViewModel.SinkMarker = LinkMarker.NewArrow(20, 10);
connector1.AddLabel("Factory");
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 490, Text = "1" };
node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 490, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
node2 = new DefaultDesignerItemViewModel() { Left = 400, Top = 490, Text = "2" };
node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 400, Top = 490, Text = "2" };
DiagramViewModel.DirectAddItemCommand.Execute(node2);
connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector);
connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector);
connector1.ShapeViewModel.SourceMarker = new LinkMarker("M 0 -8 L 3 -8 3 8 0 8 z M 4 -8 7 -8 7 8 4 8 z M 8 -8 16 0 8 8 z", 16, ArrowPathStyle.Arrow, ArrowSizeStyle.ExtraLarge);
connector1.ShapeViewModel.SinkMarker = new LinkMarker("M 0 -8 L 8 -8 4 0 8 8 0 8 4 0 z", 8, ArrowPathStyle.Arrow, ArrowSizeStyle.Small);
connector1.AddLabel("Custom");

View File

@@ -13,26 +13,26 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
Info = "Path generators are functions that take as input the calculated route and output SVG paths, " +
"alongside the markers positions and their angles. There are currently two generators: Straight and Smooth.";
_service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DiagramViewModel = new DiagramViewModel();
DiagramViewModel.PageSizeType = PageSizeType.Custom;
DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
DiagramViewModel.ColorViewModel = new ColorViewModel();
DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 80, Text = "1" };
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 80, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 350, Text = "2" };
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 350, Text = "2" };
DiagramViewModel.DirectAddItemCommand.Execute(node2);
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 400, Top = 100, Text = "3" };
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 400, Top = 100, Text = "3" };
DiagramViewModel.DirectAddItemCommand.Execute(node3);
ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterNormal);
ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterNormal);
connector1.AddLabel("Straight");
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
connector2.AddLabel("Smooth");
DiagramViewModel.DirectAddItemCommand.Execute(connector2);

View File

@@ -13,26 +13,26 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
Info = "Routers are functions that take as input the link's vertices and can add points in between. " +
"There are currently two routers: Normal and Orthogonal.";
_service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DiagramViewModel = new DiagramViewModel();
DiagramViewModel.PageSizeType = PageSizeType.Custom;
DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
DiagramViewModel.ColorViewModel = new ColorViewModel();
DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 80, Text = "1" };
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 80, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 350, Text = "2" };
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 350, Text = "2" };
DiagramViewModel.DirectAddItemCommand.Execute(node2);
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 350, Top = 100, Text = "3" };
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 350, Top = 100, Text = "3" };
DiagramViewModel.DirectAddItemCommand.Execute(node3);
ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
connector1.AddLabel("Normal");
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.LeftConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.LeftConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
connector2.AddLabel("Orthogonal");
DiagramViewModel.DirectAddItemCommand.Execute(connector2);

View File

@@ -12,20 +12,20 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
Title = "Link Snapping";
Info = "While dragging a new link, it will try to find (and link) to the closest target within a radius.";
_service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DiagramViewModel = new DiagramViewModel();
DiagramViewModel.PageSizeType = PageSizeType.Custom;
DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
DiagramViewModel.DrawModeViewModel = new DrawModeViewModel() { EnableSnapping = true };
DiagramViewModel.ColorViewModel = new ColorViewModel();
DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" };
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 300, Text = "2" };
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Text = "2" };
DiagramViewModel.DirectAddItemCommand.Execute(node2);
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 300, Top = 50, Text = "3" };
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" };
DiagramViewModel.DirectAddItemCommand.Execute(node3);
DiagramViewModel.ClearSelectedItemsCommand.Execute(null);

View File

@@ -12,29 +12,29 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
Title = "Link Vertices";
Info = "Click on a link to create a vertex. Double click on a vertex to delete it. " +
"You can drag the vertices around.";
_service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DiagramViewModel = new DiagramViewModel();
DiagramViewModel.PageSizeType = PageSizeType.Custom;
DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
DiagramViewModel.ColorViewModel = new ColorViewModel();
DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 80, Text = "1" };
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 80, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 200, Top = 350, Text = "2" };
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 200, Top = 350, Text = "2" };
DiagramViewModel.DirectAddItemCommand.Execute(node2);
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 400, Top = 100, Text = "3" };
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 400, Top = 100, Text = "3" };
DiagramViewModel.DirectAddItemCommand.Execute(node3);
ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterNormal);
ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterNormal);
connector1.AddLabel("Content");
connector1.AddVertex(new Point(221, 112.5));
connector1.AddVertex(new Point(111, 291));
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
connector2.AddLabel("Content");
connector2.AddVertex(new Point(400, 324));
connector2.AddVertex(new Point(326, 180));

View File

@@ -15,35 +15,35 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
//"All the TOP ports are locked as well, so you can't create links from/to them, but you can from/to the others." +
"Newly created links aren't locked, so they can be deleted.";
_service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DiagramViewModel = new DiagramViewModel();
DiagramViewModel.CellHorizontalAlignment = CellHorizontalAlignment.Center;
DiagramViewModel.CellVerticalAlignment = CellVerticalAlignment.Center;
DiagramViewModel.PageSizeType = PageSizeType.Custom;
DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
DiagramViewModel.ColorViewModel = new ColorViewModel();
DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" };
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" };
//node1.LockObjectViewModel.LockObject.FirstOrDefault(p => p.LockFlag == LockFlag.All).IsChecked = true;//这个也可以
node1.IsReadOnly = true;
DiagramViewModel.DirectAddItemCommand.Execute(node1);
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 300, Text = "2" };
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Text = "2" };
//node2.LockObjectViewModel.LockObject.FirstOrDefault(p => p.LockFlag == LockFlag.All).IsChecked = true;//这个也可以
node2.IsReadOnly = true;
DiagramViewModel.DirectAddItemCommand.Execute(node2);
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 300, Top = 50, Text = "3" };
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" };
//node3.LockObjectViewModel.LockObject.FirstOrDefault(p => p.LockFlag == LockFlag.All).IsChecked = true;//这个也可以
node3.IsReadOnly = true;
DiagramViewModel.DirectAddItemCommand.Execute(node3);
ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
//connector1.LockObjectViewModel.LockObject.FirstOrDefault(p => p.LockFlag == LockFlag.All).IsChecked = true;//这个也可以
connector1.IsReadOnly = true;
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
// connector2.LockObjectViewModel.LockObject.FirstOrDefault(p => p.LockFlag == LockFlag.All).IsChecked = true;//这个也可以
connector2.IsReadOnly = true;
DiagramViewModel.DirectAddItemCommand.Execute(connector2);

View File

@@ -13,27 +13,27 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
Title = "Custom node";
Info = "Creating your own custom design is very easy!";
//_service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DiagramViewModel = new DiagramViewModel();
DiagramViewModel.CellHorizontalAlignment = CellHorizontalAlignment.Center;
DiagramViewModel.CellVerticalAlignment = CellVerticalAlignment.Center;
DiagramViewModel.PageSizeType = PageSizeType.Custom;
DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
DiagramViewModel.ColorViewModel = new ColorViewModel();
DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" };
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
PathItemViewModel node2 = new PathItemViewModel() { Left = 300, Top = 300, Icon = "M 0 -50 L 50 -50 L 50 -10 A 1 1 0 0 0 50 10 L 50 50 L 0 50 L 0 10 A 1 1 0 0 0 0 -10 Z" };
PathItemViewModel node2 = new PathItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Icon = "M 0 -50 L 50 -50 L 50 -10 A 1 1 0 0 0 50 10 L 50 50 L 0 50 L 0 10 A 1 1 0 0 0 0 -10 Z" };
DiagramViewModel.DirectAddItemCommand.Execute(node2);
PathItemViewModel node3 = new PathItemViewModel() { Left = 300, Top = 50, Icon = "M 0 -50 L 50 -50 L 50 -10 A 1 1 0 0 0 50 10 L 50 50 L 0 50 L 0 10 A 1 1 0 0 0 0 -10 Z" };
PathItemViewModel node3 = new PathItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Icon = "M 0 -50 L 50 -50 L 50 -10 A 1 1 0 0 0 50 10 L 50 50 L 0 50 L 0 10 A 1 1 0 0 0 0 -10 Z" };
DiagramViewModel.DirectAddItemCommand.Execute(node3);
ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.TopConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.TopConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
ConnectionViewModel connector2 = new ConnectionViewModel(node2.BottomConnector, node3.BottomConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.BottomConnector, node3.BottomConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
DiagramViewModel.DirectAddItemCommand.Execute(connector2);
DiagramViewModel.ClearSelectedItemsCommand.Execute(null);

View File

@@ -12,22 +12,22 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
Title = "Performance";
Info = "This diagram contains 100 nodes and 50 links";
_service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DiagramViewModel = new DiagramViewModel();
DiagramViewModel.PageSizeType = PageSizeType.Custom;
DiagramViewModel.PageSize = new Size(1000, 1000);
DiagramViewModel.ColorViewModel = new ColorViewModel();
DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
for (int r = 0; r < 10; r++)
{
for (int c = 0; c < 10; c += 2)
{
var node1 = new DefaultDesignerItemViewModel() { Left = 10 + c * 10 + c * 120, Top = 10 + r * 100, Text = $"{r * 10 + c}" };
var node2 = new DefaultDesignerItemViewModel { Left = 10 + (c + 1) * 130, Top = 10 + r * 100, Text = $"{r * 10 + c + 1}" };
var node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 10 + c * 10 + c * 120, Top = 10 + r * 100, Text = $"{r * 10 + c}" };
var node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 10 + (c + 1) * 130, Top = 10 + r * 100, Text = $"{r * 10 + c + 1}" };
DiagramViewModel.DirectAddItemCommand.Execute(new List<SelectableDesignerItemViewModelBase> { node1, node2 });
ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector);
ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector);
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
}
}

View File

@@ -12,25 +12,25 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
Title = "Simple";
Info = "A simple example of AIStudio.Wpf.DiagramDesigner.";
_service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DiagramViewModel = new DiagramViewModel();
DiagramViewModel.PageSizeType = PageSizeType.Custom;
DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
DiagramViewModel.ColorViewModel = new ColorViewModel();
DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" };
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 300, Text = "2" };
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Text = "2" };
DiagramViewModel.DirectAddItemCommand.Execute(node2);
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 300, Top = 50, Text = "3" };
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" };
DiagramViewModel.DirectAddItemCommand.Execute(node3);
ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
DiagramViewModel.DirectAddItemCommand.Execute(connector2);
DiagramViewModel.ClearSelectedItemsCommand.Execute(null);

View File

@@ -12,27 +12,27 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
Title = "Snap to Grid";
Info = "This diagram has a grid size of 100, moving nodes will make them automatically snap.";
_service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DiagramViewModel = new DiagramViewModel();
DiagramViewModel.CellHorizontalAlignment = CellHorizontalAlignment.Center;
DiagramViewModel.CellVerticalAlignment = CellVerticalAlignment.Center;
DiagramViewModel.PageSizeType = PageSizeType.Custom;
DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
DiagramViewModel.ColorViewModel = new ColorViewModel();
DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" };
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 300, Text = "2" };
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Text = "2" };
DiagramViewModel.DirectAddItemCommand.Execute(node2);
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 300, Top = 50, Text = "3" };
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" };
DiagramViewModel.DirectAddItemCommand.Execute(node3);
ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
DiagramViewModel.DirectAddItemCommand.Execute(connector2);
DiagramViewModel.ClearSelectedItemsCommand.Execute(null);

View File

@@ -12,25 +12,25 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
Title = "Zoom";
Info = "Drag the upper-right scroll bar to make the canvas larger and smaller.";
_service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DiagramViewModel = new DiagramViewModel();
DiagramViewModel.PageSizeType = PageSizeType.Custom;
DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
DiagramViewModel.ColorViewModel = new ColorViewModel();
DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" };
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 300, Text = "2" };
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Text = "2" };
DiagramViewModel.DirectAddItemCommand.Execute(node2);
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 300, Top = 50, Text = "3" };
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" };
DiagramViewModel.DirectAddItemCommand.Execute(node3);
ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
DiagramViewModel.DirectAddItemCommand.Execute(connector2);
DiagramViewModel.ClearSelectedItemsCommand.Execute(null);

View File

@@ -0,0 +1,16 @@
<UserControl x:Class="AIStudio.Wpf.DiagramDesigner.Demo.Views.LineAnimationView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:dd="https://gitee.com/akwkevin/aistudio.-wpf.-diagram"
xmlns:controls="clr-namespace:AIStudio.Wpf.DiagramDesigner.Demo.Controls"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<!-- Diagram Control -->
<dd:DiagramControl x:Name="diagram" DataContext="{Binding DiagramViewModel}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
<controls:TitleControl/>
</Grid>
</UserControl>

View File

@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Text;
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.Navigation;
using System.Windows.Shapes;
namespace AIStudio.Wpf.DiagramDesigner.Demo.Views
{
/// <summary>
/// LineAnimationView.xaml 的交互逻辑
/// </summary>
public partial class LineAnimationView : UserControl
{
public LineAnimationView()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,16 @@
<UserControl x:Class="AIStudio.Wpf.DiagramDesigner.Demo.Views.PathAnimationView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:dd="https://gitee.com/akwkevin/aistudio.-wpf.-diagram"
xmlns:controls="clr-namespace:AIStudio.Wpf.DiagramDesigner.Demo.Controls"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<!-- Diagram Control -->
<dd:DiagramControl x:Name="diagram" DataContext="{Binding DiagramViewModel}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
<controls:TitleControl/>
</Grid>
</UserControl>

View File

@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Text;
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.Navigation;
using System.Windows.Shapes;
namespace AIStudio.Wpf.DiagramDesigner.Demo.Views
{
/// <summary>
/// PathAnimationView.xaml 的交互逻辑
/// </summary>
public partial class PathAnimationView : UserControl
{
public PathAnimationView()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,12 @@
<UserControl x:Class="AIStudio.Wpf.DiagramDesigner.Demo.Views.CustomGroupView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:AIStudio.Wpf.DiagramDesigner.Demo.Views"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
</Grid>
</UserControl>

View File

@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Text;
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.Navigation;
using System.Windows.Shapes;
namespace AIStudio.Wpf.DiagramDesigner.Demo.Views
{
/// <summary>
/// CustomGroupView.xaml 的交互逻辑
/// </summary>
public partial class CustomGroupView : UserControl
{
public CustomGroupView()
{
InitializeComponent();
}
}
}

View File

@@ -1,4 +1,4 @@
<UserControl x:Class="AIStudio.Wpf.DiagramDesigner.Demo.Views.ThickLinkView"
<UserControl x:Class="AIStudio.Wpf.DiagramDesigner.Demo.Views.CustomLinkView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

View File

@@ -16,9 +16,9 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.Views
/// <summary>
/// ThickLinkView.xaml 的交互逻辑
/// </summary>
public partial class ThickLinkView : UserControl
public partial class CustomLinkView : UserControl
{
public ThickLinkView()
public CustomLinkView()
{
InitializeComponent();
}

View File

@@ -464,7 +464,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
else if (partialConnection.IsFullConnection)
{
partialConnection.RaiseFullConnection();
}
else if (_service.DrawModeViewModel.GetDrawMode() == DrawMode.DirectLine && connectorsHit.Count() == 1)
{

View File

@@ -162,6 +162,12 @@ namespace AIStudio.Wpf.DiagramDesigner
get; set;
}
[XmlAttribute]
public LineAnimation LineAnimation
{
get; set;
}
public event PropertyChangedEventHandler PropertyChanged;
}

View File

@@ -50,6 +50,7 @@
HorizontalAlignment="Left"
VerticalAlignment="Top"
RenderTransformOrigin="0.5,0.5"
Visibility="{Binding Path=IsFullConnection, Converter={x:Static s:BoolToVisibilityConverter.Instance}}"
Style="{StaticResource ArrowStyle}">
<Path.RenderTransform>
<TransformGroup>
@@ -68,6 +69,7 @@
HorizontalAlignment="Left"
VerticalAlignment="Top"
RenderTransformOrigin="0.5,0.5"
Visibility="{Binding Path=IsFullConnection, Converter={x:Static s:BoolToVisibilityConverter.Instance}}"
Style="{StaticResource ArrowStyle}">
<Path.RenderTransform>
<TransformGroup>

View File

@@ -52,7 +52,6 @@ namespace AIStudio.Wpf.DiagramDesigner
{
switch (e.PropertyName)
{
case nameof(ConnectionViewModel.LineAnimation):
case nameof(ConnectionViewModel.PathGeneratorResult):
await DoAnimation();
break;
@@ -65,7 +64,7 @@ namespace AIStudio.Wpf.DiagramDesigner
if (this.DataContext is ConnectionViewModel connector && connector.IsFullConnection)
{
await System.Threading.Tasks.Task.Delay(100);
switch (connector.LineAnimation)
switch (connector.ColorViewModel.LineAnimation)
{
case LineAnimation.None:
_story?.Stop();

View File

@@ -137,6 +137,19 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
}
private LineAnimation _lineAnimation = LineAnimation.None;
public LineAnimation LineAnimation
{
get
{
return _lineAnimation;
}
set
{
SetProperty(ref _lineAnimation, value);
}
}
}

View File

@@ -29,6 +29,10 @@ namespace AIStudio.Wpf.DiagramDesigner
{
get; set;
}
LineAnimation LineAnimation
{
get; set;
}
event PropertyChangedEventHandler PropertyChanged;
}
}

View File

@@ -15,24 +15,22 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public class ConnectionViewModel : SelectableDesignerItemViewModelBase
{
public ConnectionViewModel(IDiagramViewModel root, FullyCreatedConnectorInfo sourceConnectorInfo, ConnectorInfoBase sinkConnectorInfo, DrawMode drawMode, RouterMode routerMode)
{
Root = root;
PathMode = drawMode.ToString();
RouterMode = routerMode.ToString();
Init(sourceConnectorInfo, sinkConnectorInfo);
}
public ConnectionViewModel(FullyCreatedConnectorInfo sourceConnectorInfo, ConnectorInfoBase sinkConnectorInfo, DrawMode drawMode = DrawMode.ConnectingLineSmooth, RouterMode routerMode = AIStudio.Wpf.DiagramDesigner.RouterMode.RouterNormal) : this(null, sourceConnectorInfo, sinkConnectorInfo, drawMode, routerMode)
{
}
public ConnectionViewModel(IDiagramViewModel root, FullyCreatedConnectorInfo sourceConnectorInfo, ConnectorInfoBase sinkConnectorInfo, DrawMode drawMode = DrawMode.ConnectingLineSmooth, RouterMode routerMode = AIStudio.Wpf.DiagramDesigner.RouterMode.RouterNormal) : base(root)
{
PathMode = drawMode.ToString();
RouterMode = routerMode.ToString();
Init(sourceConnectorInfo, sinkConnectorInfo);
}
public ConnectionViewModel(IDiagramViewModel root, FullyCreatedConnectorInfo sourceConnectorInfo, FullyCreatedConnectorInfo sinkConnectorInfo, ConnectionItem designer) : base(root, designer)
{
PathMode = designer.PathMode;
RouterMode = designer.RouterMode;
Init(sourceConnectorInfo, sinkConnectorInfo);
}
@@ -76,9 +74,9 @@ namespace AIStudio.Wpf.DiagramDesigner
AddLabelCommand = new SimpleCommand(Command_Enable, para => AddLabel());
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is ConnectionItem designer)
{
@@ -297,23 +295,6 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
private LineAnimation _lineAnimation = LineAnimation.None;
[Browsable(true)]
[CanDo]
[StyleName("LineAnimationStyle")]
public LineAnimation LineAnimation
{
get
{
return _lineAnimation;
}
set
{
SetProperty(ref _lineAnimation, value);
}
}
public virtual Dictionary<string, string> PropertiesSetting
{
get
@@ -384,6 +365,11 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
public void RaiseFullConnection()
{
RaisePropertyChanged(nameof(IsFullConnection));
}
public bool IsPortless => SourceConnectorInfo?.DataItem?.Connectors?.Count() == 0;
#endregion
@@ -506,6 +492,15 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
}
else if (sender is ColorViewModel)
{
switch (e.PropertyName)
{
case nameof(ColorViewModel.LineAnimation):
RaisePropertyChanged(nameof(PathGeneratorResult));
break;
}
}
}
private void UpdateArea()

View File

@@ -11,7 +11,12 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public abstract class ConnectorInfoBase : SelectableViewModelBase
{
public ConnectorInfoBase(ConnectorOrientation orientation)
public ConnectorInfoBase(ConnectorOrientation orientation) : this(null, orientation)
{
}
public ConnectorInfoBase(IDiagramViewModel root, ConnectorOrientation orientation) : base(root)
{
this.Orientation = orientation;
}
@@ -31,9 +36,9 @@ namespace AIStudio.Wpf.DiagramDesigner
return new ConnectorInfoItemBase(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
ColorViewModel = new ColorViewModel()
{
@@ -42,9 +47,9 @@ namespace AIStudio.Wpf.DiagramDesigner
};
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is ConnectorInfoItemBase designer)
{

View File

@@ -8,12 +8,16 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public class ConnectorLabelModel : ConnectorPointModel, ISelectable
{
public ConnectorLabelModel(ConnectionViewModel connector, string content, double? distance = null, PointBase? offset = null)
public ConnectorLabelModel(ConnectionViewModel connector, string content, double? distance = null, PointBase? offset = null) : this(null, connector, content, distance, offset)
{
}
public ConnectorLabelModel(IDiagramViewModel root, ConnectionViewModel connector, string content, double? distance = null, PointBase? offset = null) : base(root)
{
Parent = connector;
Text = content;
Distance = distance;
Offset = offset ?? new PointBase();
Offset = offset ?? new PointBase();
}
public ConnectorLabelModel(IDiagramViewModel root, ConnectionViewModel connector, SelectableItemBase designer) : base(root, designer)
@@ -31,9 +35,9 @@ namespace AIStudio.Wpf.DiagramDesigner
return new ConnectorLabelItem(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
ConnectorWidth = 30;
ConnectorHeight = 30;
@@ -41,9 +45,9 @@ namespace AIStudio.Wpf.DiagramDesigner
DeleteLabelCommand = new SimpleCommand(Command_Enable, DeleteLabel);
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is ConnectorLabelItem designer)
{

View File

@@ -11,9 +11,24 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public class ConnectorPointModel : SelectableViewModelBase
{
public ConnectorPointModel()
public ConnectorPointModel() : this(null)
{
}
public ConnectorPointModel(IDiagramViewModel root) : base(root)
{
}
public ConnectorPointModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
}
public ConnectorPointModel(IDiagramViewModel root, SerializableItem serializableItem, string serializableType) : base(root, serializableItem, serializableType)
{
}
public ConnectorPointModel(PointBase point) : this()
@@ -28,24 +43,14 @@ namespace AIStudio.Wpf.DiagramDesigner
Y = y;
}
public ConnectorPointModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
}
public ConnectorPointModel(IDiagramViewModel root, SerializableItem serializableItem, string serializableType) : base(root, serializableItem, serializableType)
{
}
public override SelectableItemBase GetSerializableObject()
{
return new ConnectorPointItem(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
ColorViewModel = new ColorViewModel()
{
LineColor = new ColorObject() { Color = Color.FromArgb(0xAA, 0x00, 0x00, 0x80) },
@@ -53,9 +58,9 @@ namespace AIStudio.Wpf.DiagramDesigner
};
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is ConnectorPointItem designer)
{
@@ -78,7 +83,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
set
{
if(SetProperty(ref _x, value))
if (SetProperty(ref _x, value))
{
RaisePropertyChanged(nameof(Left));
}
@@ -138,15 +143,27 @@ namespace AIStudio.Wpf.DiagramDesigner
private double connectorWidth = 8;
public double ConnectorWidth
{
get { return connectorWidth; }
set { connectorWidth = value; }
get
{
return connectorWidth;
}
set
{
connectorWidth = value;
}
}
private double connectorHeight = 8;
public double ConnectorHeight
{
get { return connectorHeight; }
set { connectorHeight = value; }
get
{
return connectorHeight;
}
set
{
connectorHeight = value;
}
}
public static ConnectorPointModel operator -(ConnectorPointModel a, ConnectorPointModel b)

View File

@@ -6,11 +6,15 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public class ConnectorVertexModel : ConnectorPointModel
{
public ConnectorVertexModel(ConnectionViewModel connector, PointBase? position = null)
public ConnectorVertexModel(ConnectionViewModel connector, PointBase? position = null) : this(null, connector, position)
{
}
public ConnectorVertexModel(IDiagramViewModel root, ConnectionViewModel connector, PointBase? position = null) : base(root)
{
Parent = connector;
X = position?.X ?? 0;
Y = position?.Y ?? 0;
Y = position?.Y ?? 0;
}
public ConnectorVertexModel(IDiagramViewModel root, ConnectionViewModel connector, SelectableItemBase designer) : base(root, designer)
@@ -28,16 +32,16 @@ namespace AIStudio.Wpf.DiagramDesigner
return new ConnectorVertexItem(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
DeleteVertexCommand = new SimpleCommand(Command_Enable, DeleteVertex);
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is ConnectorVertexItem designer)
{

View File

@@ -11,7 +11,12 @@ namespace AIStudio.Wpf.DiagramDesigner
public class FullyCreatedConnectorInfo : ConnectorInfoBase
{
public FullyCreatedConnectorInfo(DesignerItemViewModelBase dataItem, ConnectorOrientation orientation, bool isInnerPoint = false, ValueTypePoint valueTypePoint = 0)
: base(orientation)
: this(null, dataItem, orientation, isInnerPoint, valueTypePoint)
{
}
public FullyCreatedConnectorInfo(IDiagramViewModel root, DesignerItemViewModelBase dataItem, ConnectorOrientation orientation, bool isInnerPoint = false, ValueTypePoint valueTypePoint = 0)
: base(root, orientation)
{
this.Parent = dataItem;
this.IsInnerPoint = isInnerPoint;
@@ -45,9 +50,9 @@ namespace AIStudio.Wpf.DiagramDesigner
return new FullyCreatedConnectorInfoItem(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
menuOptions = new List<CinchMenuItem>();
MenuItemCommand = new SimpleCommand(Command_Enable, ExecuteMenuItemCommand);
@@ -55,9 +60,9 @@ namespace AIStudio.Wpf.DiagramDesigner
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is FullyCreatedConnectorInfoItem designer)
{

View File

@@ -9,6 +9,18 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public class PartCreatedConnectorInfo : ConnectorInfoBase
{
public PartCreatedConnectorInfo(double X, double Y) : this(null, X, Y)
{
}
public PartCreatedConnectorInfo(IDiagramViewModel root, double X, double Y) : base(root, ConnectorOrientation.None)
{
this.position = new PointBase(X, Y);
}
private PointBase position;
public override PointBase Position
{
@@ -18,9 +30,6 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
public PartCreatedConnectorInfo(double X, double Y) : base(ConnectorOrientation.None)
{
this.position = new PointBase(X, Y);
}
}
}

View File

@@ -13,7 +13,12 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public abstract class DesignerItemViewModelBase : SelectableDesignerItemViewModelBase
{
public DesignerItemViewModelBase() : base()
public DesignerItemViewModelBase() : this(null)
{
}
public DesignerItemViewModelBase(IDiagramViewModel root) : base(root)
{
ShapeDefiner = Shapes.Rectangle;
}
@@ -33,16 +38,16 @@ namespace AIStudio.Wpf.DiagramDesigner
return new DesignerItemBase(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
InitConnector();
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is DesignerItemBase designer)
{

View File

@@ -9,14 +9,19 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public class GroupDesignerItemViewModel : DesignerItemViewModelBase
{
public GroupDesignerItemViewModel() : base()
public GroupDesignerItemViewModel() : this(null)
{
}
public GroupDesignerItemViewModel(IDiagramViewModel root) : base(root)
{
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
this.IsHitTestVisible = false;
}

View File

@@ -22,8 +22,12 @@ namespace AIStudio.Wpf.DiagramDesigner
public abstract class SelectableDesignerItemViewModelBase : SelectableViewModelBase, ISelectItems, ISelectable, IGroupable
{
public SelectableDesignerItemViewModelBase() : this(null)
{
public SelectableDesignerItemViewModelBase():base()
}
public SelectableDesignerItemViewModelBase(IDiagramViewModel root) :base(root)
{
}
@@ -38,17 +42,17 @@ namespace AIStudio.Wpf.DiagramDesigner
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
SelectItemCommand = new SimpleCommand(Command_Enable, ExecuteSelectItemCommand);
EditCommand = new SimpleCommand(Command_Enable, ExecuteEditCommand);
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
}
public virtual bool InitData()

View File

@@ -20,34 +20,38 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
public SelectableViewModelBase()
public SelectableViewModelBase() : this(null)
{
Init();
}
public SelectableViewModelBase(IDiagramViewModel root)
{
Init(root);
(FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged;
}
public SelectableViewModelBase(IDiagramViewModel root, SelectableItemBase designer)
{
Init();
LoadDesignerItemViewModel(root, designer);
Init(root);
LoadDesignerItemViewModel(designer);
(FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged;
}
public SelectableViewModelBase(IDiagramViewModel root, SerializableItem serializableItem, string serializableType)
{
Init();
Init(root);
SelectableItemBase obj = SerializeHelper.DeserializeObject(serializableItem.SerializableTypeName, serializableItem.SerializableString, serializableType);
LoadDesignerItemViewModel(root, obj);
LoadDesignerItemViewModel(obj);
(FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged;
}
}
public virtual SerializableItem ToSerializableItem(string serializableType)
{
var obj = GetSerializableObject();
if (obj != null)
{
return new SerializableItem() { ModelTypeName = this.GetType().FullName, SerializableTypeName = obj.GetType().FullName, SerializableString = SerializeHelper.SerializeObject(obj, serializableType) };
return new SerializableItem() { ModelTypeName = this.GetType().FullName, SerializableTypeName = obj.GetType().FullName, SerializableString = SerializeHelper.SerializeObject(obj, serializableType) };
}
else
{
@@ -60,8 +64,10 @@ namespace AIStudio.Wpf.DiagramDesigner
return null;
}
protected virtual void Init()
protected virtual void Init(IDiagramViewModel root)
{
Root = root;
if (Root?.ColorViewModel != null)
{
this.ColorViewModel = CopyHelper.Mapper(Root.ColorViewModel);
@@ -92,10 +98,8 @@ namespace AIStudio.Wpf.DiagramDesigner
LockObjectViewModel = new LockObjectViewModel();
}
protected virtual void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected virtual void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
this.Root = root;
this.Id = designerbase.Id;
this.ParentId = designerbase.ParentId;
this.IsGroup = designerbase.IsGroup;
@@ -211,7 +215,7 @@ namespace AIStudio.Wpf.DiagramDesigner
return _isHitTestVisible;
}
set
{
{
if (SetProperty(ref _isHitTestVisible, value))
{
RaisePropertyChanged("IsReadOnly");

View File

@@ -7,7 +7,12 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public class DefaultDesignerItemViewModel : DesignerItemViewModelBase
{
public DefaultDesignerItemViewModel() : base()
public DefaultDesignerItemViewModel() : this(null)
{
}
public DefaultDesignerItemViewModel(IDiagramViewModel root) : base(root)
{
}

View File

@@ -17,23 +17,24 @@ namespace AIStudio.Wpf.DiagramDesigner
{
//private IDisposable propertyChangedSubscription;
//private IDisposable connectorsChangedSubscription;
public SimpleCommand AddItemCommand { get; private set; }
public SimpleCommand ImageSwitchCommand { get; private set; }
public GifImageItemViewModel() : base()
public GifImageItemViewModel() : this(null)
{
}
public GifImageItemViewModel(IDiagramViewModel root) : base(root)
{
}
public GifImageItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
public GifImageItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
}
public GifImageItemViewModel(IDiagramViewModel root, SerializableItem serializableItem, string serializableType) : base(root, serializableItem, serializableType)
{
}
public override SelectableItemBase GetSerializableObject()
@@ -41,26 +42,26 @@ namespace AIStudio.Wpf.DiagramDesigner
return new MediaDesignerItem(this);
}
protected override void Init()
{
AddItemCommand = new SimpleCommand(Command_Enable, ExecuteAddItemCommand);
ImageSwitchCommand = new SimpleCommand(Command_Enable, ExecuteImageSwitchCommand);
base.Init();
protected override void Init(IDiagramViewModel root)
{
base.Init(root);
ClearConnectors();
//propertyChangedSubscription = WhenPropertyChanged.Where(o => o.ToString() == "Left" || o.ToString() == "Top" || o.ToString() == "ItemWidth" || o.ToString() == "ItemHeight").Subscribe(ChangeImageElement);
//connectorsChangedSubscription = WhenConnectorsChanged.Subscribe(OnConnectorsChanged);
BuildMenuOptions();
AddItemCommand = new SimpleCommand(Command_Enable, ExecuteAddItemCommand);
ImageSwitchCommand = new SimpleCommand(Command_Enable, ExecuteImageSwitchCommand);
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is MediaDesignerItem designer)
if (designerbase is MediaDesignerItem designer)
{
this.Icon = designer.Icon;
foreach (var connector in designer.Connectors)
@@ -74,12 +75,25 @@ namespace AIStudio.Wpf.DiagramDesigner
private bool _shouldInsertAnchor;
public bool ShouldInsertAnchor
{
get { return _shouldInsertAnchor; }
get
{
return _shouldInsertAnchor;
}
set
{
SetProperty(ref _shouldInsertAnchor, value);
}
}
}
public SimpleCommand AddItemCommand
{
get; private set;
}
public SimpleCommand ImageSwitchCommand
{
get; private set;
}
private string dir = System.AppDomain.CurrentDomain.BaseDirectory + "Images\\Gifs";
private void BuildMenuOptions()

View File

@@ -15,12 +15,17 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public class ImageItemViewModel : DesignerItemViewModelBase
{
private static readonly string filter = "图片|*.bmp;*.jpg;*.jpeg;*.gif;*.png";
public ImageItemViewModel() : base()
public ImageItemViewModel() : this(null)
{
}
public ImageItemViewModel(IDiagramViewModel root) : base(root)
{
}
public ImageItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -36,9 +41,9 @@ namespace AIStudio.Wpf.DiagramDesigner
return new ImageDesignerItem(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
this.PropertyChanged += ImageItemViewModel_PropertyChanged;
@@ -110,9 +115,9 @@ namespace AIStudio.Wpf.DiagramDesigner
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is ImageDesignerItem designer)
{

View File

@@ -5,23 +5,20 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public class LinkPointDesignerItemViewModel : DesignerItemViewModelBase
{
public Point CurrentLocation
public LinkPointDesignerItemViewModel(Point location) : this(null, location)
{
get
{
return new Point() { X = Left + ItemWidth / 2, Y = Top + ItemHeight / 2 };
}
}
public LinkPointDesignerItemViewModel(Point location) : base()
public LinkPointDesignerItemViewModel(IDiagramViewModel root, Point location) : base(root)
{
Left = Math.Max(0, location.X - ItemWidth / 2);
Top = Math.Max(0, location.Y - ItemHeight / 2);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
this.ClearConnectors();
this.AddConnector(new FullyCreatedConnectorInfo(this, ConnectorOrientation.None, true));
@@ -29,5 +26,13 @@ namespace AIStudio.Wpf.DiagramDesigner
ItemWidth = 5;
ItemHeight = 5;
}
public Point CurrentLocation
{
get
{
return new Point() { X = Left + ItemWidth / 2, Y = Top + ItemHeight / 2 };
}
}
}
}

View File

@@ -9,13 +9,18 @@ using AIStudio.Wpf.DiagramDesigner.Models;
namespace AIStudio.Wpf.DiagramDesigner
{
public class LogicalGateItemViewModelBase : DesignerItemViewModelBase
public abstract class LogicalGateItemViewModelBase : DesignerItemViewModelBase
{
public SimpleCommand AddInputCommand { get; private set; }
public SimpleCommand AddOutputCommand { get; private set; }
public LogicalGateItemViewModelBase(LogicalType logicalType) : base()
public LogicalGateItemViewModelBase(LogicalType logicalType) : this(null, logicalType)
{
}
public LogicalGateItemViewModelBase(IDiagramViewModel root, LogicalType logicalType) : base(root)
{
this.LogicalType = logicalType;
@@ -89,14 +94,14 @@ namespace AIStudio.Wpf.DiagramDesigner
return new LogicalGateDesignerItemBase(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
ShowRotate = false;
ShowArrow = false;
AddInputCommand = new SimpleCommand(Command_Enable, para => ExecuteAddInput(para));
AddOutputCommand = new SimpleCommand(Command_Enable, para => ExecuteAddOutput(para));
base.Init();
base.Init(root);
}
private void BuildMenuOptions()
@@ -133,9 +138,9 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is LogicalGateDesignerItemBase designer)
{

View File

@@ -10,11 +10,16 @@ namespace AIStudio.Wpf.DiagramDesigner
{
protected virtual string Filter { get; set; } = "媒体·|*.*";
public MediaItemViewModel() : base()
public MediaItemViewModel() : this(null)
{
}
public MediaItemViewModel(IDiagramViewModel root) : base(root)
{
}
public MediaItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -30,17 +35,17 @@ namespace AIStudio.Wpf.DiagramDesigner
return new MediaDesignerItem(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
BuildMenuOptions();
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel parent, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(parent, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is MediaDesignerItem designer)
{

View File

@@ -5,6 +5,28 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public class PointDesignerItemViewModel : DesignerItemViewModelBase
{
public PointDesignerItemViewModel(Point location) : this(null, location)
{
}
public PointDesignerItemViewModel(IDiagramViewModel root, Point location) : base(root)
{
Left = Math.Max(0, location.X - ItemWidth / 2);
Top = Math.Max(0, location.Y - ItemHeight / 2);
}
protected override void Init(IDiagramViewModel root)
{
base.Init(root);
this.ClearConnectors();
this.AddConnector(new FullyCreatedConnectorInfo(this, ConnectorOrientation.None, true));
ItemWidth = 5;
ItemHeight = 5;
}
private bool _showConnectors = false;
public new bool ShowConnectors
{
@@ -25,24 +47,5 @@ namespace AIStudio.Wpf.DiagramDesigner
return new Point() { X = Left + ItemWidth / 2, Y = Top + ItemHeight / 2 };
}
}
public PointDesignerItemViewModel(Point location) : base()
{
Left = Math.Max(0, location.X - ItemWidth / 2);
Top = Math.Max(0, location.Y - ItemHeight / 2);
}
protected override void Init()
{
base.Init();
this.ClearConnectors();
this.AddConnector(new FullyCreatedConnectorInfo(this, ConnectorOrientation.None, true));
ItemWidth = 5;
ItemHeight = 5;
}
}
}

View File

@@ -11,7 +11,33 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public class ShapeDesignerItemViewModel : DesignerItemViewModelBase
{
public List<PointDesignerItemViewModel> PointDesignerItemViewModels { get; set; }
public ShapeDesignerItemViewModel(DrawMode drawMode, List<Point> points) : this(null, drawMode, points)
{
}
public ShapeDesignerItemViewModel(IDiagramViewModel root, DrawMode drawMode, List<Point> points) : base(root)
{
DrawMode = drawMode;
ConnectionPoints = points;
ItemWidth = ConnectionPoints.Max(p => p.X) - ConnectionPoints.Min(p => p.X);
ItemHeight = ConnectionPoints.Max(p => p.Y) - ConnectionPoints.Min(p => p.Y);
Left = ConnectionPoints.Min(p => p.X);
Top = ConnectionPoints.Min(p => p.Y);
PointDesignerItemViewModels = new List<PointDesignerItemViewModel>();
ConnectionPoints.ForEach((Action<Point>)(p => {
var item = new PointDesignerItemViewModel(p);
PointDesignerItemViewModels.Add((PointDesignerItemViewModel)item);
}));
PointDesignerItemViewModels.ForEach(p => p.PropertyChanged += PointDesignerItemViewModel_PropertyChanged);
}
public List<PointDesignerItemViewModel> PointDesignerItemViewModels
{
get; set;
}
private List<Point> _connectionPoints;
public List<Point> ConnectionPoints
@@ -25,7 +51,10 @@ namespace AIStudio.Wpf.DiagramDesigner
SetProperty(ref _connectionPoints, value);
}
}
public DrawMode DrawMode { get; set; }
public DrawMode DrawMode
{
get; set;
}
private bool _showConnectors = false;
public new bool ShowConnectors
@@ -46,26 +75,9 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
public SimpleCommand MenuItemCommand { get; private set; }
public ShapeDesignerItemViewModel(DrawMode drawMode, List<Point> points) : base()
public SimpleCommand MenuItemCommand
{
DrawMode = drawMode;
ConnectionPoints = points;
ItemWidth = ConnectionPoints.Max(p => p.X) - ConnectionPoints.Min(p => p.X);
ItemHeight = ConnectionPoints.Max(p => p.Y) - ConnectionPoints.Min(p => p.Y);
Left = ConnectionPoints.Min(p => p.X);
Top = ConnectionPoints.Min(p => p.Y);
PointDesignerItemViewModels = new List<PointDesignerItemViewModel>();
ConnectionPoints.ForEach((Action<Point>)(p =>
{
var item = new PointDesignerItemViewModel(p);
PointDesignerItemViewModels.Add((PointDesignerItemViewModel)item);
}));
PointDesignerItemViewModels.ForEach(p => p.PropertyChanged += PointDesignerItemViewModel_PropertyChanged);
get; private set;
}
private void PointDesignerItemViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
@@ -85,10 +97,10 @@ namespace AIStudio.Wpf.DiagramDesigner
Top = ConnectionPoints.Min(p => p.Y);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
MenuItemCommand = new SimpleCommand(Command_Enable, ExecuteMenuItemCommand);
base.Init();
base.Init(root);
this.ClearConnectors();

View File

@@ -7,7 +7,12 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public class TextDesignerItemViewModel : DesignerItemViewModelBase
{
public TextDesignerItemViewModel()
public TextDesignerItemViewModel() : this(null)
{
}
public TextDesignerItemViewModel(IDiagramViewModel root) : base(root)
{
}
@@ -27,9 +32,9 @@ namespace AIStudio.Wpf.DiagramDesigner
return new TextDesignerItem(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
this.ItemWidth = 150;
this.ClearConnectors();

View File

@@ -10,16 +10,20 @@ namespace AIStudio.Wpf.DiagramDesigner
{
protected override string Filter { get; set; } = "视频|*.wmv;*.asf;*.asx;*.rm;*.rmvb;*.mp4;*.3gp;*.mov;*.m4v;*.avi;*.dat;*.mkv;*.flv;*.vob";
public VideoItemViewModel() : base()
public VideoItemViewModel() : this(null)
{
}
public VideoItemViewModel(IDiagramViewModel root) : base(root)
{
}
public VideoItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
}
public VideoItemViewModel(IDiagramViewModel root, SerializableItem serializableItem, string serializableType) : base(root, serializableItem, serializableType)
{

View File

@@ -12,7 +12,12 @@ namespace AIStudio.Wpf.Flowchart.ViewModels
{
protected IUIVisualizerService visualiserService;
public FlowNode(NodeKinds kind) : base()
public FlowNode(NodeKinds kind) : this(null, kind)
{
}
public FlowNode(IDiagramViewModel root, NodeKinds kind) : base(root)
{
Kind = kind;
Text = Kind.GetDescription();
@@ -33,9 +38,9 @@ namespace AIStudio.Wpf.Flowchart.ViewModels
return new FlowNodeDesignerItem(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
ShowRotate = false;
ShowText = true;
@@ -44,9 +49,9 @@ namespace AIStudio.Wpf.Flowchart.ViewModels
visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService;
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is FlowNodeDesignerItem designer)
{
@@ -125,7 +130,12 @@ namespace AIStudio.Wpf.Flowchart.ViewModels
public class StartFlowNode : FlowNode
{
public StartFlowNode() : base(NodeKinds.Start)
public StartFlowNode() : this(null)
{
}
public StartFlowNode(IDiagramViewModel root) : base(root, NodeKinds.Start)
{
}
@@ -143,7 +153,12 @@ namespace AIStudio.Wpf.Flowchart.ViewModels
public class EndFlowNode : FlowNode
{
public EndFlowNode() : base(NodeKinds.End)
public EndFlowNode() : this(null)
{
}
public EndFlowNode(IDiagramViewModel root) : base(root, NodeKinds.End)
{
}
@@ -161,7 +176,12 @@ namespace AIStudio.Wpf.Flowchart.ViewModels
public class DecideFlowNode : FlowNode
{
public DecideFlowNode() : base(NodeKinds.Decide)
public DecideFlowNode() : this(null)
{
}
public DecideFlowNode(IDiagramViewModel root) : base(root, NodeKinds.Decide)
{
}
@@ -179,7 +199,12 @@ namespace AIStudio.Wpf.Flowchart.ViewModels
public class COBeginFlowNode : FlowNode
{
public COBeginFlowNode() : base(NodeKinds.COBegin)
public COBeginFlowNode() : this(null)
{
}
public COBeginFlowNode(IDiagramViewModel root) : base(root, NodeKinds.COBegin)
{
}
@@ -197,7 +222,12 @@ namespace AIStudio.Wpf.Flowchart.ViewModels
public class COEndFlowNode : FlowNode
{
public COEndFlowNode() : base(NodeKinds.COEnd)
public COEndFlowNode() : this(null)
{
}
public COEndFlowNode(IDiagramViewModel root) : base(root, NodeKinds.COEnd)
{
}

View File

@@ -9,7 +9,12 @@ namespace AIStudio.Wpf.Flowchart.ViewModels
{
public class MiddleFlowNode : FlowNode
{
public MiddleFlowNode() : base(NodeKinds.Middle)
public MiddleFlowNode() : this(null)
{
}
public MiddleFlowNode(IDiagramViewModel root) : base(root, NodeKinds.Middle)
{
}

View File

@@ -8,10 +8,15 @@ using AIStudio.Wpf.DiagramDesigner.Services;
namespace AIStudio.Wpf.Logical.ViewModels
{
public class LogicalGateItemViewModel : LogicalGateItemViewModelBase
public abstract class LogicalGateItemViewModel : LogicalGateItemViewModelBase
{
protected IUIVisualizerService visualiserService;
public LogicalGateItemViewModel(LogicalType logicalType) : base(logicalType)
public LogicalGateItemViewModel(LogicalType logicalType) : this(null, logicalType)
{
ColorViewModel.FillColor.Color = Colors.Orange;
}
public LogicalGateItemViewModel(IDiagramViewModel root, LogicalType logicalType) : base(root, logicalType)
{
ColorViewModel.FillColor.Color = Colors.Orange;
}
@@ -31,16 +36,16 @@ namespace AIStudio.Wpf.Logical.ViewModels
return new LogicalGateDesignerItemBase(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService;
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is LogicalGateDesignerItemBase designer)
{
@@ -72,7 +77,11 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class AddGateItemViewModel : LogicalGateItemViewModel
{
public AddGateItemViewModel() : base(LogicalType.ADD)
public AddGateItemViewModel() : this(null)
{
}
public AddGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.ADD)
{
}
@@ -88,7 +97,11 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class SubtractGateItemViewModel : LogicalGateItemViewModel
{
public SubtractGateItemViewModel() : base(LogicalType.SUB)
public SubtractGateItemViewModel() : this(null)
{
}
public SubtractGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.SUB)
{
}
@@ -104,7 +117,11 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class MultiplyGateItemViewModel : LogicalGateItemViewModel
{
public MultiplyGateItemViewModel() : base(LogicalType.MUL)
public MultiplyGateItemViewModel() : this(null)
{
}
public MultiplyGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.MUL)
{
}
@@ -121,7 +138,11 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class DivideGateItemViewModel : LogicalGateItemViewModel
{
public DivideGateItemViewModel() : base(LogicalType.DIV)
public DivideGateItemViewModel() : this(null)
{
}
public DivideGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.DIV)
{
}
@@ -137,11 +158,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class AverageGateItemViewModel : LogicalGateItemViewModel
{
public AverageGateItemViewModel() : base(LogicalType.AVE)
public AverageGateItemViewModel() : this(null)
{
}
public AverageGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.AVE)
{
}
public AverageGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -155,11 +180,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class MODGateItemViewModel : LogicalGateItemViewModel
{
public MODGateItemViewModel() : base(LogicalType.MOD)
public MODGateItemViewModel() : this(null)
{
}
public MODGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.MOD)
{
}
public MODGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -173,11 +202,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class ANDGateItemViewModel : LogicalGateItemViewModel
{
public ANDGateItemViewModel() : base(LogicalType.AND)
public ANDGateItemViewModel() : this(null)
{
}
public ANDGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.AND)
{
}
public ANDGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -191,11 +224,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class ORGateItemViewModel : LogicalGateItemViewModel
{
public ORGateItemViewModel() : base(LogicalType.OR)
public ORGateItemViewModel() : this(null)
{
}
public ORGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.OR)
{
}
public ORGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -209,11 +246,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class XORGateItemViewModel : LogicalGateItemViewModel
{
public XORGateItemViewModel() : base(LogicalType.XOR)
public XORGateItemViewModel() : this(null)
{
}
public XORGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.XOR)
{
}
public XORGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -227,11 +268,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class NOTGateItemViewModel : LogicalGateItemViewModel
{
public NOTGateItemViewModel() : base(LogicalType.NOT)
public NOTGateItemViewModel() : this(null)
{
}
public NOTGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.NOT)
{
}
public NOTGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -245,11 +290,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class SHLGateItemViewModel : LogicalGateItemViewModel
{
public SHLGateItemViewModel() : base(LogicalType.SHL)
public SHLGateItemViewModel() : this(null)
{
}
public SHLGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.SHL)
{
}
public SHLGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -263,11 +312,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class SHRGateItemViewModel : LogicalGateItemViewModel
{
public SHRGateItemViewModel() : base(LogicalType.SHR)
public SHRGateItemViewModel() : this(null)
{
}
public SHRGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.SHR)
{
}
public SHRGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -281,11 +334,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class ROLGateItemViewModel : LogicalGateItemViewModel
{
public ROLGateItemViewModel() : base(LogicalType.ROL)
public ROLGateItemViewModel() : this(null)
{
}
public ROLGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.ROL)
{
}
public ROLGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -299,11 +356,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class RORGateItemViewModel : LogicalGateItemViewModel
{
public RORGateItemViewModel() : base(LogicalType.ROR)
public RORGateItemViewModel() : this(null)
{
}
public RORGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.ROR)
{
}
public RORGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -317,11 +378,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class SELGateItemViewModel : LogicalGateItemViewModel
{
public SELGateItemViewModel() : base(LogicalType.SEL)
public SELGateItemViewModel() : this(null)
{
}
public SELGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.SEL)
{
}
public SELGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -335,11 +400,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class MAXGateItemViewModel : LogicalGateItemViewModel
{
public MAXGateItemViewModel() : base(LogicalType.MAX)
public MAXGateItemViewModel() : this(null)
{
}
public MAXGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.MAX)
{
}
public MAXGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -353,11 +422,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class MINGateItemViewModel : LogicalGateItemViewModel
{
public MINGateItemViewModel() : base(LogicalType.MIN)
public MINGateItemViewModel() : this(null)
{
}
public MINGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.MIN)
{
}
public MINGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -371,11 +444,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class LIMITGateItemViewModel : LogicalGateItemViewModel
{
public LIMITGateItemViewModel() : base(LogicalType.LIMIT)
public LIMITGateItemViewModel() : this(null)
{
}
public LIMITGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.LIMIT)
{
}
public LIMITGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -389,11 +466,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class GTGateItemViewModel : LogicalGateItemViewModel
{
public GTGateItemViewModel() : base(LogicalType.GT)
public GTGateItemViewModel() : this(null)
{
}
public GTGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.GT)
{
}
public GTGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -407,11 +488,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class LTGateItemViewModel : LogicalGateItemViewModel
{
public LTGateItemViewModel() : base(LogicalType.GT)
public LTGateItemViewModel() : this(null)
{
}
public LTGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.LT)
{
}
public LTGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -425,11 +510,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class GEGateItemViewModel : LogicalGateItemViewModel
{
public GEGateItemViewModel() : base(LogicalType.GE)
public GEGateItemViewModel() : this(null)
{
}
public GEGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.GE)
{
}
public GEGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -443,11 +532,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class LEGateItemViewModel : LogicalGateItemViewModel
{
public LEGateItemViewModel() : base(LogicalType.LE)
public LEGateItemViewModel() : this(null)
{
}
public LEGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.LE)
{
}
public LEGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -461,11 +554,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class EQGateItemViewModel : LogicalGateItemViewModel
{
public EQGateItemViewModel() : base(LogicalType.LE)
public EQGateItemViewModel() : this(null)
{
}
public EQGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.EQ)
{
}
public EQGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -479,11 +576,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class NEGateItemViewModel : LogicalGateItemViewModel
{
public NEGateItemViewModel() : base(LogicalType.NE)
public NEGateItemViewModel() : this(null)
{
}
public NEGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.NE)
{
}
public NEGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -497,11 +598,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class ABSGateItemViewModel : LogicalGateItemViewModel
{
public ABSGateItemViewModel() : base(LogicalType.ABS)
public ABSGateItemViewModel() : this(null)
{
}
public ABSGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.ABS)
{
}
public ABSGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -515,11 +620,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class SQRTGateItemViewModel : LogicalGateItemViewModel
{
public SQRTGateItemViewModel() : base(LogicalType.SQRT)
public SQRTGateItemViewModel() : this(null)
{
}
public SQRTGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.SQRT)
{
}
public SQRTGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -533,11 +642,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class LNGateItemViewModel : LogicalGateItemViewModel
{
public LNGateItemViewModel() : base(LogicalType.LN)
public LNGateItemViewModel() : this(null)
{
}
public LNGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.LN)
{
}
public LNGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -551,11 +664,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class LOGGateItemViewModel : LogicalGateItemViewModel
{
public LOGGateItemViewModel() : base(LogicalType.LOG)
public LOGGateItemViewModel() : this(null)
{
}
public LOGGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.LOG)
{
}
public LOGGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -569,11 +686,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class EXPGateItemViewModel : LogicalGateItemViewModel
{
public EXPGateItemViewModel() : base(LogicalType.EXP)
public EXPGateItemViewModel() : this(null)
{
}
public EXPGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.EXP)
{
}
public EXPGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -587,11 +708,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class SINGateItemViewModel : LogicalGateItemViewModel
{
public SINGateItemViewModel() : base(LogicalType.SIN)
public SINGateItemViewModel() : this(null)
{
}
public SINGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.SIN)
{
}
public SINGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -605,11 +730,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class COSGateItemViewModel : LogicalGateItemViewModel
{
public COSGateItemViewModel() : base(LogicalType.COS)
public COSGateItemViewModel() : this(null)
{
}
public COSGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.COS)
{
}
public COSGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -623,11 +752,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class TANGateItemViewModel : LogicalGateItemViewModel
{
public TANGateItemViewModel() : base(LogicalType.TAN)
public TANGateItemViewModel() : this(null)
{
}
public TANGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.TAN)
{
}
public TANGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -641,11 +774,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class ASINGateItemViewModel : LogicalGateItemViewModel
{
public ASINGateItemViewModel() : base(LogicalType.ASIN)
public ASINGateItemViewModel() : this(null)
{
}
public ASINGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.ASIN)
{
}
public ASINGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -659,11 +796,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class ACOSGateItemViewModel : LogicalGateItemViewModel
{
public ACOSGateItemViewModel() : base(LogicalType.ACOS)
public ACOSGateItemViewModel() : this(null)
{
}
public ACOSGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.ACOS)
{
}
public ACOSGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -677,11 +818,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class ATANGateItemViewModel : LogicalGateItemViewModel
{
public ATANGateItemViewModel() : base(LogicalType.ATAN)
public ATANGateItemViewModel() : this(null)
{
}
public ATANGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.ATAN)
{
}
public ATANGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -695,11 +840,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class EXPTGateItemViewModel : LogicalGateItemViewModel
{
public EXPTGateItemViewModel() : base(LogicalType.EXPT)
public EXPTGateItemViewModel() : this(null)
{
}
public EXPTGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.EXPT)
{
}
public EXPTGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
@@ -713,7 +862,12 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class ConstantDesignerItemViewModel : LogicalGateItemViewModel
{
public ConstantDesignerItemViewModel() : base(LogicalType.Constant)
public ConstantDesignerItemViewModel() : this(null)
{
}
public ConstantDesignerItemViewModel(IDiagramViewModel root) : base(root, LogicalType.Constant)
{
ItemHeight = 28;
}
@@ -731,7 +885,11 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class InputItemViewModel : LogicalGateItemViewModel
{
public InputItemViewModel() : base(LogicalType.Input)
public InputItemViewModel() : this(null)
{
}
public InputItemViewModel(IDiagramViewModel root) : base(root, LogicalType.Input)
{
ItemHeight = 28;
}
@@ -746,9 +904,9 @@ namespace AIStudio.Wpf.Logical.ViewModels
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is LogicalGateDesignerItemBase designer)
{
@@ -790,7 +948,12 @@ namespace AIStudio.Wpf.Logical.ViewModels
public class OutputItemViewModel : LogicalGateItemViewModel
{
public OutputItemViewModel() : base(LogicalType.Output)
public OutputItemViewModel() : this(null)
{
}
public OutputItemViewModel(IDiagramViewModel root) : base(root, LogicalType.Output)
{
ItemHeight = 28;
}
@@ -805,9 +968,9 @@ namespace AIStudio.Wpf.Logical.ViewModels
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is LogicalGateDesignerItemBase designer)
{
@@ -853,7 +1016,12 @@ namespace AIStudio.Wpf.Logical.ViewModels
private System.Timers.Timer readDataTimer = new System.Timers.Timer();
public Action Do;
public TimerDesignerItemViewModel() : base(LogicalType.Time)
public TimerDesignerItemViewModel() : this(null)
{
}
public TimerDesignerItemViewModel(IDiagramViewModel root) : base(root, LogicalType.Time)
{
ItemHeight = 32;
ItemWidth = 32;
@@ -872,18 +1040,18 @@ namespace AIStudio.Wpf.Logical.ViewModels
BuildMenuOptions();
}
protected override void Init()
{
MenuItemCommand = new SimpleCommand(Command_Enable, ExecuteMenuItemCommand);
base.Init();
protected override void Init(IDiagramViewModel root)
{
base.Init(root);
MenuItemCommand = new SimpleCommand(Command_Enable, ExecuteMenuItemCommand);
readDataTimer.Elapsed += timeCycle;
readDataTimer.Interval = 1000;
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (IsEnabled)
{

View File

@@ -8,7 +8,12 @@ namespace AIStudio.Wpf.SFC.ViewModels
{
public class SFCCOBeginNode : SFCNode
{
public SFCCOBeginNode() : base(SFCNodeKinds.COBegin)
public SFCCOBeginNode() : this(null)
{
}
public SFCCOBeginNode(IDiagramViewModel root) : base(root, SFCNodeKinds.COBegin)
{
ItemWidth = 280;
ItemHeight = 10;

View File

@@ -8,7 +8,12 @@ namespace AIStudio.Wpf.SFC.ViewModels
{
public class SFCCOEndNode : SFCNode
{
public SFCCOEndNode() : base(SFCNodeKinds.COEnd)
public SFCCOEndNode() : this(null)
{
}
public SFCCOEndNode(IDiagramViewModel root) : base(root, SFCNodeKinds.COEnd)
{
ItemWidth = 280;
ItemHeight = 10;

View File

@@ -11,11 +11,16 @@ namespace AIStudio.Wpf.SFC.ViewModels
{
public class SFCConditionNode : SFCNode
{
public SFCConditionNode() : base(SFCNodeKinds.Condition)
public SFCConditionNode() : this(null)
{
}
public SFCConditionNode(IDiagramViewModel root) : base(root, SFCNodeKinds.Condition)
{
ColorViewModel.LineColor.Color = Colors.Black;
ItemWidth = 30;
ItemHeight = 30;
ItemHeight = 30;
ExecuteAddTopInput(null);
ExecuteAddBottomOutput(null);
@@ -30,9 +35,9 @@ namespace AIStudio.Wpf.SFC.ViewModels
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
}
private bool _showText;

View File

@@ -14,7 +14,12 @@ namespace AIStudio.Wpf.SFC.ViewModels
{
protected IUIVisualizerService visualiserService;
public SFCNode(SFCNodeKinds kind) : base()
public SFCNode(SFCNodeKinds kind) : this(null, kind)
{
}
public SFCNode(IDiagramViewModel root, SFCNodeKinds kind) : base(root)
{
ColorViewModel.FillColor.Color = Colors.Blue;
Kind = kind;
@@ -37,7 +42,7 @@ namespace AIStudio.Wpf.SFC.ViewModels
return new SFCNodeDesignerItem(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
IsInnerConnector = true;
ShowRotate = false;
@@ -45,14 +50,14 @@ namespace AIStudio.Wpf.SFC.ViewModels
ShowText = true;
IsReadOnlyText = true;
base.Init();
base.Init(root);
visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService;
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is SFCNodeDesignerItem designer)
{

View File

@@ -8,7 +8,12 @@ namespace AIStudio.Wpf.SFC.ViewModels
{
public class SFCStartNode : SFCNode
{
public SFCStartNode() : base(SFCNodeKinds.Start)
public SFCStartNode() : this(null)
{
}
public SFCStartNode(IDiagramViewModel root) : base(root, SFCNodeKinds.Start)
{
ExecuteAddTopInput(null);
ExecuteAddBottomOutput(null);

View File

@@ -11,7 +11,12 @@ namespace AIStudio.Wpf.SFC.ViewModels
public class Simulate_SolenoidViewModel : SFCNode
{
private IDisposable diChangedSubscription;
public Simulate_SolenoidViewModel() : base(SFCNodeKinds.Simulate_Solenoid)
public Simulate_SolenoidViewModel() : this(null)
{
}
public Simulate_SolenoidViewModel(IDiagramViewModel root) : base(root, SFCNodeKinds.Simulate_Solenoid)
{
ItemWidth = 32;
ItemHeight = 32;
@@ -29,9 +34,9 @@ namespace AIStudio.Wpf.SFC.ViewModels
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
if (diChangedSubscription != null)
{
diChangedSubscription.Dispose();

View File

@@ -8,7 +8,12 @@ namespace AIStudio.Wpf.SFC.ViewModels
{
public class Simulate_StartViewModel : SFCNode
{
public Simulate_StartViewModel() : base(SFCNodeKinds.Simulate_Start)
public Simulate_StartViewModel() : this(null)
{
}
public Simulate_StartViewModel(IDiagramViewModel root) : base(root, SFCNodeKinds.Simulate_Start)
{
ItemWidth = 32;
ItemHeight = 32;

View File

@@ -9,7 +9,12 @@ namespace AIStudio.Wpf.SFC.ViewModels
{
public class Simulate_TankViewModel : SFCNode
{
public Simulate_TankViewModel() : base(SFCNodeKinds.Simulate_Tank)
public Simulate_TankViewModel() : this(null)
{
}
public Simulate_TankViewModel(IDiagramViewModel root) : base(root, SFCNodeKinds.Simulate_Tank)
{
ItemWidth = 50;
ItemHeight = 120;