1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
//! Edge fillets and chamfers (Golovanov §4.9, §6.9–§6.11).
//!
//! The construction is the rolling-ball march with direct topology surgery
//! (`crate::blend`): the ball's tangency system is solved station by station,
//! the blend surface and its two contact rails are fitted through the
//! stations — exactly, as a cylinder patch or a revolution, where the
//! stations are rigid translates or rotations of one section — and the
//! mates are re-trimmed to the rails. A whole selection is one job for the
//! stripe network (`blend/network.rs`): every stripe is marched against the
//! original solid and every shared vertex is solved before anything is cut —
//! a star is closed by a patch of the corner ball, a two-edge corner by the
//! seam between the two blends, a re-entrant corner by a horn torus, a
//! tangent pair by a flush join, and an unselected tangent continuation by a
//! cap. No tool solid, no boolean.
//!
//! The older construction survives as the FALLBACK: build the §6.9
//! cross-section as a tool solid, extrude or revolve it along the edge, and
//! let the boolean perform the surgery (`fillet/tool.rs`). It is reached
//! where the march refuses by name, and by the group's sequential
//! composition (`Lane::CutterFirst`), whose remaining corner closures — the
//! mixed-convexity torus sectors and the N≥4 no-common-ball Coons fill —
//! reconstruct the corner from the cutter's output. Both are on their way
//! out; see `docs/developer/kernel-plans/fillet-stripe-network.md`.
//!
//! Diagnostic environment switches (all off by default, none change a
//! result that reaches the user through a different lane than the one
//! named):
//! * `BREP_DEBUG_NETWORK=1` prints every network refusal and the seam
//! residuals;
//! * `BREP_NO_NETWORK=1` skips the network attempt so a selection can be
//! compared against the composition;
//! * `BREP_CUTTER_FIRST=1` restores the cutter's first turn on single
//! edges for the same comparison.
use crate;
use crate::;
// BREP private tests: 958d69cd590b385d
pub use ;
pub use into_face_direction;
use ;
// BREP private tests: 5c1aa30cfd5799e7
use heal_edge_vertex_gaps;
use ;
// consumed by the corner-closure lanes' cfg(test) siblings
pub use fillet_edge_cutter;