Fillets and chamfers ending on a boss's pieced wall or beside it, on a face that runs along its seam twice, and loops the loop blend refuses (#926)
Fillets and chamfers ending on a boss's pieced wall or beside it, on a face that runs along its seam twice, and loops the loop blend refuses - A straight edge whose end meets one curved surface in several faces (a cylinder a join left in pieces) ends on that surface: the section is cut where it crosses each seam, which is shortened there; where no seam is crossed (the wall missing inside the other body) the section lies on the bared surface and the rest of the side edge becomes a seam. - Two end faces that aren't both planes meeting in lines: each face takes the section's points on it, cut where it crosses the edge between them. Not where an end face runs on smoothly from a side (an earlier round): the corner build takes those. - Face boundaries close over several connector edges. - A face on a periodic surface running along its seam twice (as a STEP file gives it) is rebuilt the same way (#691). - A curved chain ending square on a face that runs on past its side extends that face's seam. - A smooth chain stops before an edge between faces that meet smoothly. - A loop the loop blend refuses for its shape is blended edge by edge; refusals about its size stand. - Action matrix: ACTION_MATRIX_ACTIONS and ACTION_MATRIX_VALIDITY for quick local runs; the fillets and chamfers that pass now recorded. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
63095fedb3
commit
ce902be66c
5 files changed
+537
-133
No files matched your search
@@ -1187,15 +1187,16 @@ fn curve_blend_with_limit(solid: &Solid, ids: &[mt::EdgeID], size: f64, r: f64,
|
||||
if consumed.contains_key(&id) {
|
||||
continue;
|
||||
}
|
||||
// At a slanted end the blend may stop past the seam's old end: the seam then runs
|
||||
// on along its line or circle, within its planar face.
|
||||
// At an end of an open chain the blend may stop past the seam's old end (a slanted end
|
||||
// face, or one turning back past the side, as a box side beside a boss joined to it):
|
||||
// the seam then runs on along its line or circle, within its planar face.
|
||||
let one_end = match (&a, &b) {
|
||||
(Some(nv), None) => Some((seam.front().clone(), nv.clone())),
|
||||
(None, Some(nv)) => Some((seam.back().clone(), nv.clone())),
|
||||
_ => None,
|
||||
};
|
||||
if let Some((old, nv)) = one_end
|
||||
&& slanted.iter().any(|(k, ..)| verts.get(*k) == Some(&old))
|
||||
&& end_faces.iter().any(|(k, _)| verts.get(*k) == Some(&old))
|
||||
{
|
||||
let on_tol = (size * 1e-5).max(1e-6);
|
||||
let q = from_p3(nv.point());
|
||||
|
||||
Reference in new issue
Block a user