mirror of
https://github.com/Theaninova/Bampy.git
synced 2026-01-22 09:52:42 +00:00
feat: functioning ring finding
This commit is contained in:
@@ -7,25 +7,30 @@ use super::base_slices::BaseSlice;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct SliceRing {
|
||||
pub z: f32,
|
||||
pub points: Vec<Vector3<f32>>,
|
||||
pub z: f64,
|
||||
pub points: Vec<Vector3<f64>>,
|
||||
}
|
||||
|
||||
pub fn find_slice_rings(mut slice: BaseSlice) -> Vec<SliceRing> {
|
||||
let mut rings = vec![];
|
||||
while let Some(line) = slice.lines.pop() {
|
||||
if relative_eq!(line.start, line.end) {
|
||||
continue;
|
||||
}
|
||||
let mut ring = SliceRing {
|
||||
z: slice.z,
|
||||
points: vec![line.start, line.end],
|
||||
};
|
||||
let mut right_start = ring.points[0];
|
||||
let mut right = ring.points[1];
|
||||
|
||||
let mut previous_len = usize::MAX;
|
||||
while relative_ne!(ring.points[0], right) {
|
||||
if previous_len == slice.lines.len() {
|
||||
console_log!(
|
||||
"Error: Could not find a ring for slice at z = {}, {} items left.",
|
||||
"Error: Could not find a ring for slice at z = {}, d = {}, {} items left.",
|
||||
slice.z,
|
||||
ring.points[0].metric_distance(&right),
|
||||
slice.lines.len()
|
||||
);
|
||||
break;
|
||||
@@ -33,21 +38,23 @@ pub fn find_slice_rings(mut slice: BaseSlice) -> Vec<SliceRing> {
|
||||
previous_len = slice.lines.len();
|
||||
|
||||
slice.lines.retain_mut(|line| {
|
||||
//if relative_eq!(line.start, right, epsilon = 0.001) {
|
||||
ring.points.push(line.start);
|
||||
ring.points.push(line.end);
|
||||
right = line.end;
|
||||
false
|
||||
/*} else if relative_eq!(line.end, right, epsilon = 0.001) {
|
||||
let s = relative_eq!(line.start, right);
|
||||
let e = relative_eq!(line.end, right);
|
||||
if s && !e && !relative_eq!(line.end, right_start) {
|
||||
ring.points.push(line.end);
|
||||
right_start = right;
|
||||
right = line.end;
|
||||
false
|
||||
} else if e && !s && !relative_eq!(line.start, right_start) {
|
||||
ring.points.push(line.start);
|
||||
right_start = right;
|
||||
right = line.start;
|
||||
false
|
||||
} else {
|
||||
true
|
||||
}*/
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
rings.push(ring)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user