Take `&impl Interior` argument in path removal method

This commit is contained in:
Mikolaj Wielgus 2023-08-29 01:59:11 +02:00
parent 47aadfcdd3
commit ceef3a7fb7
2 changed files with 11 additions and 12 deletions

View File

@ -30,15 +30,15 @@ impl Layout {
} }
} }
pub fn remove_open_set(&mut self, set: Vec<TaggedIndex>) { pub fn remove_interior(&mut self, path: &impl Interior<TaggedIndex>) {
for index in set.iter().filter(|index| !index.is_dot()) { for index in path.interior().iter().filter(|index| !index.is_dot()) {
untag!(index, self.remove(*index)); untag!(index, self.remove(*index));
} }
// We must remove the dots only after the segs and bends because we need dots to calculate // We must remove the dots only after the segs and bends because we need dots to calculate
// the shapes, which we need to remove the segs and bends from the R-tree. // the shapes, which we need to remove the segs and bends from the R-tree.
for index in set.iter().filter(|index| index.is_dot()) { for index in path.interior().iter().filter(|index| index.is_dot()) {
untag!(index, self.remove(*index)); untag!(index, self.remove(*index));
} }
} }

View File

@ -5,6 +5,7 @@ use std::cell::{Ref, RefCell};
use std::rc::Rc; use std::rc::Rc;
use crate::astar::astar; use crate::astar::astar;
use crate::bow::Bow;
use crate::graph::{BendIndex, DotIndex, Ends, Interior, SegIndex, TaggedIndex}; use crate::graph::{BendIndex, DotIndex, Ends, Interior, SegIndex, TaggedIndex};
use crate::graph::{BendWeight, DotWeight, SegWeight, TaggedWeight}; use crate::graph::{BendWeight, DotWeight, SegWeight, TaggedWeight};
use crate::guide::Guide; use crate::guide::Guide;
@ -248,15 +249,12 @@ impl Router {
} }
fn reroute_outward(&mut self, bend: BendIndex) -> Result<(), ()> { fn reroute_outward(&mut self, bend: BendIndex) -> Result<(), ()> {
let mut endss: Vec<(DotIndex, DotIndex)> = vec![]; let mut bows: Vec<Bow> = vec![];
let mut interiors: Vec<Vec<TaggedIndex>> = vec![];
let cw = self.layout.primitive(bend).weight().cw; let cw = self.layout.primitive(bend).weight().cw;
let mut cur_bend = bend; let mut cur_bend = bend;
loop { loop {
let bow = self.layout.bow(cur_bend); bows.push(self.layout.bow(cur_bend));
endss.push(bow.ends());
interiors.push(bow.interior());
cur_bend = match self.layout.primitive(cur_bend).outer() { cur_bend = match self.layout.primitive(cur_bend).outer() {
Some(new_bend) => new_bend, Some(new_bend) => new_bend,
@ -267,11 +265,12 @@ impl Router {
let core = self.layout.primitive(bend).core().unwrap(); let core = self.layout.primitive(bend).core().unwrap();
let mut maybe_inner = self.layout.primitive(bend).inner(); let mut maybe_inner = self.layout.primitive(bend).inner();
for interior in interiors { for bow in &bows {
self.layout.remove_open_set(interior); self.layout.remove_interior(bow);
} }
for ends in endss { for bow in &bows {
let ends = bow.ends();
let mut head = self.draw_start(ends.0); let mut head = self.draw_start(ends.0);
let width = 5.0; let width = 5.0;
@ -337,7 +336,7 @@ impl Router {
let bow = self.layout.bow(bend); let bow = self.layout.bow(bend);
let ends = bow.ends(); let ends = bow.ends();
self.layout.remove_open_set(bow.interior()); self.layout.remove_interior(&bow);
let head = self.draw_start(ends.0); let head = self.draw_start(ends.0);
let _ = self.draw_finish(head, ends.1, 5.0); let _ = self.draw_finish(head, ends.1, 5.0);