自动布局完成

This commit is contained in:
艾竹
2023-12-21 22:20:38 +08:00
parent 467bec839a
commit 6e917a2107
5 changed files with 340 additions and 320 deletions

View File

@@ -1,100 +1,100 @@
//using System.Collections.Generic;
//using System.Windows;
//using AIStudio.Wpf.DiagramDesigner.Geometrys;
using System.Collections.Generic;
using System.Windows;
using AIStudio.Wpf.DiagramDesigner.Geometrys;
//namespace AIStudio.Wpf.DiagramDesigner.Layout
//{
// internal interface IState
// {
// VectorBase GetNodePosition(DesignerItemViewModelBase node);
// void SetNodePosition(DesignerItemViewModelBase node, VectorBase pos);
// VectorBase GetEndpointPosition(ConnectorInfoBase endpoint);
// VectorBase GetNodeSpeed(DesignerItemViewModelBase node);
// void SetNodeSpeed(DesignerItemViewModelBase node, VectorBase speed);
// }
namespace AIStudio.Wpf.DiagramDesigner.Layout
{
internal interface IState
{
VectorBase GetNodePosition(DesignerItemViewModelBase node);
void SetNodePosition(DesignerItemViewModelBase node, VectorBase pos);
VectorBase GetEndpointPosition(ConnectorInfoBase endpoint);
VectorBase GetNodeSpeed(DesignerItemViewModelBase node);
void SetNodeSpeed(DesignerItemViewModelBase node, VectorBase speed);
}
// internal class BufferedState : IState
// {
// private readonly Dictionary<DesignerItemViewModelBase, VectorBase> _nodePositions = new Dictionary<DesignerItemViewModelBase, VectorBase>();
// private readonly Dictionary<ConnectorInfoBase, VectorBase> _endpointRelativePositions = new Dictionary<ConnectorInfoBase, VectorBase>();
// public IEnumerable<KeyValuePair<DesignerItemViewModelBase, VectorBase>> NodePositions => _nodePositions;
internal class BufferedState : IState
{
private readonly Dictionary<DesignerItemViewModelBase, VectorBase> _nodePositions = new Dictionary<DesignerItemViewModelBase, VectorBase>();
private readonly Dictionary<ConnectorInfoBase, VectorBase> _endpointRelativePositions = new Dictionary<ConnectorInfoBase, VectorBase>();
public IEnumerable<KeyValuePair<DesignerItemViewModelBase, VectorBase>> NodePositions => _nodePositions;
// private readonly Dictionary<DesignerItemViewModelBase, VectorBase> _nodeSpeeds = new Dictionary<DesignerItemViewModelBase, VectorBase>();
private readonly Dictionary<DesignerItemViewModelBase, VectorBase> _nodeSpeeds = new Dictionary<DesignerItemViewModelBase, VectorBase>();
// public VectorBase GetNodePosition(DesignerItemViewModelBase node)
// {
// if (!_nodePositions.TryGetValue(node, out VectorBase result))
// {
// result = new VectorBase(node.Position.X, node.Position.Y);
// }
public VectorBase GetNodePosition(DesignerItemViewModelBase node)
{
if (!_nodePositions.TryGetValue(node, out VectorBase result))
{
result = new VectorBase(node.Position.X, node.Position.Y);
}
// return result;
// }
return result;
}
// public void SetNodePosition(DesignerItemViewModelBase node, VectorBase pos)
// {
// _nodePositions[node] = pos;
// }
public void SetNodePosition(DesignerItemViewModelBase node, VectorBase pos)
{
_nodePositions[node] = pos;
}
// public VectorBase GetEndpointPosition(ConnectorInfoBase endpoint)
// {
// if (!_endpointRelativePositions.TryGetValue(endpoint, out VectorBase result))
// {
// result = new VectorBase(endpoint.MiddlePosition.X, endpoint.MiddlePosition.Y) - GetNodePosition(endpoint.Parent);
// _endpointRelativePositions[endpoint] = result;
// }
public VectorBase GetEndpointPosition(ConnectorInfoBase endpoint)
{
if (!_endpointRelativePositions.TryGetValue(endpoint, out VectorBase result))
{
result = new VectorBase(endpoint.MiddlePosition.X, endpoint.MiddlePosition.Y) - GetNodePosition(endpoint.Parent as DesignerItemViewModelBase);
_endpointRelativePositions[endpoint] = result;
}
// return result + GetNodePosition(endpoint.Parent as DesignerItemViewModelBase);
// }
return result + GetNodePosition(endpoint.Parent as DesignerItemViewModelBase);
}
// public VectorBase GetNodeSpeed(DesignerItemViewModelBase node)
// {
// if (!_nodeSpeeds.TryGetValue(node, out VectorBase result))
// {
// result = new VectorBase(0, 0);
// }
public VectorBase GetNodeSpeed(DesignerItemViewModelBase node)
{
if (!_nodeSpeeds.TryGetValue(node, out VectorBase result))
{
result = new VectorBase(0, 0);
}
// return result;
// }
return result;
}
// public void SetNodeSpeed(DesignerItemViewModelBase node, VectorBase speed)
// {
// _nodeSpeeds[node] = speed;
// }
// }
public void SetNodeSpeed(DesignerItemViewModelBase node, VectorBase speed)
{
_nodeSpeeds[node] = speed;
}
}
// internal class LiveState : IState
// {
// private readonly Dictionary<DesignerItemViewModelBase, VectorBase> _nodeSpeeds = new Dictionary<DesignerItemViewModelBase, VectorBase>();
internal class LiveState : IState
{
private readonly Dictionary<DesignerItemViewModelBase, VectorBase> _nodeSpeeds = new Dictionary<DesignerItemViewModelBase, VectorBase>();
// public VectorBase GetNodePosition(DesignerItemViewModelBase node)
// {
// return new VectorBase(node.Position.X, node.Position.Y);
// }
public VectorBase GetNodePosition(DesignerItemViewModelBase node)
{
return new VectorBase(node.Position.X, node.Position.Y);
}
// public void SetNodePosition(DesignerItemViewModelBase node, VectorBase pos)
// {
// node.Position = new Point(pos.X, pos.Y);
// }
public void SetNodePosition(DesignerItemViewModelBase node, VectorBase pos)
{
node.Position = new Point(pos.X, pos.Y);
}
// public VectorBase GetEndpointPosition(ConnectorInfoBase endpoint)
// {
// return new VectorBase(endpoint.MiddlePosition.X, endpoint.MiddlePosition.Y);
// }
public VectorBase GetEndpointPosition(ConnectorInfoBase endpoint)
{
return new VectorBase(endpoint.MiddlePosition.X, endpoint.MiddlePosition.Y);
}
// public VectorBase GetNodeSpeed(DesignerItemViewModelBase node)
// {
// if (!_nodeSpeeds.TryGetValue(node, out VectorBase result))
// {
// result = new VectorBase(0, 0);
// }
public VectorBase GetNodeSpeed(DesignerItemViewModelBase node)
{
if (!_nodeSpeeds.TryGetValue(node, out VectorBase result))
{
result = new VectorBase(0, 0);
}
// return result;
// }
return result;
}
// public void SetNodeSpeed(DesignerItemViewModelBase node, VectorBase speed)
// {
// _nodeSpeeds[node] = speed;
// }
// }
//}
public void SetNodeSpeed(DesignerItemViewModelBase node, VectorBase speed)
{
_nodeSpeeds[node] = speed;
}
}
}