From 9bcb80765aae49f5e91fec09c2594ef86510684f Mon Sep 17 00:00:00 2001 From: D4rkst3r Date: Thu, 6 Aug 2026 13:23:53 +0200 Subject: [PATCH] Tree Gen 1.38.0: ein Weg zum Blattwerk, generischer Baum entsaeult 1) Zwei-Pfade-Fehler behoben (von der Spielseite gemeldet) Blattwerk entstand an zwei Stellen - Haekchen "_Leaf anlegen" beim Erzeugen und Knopf "Blattwerk streuen" - und nur der zweite rechnete die Wachstums-Staffel. Am Modifier nachgemessen trug der S1-Setzling aus dem Create-Pfad Size 0.85, Max Radius 0.04, Min Height 0.25: die Altbaum-Werte. Zum dritten Mal dieselbe Fehlerklasse (nach Stufen-Deckung und build_group): zwei Quellen fuer dieselbe Frage. Die Staffel liegt jetzt in make_leaves selbst und zieht growth_t/preset vom Baum-Objekt - ein Aufrufer KANN sie nicht mehr vergessen. Darueber blattwerk_streuen() als der eine Einstieg fuer beide Knoepfe, inklusive der Dichte-Regelung, die vorher ebenfalls nur der Operator hatte. Nebenbei bekommt der Create-Pfad damit auch die Card-SAMMLUNG, die ihm bisher fehlte. test_zwei_pfade.py prueft die DIFFERENZ zwischen beiden Wegen, nicht die absoluten Werte - ein Test, der nur einen Weg anschaut, findet so etwas nie. Plus die Gegenprobe im Test selbst: waeren beide Wege gleich falsch, muss auffallen, dass S1 und S4 dieselbe Card-Groesse tragen. Gegenprobe gefahren: mit dem alten Create-Pfad meldet der Test 10 Fehler und reproduziert exakt die gemeldeten 0.85 / 0.04 / 0.25. 2) Generischer "baum" entsaeult Gemessen B/H 0.18 ueber fuenf Seeds - schmaler als jedes andere Laubgehoelz. Ursache dieselbe wie bei der Birke: Branch Up 1.3 aus den DEFAULTS. Zielband der Spielseite 0.45-0.60, jetzt 0.55 (0.52-0.56). Die DEFAULTS bleiben unangetastet - sie sind die Socket-Vorgaben, an denen die haendischen Regler haengen. Nur "baum" bekommt eigene Werte. 26 Tests bestehen. Co-Authored-By: Claude Opus 4.8 --- README.md | 32 +++++ blender_manifest_tree.toml | 2 +- dist/index.html | 6 +- dist/index.json | 8 +- dist/stylized_tree_generator-1.37.0.zip | Bin 45213 -> 0 bytes dist/stylized_tree_generator-1.38.0.zip | Bin 0 -> 46032 bytes stylized_tree_generator.py | 155 ++++++++++++++++-------- tests/test_zwei_pfade.py | 127 +++++++++++++++++++ 8 files changed, 269 insertions(+), 61 deletions(-) delete mode 100644 dist/stylized_tree_generator-1.37.0.zip create mode 100644 dist/stylized_tree_generator-1.38.0.zip create mode 100644 tests/test_zwei_pfade.py diff --git a/README.md b/README.md index 9431536..3516918 100644 --- a/README.md +++ b/README.md @@ -563,6 +563,38 @@ Der Kaktus erzeugt regulaer **0 Cards** — kein Ast ist duenner als `Max Radius und das ist botanisch richtig. Vorher lief das still durch und man stand vor einer leeren `_Leaf`-Ebene; jetzt sagt der Operator es und nennt den Regler. +### Zwei Knoepfe, ein Weg + +Blattwerk entsteht an zwei Stellen: ueber das Haekchen "_Leaf anlegen" beim +Erzeugen und ueber den Knopf "Blattwerk streuen". Nur der zweite rechnete die +Wachstums-Staffel. Von der Spielseite am Modifier nachgemessen trug der +S1-Setzling aus dem Create-Pfad **Size 0.85, Max Radius 0.04, Min Height 0.25** - +exakt die Altbaum-Werte. + +Das ist zum dritten Mal dieselbe Fehlerklasse (nach der Stufen-Deckung und +`build_group`): **zwei Quellen fuer dieselbe Frage**. Die Staffel liegt deshalb +jetzt in `make_leaves` selbst, die sie aus `growth_t` und `preset` am +Baum-Objekt zieht - ein Aufrufer KANN sie nicht mehr vergessen. Darueber sitzt +`blattwerk_streuen()` als der eine Einstieg, den beide Knoepfe benutzen; dort +haengt auch die Dichte-Regelung, die vorher ebenfalls nur der Operator hatte. + +`tests/test_zwei_pfade.py` prueft nicht die absoluten Werte, sondern die +DIFFERENZ zwischen beiden Wegen - ein Test, der nur einen Weg anschaut, findet +so etwas grundsaetzlich nie. Zusaetzlich prueft er, dass sich S1 und S4 +ueberhaupt unterscheiden: waeren beide Wege gleich falsch, waere der Vergleich +allein zufrieden. + +### Der generische Baum war auch eine Saeule + +Gemessen Breite/Hoehe **0.18** ueber fuenf Seeds - schmaler als jedes andere +Laubgehoelz im Satz. Ursache dieselbe wie bei der Birke: `Branch Up` 1.3 aus den +DEFAULTS. Zielband der Spielseite 0.45-0.60, gemessen jetzt **0.55** +(0.52-0.56). + +Die DEFAULTS bleiben unangetastet - sie sind die Socket-Vorgaben der +Node-Gruppe, an denen jeder haendische Regler haengt. Nur `baum` bekommt eigene +Werte; alle anderen Presets ueberschreiben `Branch Up` ohnehin. + ### Obstbaum: die Krone muss groesser sein als eine Card Das Preset ist nicht nur eine Silhouette, es ist eine FUNKTIONALE Bedingung. diff --git a/blender_manifest_tree.toml b/blender_manifest_tree.toml index 95d95f0..9897898 100644 --- a/blender_manifest_tree.toml +++ b/blender_manifest_tree.toml @@ -1,7 +1,7 @@ schema_version = "1.0.0" id = "stylized_tree_generator" -version = "1.37.0" +version = "1.38.0" name = "Stylized Tree Generator" tagline = "Parametrische Baeume, Palmen, Bueschen mit Wachstums-Stufen" maintainer = "D4rkst3r" diff --git a/dist/index.html b/dist/index.html index d24a382..6f7f08e 100644 --- a/dist/index.html +++ b/dist/index.html @@ -50,17 +50,17 @@ 34.1KB - stylized_tree_generator-1.37.0 + stylized_tree_generator-1.38.0 Stylized Tree Generator Parametrische Baeume, Palmen, Bueschen mit Wachstums-Stufen link 4.2.0 - ~ all all - 44.2KB + 45.0KB -

Built 2026-08-06, 10:59

+

Built 2026-08-06, 11:22

diff --git a/dist/index.json b/dist/index.json index b8898de..02212d0 100644 --- a/dist/index.json +++ b/dist/index.json @@ -82,7 +82,7 @@ "id": "stylized_tree_generator", "name": "Stylized Tree Generator", "tagline": "Parametrische Baeume, Palmen, Bueschen mit Wachstums-Stufen", - "version": "1.37.0", + "version": "1.38.0", "type": "add-on", "maintainer": "D4rkst3r", "license": [ @@ -98,9 +98,9 @@ "Mesh", "Modeling" ], - "archive_url": "./stylized_tree_generator-1.37.0.zip", - "archive_size": 45213, - "archive_hash": "sha256:189494bb426bb757671a8da62baf1fb341e6147532a1d0a7eb7d9a7a745d15f3" + "archive_url": "./stylized_tree_generator-1.38.0.zip", + "archive_size": 46032, + "archive_hash": "sha256:0d65140f04d1ba8289a72c69c44c95b8e7b7300681695b43c7cba7a8f2ec6c9b" } ] } \ No newline at end of file diff --git a/dist/stylized_tree_generator-1.37.0.zip b/dist/stylized_tree_generator-1.37.0.zip deleted file mode 100644 index c26c4ea86bc00fbc1b12828f44f6285916683e1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45213 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 literal 0 HcmV?d00001 diff --git a/stylized_tree_generator.py b/stylized_tree_generator.py index 7ad744b..9681929 100644 --- a/stylized_tree_generator.py +++ b/stylized_tree_generator.py @@ -1,7 +1,7 @@ bl_info = { "name": "Stylized Tree Generator", "author": "D4rkst3r", - "version": (1, 37, 0), + "version": (1, 38, 0), "blender": (4, 2, 0), "location": "View3D > Sidebar > Tree Gen", "description": "Parametrischer Baum-/Palmen-/Busch-Generator (Geometry Nodes) mit Wachstums-Stufen", @@ -86,7 +86,21 @@ DEFAULTS = { # Presets: nur die Abweichungen von DEFAULTS. PRESETS = { - "baum": {}, + # Der generische Laubbaum war eine SAEULE: gemessen Breite/Hoehe 0.18 ueber + # fuenf Seeds, schmaler als jedes andere Laubgehoelz hier. Ursache war + # dieselbe wie bei der Birke - "Branch Up" 1.3 aus den DEFAULTS liess die + # Aeste fast senkrecht nach oben zeigen und am Stamm kleben. + # + # Zielband der Spielseite: 0.45-0.60, "zwischen Birke (0.51) und einem + # klassischen Parkbaum". + # + # Die DEFAULTS bleiben unangetastet - sie sind die Socket-Vorgaben der + # Node-Gruppe, an denen jeder haendische Regler haengt. Nur "baum" bekommt + # eigene Werte; alle anderen Presets ueberschreiben Branch Up ohnehin. + "baum": { + "Branch Up": 0.5, "Branch Length": 2.1, + "Attraction Up": 0.15, # spreizen statt hochschwingen + }, # Palme - am TreeIt-Referenzbaum ausgemessen (palm07_0 + frond stem_1): # Stamm 4.33 m, Radius 0.133 unten -> ~0.086 Mitte -> 0.106 OBEN # (Kronenschaft!), 11 Seiten, nur 150 Tris. @@ -1753,8 +1767,46 @@ def _dichte_einregeln(context, ob, md, ids, ziel, start_dichte, pro_stueck, return bestes[1], bestes[2] -def make_leaves(context, tree_obj, card_obj, name=None, card_coll=None, **overrides): - """Erzeugt/aktualisiert ein _Leaf-Objekt mit dem Blattwerk-Modifier.""" +def make_leaves(context, tree_obj, card_obj, name=None, card_coll=None, + stufen=True, **overrides): + """Erzeugt/aktualisiert ein _Leaf-Objekt mit dem Blattwerk-Modifier. + + Die WACHSTUMS-STAFFEL sitzt hier drin, nicht beim Aufrufer. Uebergeben + werden die Grundwerte (Size, Max Radius); welche Stufe daraus wird, zieht + diese Funktion selbst aus `growth_t` und `preset` am Baum-Objekt. + + Warum hier und nicht beim Aufrufer: es gab zwei Wege zum Blattwerk - den + Knopf "Blattwerk streuen" und das Haekchen "_Leaf anlegen" beim Erzeugen - + und nur der erste rechnete die Staffel. Gemessen am S1-Modifier des + Create-Pfads: Size 0.85, Max Radius 0.04, Min Height 0.25, also exakt die + Altbaum-Werte. Das ist dieselbe Fehlerklasse wie bei der Stufen-Deckung und + bei build_group: zwei Quellen fuer dieselbe Frage. Solange die Staffel hier + liegt, KANN ein Aufrufer sie nicht vergessen. + + `stufen=False` schaltet sie ab - fuer Aufrufer, die bewusst rohe Werte + setzen. + """ + if stufen: + # Stufe aus dem OBJEKT lesen, nicht aus dem Kontext: der Blattwerk-Lauf + # kommt spaeter und getrennt vom Erzeugen. + gt = float(tree_obj.get("growth_t", 1.0)) + _ziel, g_anteil, h_anteil = _stufen_anteile(gt, tree_obj.get("preset")) + + # Der RADIUS-FILTER muss mit dem Baum schrumpfen. Er trennt duenne + # Zweige (Laub) von dickem Geaest (kein Laub) - aber ein Setzling ist + # KOMPLETT duenner als die Schwelle. Gemessen mit festem 0.04 m: bei S1 + # sassen 92 % der Cards am Stamm, bei S2 noch 81 %, das Laub klebte also + # am Stiel statt in der Krone. Boden bei LEAF_RADIUS_YOUNG, weil der + # reine Stammradius-Faktor (0.064 bei t = 0) unter die duennsten Zweige + # fiel und der Setzling wieder kahl stand (gemessen 0 Cards). + r_faktor = LEAF_RADIUS_YOUNG + (1.0 - LEAF_RADIUS_YOUNG) * gt + + basis = dict(LEAF_DEFAULTS) + basis.update(overrides) + overrides["Size"] = basis["Size"] * g_anteil + overrides["Max Radius"] = basis["Max Radius"] * r_faktor + overrides["Min Height"] = h_anteil + name = name or (tree_obj.name + "_Leaf") ob = bpy.data.objects.get(name) if ob is None: @@ -1784,6 +1836,41 @@ def make_leaves(context, tree_obj, card_obj, name=None, card_coll=None, **overri return ob +def blattwerk_streuen(context, tree_obj, s): + """DER Weg zum Blattwerk - fuer beide Knoepfe derselbe. + + Streut die Cards und regelt die Dichte auf die Ziel-Cardzahl der Stufe ein. + Wer Blattwerk erzeugt, ruft das hier und sonst nichts: die frueheren zwei + Wege liefen genau so lange auseinander, bis es jemandem im Spiel auffiel. + + Gibt (Blatt-Objekt, gezaehlte Cards, Ziel-Cards) zurueck; ohne Regelung + sind die letzten beiden None. + """ + lf = make_leaves(context, tree_obj, s.leaf_card, + card_coll=s.leaf_cards, + Density=s.leaf_density, + Size=s.leaf_size, + **{"Size Var": s.leaf_size_var, + "Max Radius": s.leaf_max_radius, + "Tilt": s.leaf_tilt, "Seed": s.seed}) + + # Dichte auf die ZIEL-CARDZAHL einregeln. Muss NACH dem Anlegen passieren, + # weil dafuer gemessen werden muss, was tatsaechlich herauskommt - die + # Zweigflaeche faellt je Preset voellig anders aus. + gt = float(tree_obj.get("growth_t", 1.0)) + ziel_cards, _g, _h = _stufen_anteile(gt, tree_obj.get("preset")) + if not ziel_cards: + return lf, None, None + md = lf.modifiers.get("GN_Leaves") + ng = md.node_group if md is not None else None + if ng is None: + return lf, None, None + pro = _cards_pro_stueck(s.leaf_card, s.leaf_cards) + dichte, ist = _dichte_einregeln(context, lf, md, leaf_socket_ids(ng), + ziel_cards, s.leaf_density, pro) + print("[TreeGen] %s: %d Cards (Ziel %d) bei Dichte %.0f" + % (tree_obj.name, ist, ziel_cards, dichte)) + return lf, ist, ziel_cards # --------------------------------------------------------------------------- @@ -2909,48 +2996,10 @@ class TREEGEN_OT_leaves(Operator): total_tree = total_leaf = 0 for t in trees: try: - # Bueschelgroesse mit dem Wachstum skalieren: ein Setzling - # traegt kleinere Bueschel. Baeume ohne Wachstums-Stufe haben - # growth_t = 1.0 und bleiben unveraendert. - gt = float(t.get("growth_t", 1.0)) - ziel_cards, g_anteil, h_anteil = _stufen_anteile( - gt, t.get("preset")) - - # Der RADIUS-FILTER muss mit dem Baum schrumpfen. Er trennt - # duenne Zweige (Laub) von dickem Geaest (kein Laub) - aber ein - # Setzling ist KOMPLETT duenner als die Schwelle. Gemessen mit - # festem 0.04 m: bei S1 sassen 92 % der Cards am Stamm, bei S2 - # noch 81 %, das Laub klebte also am Stiel statt in der Krone. - # Skaliert wird mit dem Wachstum, aber mit BODEN bei 0.20. - # Der reine Stammradius-Faktor (0.064 bei t=0) war zu scharf: - # damit fiel die Schwelle unter die duennsten Zweige und der - # Setzling stand wieder kahl (gemessen 0 Cards). Bei 0.20 - # bekommt er 12 Cards, davon nur 12 % am Stamm - vorher waren - # es 92 %. - r_faktor = LEAF_RADIUS_YOUNG + (1.0 - LEAF_RADIUS_YOUNG) * gt - - lf = make_leaves(context, t, s.leaf_card, - card_coll=s.leaf_cards, - Density=s.leaf_density, - Size=s.leaf_size * g_anteil, - **{"Size Var": s.leaf_size_var, - "Max Radius": s.leaf_max_radius * r_faktor, - "Min Height": h_anteil, - "Tilt": s.leaf_tilt, "Seed": s.seed}) - # Dichte auf die ZIEL-CARDZAHL einregeln. Muss nach dem Anlegen - # passieren, weil dafuer gemessen werden muss, was tatsaechlich - # herauskommt - die Zweigflaeche faellt je Preset voellig - # anders aus. - if ziel_cards: - md = lf.modifiers.get("GN_Leaves") - ng = md.node_group if md is not None else None - if ng is not None: - pro = _cards_pro_stueck(s.leaf_card, s.leaf_cards) - dichte, ist = _dichte_einregeln( - context, lf, md, leaf_socket_ids(ng), - ziel_cards, s.leaf_density, pro) - print("[TreeGen] %s: %d Cards (Ziel %d) bei Dichte %.0f" - % (t.name, ist, ziel_cards, dichte)) + # Staffel und Dichte-Regelung stecken in blattwerk_streuen - + # damit laeuft dieser Knopf durch dieselbe Stelle wie das + # Haekchen beim Erzeugen. + lf, _ist, _ziel = blattwerk_streuen(context, t, s) except Exception as exc: # noqa: BLE001 self.report({'WARNING'}, "%s: %s" % (t.name, exc)) continue @@ -3071,13 +3120,13 @@ class TREEGEN_OT_create(Operator): for ob in created: if s.make_leaf: if s.leaf_card is not None and s.leaf_card.type == 'MESH': - # Card gesetzt -> Blattwerk direkt streuen - extra.append(make_leaves( - context, ob, s.leaf_card, - Density=s.leaf_density, Size=s.leaf_size, - **{"Size Var": s.leaf_size_var, - "Max Radius": s.leaf_max_radius, - "Tilt": s.leaf_tilt, "Seed": s.seed})) + # Card gesetzt -> Blattwerk direkt streuen, ueber + # DIESELBE Stelle wie der Knopf "Blattwerk streuen". + # Vorher stand hier ein eigener make_leaves-Aufruf mit + # rohem s.leaf_size - die Wachstums-Staffel fehlte + # komplett, gemessen trug der S1-Setzling + # Altbaum-Bueschel. + extra.append(blattwerk_streuen(context, ob, s)[0]) else: # keine Card -> leeres _Leaf zum Selbermodellieren extra.append(_add_layer(context, ob, "_Leaf")) diff --git a/tests/test_zwei_pfade.py b/tests/test_zwei_pfade.py new file mode 100644 index 0000000..987429d --- /dev/null +++ b/tests/test_zwei_pfade.py @@ -0,0 +1,127 @@ +"""Beide Wege zum Blattwerk muessen dasselbe ergeben. + +Es gibt zwei Knoepfe, die Blattwerk erzeugen: + * "_Leaf anlegen" beim Erzeugen des Baums (TREEGEN_OT_create) + * "Blattwerk streuen" auf einer Auswahl (TREEGEN_OT_leaves) + +Nur der zweite rechnete die Wachstums-Staffel. Von der Spielseite am Modifier +nachgemessen: der S1-Setzling aus dem Create-Pfad trug Size 0.85, Max Radius +0.04, Min Height 0.25 - exakt die Altbaum-Werte. + +Das ist dieselbe Fehlerklasse, die vorher schon die Stufen-Deckung und +build_group erwischt hat: ZWEI QUELLEN fuer dieselbe Frage. Ein Test, der nur +einen der beiden Wege prueft, findet so etwas nie - deshalb prueft dieser hier +die DIFFERENZ zwischen ihnen und nicht die absoluten Werte. + +Aufruf: blender --background --factory-startup --python tests/test_zwei_pfade.py +""" +import os +import sys +import importlib.util + +import bpy + +ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +spec = importlib.util.spec_from_file_location( + "tg", os.path.join(ROOT, "stylized_tree_generator.py")) +tg = importlib.util.module_from_spec(spec) +sys.modules["tg"] = tg +spec.loader.exec_module(tg) +tg.register() + +fails = [] + +for o in list(bpy.data.objects): + bpy.data.objects.remove(o, do_unlink=True) + +me = bpy.data.meshes.new("Leaf_Card") +me.from_pydata([(-0.5, 0, 0), (0, 0, 0.7), (0.5, 0, 0), (0, 0, -0.1)], + [], [(0, 1, 2), (0, 2, 3)]) +me.update() +card = bpy.data.objects.new("Leaf_Card", me) +bpy.context.scene.collection.objects.link(card) + +s = bpy.context.scene.tree_gen_settings +s.leaf_card = card +s.apply_modifier = True +s.preset = "birke" +s.variant = 1 +s.use_growth = True +s.stages = 4 + +# Die Werte, die die Staffel anfasst. "Density" steht bewusst NICHT dabei: sie +# wird nach dem Streuen per Bisektion eingeregelt und darf sich zwischen zwei +# Laeufen minimal unterscheiden. +GESTAFFELT = ("Size", "Max Radius", "Min Height") + + +def werte(leaf_obj): + md = leaf_obj.modifiers.get("GN_Leaves") + ids = tg.leaf_socket_ids(md.node_group) + return {k: round(float(md[ids[k]]), 6) for k in GESTAFFELT if k in ids} + + +def bauen(mit_haken): + for o in list(bpy.context.scene.objects): + if o is not card: + bpy.data.objects.remove(o, do_unlink=True) + s.art_name = "P" if mit_haken else "Q" + s.make_leaf = mit_haken + bpy.ops.object.treegen_create() + staemme = sorted((o for o in bpy.context.scene.objects + if o.type == 'MESH' and o is not card + and not o.name.endswith(("_Leaf", "_Frucht"))), + key=lambda o: o.name) + if not mit_haken: + for o in bpy.context.scene.objects: + o.select_set(o in staemme) + bpy.context.view_layer.objects.active = staemme[0] + bpy.ops.object.treegen_leaves() + out = [] + for st in staemme: + bl = bpy.data.objects.get(st.name + "_Leaf") + out.append((st.name, float(st.get("growth_t", 1.0)), + werte(bl) if bl else None)) + return out + + +erzeugt = bauen(True) # Haekchen "_Leaf anlegen" +operator = bauen(False) # Knopf "Blattwerk streuen" + +print("%-5s %7s | %-34s | %-34s" + % ("Stufe", "growth", "beim Erzeugen", "per Operator")) +for (n1, gt, w1), (n2, _gt, w2) in zip(erzeugt, operator): + def zeig(w): + if w is None: + return "keine Blattebene" + return " ".join("%s %.3f" % (k[:3], w[k]) for k in GESTAFFELT if k in w) + gleich = "" if w1 == w2 else " <-- WEICHT AB" + print("%-5s %7.2f | %-34s | %-34s%s" + % (n1.split("_")[-1], gt, zeig(w1), zeig(w2), gleich)) + if w1 is None or w2 is None: + fails.append("%s: eine der beiden Ebenen fehlt" % n1) + continue + for k in GESTAFFELT: + if k not in w1 or k not in w2: + continue + if abs(w1[k] - w2[k]) > 1e-6: + fails.append("%s: '%s' ist beim Erzeugen %.4f, per Operator %.4f - " + "die Wachstums-Staffel greift nur auf einem Weg" + % (n1, k, w1[k], w2[k])) + +# Und die Staffel muss ueberhaupt greifen: waeren beide Wege gleich FALSCH, +# waere der Vergleich oben zufrieden. Also zusaetzlich, dass sich S1 von S4 +# unterscheidet. +if len(erzeugt) >= 2 and erzeugt[0][2] and erzeugt[-1][2]: + s1, s4 = erzeugt[0][2], erzeugt[-1][2] + if s1.get("Size") is not None and abs(s1["Size"] - s4["Size"]) < 1e-6: + fails.append("S1 und S4 tragen dieselbe Card-Groesse (%.3f) - die " + "Staffel greift auf KEINEM der beiden Wege" % s1["Size"]) + +print("") +if fails: + print("ERGEBNIS: %d FEHLER" % len(fails)) + for f in fails: + print(" - " + f) + sys.exit(1) +print("ERGEBNIS: ALLE CHECKS OK")