This commit is contained in:
@@ -13,7 +13,7 @@ namespace PamhagenSysCtrl.Helpers.Pipeline {
|
||||
|
||||
protected Func<Valve, bool> CallbackWantOpen;
|
||||
|
||||
public ControlledValve(int nr, double x, double y, int orientation, Func<bool> cbOpen, Func<Valve, bool> cbWant) :
|
||||
public ControlledValve(int nr, double x, double y, int orientation, Func<bool?> cbOpen, Func<Valve, bool> cbWant) :
|
||||
base(x, y, orientation, cbOpen) {
|
||||
Nr = nr;
|
||||
CallbackWantOpen = cbWant;
|
||||
@@ -23,9 +23,9 @@ namespace PamhagenSysCtrl.Helpers.Pipeline {
|
||||
if (App.Plant?.ManualControlMode ?? false) {
|
||||
_text?.Visibility = Visibility.Visible;
|
||||
_triangles?.Fill =
|
||||
!WantOpen && !IsOpen && !isHovering ? PamhagenBrushes.Red :
|
||||
!WantOpen && !IsOpen ? PamhagenBrushes.Green :
|
||||
!WantOpen && IsOpen ? PamhagenBrushes.DimRed :
|
||||
!WantOpen && IsClosed && !isHovering ? PamhagenBrushes.Red :
|
||||
!WantOpen && IsClosed ? PamhagenBrushes.Green :
|
||||
!WantOpen && !IsClosed ? PamhagenBrushes.DimRed :
|
||||
WantOpen && !IsOpen ? PamhagenBrushes.DimGreen :
|
||||
WantOpen && IsOpen && !isHovering ? PamhagenBrushes.Green :
|
||||
WantOpen && IsOpen ? PamhagenBrushes.Red :
|
||||
@@ -33,13 +33,13 @@ namespace PamhagenSysCtrl.Helpers.Pipeline {
|
||||
} else {
|
||||
_text?.Visibility = isHovering ? Visibility.Visible : Visibility.Hidden;
|
||||
_triangles?.Fill =
|
||||
IsLocked && !WantOpen && !IsOpen ? PamhagenBrushes.DimOrange :
|
||||
IsLocked && !WantOpen && IsOpen ? PamhagenBrushes.Red :
|
||||
IsLocked && !WantOpen && IsClosed ? PamhagenBrushes.DimOrange :
|
||||
IsLocked && !WantOpen && !IsClosed ? PamhagenBrushes.Red :
|
||||
IsLocked && WantOpen && !IsOpen ? PamhagenBrushes.Yellow :
|
||||
IsLocked && WantOpen && IsOpen ? PamhagenBrushes.Green :
|
||||
Highlight ?? (isHovering ? Brushes.LightGray : Brushes.DarkGray);
|
||||
}
|
||||
if (IsOpen) {
|
||||
if (!IsClosed) {
|
||||
_topLine?.Points[1] = _middlePoints.Open.Top;
|
||||
_bottomLine?.Points[1] = _middlePoints.Open.Bottom;
|
||||
} else {
|
||||
|
||||
@@ -6,7 +6,7 @@ namespace PamhagenSysCtrl.Helpers.Pipeline {
|
||||
|
||||
public override string Label { get; }
|
||||
|
||||
public ExternalValve(string label, double x, double y, int orientation, Func<bool> cbOpen) :
|
||||
public ExternalValve(string label, double x, double y, int orientation, Func<bool?> cbOpen) :
|
||||
base(x, y, orientation, cbOpen) {
|
||||
Label = label;
|
||||
}
|
||||
@@ -17,7 +17,7 @@ namespace PamhagenSysCtrl.Helpers.Pipeline {
|
||||
!IsOpen ? PamhagenBrushes.Red :
|
||||
IsOpen ? PamhagenBrushes.Green :
|
||||
Highlight ?? Brushes.DarkGray;
|
||||
if (IsOpen) {
|
||||
if (!IsClosed) {
|
||||
_topLine?.Points[1] = _middlePoints.Open.Top;
|
||||
_bottomLine?.Points[1] = _middlePoints.Open.Bottom;
|
||||
} else {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
namespace PamhagenSysCtrl.Helpers.Pipeline {
|
||||
public record struct Path(
|
||||
INode Start,
|
||||
IEnumerable<(IEdge Edge, INode Node)> Hops
|
||||
(IEdge Edge, INode Node)[] Hops
|
||||
) {
|
||||
public readonly int Bends => Hops.Sum(h => (h.Node is not Valve && h.Node is not PipeJoin ? 1 : 0) + (h.Edge.Start.CenterX != h.Edge.End.CenterX && h.Edge.Start.CenterY != h.Edge.End.CenterY ? 1 : 0));
|
||||
public readonly double Length => Hops.Sum(h => Math.Abs(h.Edge.Start.CenterX - h.Edge.End.CenterX) + Math.Abs(h.Edge.Start.CenterY - h.Edge.End.CenterY));
|
||||
@@ -26,7 +26,7 @@ namespace PamhagenSysCtrl.Helpers.Pipeline {
|
||||
public readonly IEnumerable<ControlledValve> BorderValves => InnerAndBorderValves.Except(InnerValves);
|
||||
|
||||
public readonly bool HasActivePump => Nodes.Any(n => n is Pump p && p.IsActive);
|
||||
public readonly bool IsReady => InnerValves.All(v => v.IsOpen && v.WantOpen && v.IsLocked) && BorderValves.All(v => !v.IsOpen && !v.WantOpen && v.IsLocked);
|
||||
public readonly bool IsReady => InnerValves.All(v => v.IsOpen && v.WantOpen && v.IsLocked) && BorderValves.All(v => v.IsClosed && !v.WantOpen && v.IsLocked);
|
||||
|
||||
public readonly void LockValves() {
|
||||
foreach (var v in InnerAndBorderValves) {
|
||||
|
||||
@@ -16,11 +16,13 @@ namespace PamhagenSysCtrl.Helpers.Pipeline {
|
||||
|
||||
public int Orientation { get; set; }
|
||||
|
||||
public bool IsOpen => CallbackIsOpen();
|
||||
public bool IsOpen => CallbackIsOpen() == true;
|
||||
public bool IsClosed => CallbackIsOpen() == false;
|
||||
public bool IsTransitioning => CallbackIsOpen() == null;
|
||||
public ISet<IEdge> Inputs { get; init; }
|
||||
public ISet<IEdge> Outputs { get; init; }
|
||||
|
||||
protected Func<bool> CallbackIsOpen;
|
||||
protected Func<bool?> CallbackIsOpen;
|
||||
|
||||
protected Rectangle? _background;
|
||||
protected Polygon? _triangles;
|
||||
@@ -29,7 +31,7 @@ namespace PamhagenSysCtrl.Helpers.Pipeline {
|
||||
protected ((Point Top, Point Bottom) Closed, (Point Top, Point Bottom) Open) _middlePoints;
|
||||
protected TextBlock? _text;
|
||||
|
||||
public Valve(double x, double y, int orientation, Func<bool> cbOpen) {
|
||||
public Valve(double x, double y, int orientation, Func<bool?> cbOpen) {
|
||||
CenterX = x;
|
||||
CenterY = y;
|
||||
CallbackIsOpen = cbOpen;
|
||||
|
||||
Reference in New Issue
Block a user