CommunityBildgithub.com

ezylevy/3d-stl

Zwei Eingänge, ein Standard-Ausgabeformat: ein wasserdichtes STL, ein parametrisches Skript, das es erzeugt, und eine Slicer-Tabelle für den Druckerfolg.

Was ist 3d-stl?

Dieses Skill bietet zwei völlig unterschiedliche Wege, um ein 3D-Druck-fähiges STL-Modell zu erzeugen: einen Geometrie-Pfad für beschriebene Objekte, Skizzen oder technische Zeichnungen, und einen Bild-Pfad, der Fotos oder Logos in Höhenfelder (Relief oder Lithophanie) umwandelt. Beide Wege liefern ein wasserdichtes STL, ein parametrisches Python-Skript mit argparse-Flags, und eine Slicer-Tabelle mit konkreten Druckparametern (Schichthöhe, Wände, Füllung, Stützen, Material, Ausrichtung auf dem Druckbett). Das Skill unterstützt Claude Code und Claude.ai (auf Windows `python` statt `python3` verwenden). Es enthält die Bibliotheken `scripts/partlib.py` (Profilbauer, Extrusion, Gewinde, Sechskantmutter, Positionierung, Finish) und `scripts/imagelib.py` (reine Pillow/numpy-basierte Höhenfeldgenerierung ohne Boolean-Engine – daher auch für große oder ungewöhnliche Bilder stabil). Ein vollständiges Arbeitsbeispiel (`scripts/example_handle.py`) dient als Skelett für neue Teile. Die Ausgabe erfolgt immer als Kombination aus STL-Datei und Generator-Skript, so dass Änderungen per Kommandozeile möglich sind, ohne das Modell neu zu zeichnen.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ezylevy/ezy-plugins/tree/HEAD/plugins/3d-stl/skills/3d-stl

Installed? Explore more Bild skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

3D STL

Zwei Eingänge, ein Standard-Ausgabeformat: ein wasserdichtes STL, ein parametrisches Skript, das es erzeugt, und eine Slicer-Tabelle, die den Druck zum Erfolg führt.

EingabeRouteBibliothek
Maße, ein beschriebenes Objekt, eine Skizze in WortenGeometrie-Routescripts/partlib.py
Ein Foto oder BilddateiBild-Routescripts/imagelib.py

Einrichtung für die Geometrie-Route:

pip install trimesh shapely manifold3d --break-system-packages -q

Die Bild-Route benötigt nur Pillow und NumPy – keine Mesh-Bibliothek, keine Booleans.


Geometrie-Route

1. Maße vor der Modellierung festlegen

Die meiste Nacharbeit hier entsteht durch Unklarheit, nicht durch schlechte Geometrie. Halten Sie das Teil in einer kurzen Tabelle fest (Maß → Wert → Quelle) und markieren Sie alles, was Sie angenommen haben. Achten Sie besonders auf:

  • Außenmaß vs. Bohrungsabstand. „87 mm breit“ und „87 mm zwischen den Schrauben“ sind unterschiedliche Teile – sie unterscheiden sich um eine Wandstärke. Fragen Sie nach.
  • Eine fehlende dritte Dimension. Ein Profil plus eine Dicke sind nur zwei von drei; wählen Sie eine sinnvolle Tiefe, sagen Sie das, und machen Sie es zu einem Flag.
  • Verbindungsabsicht. „5 mm Schrauben“ können Durchgangslöcher für Metall-M5-Schrauben, gedruckte Gewindestifte oder einen Heizeinsatz bedeuten. Drei verschiedene Modelle.
  • Vorhandene Hardware. Wenn das Teil mit etwas verbunden wird, das bereits existiert, sind dessen Lochabstand und Materialstärke Randbedingungen, keine Präferenzen.

Stellen Sie maximal die ein oder zwei Fragen, die die Geometrie ändern; nehmen Sie den Rest an, nennen Sie die Annahme und machen Sie weiter.

2. Mit der Bibliothek modellieren

scripts/partlib.py stellt Profilbauer, extrude, threaded_rod, threaded_pin, hex_nut, place und finish bereit. Importieren Sie diese, anstatt die Mesh-Mathematik neu zu erfinden – das Wendelgewinde ist leicht subtil falsch zu machen.

scripts/example_handle.py ist ein vollständiges bearbeitetes Teil (Brückengriff + integrale Gewindestifte + passende Mutter). Kopieren Sie es als Gerüst für ein neues Teil.

Schreiben Sie das Modell als parametrisches Skript mit argparse-Flags, niemals mit fest codierten Zahlen. Der Benutzer wird innerhalb von Minuten eine Variante wünschen, und die Antwort sollte eine einzige Kommandozeile sein, nicht ein neues Modell. Geben Sie das Skript zusammen mit dem STL zurück.

3. Übliche Teile-Rezepte

TeilAufbau aus
Brückengriff, ⊓-Winkelbridge_profile + extrude
Flache Platte mit LöchernShapely-Polygon mit Innenringen + extrude
Stift, Bolzen, Schraubethreaded_pin, dann place auf seine Achse
Mutter, Gewindemuffehex_nut, oder subtrahiere threaded_rod(clearance=…)
Abstandshalter, Buchsezwei konzentrische Kreise + extrude
Haken, L-WinkelPolygon der Seitenansicht + extrude, flach auf dem Bett
Gehäuseäußerer Kasten minus innerem Kasten; Lippe mit 0,15 mm Spiel

