Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| 3d_druck:mll-masken-generator [2026/06/24 05:35] – angelegt oliwel | 3d_druck:mll-masken-generator [2026/09/18 10:22] (aktuell) – [MobaLedLib Lichtmasken-Generator] oliwel | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ====== MobaLedLib Lichtmasken-Generator ====== | ====== MobaLedLib Lichtmasken-Generator ====== | ||
| - | Der [[https:// | + | Der [[https:// |
| - | 3D-Lichtmaske (STL) für Modellgebäude. Die Maske wird von innen in das Gebäude eingesetzt, trennt die Räume lichtdicht voneinander und kann zusammen mit der Hausplatine | + | eingesetzt, trennt die Räume lichtdicht voneinander und nimmt die Hausplatine |
| - | {{screenshot.png|Screenshot des Generators}} | + | {{bilder: |
| + | |||
| + | {{: | ||
| Diese Anleitung beschreibt **Schritt für Schritt, wie eine Konfiguration aufgebaut wird**. | Diese Anleitung beschreibt **Schritt für Schritt, wie eine Konfiguration aufgebaut wird**. | ||
| Zeile 23: | Zeile 25: | ||
| ===== Vorbereitung ===== | ===== Vorbereitung ===== | ||
| - | - Stelle dein Modellhaus auf ein Blatt kariertes | + | - Stelle dein Modellhaus auf ein Blatt karriertes |
| - Markiere alle Fenster und Türen durch einen dicken Strich auf der Wandlinie. | - Markiere alle Fenster und Türen durch einen dicken Strich auf der Wandlinie. | ||
| - Messe für jedes Fenster den Abstand zur linken Hausecke und vom " | - Messe für jedes Fenster den Abstand zur linken Hausecke und vom " | ||
| Zeile 29: | Zeile 31: | ||
| - Überlege dir die Position der Wände und skizziere Sie auf dem Papier. | - Überlege dir die Position der Wände und skizziere Sie auf dem Papier. | ||
| - Finde eine geeignete Position für die Lichtplatine. | - Finde eine geeignete Position für die Lichtplatine. | ||
| - | |||
| - | Die Grundlagen für das Ausmessen der Fenster und der Vorbereitung des Hauses findet ihr auch im [[.: | ||
| ---- | ---- | ||
| Zeile 46: | Zeile 46: | ||
| * Werte werden durch **Komma** getrennt. | * Werte werden durch **Komma** getrennt. | ||
| - | * **Alle Maße in Millimetern.** Nachkommastellen mit Punkt schreiben ('' | + | * **Alle Maße in Millimetern.** Nachkommastellen mit Punkt schreiben ('' |
| - | * Die Reihenfolge der Abschnitte ist frei wählbar. | + | * Die Reihenfolge der Abschnitte ist frei wählbar. Einzige Ausnahme: der Fenster-Abschnitt einer benannten Wand muss **nach** der '' |
| * Mit ''#'' | * Mit ''#'' | ||
| Zeile 98: | Zeile 98: | ||
| ^ Werte ^ Bedeutung ^ | ^ Werte ^ Bedeutung ^ | ||
| | '' | | '' | ||
| - | | '' | + | | '' |
| | '' | | '' | ||
| + | |||
| + | <WRAP info>Die Reihenfolge unterscheidet sich zwischen den beiden Formen. Mit | ||
| + | **zwei** Werten zählt die Zeile **Achsen** wie die Maßzeile: '' | ||
| + | Mit **vier** Werten zählt sie **Seiten** reihum ab vorne: | ||
| + | '' | ||
| + | nicht, einfach zwei Werte anzuhängen – '' | ||
| < | < | ||
| Zeile 106: | Zeile 112: | ||
| 2.5 | 2.5 | ||
| </ | </ | ||
| + | |||
| + | ==== Dritte Zeile – Stockwerk ('' | ||
| + | |||
| + | Werden mehrere Räume übereinander gestapelt, bekommt der '' | ||
| + | eigene Zeile '' | ||
| + | Sie gilt für den ganzen Raum und setzt automatisch: | ||
| + | |||
| + | * jedes **ungerade** Stockwerk dreht alle Platinen um 180°, damit die Anschlüsse abwechselnd liegen, | ||
| + | * die Ziffer wird in die **vordere rechte Ecke** des Dachs graviert, sodass am gedruckten Teil ablesbar ist, zu welchem Stockwerk es gehört, | ||
| + | * an den vier **Innenecken der Außenwände** kommt je eine Aussparung im Dach; ab '' | ||
| + | |||
| + | Die Ecken liegen **innen an den Wänden**, die Außenkontur der Maske bleibt also | ||
| + | unberührt und beim Einschieben ins Haus setzt nichts auf. Drei Ecken sind | ||
| + | Quadrate mit 2 mm Kantenlänge, | ||
| + | 3 mm Radius – damit passen gestapelte Räume nur in einer Drehlage zusammen. | ||
| + | |||
| + | Die Offset-Zeile darf fehlen, '' | ||
| + | |||
| + | < | ||
| + | raum | ||
| + | 110,78,35 | ||
| + | 2.5 | ||
| + | G1 | ||
| + | </ | ||
| + | |||
| + | <WRAP alert>'' | ||
| + | '' | ||
| ---- | ---- | ||
| Zeile 112: | Zeile 145: | ||
| Der '' | Der '' | ||
| - | festes Format von **41 × 36 mm** und muss mit etwas Abstand vollständig innerhalb | + | festes Format von **41 × 36 mm** und muss mit mindestens **2 mm** Abstand |
| - | der Maske liegen. | + | vollständig innerhalb der Maske liegen. |
| - | **Format:** Mitte-X, Mitte-Y [, Rotation] [, Schalter] | + | **Format:** Mitte-X, Mitte-Y [, Rotation] [, Schalter] [, Anschluss] |
| * '' | * '' | ||
| - | * '' | + | * '' |
| * '' | * '' | ||
| + | * '' | ||
| + | |||
| + | Werden beide Schlüsselwörter angegeben, steht '' | ||
| + | '' | ||
| < | < | ||
| licht | licht | ||
| - | 41,40,ende | + | 41,40,ende,idc |
| </ | </ | ||
| Zeile 169: | Zeile 206: | ||
| in der Zeile stehen: | in der Zeile stehen: | ||
| - | * **Eine Zahl** → automatische Trennwand: Die Zahl ist die **Position** entlang der Wand. Die Trennwand wächst von der Außenwand nach innen bis zum Dachausschnitt der Platine. Die Lücke zwischen der Wand und der Stützwand der Platine wird entlang der Dachkante automatisch geschlossen. | + | * **Eine Zahl** → automatische Trennwand: Die Zahl ist die **Position** entlang der Wand. Die Trennwand wächst von der Außenwand nach innen bis zum Dachausschnitt der Platine. Die Lücke zwischen der Wand und der Stützwand der Platine wird entlang der Dachkante automatisch geschlossen. Sind mehrere Platinen definiert, läuft die Wand zu der Platine, deren Mitte ihrem Ansatzpunkt an der Außenwand am nächsten liegt. |
| * **Zwei Zahlen** ('' | * **Zwei Zahlen** ('' | ||
| < | < | ||
| hinten | hinten | ||
| - | 15, | + | 15, |
| - | 72.5, | + | 72.5, |
| - | 42 ← automatische Trennwand bei Position 42 | + | 42 # automatische Trennwand bei Position 42 |
| </ | </ | ||
| Zeile 189: | Zeile 226: | ||
| zu Punkt. | zu Punkt. | ||
| - | **Format:** x1, y1, x2, y2 [, x3, y3, …] (2 bis 10 Punkte) | + | **Format:** x1, y1, x2, y2 [, x3, y3, …] (mindestens |
| + | |||
| + | Ein '' | ||
| + | **eigenständige** Wand. | ||
| < | < | ||
| wand | wand | ||
| - | 41, | + | 41, |
| + | 27, | ||
| </ | </ | ||
| + | |||
| + | **Linienzug über mehrere Zeilen:** Trägt eine Zeile nur **ein** Koordinatenpaar, | ||
| + | verlängert sie die zuletzt begonnene Wand um diesen Punkt – unabhängig davon, wie | ||
| + | viele Punkte deren vorige Zeile hatte. Eine Zeile mit **zwei oder mehr** Paaren | ||
| + | beginnt dagegen immer eine neue Wand. | ||
| + | |||
| + | < | ||
| + | wand | ||
| + | 10,10 # eine Wand | ||
| + | 20,20 # über zwei | ||
| + | 30,30 # Segmente | ||
| + | 40, | ||
| + | 60,20 # … um einen Punkt verlängert | ||
| + | </ | ||
| + | |||
| + | <WRAP alert> | ||
| + | fortgesetzt wird, ergibt kein Segment und wird als Fehler gemeldet.</ | ||
| Auch hier messen negative Koordinaten von der rechten bzw. hinteren Raumkante. | Auch hier messen negative Koordinaten von der rechten bzw. hinteren Raumkante. | ||
| Die Wände können anhand der Außenmaße gesetzt werden, der Generator beschneidet | Die Wände können anhand der Außenmaße gesetzt werden, der Generator beschneidet | ||
| die Länge automatisch an der Außenhülle der Maske. | die Länge automatisch an der Außenhülle der Maske. | ||
| + | |||
| + | ==== Fenster in einer freien Wand ==== | ||
| + | |||
| + | Ein einzelnes **gerades** Segment eines Linienzugs lässt sich benennen und bekommt | ||
| + | dann eigene Fenster – wie eine Außenwand. Der Name ist ein beliebiges Wort, das | ||
| + | hinter dem **Startpunkt** des Segments steht; das Segment endet am nächsten Punkt. | ||
| + | |||
| + | **Format:** x1, y1, name, x2, y2 – oder zweizeilig, mit dem Endpunkt in der Folgezeile: | ||
| + | |||
| + | < | ||
| + | wand | ||
| + | 20,10,flur | ||
| + | 20,50 | ||
| + | </ | ||
| + | |||
| + | Der Name wird anschließend zum **Abschnitts-Schlüsselwort** für die Öffnungen. Sie | ||
| + | werden wie bei den Außenwänden angegeben, der Abstand misst dabei ab dem | ||
| + | Startpunkt der Wand (x1, y1): | ||
| + | |||
| + | < | ||
| + | flur | ||
| + | 5,0,8,12 | ||
| + | 25,4,6,8 | ||
| + | </ | ||
| + | |||
| + | * Der Name darf kein reserviertes Schlüsselwort sein ('' | ||
| + | * Der Fenster-Abschnitt muss **nach** der '' | ||
| + | * Benannt wird immer nur **ein** Segment, nicht der ganze Linienzug. Ein Linienzug kann mehrere benannte Segmente enthalten. | ||
| + | * Ohne zugehörigen Fenster-Abschnitt bleibt das Segment eine normale freie Wand. | ||
| + | * Anders als bei den Außenwänden ist der Abstand hier immer positiv; negative Werte werden nicht von der Gegenecke gemessen, sondern abgewiesen. | ||
| ---- | ---- | ||
| Zeile 209: | Zeile 297: | ||
| ^ Zeile ^ Bedeutung ^ | ^ Zeile ^ Bedeutung ^ | ||
| - | | Musterhaus | Text, automatisch platziert | | + | | Musterhaus | Text, automatisch platziert: 3 mm/3 mm von der vorderen linken Ecke des **Druckkörpers**, |
| | 20, | | 20, | ||
| | 20, | | 20, | ||
| Zeile 217: | Zeile 305: | ||
| Musterhaus | Musterhaus | ||
| </ | </ | ||
| + | |||
| + | Zwei Einschränkungen ergeben sich aus dem CSV-Format: Der Text darf **kein Komma** | ||
| + | enthalten (es trennt die Felder), und er darf nicht genauso heißen wie ein | ||
| + | Abschnitts-Schlüsselwort oder eine benannte Wand – ein solches Wort beendet den | ||
| + | '' | ||
| + | |||
| + | ---- | ||
| ===== Optional – Dachöffnungen ('' | ===== Optional – Dachöffnungen ('' | ||
| Zeile 222: | Zeile 317: | ||
| Zusätzliche Öffnungen in der Dachfläche, | Zusätzliche Öffnungen in der Dachfläche, | ||
| - | **Format:** '' | + | **Format:** |
| + | | ||
| + | * '' | ||
| < | < | ||
| dach | dach | ||
| 44,10,5,5 | 44,10,5,5 | ||
| + | 55, | ||
| </ | </ | ||
| Zeile 245: | Zeile 343: | ||
| aussen,1.0 | aussen,1.0 | ||
| dach,1.2 | dach,1.2 | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== Lichtbox-Modus ('' | ||
| + | |||
| + | Statt einer kompletten Hausmaske ('' | ||
| + | **Lichtbox** erzeugen – ein kleiner Kasten, der über eine LED gestülpt wird und | ||
| + | das Licht gerichtet abgibt. Sobald das Schlüsselwort '' | ||
| + | schaltet der Generator auf den Lichtbox-Renderer ('' | ||
| + | '' | ||
| + | |||
| + | **Erste Zeile – Außenmaße (Pflicht): | ||
| + | |||
| + | < | ||
| + | box | ||
| + | 40,25,15 | ||
| + | </ | ||
| + | |||
| + | ==== LED-Öffnungen ('' | ||
| + | |||
| + | Die Schlüsselwörter '' | ||
| + | mehrere) LED-Öffnung auf die entsprechende Fläche. Jede Öffnung ist eine eigene | ||
| + | Zeile, die mit dem **LED-Typ** beginnt: | ||
| + | |||
| + | ^ LED-Typ ^ Bedeutung ^ | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | |||
| + | **Format:** ''< | ||
| + | |||
| + | * Nur ''< | ||
| + | * ''< | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | Die Offsets messen von der **Flächenmitte** aus und dürfen der Kante nicht näher | ||
| + | als **5 mm** kommen. | ||
| + | |||
| + | < | ||
| + | box | ||
| + | 40,25,15 | ||
| + | oben | ||
| + | plcc6, doppel | ||
| + | links | ||
| + | ws2812, 4 | ||
| + | rechts | ||
| + | plcc2, einfach, 4, -2 | ||
| </ | </ | ||
| Zeile 253: | Zeile 403: | ||
| < | < | ||
| licht | licht | ||
| - | 41,40,ende | + | 41,40,ende,idc |
| raum | raum | ||
| 110,78,35 | 110,78,35 | ||
| Zeile 280: | Zeile 430: | ||
| Musterhaus | Musterhaus | ||
| </ | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== Anhang – Generator starten ===== | ||
| + | |||
| + | Der Generator ist ein kleiner Webserver, der OpenSCAD zum Rendern aufruft. Beides | ||
| + | muss lokal installiert sein. | ||
| + | |||
| + | < | ||
| + | python3 server.py | ||
| + | </ | ||
| + | |||
| + | Danach ist die Oberfläche unter **http:// | ||
| + | Vorschau über '' | ||
| + | '' | ||
| + | |||
| + | Ohne Oberfläche lässt sich eine Konfiguration auch direkt übersetzen – die Ausgabe | ||
| + | ist das Datenfile, das '' | ||
| + | |||
| + | < | ||
| + | python3 server.py --parse meine_maske.csv > house_data.scad | ||
| + | </ | ||
| + | |||
| + | Mit '' | ||
| + | Konsole – hilfreich, um nachzusehen, | ||
| + | geworden ist. | ||