first
This commit is contained in:
commit
c87b0b1775
23 changed files with 2658 additions and 0 deletions
35
01_3D-Druck/README_3d-druck.md
Normal file
35
01_3D-Druck/README_3d-druck.md
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# 3D-Druck — Übersicht
|
||||
|
||||
Alles, was der 3D-Druck-Producer braucht, um die haptischen Spielelemente zu
|
||||
fertigen. Großflächige Grafik (Aufdrucke, Beschriftungen) wird **nicht** gedruckt,
|
||||
sondern als Aufkleber/Print-Layout aufgebracht — die 3D-Teile liefern Form,
|
||||
Verankerung und Steckmechanik.
|
||||
|
||||
## Inhalt dieses Ordners
|
||||
|
||||
| Datei | Zweck |
|
||||
|-------|-------|
|
||||
| [`materialliste.md`](materialliste.md) | Alle Bauteile mit Maßen, Mengen, Material- und Druckempfehlung |
|
||||
| [`visual-prompts_3d-producer.md`](visual-prompts_3d-producer.md) | Bild-Prompts als Orientierungs-Renderings für den Producer |
|
||||
| [`board-layout.svg`](board-layout.svg) | Maßstäbliche Layout-Skizze des gesamten Boards (exakt 40 Tiles, Sequenz, Loop) |
|
||||
| `board-layout.png` | PNG-Vorschau der Layout-Skizze |
|
||||
| [`gen_board_layout.py`](gen_board_layout.py) | Generator-Skript für die Layout-Skizze (bei Änderungen erneut ausführen) |
|
||||
| [`openscad/`](openscad/) | Parametrische Modelle (OpenSCAD) der Schlüsselteile zum direkten Slicen |
|
||||
|
||||
## Grundsätzliche Design-Entscheidungen
|
||||
|
||||
- **Modulares Tile-System** statt eines großen Boards — jedes Teil passt auf ein übliches Druckbett (≥ 200 × 200 mm).
|
||||
- **Lineare Bahn** (kein Ring) — Tiles werden zu einer durchgehenden Linie aneinandergereiht, bei Platzmangel mäandrierend.
|
||||
- **Eine standardisierte Verankerung** (Ø 50 mm Rundsockel) für *alle* Plättchen und für den Action-Stein → Teile sind austauschbar.
|
||||
- **Steckverbindungen** (Puzzle-Tabs) zwischen Tiles, damit die Bahn stabil zusammenhält und flexibel gelegt werden kann.
|
||||
- **Materialempfehlung:** PLA für Tiles/Plättchen/Gates (formstabil, günstig), PLA + Gewichtseinlage (M8-Mutter) für den Action-Stein (Standfestigkeit mit aufrechter Karte).
|
||||
|
||||
## Drucker-Annahmen
|
||||
|
||||
- Bauraum mind. 220 × 220 × 220 mm.
|
||||
- Düse 0,4 mm, Schichthöhe 0,2 mm.
|
||||
- Beschriftungen werden als **vertiefte Gravur** (negativ, 0,6–1,0 mm tief) modelliert, alternativ als aufgeklebtes Label.
|
||||
|
||||
> Alle Maße sind ein **Start-Spec** und vor der Serienfertigung an einem
|
||||
> Funktionsmuster zu prüfen (insb. Passung Sockel↔Plättchen↔Stein und
|
||||
> Kippstabilität des Steins mit Karte).
|
||||
BIN
01_3D-Druck/board-layout.png
Normal file
BIN
01_3D-Druck/board-layout.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 258 KiB |
310
01_3D-Druck/board-layout.svg
Normal file
310
01_3D-Druck/board-layout.svg
Normal file
|
|
@ -0,0 +1,310 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1936 816" font-family="Arial, Helvetica, sans-serif">
|
||||
<rect x="0" y="0" width="1936" height="816" fill="#f7f7f5"/>
|
||||
<defs><marker id="ah" markerWidth="9" markerHeight="9" refX="7" refY="3" orient="auto" markerUnits="strokeWidth"><path d="M0,0 L7,3 L0,6 Z" fill="#666"/></marker></defs>
|
||||
<text x="30" y="44" font-size="26" font-weight="800" fill="#1a1a1a">Service-Lifecycle — Board-Layout (40 Tiles)</text>
|
||||
<text x="30" y="68" font-size="14" fill="#555">37 Aktivitaeten + 3 Gates · 1 Tile = 100x100 mm · lineare Bahn, Sequenz links nach rechts</text>
|
||||
<rect x="30" y="96" width="150" height="74" rx="9" fill="#2F80C9"/>
|
||||
<text x="105.0" y="131.0" text-anchor="middle" font-size="17" font-weight="800" fill="#fff">DESIGN</text>
|
||||
<text x="105.0" y="151.0" text-anchor="middle" font-size="12" fill="#fff">4 Tiles</text>
|
||||
<circle cx="200" cy="133.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="200" y="96" width="112" height="74" rx="9" fill="#e6eff8" stroke="#2F80C9" stroke-width="2"/>
|
||||
<circle cx="312" cy="133.0" r="8" fill="#2F80C9"/>
|
||||
<circle cx="218" cy="114" r="7" fill="none" stroke="#2F80C9" stroke-width="1.5"/>
|
||||
<text x="256.0" y="126" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">ds_01</text>
|
||||
<text x="256.0" y="148" text-anchor="middle" font-size="10" fill="#333">Eigenschaften definieren</text>
|
||||
<line x1="320" y1="133.0" x2="326" y2="133.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="328" cy="133.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="328" y="96" width="112" height="74" rx="9" fill="#e6eff8" stroke="#2F80C9" stroke-width="2"/>
|
||||
<circle cx="440" cy="133.0" r="8" fill="#2F80C9"/>
|
||||
<circle cx="346" cy="114" r="7" fill="none" stroke="#2F80C9" stroke-width="1.5"/>
|
||||
<text x="384.0" y="126" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">ds_02</text>
|
||||
<text x="384.0" y="148" text-anchor="middle" font-size="10" fill="#333">Komponenten designen</text>
|
||||
<line x1="448" y1="133.0" x2="454" y2="133.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="456" cy="133.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="456" y="96" width="112" height="74" rx="9" fill="#e6eff8" stroke="#2F80C9" stroke-width="2"/>
|
||||
<circle cx="568" cy="133.0" r="8" fill="#2F80C9"/>
|
||||
<circle cx="474" cy="114" r="7" fill="none" stroke="#2F80C9" stroke-width="1.5"/>
|
||||
<text x="512.0" y="126" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">ds_03</text>
|
||||
<text x="512.0" y="148" text-anchor="middle" font-size="10" fill="#333">Vorgehen beschreiben</text>
|
||||
<line x1="576" y1="133.0" x2="582" y2="133.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="584" cy="133.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="584" y="96" width="112" height="74" rx="9" fill="#e6eff8" stroke="#2F80C9" stroke-width="2"/>
|
||||
<circle cx="696" cy="133.0" r="8" fill="#2F80C9"/>
|
||||
<circle cx="602" cy="114" r="7" fill="none" stroke="#2F80C9" stroke-width="1.5"/>
|
||||
<text x="640.0" y="126" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">ds_04</text>
|
||||
<text x="640.0" y="148" text-anchor="middle" font-size="10" fill="#333">Implementierung vorbereiten</text>
|
||||
<path d="M 640.0 170 V 193.0 H 256.0 V 214" fill="none" stroke="#999" stroke-width="2.2" stroke-dasharray="5 4" marker-end="url(#ah)"/>
|
||||
<rect x="30" y="216" width="150" height="74" rx="9" fill="#E8893B"/>
|
||||
<text x="105.0" y="251.0" text-anchor="middle" font-size="17" font-weight="800" fill="#fff">TRANSITION</text>
|
||||
<text x="105.0" y="271.0" text-anchor="middle" font-size="12" fill="#fff">12 Tiles</text>
|
||||
<circle cx="200" cy="253.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="200" y="216" width="112" height="74" rx="9" fill="#E8893B" stroke="#E8893B" stroke-width="3"/>
|
||||
<circle cx="312" cy="253.0" r="8" fill="#E8893B"/>
|
||||
<path d="M 244.0 248 V 234 A 12 12 0 0 1 268.0 234 V 248" fill="none" stroke="#ffffff" stroke-width="3"/>
|
||||
<text x="256.0" y="268" text-anchor="middle" font-size="14" font-weight="700" fill="#ffffff">tr_01</text>
|
||||
<text x="256.0" y="283" text-anchor="middle" font-size="10.5" fill="#ffffff">Entw. / Konfig.?</text>
|
||||
<line x1="320" y1="253.0" x2="326" y2="253.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="328" cy="253.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="328" y="216" width="112" height="74" rx="9" fill="#fcf0e7" stroke="#E8893B" stroke-width="2"/>
|
||||
<circle cx="440" cy="253.0" r="8" fill="#E8893B"/>
|
||||
<circle cx="346" cy="234" r="7" fill="none" stroke="#E8893B" stroke-width="1.5"/>
|
||||
<text x="384.0" y="246" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">tr_02</text>
|
||||
<text x="384.0" y="268" text-anchor="middle" font-size="10" fill="#333">Entwicklung koordinieren</text>
|
||||
<line x1="448" y1="253.0" x2="454" y2="253.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="456" cy="253.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="456" y="216" width="112" height="74" rx="9" fill="#fcf0e7" stroke="#E8893B" stroke-width="2"/>
|
||||
<circle cx="568" cy="253.0" r="8" fill="#E8893B"/>
|
||||
<circle cx="474" cy="234" r="7" fill="none" stroke="#E8893B" stroke-width="1.5"/>
|
||||
<text x="512.0" y="246" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">tr_03</text>
|
||||
<text x="512.0" y="268" text-anchor="middle" font-size="10" fill="#333">Anwendungen entwickeln</text>
|
||||
<line x1="576" y1="253.0" x2="582" y2="253.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="584" cy="253.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="584" y="216" width="112" height="74" rx="9" fill="#fcf0e7" stroke="#E8893B" stroke-width="2"/>
|
||||
<circle cx="696" cy="253.0" r="8" fill="#E8893B"/>
|
||||
<circle cx="602" cy="234" r="7" fill="none" stroke="#E8893B" stroke-width="1.5"/>
|
||||
<text x="640.0" y="246" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">tr_04</text>
|
||||
<text x="640.0" y="268" text-anchor="middle" font-size="10" fill="#333">Komponenten annehmen</text>
|
||||
<line x1="704" y1="253.0" x2="710" y2="253.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="712" cy="253.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="712" y="216" width="112" height="74" rx="9" fill="#fcf0e7" stroke="#E8893B" stroke-width="2"/>
|
||||
<circle cx="824" cy="253.0" r="8" fill="#E8893B"/>
|
||||
<circle cx="730" cy="234" r="7" fill="none" stroke="#E8893B" stroke-width="1.5"/>
|
||||
<text x="768.0" y="246" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">tr_05</text>
|
||||
<text x="768.0" y="268" text-anchor="middle" font-size="10" fill="#333">Komponenten konfigurieren</text>
|
||||
<line x1="832" y1="253.0" x2="838" y2="253.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="840" cy="253.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="840" y="216" width="112" height="74" rx="9" fill="#fcf0e7" stroke="#E8893B" stroke-width="2"/>
|
||||
<circle cx="952" cy="253.0" r="8" fill="#E8893B"/>
|
||||
<circle cx="858" cy="234" r="7" fill="none" stroke="#E8893B" stroke-width="1.5"/>
|
||||
<text x="896.0" y="246" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">tr_06</text>
|
||||
<text x="896.0" y="268" text-anchor="middle" font-size="10" fill="#333">Betriebsdoku erstellen</text>
|
||||
<line x1="960" y1="253.0" x2="966" y2="253.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="968" cy="253.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="968" y="216" width="112" height="74" rx="9" fill="#fcf0e7" stroke="#E8893B" stroke-width="2"/>
|
||||
<circle cx="1080" cy="253.0" r="8" fill="#E8893B"/>
|
||||
<circle cx="986" cy="234" r="7" fill="none" stroke="#E8893B" stroke-width="1.5"/>
|
||||
<text x="1024.0" y="246" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">tr_07</text>
|
||||
<text x="1024.0" y="268" text-anchor="middle" font-size="10" fill="#333">Komponenten testen</text>
|
||||
<line x1="1088" y1="253.0" x2="1094" y2="253.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="1096" cy="253.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="1096" y="216" width="112" height="74" rx="9" fill="#fcf0e7" stroke="#E8893B" stroke-width="2"/>
|
||||
<circle cx="1208" cy="253.0" r="8" fill="#E8893B"/>
|
||||
<circle cx="1114" cy="234" r="7" fill="none" stroke="#E8893B" stroke-width="1.5"/>
|
||||
<text x="1152.0" y="246" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">tr_08</text>
|
||||
<text x="1152.0" y="268" text-anchor="middle" font-size="10" fill="#333">Formale Uebergabe</text>
|
||||
<line x1="1216" y1="253.0" x2="1222" y2="253.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="1224" cy="253.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="1224" y="216" width="112" height="74" rx="9" fill="#E8893B" stroke="#E8893B" stroke-width="3"/>
|
||||
<circle cx="1336" cy="253.0" r="8" fill="#E8893B"/>
|
||||
<path d="M 1268.0 248 V 234 A 12 12 0 0 1 1292.0 234 V 248" fill="none" stroke="#ffffff" stroke-width="3"/>
|
||||
<text x="1280.0" y="268" text-anchor="middle" font-size="14" font-weight="700" fill="#ffffff">tr_09</text>
|
||||
<text x="1280.0" y="283" text-anchor="middle" font-size="10.5" fill="#ffffff">Entry-Pruefung</text>
|
||||
<line x1="1344" y1="253.0" x2="1350" y2="253.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="1352" cy="253.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="1352" y="216" width="112" height="74" rx="9" fill="#fcf0e7" stroke="#E8893B" stroke-width="2"/>
|
||||
<circle cx="1464" cy="253.0" r="8" fill="#E8893B"/>
|
||||
<circle cx="1370" cy="234" r="7" fill="none" stroke="#E8893B" stroke-width="1.5"/>
|
||||
<text x="1408.0" y="246" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">tr_10</text>
|
||||
<text x="1408.0" y="268" text-anchor="middle" font-size="10" fill="#333">Ausrollen</text>
|
||||
<line x1="1472" y1="253.0" x2="1478" y2="253.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="1480" cy="253.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="1480" y="216" width="112" height="74" rx="9" fill="#fcf0e7" stroke="#E8893B" stroke-width="2"/>
|
||||
<circle cx="1592" cy="253.0" r="8" fill="#E8893B"/>
|
||||
<circle cx="1498" cy="234" r="7" fill="none" stroke="#E8893B" stroke-width="1.5"/>
|
||||
<text x="1536.0" y="246" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">tr_11</text>
|
||||
<text x="1536.0" y="268" text-anchor="middle" font-size="10" fill="#333">Aktivierung vorbereiten</text>
|
||||
<line x1="1600" y1="253.0" x2="1606" y2="253.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="1608" cy="253.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="1608" y="216" width="112" height="74" rx="9" fill="#E8893B" stroke="#E8893B" stroke-width="3"/>
|
||||
<circle cx="1720" cy="253.0" r="8" fill="#E8893B"/>
|
||||
<path d="M 1652.0 248 V 234 A 12 12 0 0 1 1676.0 234 V 248" fill="none" stroke="#ffffff" stroke-width="3"/>
|
||||
<text x="1664.0" y="268" text-anchor="middle" font-size="14" font-weight="700" fill="#ffffff">tr_12</text>
|
||||
<text x="1664.0" y="283" text-anchor="middle" font-size="10.5" fill="#ffffff">Go-Live-Freigabe</text>
|
||||
<path d="M 1664.0 290 V 313.0 H 256.0 V 334" fill="none" stroke="#999" stroke-width="2.2" stroke-dasharray="5 4" marker-end="url(#ah)"/>
|
||||
<rect x="30" y="336" width="150" height="74" rx="9" fill="#5BAE5B"/>
|
||||
<text x="105.0" y="371.0" text-anchor="middle" font-size="17" font-weight="800" fill="#fff">OPERATION</text>
|
||||
<text x="105.0" y="391.0" text-anchor="middle" font-size="12" fill="#fff">7 Tiles</text>
|
||||
<circle cx="200" cy="373.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="200" y="336" width="112" height="74" rx="9" fill="#ebf5eb" stroke="#5BAE5B" stroke-width="2"/>
|
||||
<circle cx="312" cy="373.0" r="8" fill="#5BAE5B"/>
|
||||
<circle cx="218" cy="354" r="7" fill="none" stroke="#5BAE5B" stroke-width="1.5"/>
|
||||
<text x="256.0" y="366" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">op_01</text>
|
||||
<text x="256.0" y="388" text-anchor="middle" font-size="10" fill="#333">Early Life Support</text>
|
||||
<line x1="320" y1="373.0" x2="326" y2="373.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="328" cy="373.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="328" y="336" width="112" height="74" rx="9" fill="#ebf5eb" stroke="#5BAE5B" stroke-width="2"/>
|
||||
<circle cx="440" cy="373.0" r="8" fill="#5BAE5B"/>
|
||||
<circle cx="346" cy="354" r="7" fill="none" stroke="#5BAE5B" stroke-width="1.5"/>
|
||||
<text x="384.0" y="366" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">op_02</text>
|
||||
<text x="384.0" y="388" text-anchor="middle" font-size="10" fill="#333">Betriebs-Leitlinien</text>
|
||||
<line x1="448" y1="373.0" x2="454" y2="373.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="456" cy="373.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="456" y="336" width="112" height="74" rx="9" fill="#ebf5eb" stroke="#5BAE5B" stroke-width="2"/>
|
||||
<circle cx="568" cy="373.0" r="8" fill="#5BAE5B"/>
|
||||
<circle cx="474" cy="354" r="7" fill="none" stroke="#5BAE5B" stroke-width="1.5"/>
|
||||
<text x="512.0" y="366" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">op_03</text>
|
||||
<text x="512.0" y="388" text-anchor="middle" font-size="10" fill="#333">Laufender Betrieb</text>
|
||||
<line x1="576" y1="373.0" x2="582" y2="373.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="584" cy="373.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="584" y="336" width="112" height="74" rx="9" fill="#ebf5eb" stroke="#5BAE5B" stroke-width="2"/>
|
||||
<circle cx="696" cy="373.0" r="8" fill="#5BAE5B"/>
|
||||
<circle cx="602" cy="354" r="7" fill="none" stroke="#5BAE5B" stroke-width="1.5"/>
|
||||
<text x="640.0" y="366" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">op_04</text>
|
||||
<text x="640.0" y="388" text-anchor="middle" font-size="10" fill="#333">Ressourcen & Budget</text>
|
||||
<line x1="704" y1="373.0" x2="710" y2="373.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="712" cy="373.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="712" y="336" width="112" height="74" rx="9" fill="#ebf5eb" stroke="#5BAE5B" stroke-width="2"/>
|
||||
<circle cx="824" cy="373.0" r="8" fill="#5BAE5B"/>
|
||||
<circle cx="730" cy="354" r="7" fill="none" stroke="#5BAE5B" stroke-width="1.5"/>
|
||||
<text x="768.0" y="366" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">op_05</text>
|
||||
<text x="768.0" y="388" text-anchor="middle" font-size="10" fill="#333">Services ueberwachen</text>
|
||||
<line x1="832" y1="373.0" x2="838" y2="373.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="840" cy="373.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="840" y="336" width="112" height="74" rx="9" fill="#ebf5eb" stroke="#5BAE5B" stroke-width="2"/>
|
||||
<circle cx="952" cy="373.0" r="8" fill="#5BAE5B"/>
|
||||
<circle cx="858" cy="354" r="7" fill="none" stroke="#5BAE5B" stroke-width="1.5"/>
|
||||
<text x="896.0" y="366" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">op_06</text>
|
||||
<text x="896.0" y="388" text-anchor="middle" font-size="10" fill="#333">Qualitaetsbericht</text>
|
||||
<line x1="960" y1="373.0" x2="966" y2="373.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="968" cy="373.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="968" y="336" width="112" height="74" rx="9" fill="#ebf5eb" stroke="#5BAE5B" stroke-width="2"/>
|
||||
<circle cx="1080" cy="373.0" r="8" fill="#5BAE5B"/>
|
||||
<circle cx="986" cy="354" r="7" fill="none" stroke="#5BAE5B" stroke-width="1.5"/>
|
||||
<text x="1024.0" y="366" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">op_07</text>
|
||||
<text x="1024.0" y="388" text-anchor="middle" font-size="10" fill="#333">Proaktive Problemerkennung</text>
|
||||
<path d="M 1024.0 410 V 433.0 H 256.0 V 454" fill="none" stroke="#999" stroke-width="2.2" stroke-dasharray="5 4" marker-end="url(#ah)"/>
|
||||
<rect x="30" y="456" width="150" height="74" rx="9" fill="#3FB5B5"/>
|
||||
<text x="105.0" y="491.0" text-anchor="middle" font-size="17" font-weight="800" fill="#fff">SUPPORT</text>
|
||||
<text x="105.0" y="511.0" text-anchor="middle" font-size="12" fill="#fff">11 Tiles</text>
|
||||
<circle cx="200" cy="493.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="200" y="456" width="112" height="74" rx="9" fill="#e7f6f6" stroke="#3FB5B5" stroke-width="2"/>
|
||||
<circle cx="312" cy="493.0" r="8" fill="#3FB5B5"/>
|
||||
<circle cx="218" cy="474" r="7" fill="none" stroke="#3FB5B5" stroke-width="1.5"/>
|
||||
<text x="256.0" y="486" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">sp_01</text>
|
||||
<text x="256.0" y="508" text-anchor="middle" font-size="10" fill="#333">Support-Leitlinien</text>
|
||||
<line x1="320" y1="493.0" x2="326" y2="493.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="328" cy="493.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="328" y="456" width="112" height="74" rx="9" fill="#e7f6f6" stroke="#3FB5B5" stroke-width="2"/>
|
||||
<circle cx="440" cy="493.0" r="8" fill="#3FB5B5"/>
|
||||
<circle cx="346" cy="474" r="7" fill="none" stroke="#3FB5B5" stroke-width="1.5"/>
|
||||
<text x="384.0" y="486" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">sp_02</text>
|
||||
<text x="384.0" y="508" text-anchor="middle" font-size="10" fill="#333">Wissensdatenbank</text>
|
||||
<line x1="448" y1="493.0" x2="454" y2="493.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="456" cy="493.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="456" y="456" width="112" height="74" rx="9" fill="#e7f6f6" stroke="#3FB5B5" stroke-width="2"/>
|
||||
<circle cx="568" cy="493.0" r="8" fill="#3FB5B5"/>
|
||||
<circle cx="474" cy="474" r="7" fill="none" stroke="#3FB5B5" stroke-width="1.5"/>
|
||||
<text x="512.0" y="486" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">sp_03</text>
|
||||
<text x="512.0" y="508" text-anchor="middle" font-size="10" fill="#333">Incidents/Requests verteilen</text>
|
||||
<line x1="576" y1="493.0" x2="582" y2="493.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="584" cy="493.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="584" y="456" width="112" height="74" rx="9" fill="#e7f6f6" stroke="#3FB5B5" stroke-width="2"/>
|
||||
<circle cx="696" cy="493.0" r="8" fill="#3FB5B5"/>
|
||||
<circle cx="602" cy="474" r="7" fill="none" stroke="#3FB5B5" stroke-width="1.5"/>
|
||||
<text x="640.0" y="486" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">sp_04</text>
|
||||
<text x="640.0" y="508" text-anchor="middle" font-size="10" fill="#333">Requests bearbeiten</text>
|
||||
<line x1="704" y1="493.0" x2="710" y2="493.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="712" cy="493.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="712" y="456" width="112" height="74" rx="9" fill="#e7f6f6" stroke="#3FB5B5" stroke-width="2"/>
|
||||
<circle cx="824" cy="493.0" r="8" fill="#3FB5B5"/>
|
||||
<circle cx="730" cy="474" r="7" fill="none" stroke="#3FB5B5" stroke-width="1.5"/>
|
||||
<text x="768.0" y="486" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">sp_05</text>
|
||||
<text x="768.0" y="508" text-anchor="middle" font-size="10" fill="#333">Incident 1st Level</text>
|
||||
<line x1="832" y1="493.0" x2="838" y2="493.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="840" cy="493.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="840" y="456" width="112" height="74" rx="9" fill="#e7f6f6" stroke="#3FB5B5" stroke-width="2"/>
|
||||
<circle cx="952" cy="493.0" r="8" fill="#3FB5B5"/>
|
||||
<circle cx="858" cy="474" r="7" fill="none" stroke="#3FB5B5" stroke-width="1.5"/>
|
||||
<text x="896.0" y="486" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">sp_06</text>
|
||||
<text x="896.0" y="508" text-anchor="middle" font-size="10" fill="#333">Incident 2nd Level</text>
|
||||
<line x1="960" y1="493.0" x2="966" y2="493.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="968" cy="493.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="968" y="456" width="112" height="74" rx="9" fill="#e7f6f6" stroke="#3FB5B5" stroke-width="2"/>
|
||||
<circle cx="1080" cy="493.0" r="8" fill="#3FB5B5"/>
|
||||
<circle cx="986" cy="474" r="7" fill="none" stroke="#3FB5B5" stroke-width="1.5"/>
|
||||
<text x="1024.0" y="486" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">sp_07</text>
|
||||
<text x="1024.0" y="508" text-anchor="middle" font-size="10" fill="#333">Record geloest</text>
|
||||
<line x1="1088" y1="493.0" x2="1094" y2="493.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="1096" cy="493.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="1096" y="456" width="112" height="74" rx="9" fill="#e7f6f6" stroke="#3FB5B5" stroke-width="2"/>
|
||||
<circle cx="1208" cy="493.0" r="8" fill="#3FB5B5"/>
|
||||
<circle cx="1114" cy="474" r="7" fill="none" stroke="#3FB5B5" stroke-width="1.5"/>
|
||||
<text x="1152.0" y="486" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">sp_08</text>
|
||||
<text x="1152.0" y="508" text-anchor="middle" font-size="10" fill="#333">Schliessen</text>
|
||||
<line x1="1216" y1="493.0" x2="1222" y2="493.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="1224" cy="493.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="1224" y="456" width="112" height="74" rx="9" fill="#e7f6f6" stroke="#3FB5B5" stroke-width="2"/>
|
||||
<circle cx="1336" cy="493.0" r="8" fill="#3FB5B5"/>
|
||||
<circle cx="1242" cy="474" r="7" fill="none" stroke="#3FB5B5" stroke-width="1.5"/>
|
||||
<text x="1280.0" y="486" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">sp_09</text>
|
||||
<text x="1280.0" y="508" text-anchor="middle" font-size="10" fill="#333">Problem Record anlegen</text>
|
||||
<line x1="1344" y1="493.0" x2="1350" y2="493.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="1352" cy="493.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="1352" y="456" width="112" height="74" rx="9" fill="#e7f6f6" stroke="#3FB5B5" stroke-width="2"/>
|
||||
<circle cx="1464" cy="493.0" r="8" fill="#3FB5B5"/>
|
||||
<circle cx="1370" cy="474" r="7" fill="none" stroke="#3FB5B5" stroke-width="1.5"/>
|
||||
<text x="1408.0" y="486" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">sp_10</text>
|
||||
<text x="1408.0" y="508" text-anchor="middle" font-size="10" fill="#333">Wiederk. Incidents -> Problem</text>
|
||||
<line x1="1472" y1="493.0" x2="1478" y2="493.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="1480" cy="493.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="1480" y="456" width="112" height="74" rx="9" fill="#e7f6f6" stroke="#3FB5B5" stroke-width="2"/>
|
||||
<circle cx="1592" cy="493.0" r="8" fill="#3FB5B5"/>
|
||||
<circle cx="1498" cy="474" r="7" fill="none" stroke="#3FB5B5" stroke-width="1.5"/>
|
||||
<text x="1536.0" y="486" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">sp_11</text>
|
||||
<text x="1536.0" y="508" text-anchor="middle" font-size="10" fill="#333">RCA & Workaround</text>
|
||||
<path d="M 1536.0 530 V 553.0 H 256.0 V 574" fill="none" stroke="#999" stroke-width="2.2" stroke-dasharray="5 4" marker-end="url(#ah)"/>
|
||||
<rect x="30" y="576" width="150" height="74" rx="9" fill="#8E63B5"/>
|
||||
<text x="105.0" y="611.0" text-anchor="middle" font-size="17" font-weight="800" fill="#fff">REVIEW</text>
|
||||
<text x="105.0" y="631.0" text-anchor="middle" font-size="12" fill="#fff">6 Tiles</text>
|
||||
<circle cx="200" cy="613.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="200" y="576" width="112" height="74" rx="9" fill="#f1ecf6" stroke="#8E63B5" stroke-width="2"/>
|
||||
<circle cx="312" cy="613.0" r="8" fill="#8E63B5"/>
|
||||
<circle cx="218" cy="594" r="7" fill="none" stroke="#8E63B5" stroke-width="1.5"/>
|
||||
<text x="256.0" y="606" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">rv_01</text>
|
||||
<text x="256.0" y="628" text-anchor="middle" font-size="10" fill="#333">Taktische RCA + KPIs</text>
|
||||
<line x1="320" y1="613.0" x2="326" y2="613.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="328" cy="613.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="328" y="576" width="112" height="74" rx="9" fill="#f1ecf6" stroke="#8E63B5" stroke-width="2"/>
|
||||
<circle cx="440" cy="613.0" r="8" fill="#8E63B5"/>
|
||||
<circle cx="346" cy="594" r="7" fill="none" stroke="#8E63B5" stroke-width="1.5"/>
|
||||
<text x="384.0" y="606" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">rv_02</text>
|
||||
<text x="384.0" y="628" text-anchor="middle" font-size="10" fill="#333">Performance & Improvement</text>
|
||||
<line x1="448" y1="613.0" x2="454" y2="613.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="456" cy="613.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="456" y="576" width="112" height="74" rx="9" fill="#f1ecf6" stroke="#8E63B5" stroke-width="2"/>
|
||||
<circle cx="568" cy="613.0" r="8" fill="#8E63B5"/>
|
||||
<circle cx="474" cy="594" r="7" fill="none" stroke="#8E63B5" stroke-width="1.5"/>
|
||||
<text x="512.0" y="606" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">rv_03</text>
|
||||
<text x="512.0" y="628" text-anchor="middle" font-size="10" fill="#333">SOR Periodischer Review</text>
|
||||
<line x1="576" y1="613.0" x2="582" y2="613.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="584" cy="613.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="584" y="576" width="112" height="74" rx="9" fill="#f1ecf6" stroke="#8E63B5" stroke-width="2"/>
|
||||
<circle cx="696" cy="613.0" r="8" fill="#8E63B5"/>
|
||||
<circle cx="602" cy="594" r="7" fill="none" stroke="#8E63B5" stroke-width="1.5"/>
|
||||
<text x="640.0" y="606" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">rv_04</text>
|
||||
<text x="640.0" y="628" text-anchor="middle" font-size="10" fill="#333">Service Improvement</text>
|
||||
<line x1="704" y1="613.0" x2="710" y2="613.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="712" cy="613.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="712" y="576" width="112" height="74" rx="9" fill="#f1ecf6" stroke="#8E63B5" stroke-width="2"/>
|
||||
<circle cx="824" cy="613.0" r="8" fill="#8E63B5"/>
|
||||
<circle cx="730" cy="594" r="7" fill="none" stroke="#8E63B5" stroke-width="1.5"/>
|
||||
<text x="768.0" y="606" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">rv_05</text>
|
||||
<text x="768.0" y="628" text-anchor="middle" font-size="10" fill="#333">Redesign / Erweiterung</text>
|
||||
<line x1="832" y1="613.0" x2="838" y2="613.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
|
||||
<circle cx="840" cy="613.0" r="9" fill="#f7f7f5"/>
|
||||
<rect x="840" y="576" width="112" height="74" rx="9" fill="#f1ecf6" stroke="#8E63B5" stroke-width="2"/>
|
||||
<circle cx="952" cy="613.0" r="8" fill="#8E63B5"/>
|
||||
<circle cx="858" cy="594" r="7" fill="none" stroke="#8E63B5" stroke-width="1.5"/>
|
||||
<text x="896.0" y="606" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">rv_06</text>
|
||||
<text x="896.0" y="628" text-anchor="middle" font-size="10" fill="#333">Ausserbetriebnahme</text>
|
||||
<path d="M 22 373.0 C 4 373.0, 4 493.0, 22 493.0" fill="none" stroke="#d23" stroke-width="2.6" marker-end="url(#ah)" marker-start="url(#ah)"/>
|
||||
<text x="2" y="433.0" font-size="11" fill="#d23" transform="rotate(-90 8 433.0)" text-anchor="middle">Betriebs-Loop</text>
|
||||
<line x1="958" y1="613.0" x2="1022" y2="613.0" stroke="#8E63B5" stroke-width="2.6" marker-end="url(#ah)"/>
|
||||
<text x="1030" y="607.0" font-size="12.5" font-weight="700" fill="#8E63B5">zurueck in DPM</text>
|
||||
<text x="1030" y="625.0" font-size="11" fill="#666">rv_05 Redesign / rv_06 Retirement</text>
|
||||
<rect x="30" y="752" width="26" height="18" rx="4" fill="#E8893B"/>
|
||||
<text x="64" y="766" font-size="12.5" fill="#333">Gate-Tile (Tor mit Rollen-Steckplaetzen)</text>
|
||||
<rect x="360" y="752" width="26" height="18" rx="4" fill="#e6eff8" stroke="#2F80C9" stroke-width="2"/>
|
||||
<text x="394" y="766" font-size="12.5" fill="#333">Aktivitaets-Tile (mit Verankerung fuer einseitiges Plaettchen)</text>
|
||||
<text x="30" y="788" font-size="12.5" fill="#555">Breiteste Phase: 12 Tiles ~ 134 cm (bei 100 mm Tiles + 12 mm Verbinder). Bahn bei Platzmangel maeandrierend faltbar.</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 26 KiB |
202
01_3D-Druck/gen_board_layout.py
Normal file
202
01_3D-Druck/gen_board_layout.py
Normal file
|
|
@ -0,0 +1,202 @@
|
|||
#!/usr/bin/env python3
|
||||
"""Generiert die Board-Layout-Skizze (SVG) fuer den SLC-Workshop.
|
||||
Lineares Phasen-Swimlane-Layout: jede Phase eine Zeile, Tiles links->rechts.
|
||||
Exakt 40 Tiles (37 Aktivitaeten + 3 Gates). Reproduzierbar: bei Aenderungen
|
||||
einfach erneut ausfuehren -> board-layout.svg.
|
||||
"""
|
||||
|
||||
# (id, kurzname, is_gate)
|
||||
PHASES = [
|
||||
("DESIGN", "#2F80C9", [
|
||||
("ds_01", "Eigenschaften definieren", False),
|
||||
("ds_02", "Komponenten designen", False),
|
||||
("ds_03", "Vorgehen beschreiben", False),
|
||||
("ds_04", "Implementierung vorbereiten", False),
|
||||
]),
|
||||
("TRANSITION", "#E8893B", [
|
||||
("tr_01", "Entw. / Konfig.?", True),
|
||||
("tr_02", "Entwicklung koordinieren", False),
|
||||
("tr_03", "Anwendungen entwickeln", False),
|
||||
("tr_04", "Komponenten annehmen", False),
|
||||
("tr_05", "Komponenten konfigurieren", False),
|
||||
("tr_06", "Betriebsdoku erstellen", False),
|
||||
("tr_07", "Komponenten testen", False),
|
||||
("tr_08", "Formale Uebergabe", False),
|
||||
("tr_09", "Entry-Pruefung", True),
|
||||
("tr_10", "Ausrollen", False),
|
||||
("tr_11", "Aktivierung vorbereiten", False),
|
||||
("tr_12", "Go-Live-Freigabe", True),
|
||||
]),
|
||||
("OPERATION", "#5BAE5B", [
|
||||
("op_01", "Early Life Support", False),
|
||||
("op_02", "Betriebs-Leitlinien", False),
|
||||
("op_03", "Laufender Betrieb", False),
|
||||
("op_04", "Ressourcen & Budget", False),
|
||||
("op_05", "Services ueberwachen", False),
|
||||
("op_06", "Qualitaetsbericht", False),
|
||||
("op_07", "Proaktive Problemerkennung", False),
|
||||
]),
|
||||
("SUPPORT", "#3FB5B5", [
|
||||
("sp_01", "Support-Leitlinien", False),
|
||||
("sp_02", "Wissensdatenbank", False),
|
||||
("sp_03", "Incidents/Requests verteilen", False),
|
||||
("sp_04", "Requests bearbeiten", False),
|
||||
("sp_05", "Incident 1st Level", False),
|
||||
("sp_06", "Incident 2nd Level", False),
|
||||
("sp_07", "Record geloest", False),
|
||||
("sp_08", "Schliessen", False),
|
||||
("sp_09", "Problem Record anlegen", False),
|
||||
("sp_10", "Wiederk. Incidents -> Problem", False),
|
||||
("sp_11", "RCA & Workaround", False),
|
||||
]),
|
||||
("REVIEW", "#8E63B5", [
|
||||
("rv_01", "Taktische RCA + KPIs", False),
|
||||
("rv_02", "Performance & Improvement", False),
|
||||
("rv_03", "SOR Periodischer Review", False),
|
||||
("rv_04", "Service Improvement", False),
|
||||
("rv_05", "Redesign / Erweiterung", False),
|
||||
("rv_06", "Ausserbetriebnahme", False),
|
||||
]),
|
||||
]
|
||||
|
||||
# Layout-Parameter
|
||||
TILE_W, TILE_H = 112, 74
|
||||
GAP_X, GAP_Y = 16, 46
|
||||
LABEL_W = 150
|
||||
X0 = 30 + LABEL_W + 20
|
||||
Y0 = 96
|
||||
MAX_TILES = max(len(t) for _, _, t in PHASES)
|
||||
WIDTH = X0 + MAX_TILES * (TILE_W + GAP_X) + 200
|
||||
HEIGHT = Y0 + len(PHASES) * (TILE_H + GAP_Y) + 120
|
||||
TILE_MM = 100 # ein Tile = 100x100 mm
|
||||
|
||||
|
||||
def esc(s):
|
||||
return s.replace("&", "&").replace("<", "<").replace(">", ">")
|
||||
|
||||
|
||||
def lighten(hexcol, f=0.85):
|
||||
h = hexcol.lstrip("#")
|
||||
r, g, b = int(h[0:2], 16), int(h[2:4], 16), int(h[4:6], 16)
|
||||
r = int(r + (255 - r) * f)
|
||||
g = int(g + (255 - g) * f)
|
||||
b = int(b + (255 - b) * f)
|
||||
return f"#{r:02x}{g:02x}{b:02x}"
|
||||
|
||||
|
||||
def tile_svg(x, y, tid, name, color, is_gate):
|
||||
fill = color if is_gate else lighten(color, 0.88)
|
||||
stroke = color
|
||||
sw = 3 if is_gate else 2
|
||||
txtcol = "#ffffff" if is_gate else "#1a1a1a"
|
||||
parts = []
|
||||
# Puzzle-Notch links (Hintergrundfarbe), Bump rechts (Randfarbe)
|
||||
parts.append(f'<circle cx="{x}" cy="{y+TILE_H/2}" r="9" fill="#f7f7f5"/>')
|
||||
parts.append(f'<rect x="{x}" y="{y}" width="{TILE_W}" height="{TILE_H}" rx="9" '
|
||||
f'fill="{fill}" stroke="{stroke}" stroke-width="{sw}"/>')
|
||||
parts.append(f'<circle cx="{x+TILE_W}" cy="{y+TILE_H/2}" r="8" fill="{stroke}"/>')
|
||||
if is_gate:
|
||||
# kleiner Torbogen + GATE-Label
|
||||
ax, ay = x + TILE_W/2, y + 14
|
||||
parts.append(f'<path d="M {ax-12} {ay+18} V {ay+4} A 12 12 0 0 1 {ax+12} {ay+4} '
|
||||
f'V {ay+18}" fill="none" stroke="#ffffff" stroke-width="3"/>')
|
||||
parts.append(f'<text x="{x+TILE_W/2}" y="{y+TILE_H-22}" text-anchor="middle" '
|
||||
f'font-size="14" font-weight="700" fill="{txtcol}">{esc(tid)}</text>')
|
||||
parts.append(f'<text x="{x+TILE_W/2}" y="{y+TILE_H-7}" text-anchor="middle" '
|
||||
f'font-size="10.5" fill="{txtcol}">{esc(name)}</text>')
|
||||
else:
|
||||
parts.append(f'<circle cx="{x+18}" cy="{y+18}" r="7" fill="none" '
|
||||
f'stroke="{stroke}" stroke-width="1.5"/>') # Verankerung
|
||||
parts.append(f'<text x="{x+TILE_W/2}" y="{y+30}" text-anchor="middle" '
|
||||
f'font-size="15" font-weight="700" fill="{txtcol}">{esc(tid)}</text>')
|
||||
parts.append(f'<text x="{x+TILE_W/2}" y="{y+52}" text-anchor="middle" '
|
||||
f'font-size="10" fill="#333">{esc(name)}</text>')
|
||||
return "\n".join(parts)
|
||||
|
||||
|
||||
def arrow(x1, y1, x2, y2, color="#666", w=2.2):
|
||||
return (f'<line x1="{x1}" y1="{y1}" x2="{x2}" y2="{y2}" stroke="{color}" '
|
||||
f'stroke-width="{w}" marker-end="url(#ah)"/>')
|
||||
|
||||
|
||||
svg = []
|
||||
svg.append(f'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 {WIDTH} {HEIGHT}" '
|
||||
f'font-family="Arial, Helvetica, sans-serif">')
|
||||
svg.append(f'<rect x="0" y="0" width="{WIDTH}" height="{HEIGHT}" fill="#f7f7f5"/>')
|
||||
svg.append('<defs><marker id="ah" markerWidth="9" markerHeight="9" refX="7" refY="3" '
|
||||
'orient="auto" markerUnits="strokeWidth">'
|
||||
'<path d="M0,0 L7,3 L0,6 Z" fill="#666"/></marker></defs>')
|
||||
# Titel
|
||||
svg.append(f'<text x="30" y="44" font-size="26" font-weight="800" fill="#1a1a1a">'
|
||||
f'Service-Lifecycle — Board-Layout (40 Tiles)</text>')
|
||||
svg.append(f'<text x="30" y="68" font-size="14" fill="#555">'
|
||||
f'37 Aktivitaeten + 3 Gates · 1 Tile = {TILE_MM}x{TILE_MM} mm · '
|
||||
f'lineare Bahn, Sequenz links nach rechts</text>')
|
||||
|
||||
row_y = {}
|
||||
for ri, (pname, color, tiles) in enumerate(PHASES):
|
||||
y = Y0 + ri * (TILE_H + GAP_Y)
|
||||
row_y[pname] = y
|
||||
# Phasen-Label
|
||||
svg.append(f'<rect x="30" y="{y}" width="{LABEL_W}" height="{TILE_H}" rx="9" '
|
||||
f'fill="{color}"/>')
|
||||
svg.append(f'<text x="{30+LABEL_W/2}" y="{y+TILE_H/2-2}" text-anchor="middle" '
|
||||
f'font-size="17" font-weight="800" fill="#fff">{esc(pname)}</text>')
|
||||
svg.append(f'<text x="{30+LABEL_W/2}" y="{y+TILE_H/2+18}" text-anchor="middle" '
|
||||
f'font-size="12" fill="#fff">{len(tiles)} Tiles</text>')
|
||||
# Tiles
|
||||
prev = None
|
||||
for ti, (tid, name, is_gate) in enumerate(tiles):
|
||||
x = X0 + ti * (TILE_W + GAP_X)
|
||||
if prev is not None:
|
||||
svg.append(arrow(prev + 8, y + TILE_H/2, x - 2, y + TILE_H/2))
|
||||
svg.append(tile_svg(x, y, tid, name, color, is_gate))
|
||||
prev = x + TILE_W
|
||||
# Connector zur naechsten Phase (von letztem Tile runter zur naechsten Zeile Start)
|
||||
if ri < len(PHASES) - 1:
|
||||
lastx = X0 + (len(tiles) - 1) * (TILE_W + GAP_X) + TILE_W/2
|
||||
ny = y + TILE_H + GAP_Y
|
||||
svg.append(f'<path d="M {lastx} {y+TILE_H} V {y+TILE_H+GAP_Y/2} '
|
||||
f'H {X0+TILE_W/2} V {ny-2}" fill="none" stroke="#999" '
|
||||
f'stroke-width="2.2" stroke-dasharray="5 4" marker-end="url(#ah)"/>')
|
||||
|
||||
# Operation <-> Support Loop (links neben den Labels)
|
||||
oy = row_y["OPERATION"] + TILE_H/2
|
||||
sy = row_y["SUPPORT"] + TILE_H/2
|
||||
svg.append(f'<path d="M 22 {oy} C 4 {oy}, 4 {sy}, 22 {sy}" fill="none" '
|
||||
f'stroke="#d23" stroke-width="2.6" marker-end="url(#ah)" marker-start="url(#ah)"/>')
|
||||
svg.append(f'<text x="2" y="{(oy+sy)/2}" font-size="11" fill="#d23" '
|
||||
f'transform="rotate(-90 8 {(oy+sy)/2})" text-anchor="middle">Betriebs-Loop</text>')
|
||||
|
||||
# Exit nach Review (DPM-Ruecklauf)
|
||||
ry = row_y["REVIEW"] + TILE_H/2
|
||||
rx = X0 + (len(PHASES[-1][2]) - 1) * (TILE_W + GAP_X) + TILE_W
|
||||
svg.append(arrow(rx + 6, ry, rx + 70, ry, color="#8E63B5", w=2.6))
|
||||
svg.append(f'<text x="{rx+78}" y="{ry-6}" font-size="12.5" font-weight="700" '
|
||||
f'fill="#8E63B5">zurueck in DPM</text>')
|
||||
svg.append(f'<text x="{rx+78}" y="{ry+12}" font-size="11" fill="#666">'
|
||||
f'rv_05 Redesign / rv_06 Retirement</text>')
|
||||
|
||||
# Legende / Massstab
|
||||
ly = HEIGHT - 64
|
||||
svg.append(f'<rect x="30" y="{ly}" width="26" height="18" rx="4" fill="#E8893B"/>')
|
||||
svg.append(f'<text x="64" y="{ly+14}" font-size="12.5" fill="#333">Gate-Tile (Tor mit Rollen-Steckplaetzen)</text>')
|
||||
svg.append(f'<rect x="360" y="{ly}" width="26" height="18" rx="4" fill="{lighten("#2F80C9",0.88)}" stroke="#2F80C9" stroke-width="2"/>')
|
||||
svg.append(f'<text x="394" y="{ly+14}" font-size="12.5" fill="#333">Aktivitaets-Tile (mit Verankerung fuer einseitiges Plaettchen)</text>')
|
||||
|
||||
# Gesamtbreite-Hinweis
|
||||
total_mm = MAX_TILES * (TILE_MM + 12)
|
||||
svg.append(f'<text x="30" y="{HEIGHT-28}" font-size="12.5" fill="#555">'
|
||||
f'Breiteste Phase: {MAX_TILES} Tiles ~ {total_mm/10:.0f} cm '
|
||||
f'(bei {TILE_MM} mm Tiles + 12 mm Verbinder). Bahn bei Platzmangel maeandrierend faltbar.</text>')
|
||||
|
||||
svg.append('</svg>')
|
||||
|
||||
out = "board-layout.svg"
|
||||
with open(out, "w", encoding="utf-8") as f:
|
||||
f.write("\n".join(svg))
|
||||
|
||||
total = sum(len(t) for _, _, t in PHASES)
|
||||
gates = sum(1 for _, _, t in PHASES for _, _, g in t if g)
|
||||
print(f"geschrieben: {out}")
|
||||
print(f"Tiles gesamt: {total} (Aktivitaeten: {total-gates}, Gates: {gates})")
|
||||
131
01_3D-Druck/materialliste.md
Normal file
131
01_3D-Druck/materialliste.md
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
# Materialliste — zu druckende Elemente
|
||||
|
||||
Stand: 2026-05-27 · Maße in mm · Mengen für **ein** Workshop-Set.
|
||||
|
||||
## Standard-Schnittstelle (für alle Teile gültig)
|
||||
|
||||
- **Verankerung (Sockel):** zylindrische Vertiefung **Ø 50 mm, Tiefe 4 mm**, mit
|
||||
0,4 mm Spielpassung. Sowohl Aktivitätsplättchen als auch der Action-Stein-Fuß
|
||||
passen hinein.
|
||||
- **Tile-Steckverbindung:** Puzzle-Tab **12 mm breit, 6 mm tief**, mittig je Kante.
|
||||
- **Figuren-Steckplatz:** Pin-Loch **Ø 4,2 mm, Tiefe 4 mm** (für Figuren-Pin Ø 4,0 mm).
|
||||
Einheitlich am **Aktiv-Feld** und an den **Gate-Toren** — jede Figur passt überall.
|
||||
|
||||
---
|
||||
|
||||
## 1. Phasen-Basistiles (lineare Bahn)
|
||||
|
||||
| Merkmal | Wert |
|
||||
|---------|------|
|
||||
| Grundfläche | 100 × 100 × 6 mm |
|
||||
| Verankerung | zentriert, Ø 50 × 4 mm |
|
||||
| Kanten | Puzzle-Tabs (Tab/Slot abwechselnd) |
|
||||
| Farbe | je Phase (blau/orange/grün/teal/lila) |
|
||||
| Menge | **40** (eine je Lifecycle-ID: 37 Aktivitäten + 3 Gate-Positionen) |
|
||||
| Material | PLA, Infill 15 % |
|
||||
| Druckzeit | ~1,5 h/Tile |
|
||||
|
||||
> Tiles bleiben bewusst **clean** (nur Verankerung + Tabs). Die Rollen-Platzierung
|
||||
> übernimmt das mobile **Aktiv-Feld** (Abschnitt 4a), das neben dem Action-Stein steht.
|
||||
|
||||
Alle Tiles sind **gerade** und werden zu einer **linearen Bahn** aneinandergereiht
|
||||
(kein Ring). Bei Platzmangel kann die Bahn mäandrierend (Zeilenumbruch) gelegt
|
||||
werden — die Puzzle-Tabs erlauben auch 90°-Ecken.
|
||||
|
||||
## 2. Aktivitätsplättchen (einseitig)
|
||||
|
||||
| Merkmal | Wert |
|
||||
|---------|------|
|
||||
| Form | Rundscheibe Ø 49 × 4 mm (passt in Verankerung) |
|
||||
| Gravur | **einseitig: ID + Kurzbezeichnung** (z. B. `op_05 — Überwachen der Services`). Rückseite leer/Phasenfarbe — Erklärung liegt in der App |
|
||||
| Griff | umlaufende Fase 1 mm zum leichten Herausnehmen |
|
||||
| Menge | **37** (eine je Aktivität; an den 3 Gate-Positionen steht stattdessen ein Gate-Tor) |
|
||||
| Material | PLA, je Phase eingefärbt (matcht Tile) |
|
||||
|
||||
> Plättchen bleibt entnehmbar: beim Bearbeiten herausnehmen und den Action-Stein
|
||||
> in die Verankerung stellen („wir sind hier"). Die ausführliche Auflösung kommt
|
||||
> über die Companion-App, nicht über eine Rückseiten-Gravur.
|
||||
> Bei zu kleiner Schrift für Gravur: glatte Scheibe drucken + bedrucktes Label aufkleben.
|
||||
|
||||
## 3. Action-Stein (Szenario-Träger)
|
||||
|
||||
| Merkmal | Wert |
|
||||
|---------|------|
|
||||
| Fuß | Ø 49 × 5 mm (sitzt in Verankerung) |
|
||||
| Körper | Zylinder Ø 35, Höhe 30 mm |
|
||||
| Kartenschlitz | Breite 74 mm, Tiefe 4 mm, Höhe 25 mm (für Karte 70 mm breit) |
|
||||
| Gewichtseinlage | Aussparung für M8-Mutter im Fuß (Kippschutz) |
|
||||
| Stabilitäts-Option | zusätzlicher Standring Ø 70 mm, falls Karte zu kopflastig |
|
||||
| Menge | **1–2** |
|
||||
| Material | PLA, Infill ≥ 40 % + Metalleinlage |
|
||||
|
||||
## 4. Gate-Tore
|
||||
|
||||
| Merkmal | Wert |
|
||||
|---------|------|
|
||||
| Form | Bogen/Tor, lichte Weite 90 mm, Höhe 100 mm, Materialstärke 8 mm |
|
||||
| Standfüße | 2 × Grundplatte 30 × 60 mm, überspannt 2 Tiles |
|
||||
| Rollen-Steckplätze | Lochreihe **Ø 4,2 mm** an der Basis (für Figuren-Pin), 4 Plätze, Pitch 8 mm |
|
||||
| Kartenschlitz | oben quer, Breite 65 mm, Tiefe 3 mm (Gate-Beschreibungskarte) |
|
||||
| Gravur | „Gate 1/2/3" + Gate-Keeper |
|
||||
| Menge | **3** |
|
||||
| Material | PLA, Infill 20 % |
|
||||
|
||||
## 4a. Aktiv-Feld (RACI-Stecklochleiste)
|
||||
|
||||
Mobile Leiste, die **neben dem Action-Stein** steht und mit ihm weiterwandert.
|
||||
Hier werden die je Aktivität beteiligten Rollen-Figuren nach **RACI** gesteckt —
|
||||
RACI wird so **pro Schritt** sichtbar, ohne die Tiles zu verändern.
|
||||
|
||||
| Merkmal | Wert |
|
||||
|---------|------|
|
||||
| Grundkörper | ~86 × 26 × 6 mm (Länge ergibt sich aus den Zonen), Ecken r3 |
|
||||
| Zonen | **R** (2 Plätze) · **A** (1 Platz) · **C** (3 Plätze) · **I** (3 Plätze) |
|
||||
| Steckplätze | Ø 4,2 mm, Tiefe 4 mm, Pitch 8 mm (für Figuren-Pin Ø 4,0) |
|
||||
| Gravur | Zonen-Buchstaben R / A / C / I vorne, Tiefe 0,8 mm |
|
||||
| Menge | **1** (ggf. 2 bei parallelen Tischen) |
|
||||
| Material | PLA, Infill 20 % |
|
||||
|
||||
> **A = genau 1 Platz** — bildet ab, dass je Aktivität genau eine Rolle
|
||||
> *Accountable* ist (RACI-Regel aus `spm_rollen.yaml`). Nicht jeder Platz muss
|
||||
> belegt sein; die Leiste ist großzügig ausgelegt.
|
||||
> Optional: Rastnase, damit die Leiste an den Action-Stein-Fuß andockt.
|
||||
|
||||
## 5. Rollen-Figuren
|
||||
|
||||
| Merkmal | Wert |
|
||||
|---------|------|
|
||||
| Form | Schlanker Pöppel, Höhe ~22 mm, **Standfuß-Pin Ø 4,0 mm × 4 mm** (passt in Aktiv-Feld & Gate-Loch Ø 4,2) |
|
||||
| Standfläche | schmal (~8 mm), damit mehrere Figuren in einer Zonen-Reihe nebeneinander stehen |
|
||||
| Codierung | Farbe + Formvariante je Rollenkategorie |
|
||||
| Menge | siehe `../02_Spielfiguren/` (Governance, Management, Teams) |
|
||||
| Material | PLA, eingefärbt |
|
||||
|
||||
## 6. Entscheidungs-Chips (optional 3D statt Karte)
|
||||
|
||||
| Merkmal | Wert |
|
||||
|---------|------|
|
||||
| Form | Münze Ø 30 × 4 mm, Symbolgravur |
|
||||
| Varianten | Go / Go mit Auflagen / Zurück / Ablehnung |
|
||||
| Menge | je 3 |
|
||||
| Material | PLA |
|
||||
|
||||
---
|
||||
|
||||
## Stückliste (Kurzfassung)
|
||||
|
||||
| Teil | Menge | Datei |
|
||||
|------|------:|-------|
|
||||
| Phasen-Basistile | 40 | `openscad/aktivitaets-tile.scad` |
|
||||
| Aktivitätsplättchen | 37 | `openscad/aktivitaets-plaque.scad` |
|
||||
| Action-Stein | 2 | `openscad/action-stein.scad` |
|
||||
| Aktiv-Feld (RACI-Leiste) | 1 | `openscad/aktiv-feld.scad` |
|
||||
| Gate-Tor | 3 | `openscad/gate-tor.scad` |
|
||||
| Rollen-Figuren | ~20 | (Standard-Meeple-Modell + Einfärbung) |
|
||||
| Entscheidungs-Chips | 12 | (einfache Münze + Gravur) |
|
||||
|
||||
## Hinweise für den Producer
|
||||
|
||||
- Toleranzen Sockel/Plättchen an **einem Probedruck** kalibrieren (Drucker-spezifisch).
|
||||
- Gravurtiefe 0,6–1,0 mm; bei sehr kleiner Schrift Label-Variante wählen.
|
||||
- Farbtrennung über Filamentwechsel je Phase, nicht über Lackierung (abriebfest).
|
||||
33
01_3D-Druck/openscad/README_openscad.md
Normal file
33
01_3D-Druck/openscad/README_openscad.md
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
# OpenSCAD-Modelle
|
||||
|
||||
Parametrische Quellmodelle der Schlüsselteile. In [OpenSCAD](https://openscad.org)
|
||||
öffnen, Parameter im Customizer anpassen, mit **F6** rendern und über
|
||||
*Datei → Export → STL* slicebereit exportieren.
|
||||
|
||||
| Datei | Bauteil |
|
||||
|-------|---------|
|
||||
| `aktivitaets-tile.scad` | Phasen-Basistile (100×100, Verankerung Ø50, Puzzle-Tabs) |
|
||||
| `aktivitaets-plaque.scad` | Beidseitiges Aktivitätsplättchen (Ø49) — Text per Variable |
|
||||
| `action-stein.scad` | Szenario-Träger mit Kartenschlitz + M8-Gewichtsaussparung |
|
||||
| `gate-tor.scad` | Gate-Tor mit 4 Rollen-Steckplätzen + Kartenschlitz |
|
||||
|
||||
## Serienfertigung der Plättchen
|
||||
|
||||
`aktivitaets-plaque.scad` enthält den Text als Variablen (`front_id`,
|
||||
`front_name`, `back_text`). Für alle 38 Aktivitäten empfiehlt sich ein kleines
|
||||
Skript, das die Werte aus den `service-lifecycle_*.yaml` liest und je Aktivität
|
||||
ein STL erzeugt (z.B. via OpenSCAD-Kommandozeile `-D` Parameter-Override):
|
||||
|
||||
```bash
|
||||
openscad -o op_05.stl \
|
||||
-D 'front_id="op_05"' \
|
||||
-D 'front_name="Ueberwachen der Services"' \
|
||||
-D 'back_text="..."' \
|
||||
aktivitaets-plaque.scad
|
||||
```
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Gravur-Text bewusst kurz halten; lange Kurzbeschreibungen ggf. auf Label auslagern.
|
||||
- Umlaute in Gravuren je nach Font kritisch — im Zweifel `ae/oe/ue` verwenden (so in den Vorlagen).
|
||||
- Vor Serienstart **ein** Tile + Plättchen + Stein als Passungs-Funktionsmuster drucken.
|
||||
42
01_3D-Druck/openscad/action-stein.scad
Normal file
42
01_3D-Druck/openscad/action-stein.scad
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
// Action-Stein: Szenario-Traeger mit aufrechtem Kartenschlitz
|
||||
// SLC-Workshop Tabletop · Einheiten: mm
|
||||
|
||||
/* [Fuss] */
|
||||
foot_d = 49; // sitzt in Verankerung (Ø50)
|
||||
foot_h = 5;
|
||||
stand_ring = 70; // optionaler Standring fuer Kippstabilitaet
|
||||
use_ring = true;
|
||||
|
||||
/* [Koerper] */
|
||||
body_d = 35;
|
||||
body_h = 30;
|
||||
|
||||
/* [Kartenschlitz] */
|
||||
card_w = 74; // fuer Karte 70 mm breit
|
||||
card_t = 4; // Schlitzdicke
|
||||
card_h = 25; // Einstecktiefe
|
||||
|
||||
/* [Gewichtseinlage M8] */
|
||||
nut_af = 13; // Schluesselweite M8-Mutter
|
||||
nut_h = 6.5;
|
||||
$fn = 96;
|
||||
|
||||
module base() {
|
||||
if (use_ring)
|
||||
cylinder(d = stand_ring, h = 2);
|
||||
translate([0,0,0]) cylinder(d = foot_d, h = foot_h);
|
||||
}
|
||||
|
||||
module body() {
|
||||
translate([0,0,foot_h]) cylinder(d = body_d, h = body_h);
|
||||
}
|
||||
|
||||
difference() {
|
||||
union() { base(); body(); }
|
||||
// Kartenschlitz (zentriert in X, durch den Koerperkopf)
|
||||
translate([-card_w/2, -card_t/2, foot_h + body_h - card_h])
|
||||
cube([card_w, card_t, card_h + 1]);
|
||||
// Gewichtsaussparung im Fuss (Sechskant fuer M8-Mutter)
|
||||
translate([0, 0, -0.1])
|
||||
cylinder(d = nut_af / cos(30), h = nut_h, $fn = 6);
|
||||
}
|
||||
77
01_3D-Druck/openscad/aktiv-feld.scad
Normal file
77
01_3D-Druck/openscad/aktiv-feld.scad
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
// Aktiv-Feld — RACI-Stecklochleiste
|
||||
// SLC-Workshop Tabletop · Einheiten: mm
|
||||
// Steht NEBEN dem Action-Stein. Bei jeder Aktivitaet werden die beteiligten
|
||||
// Rollen-Figuren nach RACI in die passende Zone gesteckt:
|
||||
// R = Responsible · A = Accountable (genau 1) · C = Consulted · I = Informed
|
||||
// Anpassen und mit OpenSCAD nach STL exportieren (F6 -> Export).
|
||||
|
||||
/* [Leiste] */
|
||||
strip_w = 26; // Tiefe (zum Spieler)
|
||||
strip_h = 6; // Dicke
|
||||
corner_r = 3;
|
||||
|
||||
/* [Steckplaetze] */
|
||||
pin_hole_d = 4.2; // Loch fuer Figuren-Pin (Pin Oe 4,0 + Spiel)
|
||||
pin_hole_depth = 4;
|
||||
pin_pitch = 8; // Mitte-zu-Mitte innerhalb einer Zone
|
||||
zone_gap = 10; // Luecke zwischen den Zonen
|
||||
end_margin = 8; // Rand links/rechts
|
||||
socket_y = 5; // Lochreihe nach hinten versetzt (weg von der Beschriftung)
|
||||
|
||||
/* [Beschriftung] */
|
||||
label_size = 7; // Buchstabengroesse
|
||||
label_depth = 0.8; // Gravurtiefe
|
||||
label_y = -8; // Position der Buchstaben (vorne, zum Spieler)
|
||||
|
||||
/* [Zonen] */
|
||||
// [Label, Anzahl Steckplaetze] — A bewusst nur 1 (genau eine Rolle accountable)
|
||||
zones = [ ["R", 2], ["A", 1], ["C", 3], ["I", 3] ];
|
||||
|
||||
$fn = 48;
|
||||
|
||||
// --- Hilfsfunktionen -------------------------------------------------------
|
||||
function zone_span(c) = (c - 1) * pin_pitch;
|
||||
|
||||
function sumspan(i = 0) =
|
||||
i >= len(zones) ? 0 : zone_span(zones[i][1]) + sumspan(i + 1);
|
||||
|
||||
function total_len() =
|
||||
end_margin * 2 + zone_gap * (len(zones) - 1) + sumspan();
|
||||
|
||||
// linker Startversatz der Zone idx (Summe vorheriger Zonen + Luecken)
|
||||
function zone_offset(idx, i = 0, acc = 0) =
|
||||
i >= idx ? acc
|
||||
: zone_offset(idx, i + 1, acc + zone_span(zones[i][1]) + zone_gap);
|
||||
|
||||
// --- Geometrie -------------------------------------------------------------
|
||||
module rounded_rect(l, w, h, r) {
|
||||
linear_extrude(h)
|
||||
offset(r) offset(-r)
|
||||
square([l, w], center = true);
|
||||
}
|
||||
|
||||
module raci_strip() {
|
||||
L = total_len();
|
||||
difference() {
|
||||
rounded_rect(L, strip_w, strip_h, corner_r);
|
||||
|
||||
for (idx = [0 : len(zones) - 1]) {
|
||||
cnt = zones[idx][1];
|
||||
sx = -L/2 + end_margin + zone_offset(idx);
|
||||
|
||||
// Steckplaetze der Zone
|
||||
for (i = [0 : cnt - 1])
|
||||
translate([sx + i * pin_pitch, socket_y, strip_h - pin_hole_depth])
|
||||
cylinder(d = pin_hole_d, h = pin_hole_depth + 0.1);
|
||||
|
||||
// Zonen-Beschriftung (mittig unter den Loechern)
|
||||
cx = sx + zone_span(cnt) / 2;
|
||||
translate([cx, label_y, strip_h - label_depth])
|
||||
linear_extrude(label_depth + 0.1)
|
||||
text(zones[idx][0], size = label_size,
|
||||
halign = "center", valign = "center");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
raci_strip();
|
||||
48
01_3D-Druck/openscad/aktivitaets-plaque.scad
Normal file
48
01_3D-Druck/openscad/aktivitaets-plaque.scad
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
// Beidseitiges Aktivitaetsplaettchen (Rundscheibe fuer Verankerung)
|
||||
// SLC-Workshop Tabletop · Einheiten: mm
|
||||
// Text per Variable setzen; fuer Serie ueber Skript je Aktivitaet generieren.
|
||||
|
||||
/* [Scheibe] */
|
||||
disc_d = 49; // Durchmesser (Verankerung 50 - Passung)
|
||||
disc_h = 4; // Dicke
|
||||
chamfer = 1; // Fase als Griffhilfe
|
||||
|
||||
/* [Gravur] */
|
||||
engrave_depth = 0.8;
|
||||
front_id = "op_05";
|
||||
front_name = "Ueberwachen der Services";
|
||||
back_text = "Laufende Ueberwachung von Verfuegbarkeit, Leistung und Qualitaet des Service.";
|
||||
font = "Liberation Sans:style=Bold";
|
||||
$fn = 96;
|
||||
|
||||
module disc_body() {
|
||||
// Scheibe mit beidseitiger Fase
|
||||
hull() {
|
||||
cylinder(d = disc_d - 2*chamfer, h = 0.01);
|
||||
translate([0,0,chamfer]) cylinder(d = disc_d, h = disc_h - 2*chamfer);
|
||||
translate([0,0,disc_h-0.01]) cylinder(d = disc_d - 2*chamfer, h = 0.01);
|
||||
}
|
||||
}
|
||||
|
||||
module front_engraving() {
|
||||
translate([0, 6, disc_h - engrave_depth])
|
||||
linear_extrude(engrave_depth + 0.1)
|
||||
text(front_id, size=7, halign="center", font=font);
|
||||
translate([0, -6, disc_h - engrave_depth])
|
||||
linear_extrude(engrave_depth + 0.1)
|
||||
text(front_name, size=3.2, halign="center", font=font);
|
||||
}
|
||||
|
||||
module back_engraving() {
|
||||
// gespiegelt, weil Rueckseite
|
||||
mirror([1,0,0])
|
||||
translate([0, 0, -0.1])
|
||||
linear_extrude(engrave_depth + 0.1)
|
||||
text(back_text, size=2.6, halign="center", font=font);
|
||||
}
|
||||
|
||||
difference() {
|
||||
disc_body();
|
||||
front_engraving();
|
||||
back_engraving();
|
||||
}
|
||||
52
01_3D-Druck/openscad/aktivitaets-tile.scad
Normal file
52
01_3D-Druck/openscad/aktivitaets-tile.scad
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
// Phasen-Basistile mit zentraler Verankerung und Puzzle-Tabs
|
||||
// SLC-Workshop Tabletop · Einheiten: mm
|
||||
// Anpassen und mit OpenSCAD nach STL exportieren (F6 -> Export).
|
||||
|
||||
/* [Tile] */
|
||||
tile_size = 100; // Kantenlaenge
|
||||
tile_height = 6; // Dicke
|
||||
corner_r = 3; // Eckenradius
|
||||
|
||||
/* [Verankerung / Sockel] */
|
||||
socket_d = 50; // Durchmesser Vertiefung
|
||||
socket_depth = 4; // Tiefe
|
||||
fit_clear = 0.4; // Spielpassung
|
||||
|
||||
/* [Puzzle-Tabs] */
|
||||
tab_w = 12; // Breite
|
||||
tab_d = 6; // Tiefe (Ueberstand / Aussparung)
|
||||
tab_h = tile_height;
|
||||
$fn = 64;
|
||||
|
||||
module rounded_square(s, r, h) {
|
||||
linear_extrude(h)
|
||||
offset(r) offset(-r)
|
||||
square([s, s], center=true);
|
||||
}
|
||||
|
||||
module tab(positive=true) {
|
||||
// Tab ragt heraus (positive) oder wird ausgespart (negative)
|
||||
d = positive ? tab_d : tab_d + fit_clear;
|
||||
w = positive ? tab_w : tab_w + fit_clear;
|
||||
translate([0, 0, tab_h/2])
|
||||
cube([w, d*2, tab_h], center=true);
|
||||
}
|
||||
|
||||
module tile() {
|
||||
difference() {
|
||||
union() {
|
||||
rounded_square(tile_size, corner_r, tile_height);
|
||||
// Tabs an Nord- und Ost-Kante (positive)
|
||||
translate([0, tile_size/2, 0]) tab(true);
|
||||
translate([ tile_size/2, 0, 0]) rotate([0,0,90]) tab(true);
|
||||
}
|
||||
// Verankerung
|
||||
translate([0, 0, tile_height - socket_depth])
|
||||
cylinder(d = socket_d + fit_clear, h = socket_depth + 0.1);
|
||||
// Slots an Sued- und West-Kante (negative)
|
||||
translate([0, -tile_size/2, 0]) tab(false);
|
||||
translate([-tile_size/2, 0, 0]) rotate([0,0,90]) tab(false);
|
||||
}
|
||||
}
|
||||
|
||||
tile();
|
||||
70
01_3D-Druck/openscad/gate-tor.scad
Normal file
70
01_3D-Druck/openscad/gate-tor.scad
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
// Gate-Tor mit Rollen-Steckplaetzen und Kartenschlitz
|
||||
// SLC-Workshop Tabletop · Einheiten: mm
|
||||
|
||||
/* [Tor] */
|
||||
opening_w = 90; // lichte Weite
|
||||
opening_h = 100; // lichte Hoehe
|
||||
thick = 8; // Materialstaerke (Tiefe)
|
||||
post_w = 12; // Pfostenbreite
|
||||
top_h = 14; // Hoehe des Querbalkens
|
||||
|
||||
/* [Fuesse] */
|
||||
foot_w = 60;
|
||||
foot_d = 30;
|
||||
foot_h = 4;
|
||||
|
||||
/* [Rollen-Steckplaetze] */
|
||||
peg_d = 8.2; // Loch fuer Figuren-Pin (Ø7,5 + Passung)
|
||||
peg_count = 4;
|
||||
peg_depth = 6;
|
||||
|
||||
/* [Kartenschlitz oben] */
|
||||
card_w = 65;
|
||||
card_t = 3;
|
||||
card_depth = 10;
|
||||
$fn = 48;
|
||||
|
||||
total_w = opening_w + 2*post_w;
|
||||
total_h = opening_h + top_h + foot_h;
|
||||
|
||||
module arch() {
|
||||
difference() {
|
||||
// Aussenkontur
|
||||
translate([-total_w/2, 0, 0])
|
||||
cube([total_w, thick, opening_h + top_h]);
|
||||
// Oeffnung
|
||||
translate([-opening_w/2, -0.1, 0])
|
||||
cube([opening_w, thick + 0.2, opening_h]);
|
||||
}
|
||||
}
|
||||
|
||||
module feet() {
|
||||
for (x = [-1, 1])
|
||||
translate([x*(opening_w/2 + post_w/2) - foot_w/2, -(foot_d-thick)/2, 0])
|
||||
cube([foot_w, foot_d, foot_h]);
|
||||
}
|
||||
|
||||
module peg_holes() {
|
||||
// Lochreihe entlang der Vorderkante der Fuesse
|
||||
spacing = (opening_w + post_w) / (peg_count - 1);
|
||||
for (i = [0 : peg_count - 1])
|
||||
translate([-(opening_w + post_w)/2 + i*spacing, foot_d/2 - peg_d, foot_h])
|
||||
rotate([180,0,0])
|
||||
cylinder(d = peg_d, h = peg_depth);
|
||||
}
|
||||
|
||||
module card_slot() {
|
||||
translate([-card_w/2, thick/2 - card_t/2, opening_h + top_h - card_depth])
|
||||
cube([card_w, card_t, card_depth + 0.1]);
|
||||
}
|
||||
|
||||
// Tor inkl. Kartenschlitz
|
||||
difference() {
|
||||
translate([0,0,foot_h]) arch();
|
||||
translate([0,0,foot_h]) card_slot();
|
||||
}
|
||||
// Fuesse inkl. Rollen-Steckplaetze
|
||||
difference() {
|
||||
feet();
|
||||
peg_holes();
|
||||
}
|
||||
125
01_3D-Druck/visual-prompts_3d-producer.md
Normal file
125
01_3D-Druck/visual-prompts_3d-producer.md
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
# Visual-Prompts für den 3D-Druck-Producer
|
||||
|
||||
Diese Prompts erzeugen **Orientierungs-Renderings** (kein Marketing-Bild),
|
||||
die dem Producer Form, Proportion und Steckmechanik der Bauteile zeigen.
|
||||
Empfohlen für Bildmodelle wie Nano Banana / Imagen. Englisch erzielt meist die
|
||||
sauberste Geometrie; Beschriftungen bewusst sparsam halten.
|
||||
|
||||
> **Board-Layout:** linear (durchgehende Bahn), **kein Kreis**.
|
||||
> **Wichtig:** die **einseitigen, entnehmbaren Aktivitätsplättchen** müssen
|
||||
> sichtbar sein — einige liegen flach in der Verankerung (Code-Seite oben),
|
||||
> einige sind herausgenommen und liegen daneben (Rückseite leer), sodass die
|
||||
> **freie Verankerung** erkennbar ist (dort steht dann der Action-Stein).
|
||||
> *(Stand v0.2-Renderings — Erklärung liegt inzwischen in der App, nicht auf der
|
||||
> Rückseite; RACI-Aktiv-Feld + verschlankte Figuren sind hier noch nicht abgebildet.)*
|
||||
|
||||
---
|
||||
|
||||
## Prompt A — Bauteil-Übersicht (Exploded-Style)
|
||||
|
||||
```
|
||||
Clean technical product render, neutral light-grey studio background, exploded
|
||||
view of a set of 3D-printed tabletop game components in matte PLA. Show: a square
|
||||
modular base tile (100x100mm) with puzzle-tab edges and a round centered recess;
|
||||
a round single-sided insert disc that fits the recess (top face with a short
|
||||
engraved code, plain back); a cylindrical game token
|
||||
with a wide weighted base and a vertical card slot on top; a small upright
|
||||
arch-shaped "gate" with peg holes at its base; a meeple figure with a round pin
|
||||
foot. Parts floating slightly apart to show how they connect. Soft shadows,
|
||||
isometric angle, high detail, dimension-focused, minimal text.
|
||||
```
|
||||
|
||||
## Prompt B — Aktivitätsplättchen: einseitig & entnehmbar
|
||||
|
||||
```
|
||||
Close-up technical render of round single-sided game discs in matte colored PLA,
|
||||
each about 49mm diameter and 4mm thick with a chamfered edge for easy gripping.
|
||||
Three discs shown: one sitting flush inside a square tile's round recess (top face
|
||||
showing a short engraved activity code), one lifted out by fingers, and one lying
|
||||
beside the tile with a plain blank back. The empty recess of one tile is clearly
|
||||
visible (this is where the upright action token will stand). Emphasis on the
|
||||
removable fit and the freed socket. Neutral grey background, soft studio light,
|
||||
shallow depth of field, premium board-game component photography.
|
||||
```
|
||||
|
||||
## Prompt C — Action-Stein im Detail
|
||||
|
||||
```
|
||||
Close-up technical render of a single 3D-printed game token, matte white PLA.
|
||||
Cylindrical body on a wide round base, with a vertical slot on top holding an
|
||||
upright rectangular card. The base diameter is clearly wider than the body for
|
||||
stability. The token stands inside a square tile's round recess (the same recess
|
||||
that normally holds an activity disc). Quarter-section cutaway shows a hexagonal
|
||||
cavity in the base for a metal weight. Neutral grey background, soft studio
|
||||
lighting, isometric, emphasis on proportions and the card slot fit, no decorative
|
||||
text.
|
||||
```
|
||||
|
||||
## Prompt D — Gate-Tor mit Rollen-Steckplätzen
|
||||
|
||||
```
|
||||
Technical product render of a small upright arch-shaped game piece in matte PLA,
|
||||
like a doorway about 100mm tall with 90mm clear opening, 8mm thick. Two flat feet
|
||||
at the base spanning two tiles of a straight track. A row of four small round holes
|
||||
along the front base edge for inserting pin-footed figures. A thin horizontal slot
|
||||
across the top of the arch holding a small reference card. A round-pin meeple figure
|
||||
is inserted in one of the base holes. Neutral background, isometric, soft shadows,
|
||||
focus on the peg-hole mechanism, minimal text.
|
||||
```
|
||||
|
||||
## Prompt E — Tile-Steckmechanik (gerade Bahn)
|
||||
|
||||
```
|
||||
Top-down and slight-angle technical render of four square modular game tiles
|
||||
(matte PLA, different solid colors: blue, orange, green, teal) connected via
|
||||
puzzle-tab edges into a STRAIGHT row / track. Each tile has a round recessed socket
|
||||
in its center: two sockets hold flat round single-sided discs (engraved code on
|
||||
top), one socket is empty showing the recess, one holds a small upright arch gate. Clean grey background, soft light, isometric, emphasis on how
|
||||
tiles interlock into a straight line, minimal text.
|
||||
```
|
||||
|
||||
## Prompt F — Komplettaufbau (Referenz für Proportionen)
|
||||
|
||||
```
|
||||
Wide isometric technical render of a fully assembled LINEAR tabletop game on a
|
||||
neutral surface: square color-coded tiles connected into a long straight track
|
||||
left to right through five color zones (blue, orange, green, teal, purple); two of
|
||||
the zones (green and teal) sit side by side with two curved arrows forming a small
|
||||
loop between them; three upright arch gates stand on the track; small meeple figures
|
||||
placed at the gates; round single-sided activity discs sit in the tile sockets with
|
||||
a couple lifted out leaving empty sockets; one cylindrical token with an
|
||||
upright card stands in a socket; at the right end two exit arrows lead off the board.
|
||||
Matte PLA materials, soft studio lighting, clean and diagrammatic,
|
||||
proportion-accurate, minimal text.
|
||||
```
|
||||
|
||||
## Prompt G — Gesamtaufbau, 40 Einzeltiles (Tisch-Optik)
|
||||
|
||||
> Hinweis: Bild-KIs zählen nicht zuverlässig — die exakte Tile-Zahl ist über
|
||||
> [`board-layout.svg`](board-layout.svg) garantiert. Dieser Prompt liefert die
|
||||
> **Optik/Stimmung**, nicht die exakte Anzahl. Raster explizit vorgeben erhöht
|
||||
> die Trefferquote.
|
||||
|
||||
```
|
||||
Isometric high-angle photograph of a complete modular tabletop board on a large
|
||||
wooden meeting table, spanning about 1.2 meters. The board is assembled from many
|
||||
small individual square puzzle tiles interlocking via tab-and-slot edges; each tile
|
||||
is one lifecycle step. Tiles are color-grouped into five phases laid out as fixed
|
||||
grids: DESIGN (blue) 4 tiles, TRANSITION (orange) 12 tiles with three of them marked
|
||||
by a small upright arch gate, OPERATION (green) 7 tiles, SUPPORT (teal) 11 tiles,
|
||||
REVIEW (purple) 6 tiles. Each tile has a round recessed socket holding a flat
|
||||
single-sided disc; a few discs are lifted out leaving empty sockets. Between the green and teal phases two curved arrows form a
|
||||
small loop; two exit arrows leave the purple phase at the right. A cylindrical token
|
||||
with an upright card stands in a socket at the start. A coffee mug and notebook give
|
||||
scale. Soft daylight, matte PLA surfaces, clean modern design, large phase labels
|
||||
only, minimal small text.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Hinweise zum Einsatz
|
||||
|
||||
- Prompts A–D sind **Bauteil-Referenzen** (für Fertigung), Prompt E zeigt die **Steckmechanik**, Prompt F den **Gesamtaufbau** (lineare Bahn).
|
||||
- **Prompt B** zeigt die einseitigen, entnehmbaren Plättchen und die freigelegte Verankerung (dort steht der Action-Stein).
|
||||
- Verbindliche Maße stehen in [`materialliste.md`](materialliste.md) und in den OpenSCAD-Modellen — die Bilder dienen nur der Orientierung, nicht als Maßvorlage.
|
||||
- Bei unsauberer Geometrie: Anzahl beschriebener Teile pro Prompt reduzieren.
|
||||
Loading…
Add table
Add a link
Reference in a new issue