SG-Lib

Milestone 2026-07-11 — Weg 2: seitlicher Einschub mit Spielpassung (LERN-Fall)

Rendered views

Learning case — no printable STL for this milestone.

Art: Lern-/Lehr-Fall (kein autonomer fehlerfreier Entwurf, sondern ein von Tim eng geführtes Lernen des „Weg 2"). Bewusst als Milestone festgehalten, um auch so einen Fall zu dokumentieren.

Aufgabe

Ein Quader (zuerst 6×6×6, dann 3×4×5) soll seitlich, in negativer x-Richtung, mit Spielpassung in einen Zylinder (Ø10, Höhe 40) eingeschoben werden. Der Abzugskörper (Sackloch) wird über einen Oberflächen-Frame seitlich abgezogen; Einschubtiefe 4 mm, mit Spiel auch in der Tiefe.

Das verbindliche Vorgehen (Weg 2), das dabei gelernt wurde

  1. Keine absoluten Koordinaten. Zielinformation per geometrischer Abfrage aus dem Körper holen: Fläche+Frame über TofSGFSselect (Zugangsweg = Frame-z). Frame per SGTget lesen.
  2. Körpermaße messen, nie die Bau-Zahl wiederverwenden. Ausdehnung entlang der Achse per Strahlschnitt crosspointVLFL (aC=max(dd)-min(dd)), nicht aC=6 eintippen. Nur Spezifikationen (Einschubtiefe d) sind Zahlen.
  3. Kontur per Projektion — Richtung, nicht FrameCPLofSGprojection(SG, ez); und den zurückgegebenen Frame T auswerten (Kontur liegt in Ts Orientierung!): V=VLtransT(CVL,inv(TZ)); CPL=V(:,1:2).
  4. Echte Passung: slc=slfit('c'); Kontur vergrößern mit CPLbuffer(...,'miter') (scharfe Ecken, kein FDM-Verkleben); SGwarnfittinguse am Anfang.
  5. Anordnung nur über Frame-Relationen (alignT/matchT); relativer Versatz IN die geschweifte Klammer ({FA,FB,TofP([0 0 v])}), nie als trailing ,'transz',v (das ist absolut).
  6. Primitive ohne Default-Frames (SGbox(...,'noframe')); Frames nach Booleans mit SGTcopy mitnehmen.
  7. Ergebnis visuell prüfen (nicht nur nm=0): Sitz, Größe, Orientierung, Spiel.

Nebenprodukt (SG-Lib-Verbesserung)

CPLofSGprojection projiziert jetzt headless & exakt über Manifold (project() via CLAUDE_sg_manifold.project_vlfl) statt über das Grafikboard (CPLofgcaprojection/getframe), mit Grafik-Fallback. Siehe ..._projection_manifold_vs_graphics.png (exaktes 4-Punkt-Quadrat statt 9 pixel-getrastert). Apache-2.0- Lizenzhinweis für Manifold ergänzt (LICENSE_thirdparty_Manifold_Apache2.txt, SG-Lib_LICENSE.txt §9); SGmanifoldSetup prüft nun auch project_vlfl.

Ehrliche Meta-Lehre (der eigentliche Grund für diesen Milestone)

Der Entwurf hat 2–3 Stunden gedauert — deutlich zu lang. Nicht, weil das Wissen fehlte (die Regeln standen schon in den md-Dateien), sondern weil ich sie nicht konsequent angewandt habe: pro Regelverletzung (Magic Number, absolutes transz, Frame statt Richtung, T nicht ausgewertet) eine verlorene Iteration. Konsequenz: eine Pre-Flight-Checkliste (in CLAUDE_SGLIB_PATH2.md), die vor jedem Lauf abgehakt wird — Regeln anwenden statt nach dem Fehler wiederentdecken. Das ist die Lehre, die dieser Fall festhält.

Dateien

  • ..._build_sgtestclaude.m — finaler, regelkonformer Build (3×4×5, gemessen, keine Magic Numbers).
  • ..._views.png — Ergebnis (Quader seitlich mit Spiel eingeschoben, korrekt orientiert).
  • ..._projection_manifold_vs_graphics.png — Projektionsvergleich Manifold vs. Grafik.
  • Konversation: ..._conversation_de.md / ..._conversation_en.md.

Referenzen (Regeln dauerhaft abgelegt)

CLAUDE_SGLIB_PATH2.md (Checkliste + Regeln R1/R2), CLAUDE_SGLIB_LEARN.md (Namens-/Frame-/Mess-Regeln), CLAUDE_SGLIB_PARAMS.md (CPLofSGprojection, crosspointVLFL, slfit, ⚠️-Inkonsistenzen).

Entwurfs-Konversation (Deutsch)

Konversation (Auszug/Kern) — Weg 2, seitlicher Einschub, 2026-07-11

Verdichtete Wiedergabe der Lehr-Konversation (Tim ↔ Claude). Reihenfolge = Lernpfad.

  • Tim: Zweiter Lernpfad „Weg 2" (boolean-kompositionell), Voraussetzung: Booleans jetzt fehlerfrei (Manifold2). Später klargestellt: Wege 1 und 2 haben dieselben Regeln, nur andere Reihenfolge.
  • Tim: „Zeig mir Deine Zylinderkonstruktion." → Claude zeigt den alten Zylinderstapel.
  • Tim (Regel): Keine absoluten Koordinaten. Zielinfo per geometrischer Abfrage holen — Fläche + Frame (TofSGFSselect), der Frame definiert den Zugangsweg.
  • Tim (Regel): Durchgang/Austritt berechnen, nie als Konstante ablegen — crosspointVLFL vom Oberflächenpunkt rückwärts. „Verlass Dich nie darauf, die Geometrie zu kennen."
  • Übung: Zylinder Ø10×40, Frames TO/TU per Abfrage, mit SGTset ankleben. ✓
  • Tim (Regeln): Kontur relativ zum Frame; Sackloch-Länge = Tiefe + Überstand; Abzugskörper nie in absoluten Koordinaten, sondern relativ zum Oberflächenframe. SGTget statt der selbst berechneten Variable.
  • Übung: quadratisches Sackloch am TO. ✓ (Frames überleben SGsubtract — belegt; sichtbar nur mit SGTplotalpha, nicht SGplotalpha/Montage. Grundregel: Frames zeigen, wenn es um Frames geht.)
  • Tim (Regeln): Anordnung nur über Frame-Relation (alignT), Abzugskörper bekommt eigenen Frame 'C'. Namenskonvention: Solids/Konturen mit Datentyp-Präfix in Großbuchstaben (SGB, SGHsub, CPLA), Bausatz-Suffix klein (sub/add/supp). SGbox(...,'noframe') bei eigenen Frames. SGTcopy für Frames.
  • Tim (Regel): Passungen fest: slc=slfit('c'), slt=slfit('t'), sli=slfit('i'); jede Funktion mit Passung ruft SGwarnfittinguse. CPLbuffer(...,'miter') (scharfe Ecken, kein Verkleben) — 'round' ist ungeeignet.
  • Problem: CPLofSGprojection liefert im headless Batch eine falsche Kontur (Grafikboard/getframe). → Manifold hat Project() (Silhouette auf X-Y) und Slice(height). Eingebaut als headless-exakter Ersatz (project_vlfl), Signatur unverändert, Grafik-Fallback, kein per-call try/catch (Tim: try/catch langsam), Apache-2.0-Lizenz ergänzt.
  • Fehler 1 (Claude): Magic Number aC=6. Tim: „Beim nächsten Mal 3×4×5 — die 6 stimmt nicht. Miss die Ausdehnung vom Frame per crosspointVLFL. Wenn das nicht gelingt, muss ich das Lernen einstellen."
  • Fehler 2 (Claude): relativer Versatz als trailing ,'transz',vabsolutes Welt-KS → Würfel nach oben statt radial. Tim: Versatz gehört in die geschweifte Klammer ({FA,FB,TofP([0 0 v])}) = relativ.
  • Fehler 3 (Claude): den von CPLofSGprojection zurückgegebenen Frame T nicht ausgewertet → Kontur um 90° verdreht. Tim:CPL liegt in Ts Orientierung, nicht in Deiner." → V=VLtransT(CVL,inv(TU)).
  • Ergebnis: 3×4×5-Quader seitlich mit Spielpassung korrekt eingeschoben, Maß gemessen, keine Magic Numbers, richtige Orientierung, Spiel eingehalten. nm=0.
  • Tim (Meta): „Jetzt stimmt es — aber wir haben 2–3 Stunden gebraucht. Ich bitte Dich, die Regeln zu fixieren und wirklich einzuhalten." → Pre-Flight-Checkliste in CLAUDE_SGLIB_PATH2.md.

Kernlehre: Das Wissen war da; der Zeitverlust kam vom Nicht-Anwenden. Regeln vor jedem Lauf abhaken, nicht nach dem Fehler wiederentdecken.