@@ -69,6 +69,7 @@ namespace PamhagenSysCtrl.Windows {
|
|||||||
[FastSelectButton_MW2_Tank5] = (Graph.MW2, Graph.MP2, Graph.Tank5),
|
[FastSelectButton_MW2_Tank5] = (Graph.MW2, Graph.MP2, Graph.Tank5),
|
||||||
};
|
};
|
||||||
App.Plant?.Update += OnUpdate;
|
App.Plant?.Update += OnUpdate;
|
||||||
|
InitializePaths();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnClosed(object sender, EventArgs evt) {
|
private void OnClosed(object sender, EventArgs evt) {
|
||||||
@@ -94,6 +95,8 @@ namespace PamhagenSysCtrl.Windows {
|
|||||||
}
|
}
|
||||||
Menu_Settings_OverridePathClearances.IsChecked = false;
|
Menu_Settings_OverridePathClearances.IsChecked = false;
|
||||||
Menu_Settings_OverrideDryRunClearances.IsChecked = false;
|
Menu_Settings_OverrideDryRunClearances.IsChecked = false;
|
||||||
|
|
||||||
|
InitializePaths();
|
||||||
}
|
}
|
||||||
OnUpdate(null, null);
|
OnUpdate(null, null);
|
||||||
}
|
}
|
||||||
@@ -593,5 +596,32 @@ namespace PamhagenSysCtrl.Windows {
|
|||||||
if (sender is not PamhagenPlant plant) return;
|
if (sender is not PamhagenPlant plant) return;
|
||||||
UpdateScheme(Mouse.GetPosition(SchemeCanvas), Mouse.LeftButton == MouseButtonState.Pressed);
|
UpdateScheme(Mouse.GetPosition(SchemeCanvas), Mouse.LeftButton == MouseButtonState.Pressed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void InitializePaths() {
|
||||||
|
var add = ReconstructSelectedPaths().ToList();
|
||||||
|
var remove = Graph.SelectedPaths.ToList();
|
||||||
|
foreach (var p in remove) Graph.RemovePath(p);
|
||||||
|
for (int i = 1; i <= 57; i++) {
|
||||||
|
App.Plant?.CloseV(i);
|
||||||
|
}
|
||||||
|
foreach (var p in add) {
|
||||||
|
if (p.Hops.Any(h => h.Node is Valve v && v.IsLocked)) continue;
|
||||||
|
Graph.AddPath(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<Path> ReconstructSelectedPaths() {
|
||||||
|
if (App.Plant is not PamhagenPlant p) yield break;
|
||||||
|
var sources = Graph.Nodes.Where(n => n is ISource).ToList();
|
||||||
|
var sinks = Graph.Nodes.Where(n => n is ISink).ToList();
|
||||||
|
foreach (var src in sources) {
|
||||||
|
var paths = new List<Path>();
|
||||||
|
foreach (var sink in sinks) {
|
||||||
|
paths.AddRange(Graph.GetPaths(src, sink, null, (n) => n is not ISink && (n is not Valve v || p.WantValveOpen(v.Nr))));
|
||||||
|
}
|
||||||
|
if (paths.Count == 1)
|
||||||
|
yield return paths.First();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user