using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Util.DiagramDesigner;
namespace AIStudio.Wpf.SFC.ViewModels
{
public class Simulate_TankViewModel : SFCNode
{
public Simulate_TankViewModel() : base(SFCNodeKinds.Simulate_Tank)
{
ItemWidth = 50;
ItemHeight = 120;
ExecuteAddLeftInput(null);
ExecuteAddLeftInput(null);
ExecuteAddRightOutput(null);
ExecuteAddRightOutput(null);
}
public Simulate_TankViewModel(IDiagramViewModel parent, DesignerItemBase designer) : base(parent, designer)
{
}
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);
}
///
/// 液位
///
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;
}
}
public void Execute()
{
double input = PreNode.OfType().Sum(p => p.DOLinkPoint?.Value ?? 0);
double output = NextNode.OfType().Sum(p => p.DOLinkPoint?.Value ?? 0);
if (LinkPoint != null)
{
LinkPoint.Value += input - output;
}
}
}
}