Files
aistudio-wpf-diagram/Extensions/AIStudio.Wpf.SFC/ViewModels/Simulate_TankViewModel.cs

95 lines
2.8 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
2021-08-02 18:08:43 +08:00
using System.Linq;
using System.Text;
2022-10-28 22:45:39 +08:00
using AIStudio.Wpf.DiagramDesigner;
2023-01-25 11:11:27 +08:00
using AIStudio.Wpf.DiagramDesigner.Models;
namespace AIStudio.Wpf.SFC.ViewModels
{
public class Simulate_TankViewModel : SFCNode
{
2023-01-27 14:54:03 +08:00
public Simulate_TankViewModel() : this(null)
{
}
public Simulate_TankViewModel(IDiagramViewModel root) : base(root, SFCNodeKinds.Simulate_Tank)
{
ItemWidth = 50;
ItemHeight = 120;
ExecuteAddLeftInput(null);
ExecuteAddLeftInput(null);
ExecuteAddRightOutput(null);
ExecuteAddRightOutput(null);
}
2023-01-24 17:53:04 +08:00
public Simulate_TankViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
}
2023-01-25 11:11:27 +08:00
public Simulate_TankViewModel(IDiagramViewModel root, SerializableItem serializableItem, string serializableType) : base(root, serializableItem, serializableType)
{
}
public override void ExecuteAddLeftInput(object parameter)
{
FullyCreatedConnectorInfo connector = new FullyCreatedConnectorInfo(this, ConnectorOrientation.Left, true);
connector.XRatio = 0;
connector.YRatio = (30 + Input.Count * 60) / ItemHeight;
Input.Add(Input.Count, connector);
AddConnector(connector);
}
public override void ExecuteAddRightOutput(object parameter)
{
FullyCreatedConnectorInfo connector = new FullyCreatedConnectorInfo(this, ConnectorOrientation.Right, true);
connector.XRatio = 1;
connector.YRatio = (30 + Output.Count * 60) / ItemHeight;
Output.Add(Output.Count, connector);
AddConnector(connector);
}
/// <summary>
/// 液位
/// </summary>
private LinkPoint linkPoint;
public LinkPoint LinkPoint
{
get
{
return linkPoint;
}
set
{
SetProperty(ref linkPoint, value);
}
}
protected override void ExecuteEditCommand(object parameter)
{
Simulate_TankViewModelData data = new Simulate_TankViewModelData(LinkPoint);
if (visualiserService.ShowDialog(data) == true)
{
this.LinkPoint = data.LinkPoint;
}
}
2021-08-02 18:08:43 +08:00
public void Execute()
{
double input = PreNode.OfType<Simulate_SolenoidViewModel>().Sum(p => p.DOLinkPoint?.Value ?? 0);
double output = NextNode.OfType<Simulate_SolenoidViewModel>().Sum(p => p.DOLinkPoint?.Value ?? 0);
if (LinkPoint != null)
{
LinkPoint.Value += input - output;
}
}
}
}