Showing
2 changed files
with
21 additions
and
5 deletions
... | ... | @@ -275,7 +275,7 @@ where T: Add<Output = T> + Sub<Output = T> + Div<Output = T> |
275 | 275 | + Debug + Copy + From<i32> { |
276 | 276 | |
277 | 277 | fn new(p :&'a Polygon<T>, direction :Direction) -> Self { |
278 | - let top = p.vert_min(); | |
278 | + let top = p.vert_min(direction); | |
279 | 279 | let next = p.next_y(top, direction); |
280 | 280 | let edge = match next { |
281 | 281 | None => None, |
... | ... | @@ -330,7 +330,7 @@ where T: Add<Output = T> + Sub<Output = T> + Div<Output = T> |
330 | 330 | impl<T> Polygon<T> |
331 | 331 | where T: Add<Output = T> + Sub<Output = T> + Div<Output = T> |
332 | 332 | + Copy + Debug + From<i32> { |
333 | - fn vert_min<'a>(&'a self) -> usize { | |
333 | + fn vert_min<'a>(&'a self, d :Direction) -> usize { | |
334 | 334 | let Polygon(Coordinates(cs)) = self; |
335 | 335 | |
336 | 336 | type ICoord<'a,T> = (usize, &'a Coordinate<T>); |
... | ... | @@ -341,7 +341,12 @@ where T: Add<Output = T> + Sub<Output = T> + Div<Output = T> |
341 | 341 | Some(a) => { |
342 | 342 | let Coordinate(_, ay, _) = a.1; |
343 | 343 | let Coordinate(_, xy, _) = x.1; |
344 | - if xy < ay {Some(x)} else {Some(a)} | |
344 | + match d { | |
345 | + Direction::Left => | |
346 | + if xy < ay {Some(x)} else {Some(a)}, | |
347 | + Direction::Right => | |
348 | + if xy <= ay {Some(x)} else {Some(a)}, | |
349 | + } | |
345 | 350 | }, |
346 | 351 | }; |
347 | 352 | |
... | ... | @@ -401,6 +406,16 @@ where T: Add<Output = T> + Sub<Output = T> + Div<Output = T> |
401 | 406 | cmp::Ordering::Less => None, |
402 | 407 | // TODO On equal we need to find out which one of both to |
403 | 408 | // keep in the list… (the outermost) |
409 | + // But how can we find the outermost... | |
410 | + // I think it depends on the previous and next one | |
411 | + // which means this might not be best suited for | |
412 | + // a recursive approach...we could keep both... | |
413 | + // Anyway, it looks like this is only a problem | |
414 | + // for the first vertex so maybe it is enough | |
415 | + // to choose the correct one when starting which | |
416 | + // would be in the vert_min method. | |
417 | + // Well, after adding some logic to vert_min it | |
418 | + // seems it is also relevant for the last one. | |
404 | 419 | cmp::Ordering::Equal => inner(p, c, p.step(n, d), d), |
405 | 420 | cmp::Ordering::Greater => Some(n), |
406 | 421 | } | ... | ... |
... | ... | @@ -342,8 +342,9 @@ fn _democanvas<T>( xcb :&XcbEasel |
342 | 342 | let rot1 = TMatrix::combine(vec!(rz, rx, t)); |
343 | 343 | let rot2 = TMatrix::combine(vec!(rz, ry, t)); |
344 | 344 | |
345 | - let objects = vec!( (tetrahedron.transform(&rot1), 0xFFFF00) | |
346 | - , ( cube.transform(&rot2), 0x0000FF) ); | |
345 | + let objects = vec!( (tetrahedron.transform(&rot1), 0xFFFF00) ); | |
346 | + //let objects = vec!( (tetrahedron.transform(&rot1), 0xFFFF00) | |
347 | + // , ( cube.transform(&rot2), 0x0000FF) ); | |
347 | 348 | //let objects = vec!( (triangle.transform(&rot1), 0xFFFF00) ); |
348 | 349 | |
349 | 350 | <XcbCanvas as Canvas<T>>::clear(&mut canvas); | ... | ... |
Please
register
or
login
to post a comment