Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion material_maker/main_window.gd
Original file line number Diff line number Diff line change
Expand Up @@ -1372,7 +1372,10 @@ func dim_window() -> void:
modulate = Color(0.5, 0.5, 0.5)

func generate_screenshots():
var result = await library.generate_screenshots(get_current_graph_edit())
var graph : MMGraphEdit = get_current_graph_edit()
graph.get_node("node_Material").position_offset = Vector2(-300, 0)
var result : int = await library.generate_node_screenshots(graph)
result += await library.generate_material_screenshots(graph)
print(result)

func generate_graph_screenshot():
Expand Down
55 changes: 36 additions & 19 deletions material_maker/panels/library/library.gd
Original file line number Diff line number Diff line change
Expand Up @@ -211,8 +211,39 @@ func get_icon_name(item_name : String) -> String:
func _on_Filter_text_changed(_filter : String) -> void:
update_tree()

func generate_transparent_node_sceenshot(node : GraphElement, save_path : String) -> void:
var csf : float = get_tree().root.content_scale_factor
var image : Image = get_viewport().get_texture().get_image()
image = image.get_region(Rect2(csf*(node.global_position-Vector2(6, 6)) ,csf*(node.size+Vector2(14, 12))))
# Make background transparent
image.convert(Image.FORMAT_RGBA8)
var border_color : Color = image.get_pixel(0, 0)
for y : int in image.get_height():
for x : int in image.get_width():
if image.get_pixel(x, y) != border_color:
break
image.set_pixel(x, y, Color(0, 0, 0, 0))
for x : int in range(image.get_width()-1, 0, -1):
if image.get_pixel(x, y) != border_color:
break
image.set_pixel(x, y, Color(0, 0, 0, 0))
@warning_ignore("narrowing_conversion")
image.resize(image.get_size().x/csf, image.get_size().y/csf, Image.INTERPOLATE_LANCZOS)
image.save_png(save_path)

func generate_material_screenshots(graph_edit : MMGraphEdit) -> int:
# generate sceenshots for material nodes
var material_node : MMGraphNodeGeneric = graph_edit.get_node("node_Material")
for i in mm_loader.get_material_nodes().size():
await get_tree().create_timer(0.05).timeout
material_node._on_menu_id_pressed(i)
print(material_node.generator.model)
generate_transparent_node_sceenshot(material_node,
"res://material_maker/doc/images/node_%s.png" % [material_node.generator.model])
return mm_loader.get_material_nodes().size()

# Should be moved to library manager
func generate_screenshots(graph_edit : GraphEdit, parent_item : TreeItem = null) -> int:
func generate_node_screenshots(graph_edit : GraphEdit, parent_item : TreeItem = null) -> int:
var count : int = 0
if parent_item == null:
parent_item = tree.get_root()
Expand All @@ -224,29 +255,15 @@ func generate_screenshots(graph_edit : GraphEdit, parent_item : TreeItem = null)
if item.get_metadata(0) != null:
var new_nodes = graph_edit.create_nodes(item.get_metadata(0))
await get_tree().create_timer(0.05).timeout
var image = get_viewport().get_texture().get_image()
var csf : float = mm_globals.ui_scale_factor()
image = image.get_region(Rect2(csf*(new_nodes[0].global_position-Vector2(6, 6)),csf*(new_nodes[0].size+Vector2(14, 12))))
# Make background transparent
image.convert(Image.FORMAT_RGBA8)
var border_color : Color = image.get_pixel(0, 0)
for y : int in image.get_height():
for x : int in image.get_width():
if image.get_pixel(x, y) != border_color:
break
image.set_pixel(x, y, Color(0, 0, 0, 0))
for x : int in range(image.get_width()-1, 0, -1):
if image.get_pixel(x, y) != border_color:
break
image.set_pixel(x, y, Color(0, 0, 0, 0))
generate_transparent_node_sceenshot(new_nodes[0],
"res://material_maker/doc/images/node_%s.png" % [get_icon_name(get_item_path(item))])
print(get_icon_name(get_item_path(item)))
image.resize(image.get_size().x/csf, image.get_size().y/csf, Image.INTERPOLATE_LANCZOS)
image.save_png("res://material_maker/doc/images/node_"+get_icon_name(get_item_path(item))+".png")
for n in new_nodes:
graph_edit.remove_node(n)
count += 1
var result = await generate_screenshots(graph_edit, item)
var result = await generate_node_screenshots(graph_edit, item)
count += result

if parent_item == null:
graph_edit.remove_theme_stylebox_override("panel")
return count
Expand Down
Loading