Skip to content

Commit 7f87a2a

Browse files
committed
Update treegen-pinegen.py
includes fixes for trunk size generation includes new randomize button
1 parent 5195dd2 commit 7f87a2a

1 file changed

Lines changed: 34 additions & 9 deletions

File tree

treegen-pinegen.py

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ def generate_pinegen_tree(params, palette_name):
337337
branchlength = clamp(params["branchlength"], 0, 3) * size * 20
338338
branchdir = clamp(params["branchdir"], -5, 5)
339339
leaves = clamp(params["leaves"], 0, 2)
340-
trunk_width = size * params.get("trunksize", 2)
340+
trunk_width = size * params.get("trunksize", 2) * 1.1 # slightly amplify trunk size strength
341341
max_iter = math.floor(100 * size / 5)
342342
fixed_size = 5
343343

@@ -511,7 +511,8 @@ def _preview_export(self, voxels, palette, leaf_indices, trunk_indices, prefix):
511511
shrink = grid_size / orig_GRID
512512
params_preview = params.copy()
513513
params_preview['size'] *= shrink
514-
params_preview['trunksize'] *= shrink
514+
# remove extra shrink on trunk size so thickness varies in preview
515+
# params_preview['trunksize'] *= shrink
515516
params_preview['trunkheight'] *= shrink
516517
vox, palette = generate_pinegen_tree(params_preview, palette_name)
517518
finally:
@@ -547,6 +548,8 @@ def reset():
547548
if tooltip is not None:
548549
row.bind("<Enter>", lambda e: status_var.set(tooltip))
549550
row.bind("<Leave>", lambda e: status_var.set("Ready"))
551+
# update displayed value whenever the variable changes
552+
var.trace_add('write', lambda *args, v=var, lbl=val_label: lbl.config(text=f"{v.get():.2f}" if isinstance(v.get(), float) else str(v.get())))
550553
return row
551554

552555
def build_treegen_gui(tab):
@@ -558,7 +561,7 @@ def build_treegen_gui(tab):
558561
preview_label_tree = ttk.Label(tab)
559562
preview_label_tree.pack(side="right", anchor="n", padx=(20,0), pady=(20,10))
560563

561-
ttk.Label(tab, text="Treegen v1.4 🌳 by NGNT", font=("Arial", 14, "bold")).pack()
564+
ttk.Label(tab, text="Treegen v1.4.1 🌳 by NGNT", font=("Arial", 14, "bold")).pack()
562565

563566
# === Palette dropdown
564567
tree_palette_path = resource_path("palettes/tree")
@@ -587,7 +590,7 @@ def build_treegen_gui(tab):
587590

588591
slider_defs = [
589592
("Size", controls["size"], 0.1, 3.0),
590-
("Trunk Size", controls["trunksize"], 0.1, 3.0),
593+
("Trunk Size", controls["trunksize"], 0.1, 1.2),
591594
("Spread", controls["spread"], 0.0, 1.0),
592595
("Twist", controls["twisted"], 0.0, 1.0),
593596
("Leafiness", controls["leaves"], 0.0, 3.0),
@@ -635,6 +638,14 @@ def update_preview(*args):
635638
# initial preview
636639
update_preview()
637640

641+
# Randomize sliders
642+
def randomize_sliders():
643+
for _, var, mn, mx in slider_defs:
644+
if isinstance(var, tk.DoubleVar):
645+
var.set(random.uniform(mn, mx))
646+
elif isinstance(var, tk.IntVar):
647+
var.set(random.randint(int(mn), int(mx)))
648+
update_preview()
638649
def generate():
639650
try:
640651
# Collect and validate parameters via dataclass
@@ -652,8 +663,11 @@ def generate():
652663
except Exception as e:
653664
messagebox.showerror("Error", str(e))
654665
controls["status"].set("⚠️ Generation failed")
655-
656-
ttk.Button(tab, text="🌳 Generate Tree", command=generate).pack(pady=10)
666+
# group Randomize and Generate side by side
667+
btn_frame = ttk.Frame(tab)
668+
btn_frame.pack(pady=10)
669+
ttk.Button(btn_frame, text="🔀 Randomize", command=randomize_sliders).pack(side="left", padx=(0,5))
670+
ttk.Button(btn_frame, text="🌳 Generate Tree", command=generate).pack(side="left")
657671
ttk.Label(tab, textvariable=controls["status"]).pack(pady=5)
658672

659673
return controls
@@ -667,7 +681,7 @@ def build_pinegen_gui(tab):
667681
preview_label_pine = ttk.Label(tab)
668682
preview_label_pine.pack(side="right", anchor="n", padx=(20,0), pady=(20,10))
669683

670-
ttk.Label(tab, text="Pinegen v1.4 🌲 by NGNT", font=("Arial", 14, "bold")).pack()
684+
ttk.Label(tab, text="Pinegen v1.4.1 🌲 by NGNT", font=("Arial", 14, "bold")).pack()
671685

672686
pine_palette_path = resource_path("palettes/pine")
673687
palette_files = [f for f in os.listdir(pine_palette_path) if f.endswith(".png")]
@@ -748,6 +762,14 @@ def update_pine_preview(*args):
748762
# initial pine preview
749763
update_pine_preview()
750764

765+
# Randomize sliders
766+
def randomize_sliders():
767+
for _, var, mn, mx in slider_defs:
768+
if isinstance(var, tk.DoubleVar):
769+
var.set(random.uniform(mn, mx))
770+
elif isinstance(var, tk.IntVar):
771+
var.set(random.randint(int(mn), int(mx)))
772+
update_pine_preview()
751773
def generate():
752774
try:
753775
# Collect and validate parameters via dataclass
@@ -765,8 +787,11 @@ def generate():
765787
except Exception as e:
766788
messagebox.showerror("Error", str(e))
767789
controls["status"].set("⚠️ Generation failed")
768-
769-
ttk.Button(tab, text="🌲 Generate Pine Tree", command=generate).pack(pady=10)
790+
# group Randomize and Generate side by side
791+
btn_frame = ttk.Frame(tab)
792+
btn_frame.pack(pady=10)
793+
ttk.Button(btn_frame, text="🔀 Randomize", command=randomize_sliders).pack(side="left", padx=(0,5))
794+
ttk.Button(btn_frame, text="🌲 Generate Pine Tree", command=generate).pack(side="left")
770795
ttk.Label(tab, textvariable=controls["status"]).pack(pady=5)
771796

772797
return controls

0 commit comments

Comments
 (0)