Experiment: reset visible route pins and labels during Layout

This commit is contained in:
Codex-ytr83r
2026-09-24 18:56:16 -07:00
parent 715036e132
commit 3923860ad2
3 changed files with 250 additions and 7 deletions
+17 -2
View File
@@ -952,6 +952,16 @@ fn layout(p: &mut Project, diagram: Id) -> Result<(), ModelError> {
"Scenario layout requires the Scenario geometry operation.".into(),
));
}
// Freeze reset eligibility before this operation changes geometry. In a
// Batch this is the staged input, not an independently validated prefix.
let view = crate::projection::project_view(p, diagram);
let visible_nodes: BTreeSet<_> = view.nodes.iter().map(|node| node.id).collect();
let reset_routes: BTreeSet<_> = view.edges.iter().filter_map(|edge| {
let owners = crate::projection::edge_endpoint_placements(p, d, edge.id)?;
(owners == (edge.source, edge.target)
&& visible_nodes.contains(&edge.source)
&& visible_nodes.contains(&edge.target)).then_some(edge.id)
}).collect();
let parents = crate::projection::parents(p, d);
let mut children: BTreeMap<Option<Id>, Vec<Id>> = BTreeMap::new();
for (id, parent) in &parents {
@@ -1044,8 +1054,7 @@ fn layout(p: &mut Project, diagram: Id) -> Result<(), ModelError> {
}
node
};
let edges: BTreeSet<_> = crate::projection::project_view(p, diagram)
.edges
let edges: BTreeSet<_> = view.edges
.iter()
.filter_map(|edge| {
let source = root_of(edge.source);
@@ -1138,5 +1147,11 @@ fn layout(p: &mut Project, diagram: Id) -> Result<(), ModelError> {
*existing = route;
}
}
for route in &mut d.routes {
if reset_routes.contains(&route.edge) {
route.waypoints.clear();
route.label = None;
}
}
Ok(())
}