import bpy, sys, importlib.util ADDON=r"A:\eco\stylized_rock_generator\stylized_tree_generator.py" spec=importlib.util.spec_from_file_location("stg",ADDON) m=importlib.util.module_from_spec(spec); sys.modules["stg"]=m; spec.loader.exec_module(m) try: m.unregister() except Exception: pass m.register() fails=[] for o in list(bpy.data.objects): bpy.data.objects.remove(o,do_unlink=True) s=bpy.context.scene.tree_gen_settings print("LIGHTMAP-Default aus:", not m.TreeGenSettings.bl_rna.properties['generate_lightmap_uv'].default) if m.TreeGenSettings.bl_rna.properties['generate_lightmap_uv'].default: fails.append("lightmap_default") # Wachstums-Stufen mit Art-Name s.preset='birke'; s.art_name="Birke"; s.variant=1 s.use_growth=True; s.stages=4; s.apply_modifier=False bpy.ops.object.treegen_create() # Seit der Blattwerk-Ebene entsteht zu jeder Stufe ein zweites Objekt "_Leaf". # Deshalb Stamm und Ebene getrennt pruefen statt eine feste Gesamtliste. names=sorted(o.name for o in bpy.context.scene.objects if o.type=='MESH') print("STUFEN:", names) stems=[n for n in names if not n.endswith(("_Leaf","_Frucht"))] if stems != ["Birke_01_S1","Birke_01_S2","Birke_01_S3","Birke_01_S4"]: fails.append("stufen_namen") if [n for n in names if n.endswith("_Leaf")] != [s_+"_Leaf" for s_ in stems]: fails.append("stufen_leaf") # Einzelbaum, Art aus Preset abgeleitet for o in list(bpy.data.objects): bpy.data.objects.remove(o,do_unlink=True) s.use_growth=False; s.art_name=""; s.preset='eiche'; s.variant=2 bpy.ops.object.treegen_create() single=sorted(o.name for o in bpy.context.scene.objects if o.type=='MESH') print("EINZELN:", single) if [n for n in single if not n.endswith(("_Leaf","_Frucht"))] != ["Eiche_02"]: fails.append("einzel_name") # Ursprung unten-mittig + echte Meter ob=bpy.context.scene.objects[single[0]] ev=ob.evaluated_get(bpy.context.evaluated_depsgraph_get()) zs=[v.co.z for v in ev.data.vertices] print("URSPRUNG z=%.3f min_z=%.3f Hoehe=%.2f m" % (ob.location.z, min(zs), max(zs)-min(zs))) if abs(min(zs)) > 0.02: fails.append("ursprung") m.unregister() print("ERGEBNIS:", "ALLE CHECKS OK" if not fails else "FEHLER: "+", ".join(fails)) sys.exit(1 if fails else 0)