mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-27 10:51:22 +00:00
Design: fix hole placement (top-face default) + invisible internal thread
Hole: with no face explicitly picked, the tool fell back to the XY datum at z=0 (the model's underside), so placing a hole from a top view read parallax- shifted. Default to the solid's top face (top_face_index_of) so the footprint sits on the surface being viewed; the XY/XZ/YZ dropdown still overrides. Internal thread: the bore was re-cut at the nominal radius, which coincides with an existing hole's wall — the coincident faces fouled the groove boolean so it removed ~nothing (invisible thread). Cut the bore at the minor diameter (radius - depth) instead: strictly inside any existing wall, leaving it clean for the groove; on solid stock it forms the tap-drill. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BVzKmX6Y1aEteit1HTXG4Q
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
2a9a433127
commit
f8175fc9a4
@@ -1406,7 +1406,13 @@ void CadDocument::apply_feature(TopoDS_Shape& result, bool& have_body,
|
||||
// OUTWARD helical groove into its wall. When the thread is invoked on
|
||||
// an existing hole the bore cut is coincident (a no-op that may report
|
||||
// !IsDone) — tolerate it so the visible groove cut below still runs.
|
||||
TopoDS_Shape bore = BRepPrimAPI_MakeCylinder(ax2, f.thread_radius,
|
||||
// Cut the pocket at the MINOR diameter (radius - depth), not the nominal radius.
|
||||
// A nominal-radius bore that coincides with an existing hole's wall creates
|
||||
// coincident faces that foul the following groove boolean (the groove then removes
|
||||
// ~nothing -> invisible thread). The minor bore stays strictly inside any existing
|
||||
// hole wall, leaving it clean for the groove; on solid stock it forms the tap-drill.
|
||||
const double bore_r = std::max(0.5, f.thread_radius - f.thread_depth);
|
||||
TopoDS_Shape bore = BRepPrimAPI_MakeCylinder(ax2, bore_r,
|
||||
f.thread_height).Shape();
|
||||
try {
|
||||
BRepAlgoAPI_Cut cut_bore(result, bore);
|
||||
|
||||
Reference in New Issue
Block a user