app foldee
This commit is contained in:
+62
-47
@@ -2,35 +2,32 @@
|
||||
"""Folie 3 – LIS mit Umsystemen (Adapter, links/rechts) und andockenden Modulen
|
||||
(unten), unter einer Steuerungs-/Governance-Schicht; weitere LIS angedeutet."""
|
||||
|
||||
import os
|
||||
from pptx import Presentation
|
||||
from pptx.util import Inches, Pt
|
||||
from pptx.dml.color import RGBColor
|
||||
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
|
||||
from pptx.enum.shapes import MSO_SHAPE
|
||||
from adesso_style import (WHITE, INK, BLUE, TEAL, GREEN, CORAL, LIGHT, MUTE, RECF,
|
||||
F, FC, paint_background, chrome)
|
||||
|
||||
INK = RGBColor(0x2A, 0x2F, 0x3A)
|
||||
NAVY = RGBColor(0x1F, 0x3A, 0x5F)
|
||||
ACCENT = RGBColor(0xC0, 0x49, 0x2F)
|
||||
TEAL = RGBColor(0x2F, 0x8F, 0x83)
|
||||
AMBER = RGBColor(0xA9, 0x73, 0x22)
|
||||
MUTE = RGBColor(0x8A, 0x93, 0xA0)
|
||||
LINEC = RGBColor(0xC3, 0xC9, 0xD1)
|
||||
HINT = RGBColor(0xEE, 0xF1, 0xF4)
|
||||
HINTL = RGBColor(0xCB, 0xD2, 0xDA)
|
||||
TINT_T = RGBColor(0xDD, 0xEC, 0xEA)
|
||||
TINT_A = RGBColor(0xF3, 0xE8, 0xD2)
|
||||
UMS = RGBColor(0xEC, 0xEE, 0xF1)
|
||||
BG = RGBColor(0xFF, 0xFF, 0xFF)
|
||||
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
|
||||
F = "Calibri"
|
||||
# Rollen-Mapping auf die adesso-Palette
|
||||
NAVY = INK # dunkle Strukturelemente (Bar, LIS-Kern)
|
||||
ACCENT = CORAL # Adapter-Linien
|
||||
AMBER = GREEN # zweites Modul
|
||||
LINEC = LIGHT # Verbinder / feine Linien
|
||||
HINT = RGBColor(0xE6, 0xEF, 0xF8) # helle "weitere LIS"-Karten
|
||||
HINTL = RGBColor(0xC4, 0xD6, 0xE8)
|
||||
TINT_T = WHITE # Modul-Boxen weiß
|
||||
TINT_A = WHITE
|
||||
UMS = WHITE # Umsystem-Boxen weiß
|
||||
BG = WHITE
|
||||
|
||||
prs = Presentation()
|
||||
prs.slide_width = Inches(13.333)
|
||||
prs.slide_height = Inches(7.5)
|
||||
s = prs.slides.add_slide(prs.slide_layouts[6])
|
||||
bgr = s.shapes.add_shape(MSO_SHAPE.RECTANGLE, 0, 0, prs.slide_width, prs.slide_height)
|
||||
bgr.fill.solid(); bgr.fill.fore_color.rgb = BG; bgr.line.fill.background()
|
||||
bgr.shadow.inherit = False
|
||||
paint_background(s, prs.slide_width, prs.slide_height)
|
||||
|
||||
|
||||
def shp(kind, x, y, w, h, fill=None, line=None, lw=Pt(1), rot=0):
|
||||
@@ -75,11 +72,7 @@ def vline(x, y, h, color=LINEC, weight=Pt(1.4)):
|
||||
|
||||
|
||||
# ---- Kopf ------------------------------------------------------------------
|
||||
txt(Inches(0.95), Inches(0.32), Inches(8), Inches(0.35), "ARCHITEKTUR",
|
||||
size=12.5, color=ACCENT, bold=True, spc=240)
|
||||
txt(Inches(0.95), Inches(0.62), Inches(11), Inches(0.85), "Offen – und gesteuert",
|
||||
size=31, color=NAVY, bold=True)
|
||||
shp(MSO_SHAPE.RECTANGLE, Inches(0.95), Inches(1.34), Inches(0.6), Pt(4), fill=ACCENT)
|
||||
chrome(s, "Offen – und gesteuert", 3)
|
||||
|
||||
x0, x1 = Inches(0.95), Inches(12.38)
|
||||
|
||||
@@ -144,6 +137,14 @@ core_y, core_h = Inches(4.3), Inches(1.2)
|
||||
core_cx = core_x + core_w / 2
|
||||
core_by = core_y + core_h
|
||||
|
||||
# Adapter-Schicht: echte Schicht als Hülle um den Kern (Trennung)
|
||||
lay_pad_x, lay_pad_t = Inches(0.24), Inches(0.30)
|
||||
lay_x = core_x - lay_pad_x
|
||||
lay_w = core_w + lay_pad_x * 2
|
||||
lay_y = core_y - lay_pad_t
|
||||
lay_h = core_h + lay_pad_t
|
||||
lay_right = lay_x + lay_w
|
||||
|
||||
|
||||
def adapter(xc, yc):
|
||||
shp(MSO_SHAPE.ROUNDED_RECTANGLE, xc - Inches(0.10), yc - Inches(0.11),
|
||||
@@ -185,8 +186,12 @@ def icon_dfu(ix, iy): # DFÜ
|
||||
fill=ACCENT)
|
||||
|
||||
|
||||
# Governance -> LIS
|
||||
vline(core_cx, gov_y + Inches(0.07), core_y - (gov_y + Inches(0.07)), color=LINEC, weight=Pt(1))
|
||||
g = Inches(0.10) # Abstand Adapter-Linie <-> LIS
|
||||
th = Inches(0.08) # Dicke der roten Adapter-Linie
|
||||
|
||||
# Governance -> obere Adapter-Linie am Kern
|
||||
vline(core_cx, gov_y + Inches(0.07), (core_y - g - th) - (gov_y + Inches(0.07)),
|
||||
color=LINEC, weight=Pt(1))
|
||||
|
||||
uw, uh = Inches(1.55), Inches(0.6)
|
||||
|
||||
@@ -198,37 +203,50 @@ def ums_box(bx, yc, name, icon_fn):
|
||||
size=12, color=INK, align=PP_ALIGN.LEFT)
|
||||
|
||||
|
||||
# Umsysteme links
|
||||
# Umsysteme links -> Adapter-Schichten am linken Kernrand
|
||||
lx = Inches(0.8)
|
||||
ums_box(lx, Inches(4.6), "Anlieferung", icon_truck)
|
||||
ums_box(lx, Inches(5.2), "DFÜ", icon_dfu)
|
||||
for yc in (Inches(4.6), Inches(5.2)):
|
||||
hline(lx + uw, yc, core_x - (lx + uw))
|
||||
adapter(core_x - Inches(0.16), yc)
|
||||
hline(lx + uw, yc, (core_x - g - th) - (lx + uw))
|
||||
|
||||
# Umsystem rechts
|
||||
# Umsystem rechts -> Adapter-Linie am rechten Kernrand
|
||||
gx = Inches(6.65)
|
||||
ums_box(gx, Inches(4.9), "Geräte", icon_device)
|
||||
hline(core_x + core_w, Inches(4.9), gx - (core_x + core_w))
|
||||
adapter(core_x + core_w + Inches(0.16), Inches(4.9))
|
||||
hline(core_x + core_w + g + th, Inches(4.9), gx - (core_x + core_w + g + th))
|
||||
|
||||
# LIS (kompakt, solide)
|
||||
# ---- LIS-Kern -------------------------------------------------------------
|
||||
shp(MSO_SHAPE.ROUNDED_RECTANGLE, core_x, core_y, core_w, core_h, fill=NAVY)
|
||||
sh = shp(MSO_SHAPE.ROUNDED_RECTANGLE, core_x, core_y, core_w, core_h, fill=NAVY)
|
||||
boxtext(sh, "LIS", size=22, color=WHITE, bold=True)
|
||||
|
||||
# Module unten (andockend)
|
||||
|
||||
# ---- 5 Adapter-Linien – je Schnittstelle eine, mit Abstand zum Kern -------
|
||||
def rbar_v(outer_x, yc, h=Inches(0.55)): # vertikal, linker/rechter Rand
|
||||
shp(MSO_SHAPE.RECTANGLE, outer_x, yc - h / 2, th, h, fill=ACCENT)
|
||||
|
||||
|
||||
def rbar_h(xc, outer_y, w): # horizontal, oben/unten
|
||||
shp(MSO_SHAPE.RECTANGLE, xc - w / 2, outer_y, w, th, fill=ACCENT)
|
||||
|
||||
|
||||
rbar_v(core_x - g - th, Inches(4.6)) # 1) Anlieferung
|
||||
rbar_v(core_x - g - th, Inches(5.2)) # 2) DFÜ
|
||||
rbar_h(core_cx, core_y - g - th, Inches(1.15)) # 3) nach oben (Steuerung)
|
||||
rbar_v(core_x + core_w + g, Inches(4.9)) # 4) Geräte
|
||||
rbar_h(core_cx, core_by + g, core_w - Inches(0.2)) # 5) Fachliche Verarbeitung
|
||||
|
||||
# Fachliche Verarbeitung (unten): Module an der unteren Adapter-Linie
|
||||
mw, mh = Inches(1.7), Inches(0.6)
|
||||
my = Inches(6.05)
|
||||
for nm, fill, tc, mcx in [("Hochdurchsatz", TINT_T, TEAL, Inches(3.85)),
|
||||
("Spezial", TINT_A, AMBER, Inches(5.85))]:
|
||||
vline(mcx, core_by, my - core_by, color=LINEC, weight=Pt(1))
|
||||
dock(mcx, core_by + (my - core_by) / 2)
|
||||
sh = shp(MSO_SHAPE.ROUNDED_RECTANGLE, mcx - mw / 2, my, mw, mh, fill=fill, line=tc, lw=Pt(1.25))
|
||||
boxtext(sh, nm, size=12.5, color=tc, bold=True)
|
||||
vline(mcx, core_by + g + th, my - (core_by + g + th), color=LINEC, weight=Pt(1))
|
||||
sh = shp(MSO_SHAPE.ROUNDED_RECTANGLE, mcx - mw / 2, my, mw, mh, fill=fill, line=tc, lw=Pt(1.5))
|
||||
boxtext(sh, nm, size=12.5, color=INK, bold=True)
|
||||
|
||||
txt(Inches(2.9), my + mh + Inches(0.12), Inches(4.0), Inches(0.3), "eigene Module",
|
||||
size=12, color=MUTE, bold=True, align=PP_ALIGN.CENTER)
|
||||
txt(Inches(2.9), my + mh + Inches(0.12), Inches(4.0), Inches(0.3), "Fachliche Verarbeitung",
|
||||
size=12, color=LIGHT, bold=True, align=PP_ALIGN.CENTER)
|
||||
|
||||
|
||||
# ===========================================================================
|
||||
@@ -252,17 +270,14 @@ mini_lis(Inches(10.0), Inches(4.75), faded=False)
|
||||
vline(Inches(10.0) + hw_ / 2, gov_y + Inches(0.07), Inches(4.75) - (gov_y + Inches(0.07)),
|
||||
color=LINEC, weight=Pt(1))
|
||||
txt(Inches(9.9), Inches(4.35) + hh_ + Inches(0.2), Inches(2.4), Inches(0.35), "weitere LIS",
|
||||
size=13, color=MUTE, align=PP_ALIGN.CENTER)
|
||||
size=13, color=LIGHT, align=PP_ALIGN.CENTER)
|
||||
|
||||
# ---- Mini-Legende ----------------------------------------------------------
|
||||
ly = Inches(7.05)
|
||||
adapter(Inches(7.35), ly)
|
||||
txt(Inches(7.55), ly - Inches(0.16), Inches(2.1), Inches(0.32), "Adapter (Umsysteme)",
|
||||
size=11.5, color=MUTE)
|
||||
dock(Inches(9.65), ly)
|
||||
txt(Inches(9.85), ly - Inches(0.16), Inches(2.1), Inches(0.32), "Andocken (Module)",
|
||||
size=11.5, color=MUTE)
|
||||
shp(MSO_SHAPE.RECTANGLE, Inches(7.55), ly - Inches(0.11), th, Inches(0.22), fill=ACCENT)
|
||||
txt(Inches(7.8), ly - Inches(0.16), Inches(3.2), Inches(0.32),
|
||||
"Adapter-Schicht – je Schnittstelle eine", size=11.5, color=LIGHT)
|
||||
|
||||
out = "/home/marcuh/claude-projects/limbach/Folie3.pptx"
|
||||
out = os.path.join(os.path.dirname(os.path.abspath(__file__)), "Folie3.pptx")
|
||||
prs.save(out)
|
||||
print("saved", out)
|
||||
|
||||
Reference in New Issue
Block a user