Alles, was nicht aufgeführt ist, ist trotzdem ein Polygon, eine Extrusion und eine Boolesche Operation.


Bild-Route

scripts/imagelib.py wandelt ein Bild in ein Höhenfeld um und fügt einen expliziten Vertex-Gitter-Festkörper zusammen – Oberseite, flache Unterseite, vier Seitenwände. Es verwendet keine Boolean-Engine, weshalb es genau bei großen oder ungewöhnlichen Bildern nicht versagt.

python3 imagelib.py photo.jpg --mode lithophane --width 100 \
    --out stl_output/lithophane.stl
python3 imagelib.py logo.png --mode relief --width 80 --base 2 \
    --out stl_output/relief.stl
ModusAbbildungTypische z
reliefHelle Pixel steigen0,6 → 4,0 mm, oft über einer --base-Platte
lithophaneDunkle Pixel werden dick, damit sie bei Hinterleuchtung leuchten0,8 → 3,0 mm, ohne Basis
  • --res legt die Anzahl der Abtastpunkte auf der langen Kante fest (Standard 200). Eine Auflösung über etwa 0,4 mm pro Abtastpunkt ist verschwendet – die Düse kann es nicht drucken, und die Datei wird aufgebläht. Erhöhen Sie sie nur bei großen Drucken.
  • Der Kontrast wird beim Laden automatisch gedehnt; ein flaches, kontrastarmes Foto ergibt einen flachen, enttäuschenden Druck. Sagen Sie das, anstatt es zu drucken.
  • Lithophanien wünschen sich Gesichter und kontrastreiche Motive. Landschaften und überfüllte Szenen verschwimmen zu Matsch.
  • check() überprüft, ob jede Kante genau zweimal in entgegengesetzten Richtungen erscheint. Ein reiner Zähler würde eine falsch herum vernähte Wand durchlassen, was ein „gültiges“ STL ergibt, das der Slicer von innen nach außen kehrt. Führen Sie es aus, berichten Sie es.

Fertigstellung, für beide Routen

Zuerst prüfen: finish() (Geometrie) und check() (Bild) melden die Bounding Box, Wasserdichtheit und Dreiecksanzahl. Vergleichen Sie die Bounding Box mit den angeforderten Maßen – das fängt Vorzeichenfehler und Einheitenverwechslungen sofort ab. Präsentieren Sie niemals ein Mesh, das nicht wasserdicht ist.

Bei allem, was optisch nicht offensichtlich ist – Gewinde, Kurven, Baugruppen – rendern Sie eine kurze Matplotlib-Vorschau und schauen Sie sie sich an. Zwanzig Sekunden sind besser als ein sechsstündiger Druck der falschen Form.

Lesen Sie references/design-rules.md, bevor Sie Ausrichtung, Steigung oder Spielräume wählen. Es behandelt schichtrichtungsabhängige Festigkeit, druckbare Gewindeprofile, Passungstoleranzen, bildabgeleitete Teile und die nennenswerten Fehlermodi.

Die Antwort sollte enthalten:

  1. Eine Maßtabelle, einschließlich der angenommenen Werte.
  2. Jede Entscheidung, die im Namen des Benutzers getroffen wurde, mit Begründung. Wenn ein gewünschtes Merkmal mechanisch schwach ist, bauen Sie, was verlangt wurde, und nennen Sie die Schwäche mit einer konkreten Alternative – ersetzen Sie niemals stillschweigend.
  3. Eine Slicer-Tabelle: Schichthöhe, Wände, Füllung, Stützen (genau wo), Material und welche Seite auf das Bett kommt und warum.
  4. Die einzeilige Befehl zum Neuerzeugen mit anderen Zahlen.
  5. Alles, was vor dem Druck gegen vorhandene Hardware überprüft werden muss.

Liefern Sie STL-Dateien nach /mnt/user-data/outputs/ auf claude.ai oder in einen stl_output/-Ordner im aktuellen Arbeitsverzeichnis in Claude Code, und präsentieren Sie sie zusammen mit dem Generator-Skript. Die Skripte befinden sich im scripts/-Ordner dieses Skills; rufen Sie sie mit vollständigem Pfad auf oder kopieren Sie sie neben das Teil-Skript. Unter Windows verwenden Sie python anstelle von python3.

Mehrteilige Baugruppen

Wenn Teile zusammenpassen (Stift und Mutter, Deckel und Kiste, Scharnierhälften):

  • Erzeugen Sie beide aus gemeinsamen Parametern in einem Skript – ein Spielwert, der in zwei Dateien lebt, wird auseinanderdriften.
  • Leiten Sie das weibliche Teil von derselben Funktion ab wie das männliche, versetzt um ein Spiel, sodass sie nicht inkonsistent sein können.
  • Geben Sie an, wie viele von jedem gedruckt werden sollen, und schlagen Sie ein Ersatzteil für das kleine vor.
  • Wenn eine Passung unsicher ist, bieten Sie einen Toleranztest an: Drucken Sie das kleine Teil mit zwei Spielen und behalten Sie das, das funktioniert.

Verwandte Skills