SG-Lib

Milestone 2026-07-11 — Two blocks joined by TWO M3 screws (anti-rotation)

Rendered views

Download STL: twoblocks2xM3antirot_0001.stl · twoblocks2xM3antirot_0002.stl

Authors: Tim C. Lueth und Claude Opus 4.8 — SG-Lib Cowork tutorial milestone.

What this is

Two 20×30×20 mm blocks placed flank to flank, joined by two lateral, recessed DIN912/DIN985 M3 cross screws side by side to block rotation. A single lateral screw clamps the blocks but still allows twist about the screw axis; a second screw offset perpendicular to the axis locks the orientation. Built with the SG-Lib idiom (box → relative assembly → subtraction bausatz), watertight via the Manifold boolean backend (SGBOOLENGINE='SGboolManifold2').

Key lessons captured in this milestone

  • Two screws block rotation (SGLIB_Fuegen.md sec.2c): two axes offset perpendicular to the screw axis lock the rotation statically. Here both are plain round-hole screws (accepted practice with printed clearance fits).
  • Box side joint (sec.2b): blocks flank to flank via alignT {'X-','X+'}; screw axis = X, common flank = fuge.
  • Positions & spacing from the geometry — no magic numbers: both screw axes at yc ± span/4spacing 15 mm.
  • Screw length from screwlengthDIN912985(M,t1,t2): shortest recessed DIN912 A2 keeping head+nut recessed with enough residual wall (clamped thickness t1+t2, required wall). Here → M3×25, wall 6 mm, grip 21 mm.
  • Joint limit load info.Fmax: the achieved recess wall carries the head in punch-through shear, Fmax = wall·π·dk·σ/(√3·S). Here → 519 N per screw (PLA @ 20 %, σ 16.8 MPa, S=2) → 1038 N axial total; the printed wall — not the screw — is the limiting factor.
  • Insertion tunnel tpl ≥ body thickness so head/nut reach the outer face ('TT', tpl=[t1 t2]+2).
  • Design trace: every design decision + the limit load are emitted as XX comments (see _XXtrace.txt).
  • Always visualize the result (SGfigure + SGtitle with key params + drawnowvid(20)).
  • BOM: two screws + two nuts, each with its Wegertseder order code via productcode (DIN985 A2 M3 → 3346-232).

Files

  • 2026-07-11_build_twoblocks2xM3antirot.m — reproducible build script (self-contained, English output).
  • 2026-07-11_twoblocks2xM3antirot_STL/ — STL parts, StandardParts_parts.txt (BOM), assembly views, Design-Comments.txt, Assembly-Fitting.txt.
  • 2026-07-11_twoblocks2xM3antirot_views.png — half-section preview (both recessed screws + channels).
  • 2026-07-11_twoblocks2xM3antirot_XXtrace.txt — the XX design trace of the build run.
  • 2026-07-11_twoblocks2xM3antirot_buildinfo.txt — build provenance (stamp + tic/toc).
  • 2026-07-11_SGlibrunMilestone.m — copy of the runner used to reproduce this milestone.
  • 2026-07-11_twoblocks2xM3antirot_conversation_en.md / _de.md — the construction conversation (EN/DE).

Reproduce

SGlibrunMilestone(fullfile(pwd,'CLAUDE_MILESTONES','2026-07-11_twoblocks2xM3antirot', ...
                           '2026-07-11_build_twoblocks2xM3antirot.m'))

Result & provenance

  • Result: 2× M3×25, spacing 15 mm, residual wall 6 mm, grip 21 mm, limit load 519 N/screw (1038 N total), rotation locked, watertight (nm=0 on both bodies).
  • Execution time: 5.10 s (tic/toc)
  • Machine / stamp: Mac OSX 15.7.7 · MATLAB R2024b Update 6 · SG-Lib 5.7 develop · Java 11.0.24+8-LTS · Apple M3-PRO (12-Core CPU, 18-Core GPU), 36 GByte RAM
  • Host: lueths-barcelona-mac.local (MACA64 / maca64)
  • Run at: 2026-07-11 08:12

Design conversation (English)

Conversation — Milestone “Two blocks, two M3 screws (anti-rotation)” (2026-07-11)

The way to the result: Tim’s task and hints (verbatim, faithfully translated) with Claude’s construction replies in between. Construction part only; pure MATLAB/programming passages are elided with “[…]”.


Tim: “Compute again the two side-by-side blocks with the lateral screw, and tell me the limit load in N for 20% PLA. The program should be able to output that as an XX comment (general SG-Lib joining rule).”

Claude: Starting point: two 20×30×20 blocks flank to flank, joined by one lateral M3 cross screw (DIN912 A2 M3×25 + DIN985 A2 M3), residual wall 6 mm, watertight. The limit load follows from the achieved recess wall in punch-through shear, Fmax = wall·π·dk·σ/(√3·S). For PLA @ 20 % (σ 16.8 MPa, S=2) → 519 N. screwlengthDIN912985 now returns this as info.Fmax, and the caller emits it as an XX comment. […]


Tim: “Please take this task and now place two screws side by side to block the rotation.”

Claude: Implemented per SGLIB_Fuegen.md sec.2c (“two screws”): a single lateral screw holds the blocks together but still allows twist about the screw axis — a second screw offset perpendicular to the axis locks the rotation. Both screw axes at yc ± span/4 (derived from the geometry, no magic numbers) → spacing 15 mm. Each side uses a SGdesignDIN912DIN985 bausatz at its own 'M' frame at the fuge (head opens at B’s +X outer face, nut at A’s −X outer face), insertion tunnels tpl=[t1 t2]+2. Result: 2× DIN912 A2 M3×25 + 2× DIN985 A2 M3, residual wall 6 mm, grip 21 mm, watertight (nmA=nmB=0). Limit load 519 N per screw (1038 N axial total), rotation locked. BOM with 2×/2× and order codes.


Tim: “Remember, I always want a graphical output of EVERY design result during execution. That is a general SG-Lib design rule!”

Claude: Adopted: every design result is visualized during execution (SGfigure + SGplotalpha of the two bodies and of the drawn screws at their joining frames). […]


Tim: “Normally a short text is shown via title or SGtitle (the calling function name may be added automatically) with the essential parameters of the shown object.”

Claude: The plot gets a short SGtitle with the key parameters: 2x DIN912 M3x25 | spacing 15 mm | Fmax 519 N/screw PLA20pct. […]


Tim: “Yes, let’s file this as a milestone with conversation.”

Claude: Documented as a reproducible milestone: self-contained build script, STL parts + BOM, half-section preview (shows both recessed screws), XX design trace, buildinfo (stamp + tic/toc 5.10 s), runner copy, and this conversation (DE/EN).


Result

Two 20×30×20 blocks with two M3 cross screws side by side (spacing 15 mm) as anti-rotation lock: 2× DIN912 A2 M3×25 + 2× DIN985 A2 M3, residual wall 6 mm, grip 21 mm, limit load 519 N/screw (1038 N total), rotation locked, watertight (nm=0).