Experiment: reset visible route pins and labels during Layout
This commit is contained in:
@@ -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(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user