Add CenterValves to presses
Test / Run tests (push) Successful in 14s

This commit is contained in:
2026-08-07 01:10:29 +02:00
parent e6b97ccf33
commit 06dcdd8569
4 changed files with 123 additions and 38 deletions
+49 -33
View File
@@ -43,9 +43,9 @@ namespace PamhagenSysCtrl.Helpers {
double t7X = t6X + 80; double t7X = t6X + 80;
double t8X = t7X + 80; double t8X = t7X + 80;
double t9X = t8X + 80; double t9X = t8X + 80;
var prY = 780; var prY = 720;
var pr1X = 750; var pr1X = 730;
var pr2X = 900; var pr2X = 920;
var trough = new EntryTrough("Auffangwanne", mw1X + 70, 100, () => App.Plant?.IsTroughAugerActive ?? false); var trough = new EntryTrough("Auffangwanne", mw1X + 70, 100, () => App.Plant?.IsTroughAugerActive ?? false);
Nodes.Add(trough); Nodes.Add(trough);
@@ -339,42 +339,58 @@ namespace PamhagenSysCtrl.Helpers {
var v49 = CreateValve(49, t4X, tanksY + 220); var v49 = CreateValve(49, t4X, tanksY + 220);
CreatePipe(xv47, v49); CreatePipe(xv47, v49);
var press1 = new Press("Presse 1", pr1X, prY, 20000, () => App.Plant?.FillLevelPress1 ?? FillState.Unknown); var prX = (pr1X + pr2X) / 2;
var press2 = new Press("Presse 2", pr2X, prY, 15000, () => App.Plant?.FillLevelPress2 ?? FillState.Unknown); var pr1cX = prX - 15;
var v50 = CreateValve(50, pr1X - 45, prY - 100); var pr2cX = prX + 15;
var v51 = CreateValve(51, pr1X - 15, prY - 100); var press1 = new Press("Presse 1", pr1X, prY, 20000, () => FillState.Unknown);
var v52 = CreateValve(52, pr1X + 15, prY - 100); var press2 = new Press("Presse 2", pr2X, prY, 15000, () => FillState.Unknown);
var v53 = CreateValve(53, pr1X + 45, prY - 100); var v50 = CreateValve(50, pr2cX + 30, 580);
var v54 = CreateValve(54, pr2X - 45, prY - 100); var v51 = CreateValve(51, pr1cX - 30, 580);
var v55 = CreateValve(55, pr2X - 15, prY - 100); var v52 = CreateValve(52, pr1cX - 30, 640);
var v56 = CreateValve(56, pr2X + 15, prY - 100); var v53 = CreateValve(53, pr2cX + 30, 640);
var v57 = CreateValve(57, pr2X + 45, prY - 100); var v54 = CreateValve(54, pr2cX + 30, 550);
var xp1 = new PipeJoin(pr1X - 15, 610); var v55 = CreateValve(55, pr1cX - 30, 550);
var xp2 = new PipeJoin(pr1X + 15, 640); var v56 = CreateValve(56, pr1cX - 30, 610);
var xp3 = new PipeJoin(pr2X - 45, 550); var v57 = CreateValve(57, pr2cX + 30, 610);
var xp4 = new PipeJoin(pr2X + 45, 580); var xp1 = new PipeJoin(pr1cX - 70, 580);
var xp2 = new PipeJoin(pr1cX - 70, 640);
var xp3 = new PipeJoin(pr2cX + 70, 550);
var xp4 = new PipeJoin(pr2cX + 70, 610);
var xp5 = new PipeJoin(pr1cX, 580);
var xp6 = new PipeJoin(pr1cX, 640);
var xp7 = new PipeJoin(pr2cX, 550);
var xp8 = new PipeJoin(pr2cX, 610);
CreatePipe(v6, xp1, true); CreatePipe(v6, xp1, true);
CreatePipe(v8, xp2, true); CreatePipe(v8, xp2, true);
CreatePipe(v49, xp3, true); CreatePipe(v49, xp3, true);
CreatePipe(P6, xp4, true); CreatePipe(P6, xp4, true);
CreatePipe(xp1, v51); CreatePipe(xp1, v51, true);
CreatePipe(xp1, v55); CreatePipe(xp1, v55, true);
CreatePipe(xp2, v52); CreatePipe(xp2, v52, true);
CreatePipe(xp2, v56); CreatePipe(xp2, v56, true);
CreatePipe(xp3, v50); CreatePipe(xp3, v50, true);
CreatePipe(xp3, v54); CreatePipe(xp3, v54, true);
CreatePipe(xp4, v53); CreatePipe(xp4, v53, true);
CreatePipe(xp4, v57); CreatePipe(xp4, v57, true);
CreateInlet(v50, press1); CreatePipe(v50, xp5);
CreateInlet(v51, press1); CreatePipe(v51, xp5);
CreateInlet(v52, press1); CreatePipe(v52, xp6);
CreateInlet(v53, press1); CreatePipe(v53, xp6);
CreateInlet(v54, press2); CreatePipe(v54, xp7);
CreateInlet(v55, press2); CreatePipe(v55, xp7);
CreateInlet(v56, press2); CreatePipe(v56, xp8);
CreateInlet(v57, press2); CreatePipe(v57, xp8);
CreatePipe(xp5, xp6);
CreatePipe(xp7, xp8);
var zv1 = new CenterValve("ZV1", pr1cX, prY - 40, () => App.Plant?.FillLevelPress1 != FillState.Full);
var zv2 = new CenterValve("ZV2", pr2cX, prY - 40, () => App.Plant?.FillLevelPress2 != FillState.Full);
CreatePipe(xp6, zv1, true);
CreatePipe(xp8, zv2, true);
CreateInlet(zv1, press1, true);
CreateInlet(zv2, press2, true);
} }
protected static Valve CreateValve(int n, double x, double y) { protected static Valve CreateValve(int n, double x, double y) {
@@ -0,0 +1,69 @@
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;
namespace PamhagenSysCtrl.Helpers.Pipeline {
public class CenterValve : INode {
public const double DIAMETER = 24;
public double CenterX { get; set; }
public double CenterY { get; set; }
public string Label { get; set; }
public Brush? Highlight { get; set; }
public bool IsOpen => CallbackIsOpen();
public ISet<IEdge> Inputs { get; init; }
public ISet<IEdge> Outputs { get; init; }
protected Func<bool> CallbackIsOpen;
private Shape? _circle;
private TextBlock? _text;
public CenterValve(string label, double x, double y, Func<bool> cbOpen) {
CenterX = x;
CenterY = y;
Label = label;
CallbackIsOpen = cbOpen;
Inputs = new HashSet<IEdge>();
Outputs = new HashSet<IEdge>();
}
public void Draw(Canvas canvas) {
_circle = new Ellipse() {
Height = DIAMETER,
Width = DIAMETER,
Fill = Brushes.DarkGray,
Stroke = Brushes.Black,
StrokeThickness = 2,
};
_circle.SetValue(Canvas.LeftProperty, CenterX - DIAMETER / 2);
_circle.SetValue(Canvas.TopProperty, CenterY - DIAMETER / 2);
_text = new() {
Text = Label,
FontSize = 10,
Width = DIAMETER,
Height = DIAMETER,
TextAlignment = TextAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
};
_text.SetValue(Canvas.LeftProperty, CenterX - DIAMETER / 2);
_text.SetValue(Canvas.TopProperty, CenterY - DIAMETER / 2 + 5.5);
canvas.Children.Add(_circle);
canvas.Children.Add(_text);
}
public bool IsInside(double x, double y) {
return Math.Sqrt(Math.Pow(CenterX - x, 2) + Math.Pow(CenterY - y, 2)) <= DIAMETER / 2;
}
public void Update(bool isHovering, bool isPressed) {
_circle?.Fill =
!IsOpen ? PamhagenBrushes.Red :
IsOpen ? PamhagenBrushes.Green :
Highlight ?? Brushes.DarkGray;
}
}
}
+2 -2
View File
@@ -34,10 +34,10 @@ namespace PamhagenSysCtrl.Helpers.Pipeline {
return p; return p;
} }
public Inlet CreateInlet(INode start, ISink end) { public Inlet CreateInlet(INode start, ISink end, bool sideways = false) {
Nodes.Add(start); Nodes.Add(start);
Nodes.Add(end); Nodes.Add(end);
var p = new Inlet(start, end, start.CenterX > end.CenterX); var p = new Inlet(start, end, sideways);
start.Outputs.Add(p); start.Outputs.Add(p);
end.Inputs.Add(p); end.Inputs.Add(p);
Edges.Add(p); Edges.Add(p);
+3 -3
View File
@@ -30,9 +30,9 @@ namespace PamhagenSysCtrl.Helpers.Pipeline {
var x1 = Start.CenterX; var x1 = Start.CenterX;
var y1 = Start.CenterY; var y1 = Start.CenterY;
var x2 = Start.CenterX; var x2 = Start.CenterX;
var y2 = Sink.TopY - 10; var y2 = Orientation ? Sink.CenterY - 10 : Sink.TopY - 10;
var x3 = Start.CenterX + (Orientation ? -20 : 20); var x3 = Orientation ? Sink.CenterX : Start.CenterX + (Start.CenterX == End.CenterX ? 0 : Start.CenterX > End.CenterX ? -20 : 20);
var y3 = Sink.TopY + 20; var y3 = Orientation ? Sink.CenterY - 10 : Sink.TopY + 20;
_outer1 = new Line() { _outer1 = new Line() {
X1 = x1, X1 = x1,
Y1 = y1, Y1 = y1,