Kernel: split a body by a plane or another face's surface
split_body(body, tool) divides every face where the tool meets it and closes each side with the piece of the tool surface inside the body. - Patches have outer loops and holes. - Bands go round a cylinder or another surface of revolution. - Each side falls apart into its connected parts. - A body the tool misses comes back whole. Faces that are B-spline sheets but really planes or circular cylinders (extruded faces) split as the whole plane or cylinder: the tool is extended, and the field is exact and cheap. Tests (volumes): a box split by a plane (2400/3600); a holed plate split through its hole into two equal halves; a box split by a cylinder's side into the core (pi*16*30) and the rest; a plane that misses. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AS5Tn3xieewUSg3uxrMVdL
This commit is contained in:
1 parent
69d7bcfe7d
commit
34be218639
3 files changed
+364
-6
No files matched your search
@@ -684,7 +684,7 @@ fn revolved(curve: mt::Curve, o: mt::Point3, axis: mt::Vector3) -> mt::Surface {
|
||||
/// A surface of revolution whose normal at the profile point `(u, 0)` points along `expected`.
|
||||
/// The rotation is reversed rather than the surface inverted: truck's inverted `Processor`
|
||||
/// swaps the parameters but not the search hints, which breaks meshing.
|
||||
fn revolved_oriented(curve: mt::Curve, o: mt::Point3, axis: mt::Vector3, u: f64, expected: mt::Vector3) -> mt::Surface {
|
||||
pub(crate) fn revolved_oriented(curve: mt::Curve, o: mt::Point3, axis: mt::Vector3, u: f64, expected: mt::Vector3) -> mt::Surface {
|
||||
let s = revolved(curve.clone(), o, axis);
|
||||
if s.normal(u, 0.0).dot(expected) >= 0.0 {
|
||||
return s;
|
||||
|
||||
Reference in new issue
Block a user