Kernel: split faces by a plane, another face's surface or sketch curves
split_faces(body, faces, tool) divides the chosen faces where the tool meets them and leaves the solid unchanged. It handles: - lines across a face; - closed lines inside a face (a disc inside a ring); - lines that run into a hole (the face is divided around it). Edges the line ends on are cut in every face that uses them. The tool's zero set is traced on a finely divided triangulation of the face, each point is placed exactly on the surface by bisection in its parameters, the ends are placed exactly on the boundary edges, and a cubic is fitted through the points (a line when they are straight). Tests: a box top split by a plane (areas 80/120, later booleans still work); a cylinder side split by a sketch line; a cylinder top split in ring and disc by a smaller cylinder's face; a plate top split through its hole into two equal halves; a tool that misses is an error. Volume and area are unchanged in every case. 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
0670de3f57
commit
f8a4ffbc67
2 files changed
+782
No files matched your search
@@ -32,6 +32,7 @@ mod polybool;
|
||||
mod polyhedron;
|
||||
mod prism;
|
||||
mod sew;
|
||||
mod splitface;
|
||||
mod step;
|
||||
mod step_in;
|
||||
mod step_out;
|
||||
@@ -51,6 +52,7 @@ pub use ops::{BoolOp, boolean, split_by_plane, transform, transform_matrix};
|
||||
pub use polybool::planar_boolean;
|
||||
pub use polyhedron::{HalfSpace, convex_polyhedron, draft, offset_faces, shell};
|
||||
pub use sew::{EdgeSpec, FaceSpec, SurfSpec, sew};
|
||||
pub use splitface::{SplitTool, split_faces};
|
||||
pub use step::step_export;
|
||||
pub use step_in::{ImportedBody, StepImport, StepNode, step_import, step_import_shared, step_orientation_errors, step_validate};
|
||||
pub use step_out::{ExportBody, ExportProduct, StepHeader, step_export_bodies, step_export_products};
|
||||
|
||||
Reference in new issue
Block a user