Better node selection logic
This commit is contained in:
parent
6f0be98a11
commit
dfb160ffef
|
@ -18,8 +18,8 @@ impl Default for Body {
|
|||
position: Vec2::ZERO,
|
||||
velocity: Vec2::ZERO,
|
||||
acceleration: Vec2::ZERO,
|
||||
drag: 0.8,
|
||||
mass: 40.0,
|
||||
drag: 0.85,
|
||||
mass: 25.0,
|
||||
fixed: false,
|
||||
}
|
||||
}
|
||||
|
@ -338,7 +338,35 @@ impl ForceGraph {
|
|||
let offset = Vec2::from_angle(child as f32) * 10.0;
|
||||
let child = &mut self.nodes[child];
|
||||
child.info.hidden = false;
|
||||
child.body.fixed = false;
|
||||
child.body.position = position + offset;
|
||||
child.body.velocity = Vec2::ZERO;
|
||||
}
|
||||
}
|
||||
|
||||
pub fn hide(&mut self, node: usize) {
|
||||
let node = &mut self.nodes[node];
|
||||
node.info.hidden = true;
|
||||
|
||||
let children = node.info.unhide.to_owned();
|
||||
for child in children {
|
||||
self.hide(child);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn on_select(&mut self, id: usize) {
|
||||
let node = &mut self.nodes[id];
|
||||
|
||||
if !node.body.fixed {
|
||||
node.body.fixed = true;
|
||||
self.unhide(id);
|
||||
} else {
|
||||
node.body.fixed = false;
|
||||
|
||||
let children = node.info.unhide.to_owned();
|
||||
for child in children {
|
||||
self.hide(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -446,7 +474,7 @@ impl PanelImpl for ForceDirectedGraphPanel {
|
|||
.iter()
|
||||
.position(|node| !node.info.hidden && node.body.position.distance(at) < 6.0);
|
||||
if let Some(node) = node {
|
||||
self.graph.unhide(node);
|
||||
self.graph.on_select(node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue