let outline = r.outline(&grid.scale);
let mut floats = outline.iter().map(|p| point!(p.x as f64, p.y as f64)).collect();
self.smooth_wall(&mut floats, self.wall_smooth_radius as isize);
- let wall = WallRegion::new(floats);
+ let wall = WallRegion::new(walls.len(), floats);
walls.push(wall);
}
}
}
impl WallRegion {
- pub fn new(points: Vec<Point<f64>>) -> Self {
- let index: RegionIndex = 0; // use as param
+ pub fn new(index: RegionIndex, points: Vec<Point<f64>>) -> Self {
let mut edges = Vec::with_capacity(points.len());
for i in 0..points.len() {
fn next(&self, index: EdgeIndex) -> Rc<WallEdge> {
let index = (index + 1) % self.edges.len();
- Rc::clone(&self.edges[index])
+ self.edges[index].clone()
}
fn previous(&self, index: EdgeIndex) -> Rc<WallEdge> {
- let index = (index + self.edges.len() + 1) % self.edges.len();
- Rc::clone(&self.edges[index])
+ let index = (index + self.edges.len() - 1) % self.edges.len();
+ self.edges[index].clone()
}
}
impl Wall {
#[allow(dead_code)]
- pub fn next(self) -> Wall {
+ pub fn next(&self) -> Wall {
Wall {
edge: self.region.next(self.edge.id),
- region: self.region,
+ region: self.region.clone(),
}
}
#[allow(dead_code)]
- pub fn previous(self) -> Wall {
+ pub fn previous(&self) -> Wall {
Wall {
edge: self.region.previous(self.edge.id),
- region: self.region,
+ region: self.region.clone(),
}
}