Tree Gen 1.47.0: Hochstamm auf jeder Wachstums-Stufe
Bis 1.46 war am Obstbaum nur S4 kalibriert. Im Welt-Test ist der User auf einen
S3 gestossen, der sich als duenne Astgabel mit Laubklumpen las. Gemessen lag
der Kronenansatz bei 10 / 16 / 22 / 29 % ueber die Stufen - den freien Stamm
gab es nur ganz am Ende.
Ursache ist der allgemeine Setzlings-Faktor 0.35 auf Branch Start. Der bildet
die Selbstbeschneidung eines WILDEN Baums ab: junge Baeume tragen ihre Aeste
tiefer und asten sich erst spaeter auf. Ein Hochstamm wird aber GEZOGEN - die
Baumschule veredelt hoch und nimmt die unteren Triebe weg, der freie Stamm ist
von Anfang an da.
GROWTH_OVERRIDES["obstbaum"] = {"Branch Start": 1.0} - jetzt 29 % auf allen
vier Stufen. test_obstbaum prueft die ganze Wachstumsreihe; Gegenprobe ohne die
Ausnahme: drei Fehler.
Definitions-Hinweis fuer den Abgleich mit der Spielseite: dort wird "Ansatz"
ueber den tiefsten BLATT-Vertex gemessen, hier ueber den tiefsten AST-Vertex.
Die Spielseite sah deshalb einen Einbruch in der Mitte (33/17/13/21), wir eine
monotone Reihe - dasselbe Preset, zwei Definitionen, derselbe echte Befund.
27 Tests bestehen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -372,6 +372,63 @@ for seed in SEEDS:
|
||||
# Die Form sichert ohnehin das BREITENPROFIL schaerfer ab, als B/H es je
|
||||
# konnte: B/H haette sowohl den Trichter (oben/mitte 1.07) als auch die
|
||||
# Pilzform (unten/mitte 1.17) durchgelassen.
|
||||
# --- Der HOCHSTAMM muss auf JEDER Wachstums-Stufe stehen -----------------
|
||||
#
|
||||
# Bis 1.46 war nur S4 kalibriert. Im Spiel ist der User auf einen S3 gestossen,
|
||||
# der sich als duenne Astgabel mit Laubklumpen las statt als Obstbaeumchen -
|
||||
# gemeldet aus dem Welt-Test. Gemessen lag der Kronenansatz bei 10 / 16 / 22 /
|
||||
# 29 % ueber die Stufen: den freien Stamm gab es nur ganz am Ende.
|
||||
#
|
||||
# Ursache war der allgemeine Setzlings-Faktor auf "Branch Start", der die
|
||||
# Selbstbeschneidung eines WILDEN Baums abbildet. Ein Hochstamm wird aber
|
||||
# gezogen: die Baumschule veredelt hoch und nimmt die unteren Triebe weg, der
|
||||
# freie Stamm ist von Anfang an da. Deshalb GROWTH_OVERRIDES.
|
||||
print("")
|
||||
print("%-6s %7s %7s %7s" % ("Stufe", "Hoehe", "Cards", "Ansatz"))
|
||||
for o in list(bpy.context.scene.objects):
|
||||
if o is not card:
|
||||
bpy.data.objects.remove(o, do_unlink=True)
|
||||
s.preset = "obstbaum"
|
||||
s.art_name = "Stufen"
|
||||
s.variant = 1
|
||||
s.seed = 1
|
||||
s.use_growth = True
|
||||
s.stages = 4
|
||||
bpy.ops.object.treegen_create()
|
||||
_st = 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)
|
||||
for o in bpy.context.scene.objects:
|
||||
o.select_set(o in _st)
|
||||
bpy.context.view_layer.objects.active = _st[0]
|
||||
bpy.ops.object.treegen_leaves()
|
||||
for _k, _x in enumerate(_st, 1):
|
||||
_dg = bpy.context.evaluated_depsgraph_get()
|
||||
_ev = _x.evaluated_get(_dg)
|
||||
_m = _ev.to_mesh()
|
||||
_vs = [v.co.copy() for v in _m.vertices]
|
||||
_a = _m.attributes.get("ast_id")
|
||||
_aid = [_a.data[i].value for i in range(len(_vs))] if _a else [0] * len(_vs)
|
||||
_ev.to_mesh_clear()
|
||||
_z0 = min(v.z for v in _vs)
|
||||
_h = max(v.z for v in _vs) - _z0
|
||||
_astz = [v.z for v, i in zip(_vs, _aid) if i > 0]
|
||||
_an = 100.0 * (min(_astz) - _z0) / _h if _astz else 0.0
|
||||
_bl = bpy.data.objects.get(_x.name + "_Leaf")
|
||||
_n = 0
|
||||
if _bl is not None:
|
||||
_ev = _bl.evaluated_get(_dg)
|
||||
_m2 = _ev.to_mesh()
|
||||
_n = len(_m2.polygons) // 2
|
||||
_ev.to_mesh_clear()
|
||||
print("%-6s %7.2f %7d %6.0f%%" % ("S%d" % _k, _h, _n, _an))
|
||||
if not (23.0 <= _an <= 35.0):
|
||||
fails.append("S%d: Kronenansatz %.0f %% - der Hochstamm muss auf JEDER "
|
||||
"Stufe stehen, nicht nur bei S4 (Vorgabe ~29 %%)"
|
||||
% (_k, _an))
|
||||
if _n == 0:
|
||||
fails.append("S%d: keine Cards" % _k)
|
||||
|
||||
print("")
|
||||
print("Kronenradius/Card ueber alle Seeds: %.2f - %.2f" % (min(verh), max(verh)))
|
||||
print("Krone unten/mitte ueber alle Seeds: %.2f - %.2f (Pilz 0.75-0.90, "
|
||||
|
||||
Reference in New Issue
Block a user