diff --git a/01_3D-Druck/blender/__pycache__/raci-board.cpython-312.pyc b/01_3D-Druck/blender/__pycache__/raci-board.cpython-312.pyc index 58c49ff..4346b4e 100644 Binary files a/01_3D-Druck/blender/__pycache__/raci-board.cpython-312.pyc and b/01_3D-Druck/blender/__pycache__/raci-board.cpython-312.pyc differ diff --git a/01_3D-Druck/blender/raci-board.blend b/01_3D-Druck/blender/raci-board.blend new file mode 100644 index 0000000..72723bb Binary files /dev/null and b/01_3D-Druck/blender/raci-board.blend differ diff --git a/01_3D-Druck/blender/raci-board.py b/01_3D-Druck/blender/raci-board.py index 78d1429..824d2fc 100644 --- a/01_3D-Druck/blender/raci-board.py +++ b/01_3D-Druck/blender/raci-board.py @@ -34,9 +34,15 @@ LET_SIZE, LET_DEP = 11.0, 1.0 WORD_SIZE, WORD_DEP = 5.0, 0.8 TOP = BASE_H -HERE = os.path.dirname(bpy.data.filepath) or os.path.dirname(os.path.abspath(__file__)) +def _outdir(): + d = os.path.dirname(bpy.data.filepath) # gesetzt, wenn .blend gespeichert + if d: return d + try: return os.path.dirname(os.path.abspath(__file__)) + except NameError: return os.path.expanduser("~") # Fallback: Benutzerordner +HERE = _outdir() STL_OUT = os.path.join(HERE, "raci-board.stl") PNG_OUT = os.path.join(HERE, "raci_preview.png") +print("Ausgabe-Ordner:", HERE) # ----------------------------- Helfer ----------------------------- def clear_scene(): @@ -149,27 +155,44 @@ cut_text(base, "INFORMED", DIAL_CX, DIAL_CY-(RING_R+30), 0, WORD_SIZE, WORD_DEP) cut_text(base, "ACCOUNTABLE", DIAL_CX, CARD_CY - CARD_BD/2 - 8, 0, WORD_SIZE, WORD_DEP) base.name = "RACI-Board" -bpy.ops.object.shade_smooth() +# Auto-Smooth: flache Flaechen scharf, gefaste Kanten glatt +try: + bpy.ops.object.shade_auto_smooth(angle=math.radians(30)) # Blender >= 4.1 +except Exception: + try: bpy.ops.object.shade_flat() + except Exception: pass # ----------------------------- Material ----------------------------- mat = bpy.data.materials.new("BoardBlue"); mat.use_nodes = True -bsdf = mat.node_tree.nodes.get("Principled BSDF") +bsdf = next((n for n in mat.node_tree.nodes if n.type == 'BSDF_PRINCIPLED'), None) if bsdf: - bsdf.inputs["Base Color"].default_value = (0.10, 0.16, 0.30, 1) - try: bsdf.inputs["Roughness"].default_value = 0.55 + bsdf.inputs["Base Color"].default_value = (0.09, 0.15, 0.30, 1) # dunkelblau + try: bsdf.inputs["Roughness"].default_value = 0.5 except Exception: pass -base.data.materials.append(mat) +base.data.materials.clear(); base.data.materials.append(mat) # ----------------------------- Vorschau-Render (guarded) ----------------------------- try: - bpy.ops.object.light_add(type='SUN', location=(120, -160, 220)) - bpy.context.object.data.energy = 3.0 - bpy.ops.object.camera_add(location=(150, -190, 210)) - cam = bpy.context.object - cam.rotation_euler = (math.radians(58), 0, math.radians(38)) - bpy.context.scene.camera = cam sc = bpy.context.scene - sc.render.resolution_x, sc.render.resolution_y = 1400, 1000 + # Welt etwas aufhellen + try: + wn = sc.world.node_tree.nodes + bg = next((n for n in wn if n.type == 'BACKGROUND'), None) + if bg: bg.inputs[1].default_value = 1.2 + except Exception: pass + # Licht + bpy.ops.object.light_add(type='SUN', location=(120, -160, 240)) + bpy.context.object.data.energy = 3.5 + bpy.ops.object.light_add(type='AREA', location=(-120, -60, 160)) + bpy.context.object.data.energy = 4000; bpy.context.object.data.size = 200 + # Kamera blickt aufs Board-Zentrum (Track-To), rahmt das ganze Board + bpy.ops.object.empty_add(location=(0, 0, 4)); tgt = bpy.context.object + bpy.ops.object.camera_add(location=(175, -220, 210)); cam = bpy.context.object + cam.data.lens = 52 + con = cam.constraints.new('TRACK_TO'); con.target = tgt + con.track_axis = 'TRACK_NEGATIVE_Z'; con.up_axis = 'UP_Y' + sc.camera = cam + sc.render.resolution_x, sc.render.resolution_y = 1500, 1050 sc.render.filepath = PNG_OUT try: sc.render.engine = 'BLENDER_EEVEE_NEXT' except Exception: diff --git a/01_3D-Druck/blender/raci_preview.png b/01_3D-Druck/blender/raci_preview.png new file mode 100644 index 0000000..5341e51 Binary files /dev/null and b/01_3D-Druck/blender/raci_preview.png differ diff --git a/04_Tablet-Quiz/app/cards/s0-c0.png b/04_Tablet-Quiz/app/cards/s0-c0.png index 96222c1..1323b7b 100644 Binary files a/04_Tablet-Quiz/app/cards/s0-c0.png and b/04_Tablet-Quiz/app/cards/s0-c0.png differ diff --git a/04_Tablet-Quiz/app/cards/s0-c1.png b/04_Tablet-Quiz/app/cards/s0-c1.png index 255d426..acf48c8 100644 Binary files a/04_Tablet-Quiz/app/cards/s0-c1.png and b/04_Tablet-Quiz/app/cards/s0-c1.png differ diff --git a/04_Tablet-Quiz/app/cards/s0-c2.png b/04_Tablet-Quiz/app/cards/s0-c2.png index d7a7587..178c14f 100644 Binary files a/04_Tablet-Quiz/app/cards/s0-c2.png and b/04_Tablet-Quiz/app/cards/s0-c2.png differ diff --git a/04_Tablet-Quiz/app/cards/s0-c3.png b/04_Tablet-Quiz/app/cards/s0-c3.png index 031930c..5b083f4 100644 Binary files a/04_Tablet-Quiz/app/cards/s0-c3.png and b/04_Tablet-Quiz/app/cards/s0-c3.png differ diff --git a/04_Tablet-Quiz/app/cards/s1-c0.png b/04_Tablet-Quiz/app/cards/s1-c0.png index 0aa579e..805b992 100644 Binary files a/04_Tablet-Quiz/app/cards/s1-c0.png and b/04_Tablet-Quiz/app/cards/s1-c0.png differ diff --git a/04_Tablet-Quiz/app/cards/s1-c1.png b/04_Tablet-Quiz/app/cards/s1-c1.png index 692f60c..f1bf064 100644 Binary files a/04_Tablet-Quiz/app/cards/s1-c1.png and b/04_Tablet-Quiz/app/cards/s1-c1.png differ diff --git a/04_Tablet-Quiz/app/cards/s1-c2.png b/04_Tablet-Quiz/app/cards/s1-c2.png index b212aca..686062f 100644 Binary files a/04_Tablet-Quiz/app/cards/s1-c2.png and b/04_Tablet-Quiz/app/cards/s1-c2.png differ diff --git a/04_Tablet-Quiz/app/cards/s1-c3.png b/04_Tablet-Quiz/app/cards/s1-c3.png index a7bfce7..25f787c 100644 Binary files a/04_Tablet-Quiz/app/cards/s1-c3.png and b/04_Tablet-Quiz/app/cards/s1-c3.png differ diff --git a/04_Tablet-Quiz/app/cards/s2-c0.png b/04_Tablet-Quiz/app/cards/s2-c0.png index ff004e9..47fd6fa 100644 Binary files a/04_Tablet-Quiz/app/cards/s2-c0.png and b/04_Tablet-Quiz/app/cards/s2-c0.png differ diff --git a/04_Tablet-Quiz/app/cards/s2-c1.png b/04_Tablet-Quiz/app/cards/s2-c1.png index cc77016..7815cc5 100644 Binary files a/04_Tablet-Quiz/app/cards/s2-c1.png and b/04_Tablet-Quiz/app/cards/s2-c1.png differ diff --git a/04_Tablet-Quiz/app/cards/s2-c2.png b/04_Tablet-Quiz/app/cards/s2-c2.png index 3a7fe04..8b31800 100644 Binary files a/04_Tablet-Quiz/app/cards/s2-c2.png and b/04_Tablet-Quiz/app/cards/s2-c2.png differ diff --git a/04_Tablet-Quiz/app/cards/s2-c3.png b/04_Tablet-Quiz/app/cards/s2-c3.png index c7c44bd..29ea579 100644 Binary files a/04_Tablet-Quiz/app/cards/s2-c3.png and b/04_Tablet-Quiz/app/cards/s2-c3.png differ diff --git a/04_Tablet-Quiz/app/cards/s3-c0.png b/04_Tablet-Quiz/app/cards/s3-c0.png index ef74d4f..5e5bf03 100644 Binary files a/04_Tablet-Quiz/app/cards/s3-c0.png and b/04_Tablet-Quiz/app/cards/s3-c0.png differ diff --git a/04_Tablet-Quiz/app/cards/s3-c1.png b/04_Tablet-Quiz/app/cards/s3-c1.png index e5c04d3..7de8777 100644 Binary files a/04_Tablet-Quiz/app/cards/s3-c1.png and b/04_Tablet-Quiz/app/cards/s3-c1.png differ diff --git a/04_Tablet-Quiz/app/cards/s3-c2.png b/04_Tablet-Quiz/app/cards/s3-c2.png index 1e92d29..3a8bf58 100644 Binary files a/04_Tablet-Quiz/app/cards/s3-c2.png and b/04_Tablet-Quiz/app/cards/s3-c2.png differ diff --git a/04_Tablet-Quiz/app/cards/s3-c3.png b/04_Tablet-Quiz/app/cards/s3-c3.png index 2b55f60..73599c3 100644 Binary files a/04_Tablet-Quiz/app/cards/s3-c3.png and b/04_Tablet-Quiz/app/cards/s3-c3.png differ diff --git a/04_Tablet-Quiz/app/cards/s4-c0.png b/04_Tablet-Quiz/app/cards/s4-c0.png index e7f9924..3bd61da 100644 Binary files a/04_Tablet-Quiz/app/cards/s4-c0.png and b/04_Tablet-Quiz/app/cards/s4-c0.png differ diff --git a/04_Tablet-Quiz/app/cards/s4-c1.png b/04_Tablet-Quiz/app/cards/s4-c1.png index bde7e0c..ac2a0fb 100644 Binary files a/04_Tablet-Quiz/app/cards/s4-c1.png and b/04_Tablet-Quiz/app/cards/s4-c1.png differ diff --git a/04_Tablet-Quiz/app/cards/s4-c2.png b/04_Tablet-Quiz/app/cards/s4-c2.png index 3d21db2..150401f 100644 Binary files a/04_Tablet-Quiz/app/cards/s4-c2.png and b/04_Tablet-Quiz/app/cards/s4-c2.png differ diff --git a/04_Tablet-Quiz/app/cards/s4-c3.png b/04_Tablet-Quiz/app/cards/s4-c3.png index 5e924cb..22582c4 100644 Binary files a/04_Tablet-Quiz/app/cards/s4-c3.png and b/04_Tablet-Quiz/app/cards/s4-c3.png differ diff --git a/04_Tablet-Quiz/app/cards/s5-c0.png b/04_Tablet-Quiz/app/cards/s5-c0.png index 0535b9e..bcb3a77 100644 Binary files a/04_Tablet-Quiz/app/cards/s5-c0.png and b/04_Tablet-Quiz/app/cards/s5-c0.png differ diff --git a/04_Tablet-Quiz/app/cards/s5-c1.png b/04_Tablet-Quiz/app/cards/s5-c1.png index 1df396b..4904766 100644 Binary files a/04_Tablet-Quiz/app/cards/s5-c1.png and b/04_Tablet-Quiz/app/cards/s5-c1.png differ diff --git a/04_Tablet-Quiz/app/cards/s5-c2.png b/04_Tablet-Quiz/app/cards/s5-c2.png index b7319d8..a4cd916 100644 Binary files a/04_Tablet-Quiz/app/cards/s5-c2.png and b/04_Tablet-Quiz/app/cards/s5-c2.png differ diff --git a/04_Tablet-Quiz/app/cards/s5-c3.png b/04_Tablet-Quiz/app/cards/s5-c3.png index ab3bb6a..d7ab736 100644 Binary files a/04_Tablet-Quiz/app/cards/s5-c3.png and b/04_Tablet-Quiz/app/cards/s5-c3.png differ diff --git a/04_Tablet-Quiz/app/index.html b/04_Tablet-Quiz/app/index.html index 6aa7075..9290082 100644 --- a/04_Tablet-Quiz/app/index.html +++ b/04_Tablet-Quiz/app/index.html @@ -407,7 +407,7 @@ const PHASEN = { support:{label:"Support", color:"var(--support)"}, review:{label:"Review", color:"var(--review)"} }; -/* Action Cards: 6 Services × 5 Change-Typen (aus „Use Cases mit möglichen Changes"). */ +/* Action Cards: 6 Services × 4 Change-Arten (aus „Use Cases mit möglichen Changes"). */ const CHANGE_TYPES = [ "Major Change", "Normal Change", @@ -499,7 +499,7 @@ const USE_CASES = [ desc:"Zentrales Web-Portal, über das Bürger*innen Meldungen (z. B. Straßenreparatur, Lärm) und Anträge (z. B. Baugenehmigung, Personalausweis) digital einreichen und den Status verfolgen.", changes:[ {titel:"Mitreden, Pflicht!", text:"Ein neues Landesgesetz schreibt digitale Bürgerbeteiligung vor — das Portal muss um komplette Beteiligungs-Module erweitert werden."}, - {titel:"Rotstift gefragt", text:"Der Bürgerservice meldet einen Rechtschreibfehler in einem statischen Hinweistext, der korrigiert werden muss."}, + {titel:"Licht an!", text:"Das Amt für öffentliche Ordnung möchte eine neue Mängel-Kategorie „Beleuchtung und Strom“ zu den bestehenden Kategorien hinzufügen."}, {titel:"Patchday", text:"Das monatliche Sicherheits-Patch des Webservers (Apache/Nginx) steht an."}, {titel:"Lücke im Formular!", text:"In einem Eingabe-Formular wird eine kritische XSS-Schwachstelle entdeckt — ein Hotfix muss sofort raus."} ]}, @@ -515,7 +515,7 @@ const USE_CASES = [ desc:"Web-basiertes Karten- und Analyse-Portal, das Fachämtern (Bau, Umwelt, Verkehr) räumliche Daten (Flurstücke, Infrastruktur, Umweltzonen) und bearbeitbare Layer bereitstellt.", changes:[ {titel:"Norm-Zwang", text:"Eine bundesweite Vorgabe zu EU-Standards erzwingt die komplette Migration des GIS-Stacks auf konforme Services und Datenmodelle."}, - {titel:"Falsch beschriftet", text:"Das Bauamt meldet eine falsche Beschriftung eines Karten-Layers, die korrigiert werden muss."}, + {titel:"Grün dazu!", text:"Das Umweltamt möchte im Analyse-Modul „Klimarisiko-Analyse“ eine weitere Datenquelle zu städtischen Grünflächen anbinden."}, {titel:"GeoServer-Update", text:"Das monatliche Update der GIS-Software (GeoServer 2.23 → 2.24) steht an."}, {titel:"Schnittstelle offen!", text:"An einer Schnittstelle wird eine kritische Schwachstelle entdeckt, die unautorisierten Datenzugriff erlaubt — Dienst sofort abschalten und patchen."} ]}, @@ -523,7 +523,7 @@ const USE_CASES = [ desc:"Web-Applikation, über die Fachämter interne Beschaffungen (Material, Dienstleistungen) anlegen, prüfen und Verträge digital verwalten.", changes:[ {titel:"Vergabe neu!", text:"Eine neue EU-Vergaberichtlinie zwingt zur Einführung von E-Invoicing und erweiterten Transparenz-Reports."}, - {titel:"Vierstellig, bitte", text:"Das Finanzamt wünscht eine kleine Anpassung: aus dem Label „Kostenstelle“ wird „Kostenstelle (4-stellig)“."}, + {titel:"Format-Wechsel", text:"Die Verträge der Fachämter liegen wegen aktualisierter Sicherheitsrichtlinien in einem neuen Dateiformat vor — die Schnittstellen der Web-Applikation müssen entsprechend angepasst werden."}, {titel:"Patch-Quartal", text:"Das quartalsweise Sicherheits-Patch des Anwendungsservers steht an."}, {titel:"Upload-Falle!", text:"Im Vertrags-Upload wird eine kritische Lücke entdeckt, über die sich Schadcode hochladen lässt — Endpoint sofort sperren, Hotfix einspielen."} ]} @@ -1119,7 +1119,7 @@ function cardHtml(si, ci){ const c = acard(si, ci); return `