forked from 1b-agent/opencadstudio-upstream
refactor(gradient): remove obsolete outline collector
This commit is contained in:
1 parent
aee3397f5d
commit
4d2e8bf0b0
2 files changed
+2
-67
No files matched your search
@@ -301,8 +301,8 @@ impl Scene {
|
||||
|
||||
/// Build closed planar regions from the visible wire geometry.
|
||||
///
|
||||
/// Unlike `closed_outlines()`, the source entities do not need to be closed
|
||||
/// individually. Intersections are inserted as temporary graph vertices and
|
||||
/// Source entities do not need to be closed individually. Intersections are
|
||||
/// inserted as temporary graph vertices and
|
||||
/// the bounded faces of that planar graph are returned as hatch candidates.
|
||||
///
|
||||
/// Curved entities participate through their already-tessellated WireModel
|
||||
|
||||
@@ -4646,71 +4646,6 @@ impl Scene {
|
||||
names
|
||||
}
|
||||
|
||||
/// Collect closed polygon outlines (world XY) from the current layout.
|
||||
pub fn closed_outlines(&self) -> Vec<Vec<[f64; 2]>> {
|
||||
self.entity_wires()
|
||||
.iter()
|
||||
.filter_map(|wire| {
|
||||
let pts: Vec<[f64; 2]> = wire
|
||||
.points
|
||||
.iter()
|
||||
.copied()
|
||||
.enumerate()
|
||||
.filter_map(|(index, high)| {
|
||||
if !high[0].is_finite() || !high[1].is_finite() {
|
||||
return None;
|
||||
}
|
||||
let low = wire.points_low.get(index).copied().unwrap_or([0.0; 3]);
|
||||
let point = [
|
||||
high[0] as f64 + low[0] as f64,
|
||||
high[1] as f64 + low[1] as f64,
|
||||
];
|
||||
point.iter().all(|value| value.is_finite()).then_some(point)
|
||||
})
|
||||
.collect();
|
||||
if pts.len() < 4 {
|
||||
return None;
|
||||
}
|
||||
let f = pts.first()?;
|
||||
let l = pts.last()?;
|
||||
let dx = f[0] - l[0];
|
||||
let dy = f[1] - l[1];
|
||||
if (dx * dx + dy * dy).sqrt() > 1e-2 {
|
||||
return None;
|
||||
}
|
||||
// Segment-list wires (e.g. LwPolyline) store each segment as an
|
||||
// independent NaN-separated pair, so every shared corner repeats
|
||||
// (`A B | B C | C D | D A`). Collapse that back into a clean ring:
|
||||
// skip the NaN separators and any vertex coincident with the
|
||||
// previous one, so consumers (point-in-polygon, the hatch /
|
||||
// boundary commands) see one vertex per corner — not the doubled
|
||||
// ring that otherwise shows two grips at every corner.
|
||||
let mut ring: Vec<[f64; 2]> = Vec::with_capacity(pts.len());
|
||||
for q in pts {
|
||||
if let Some(&last) = ring.last() {
|
||||
if (last[0] - q[0]).abs() < 1e-4 && (last[1] - q[1]).abs() < 1e-4 {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
ring.push(q);
|
||||
}
|
||||
// Drop a trailing vertex equal to the first — the ring is closed
|
||||
// implicitly, so keeping it would be a duplicate corner.
|
||||
if ring.len() > 1 {
|
||||
let first = ring[0];
|
||||
let last = *ring.last().unwrap();
|
||||
if (first[0] - last[0]).abs() < 1e-4 && (first[1] - last[1]).abs() < 1e-4 {
|
||||
ring.pop();
|
||||
}
|
||||
}
|
||||
if ring.len() < 3 {
|
||||
return None;
|
||||
}
|
||||
Some(ring)
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
|
||||
/// Wire set for the Model layout, shared by every tile.
|
||||
///
|
||||
/// The model wire geometry is **camera-independent**, so it is tessellated
|
||||
|
||||
Reference in new issue
Block a user