Skip to content

Commit d31b01f

Browse files
committed
Added function to generate material node screeenshots
1 parent 9d13f4b commit d31b01f

2 files changed

Lines changed: 40 additions & 20 deletions

File tree

material_maker/main_window.gd

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1367,7 +1367,10 @@ func dim_window() -> void:
13671367
modulate = Color(0.5, 0.5, 0.5)
13681368

13691369
func generate_screenshots():
1370-
var result = await library.generate_screenshots(get_current_graph_edit())
1370+
var graph : MMGraphEdit = get_current_graph_edit()
1371+
graph.get_node("node_Material").position_offset = Vector2(-300, 0)
1372+
var result = await library.generate_node_screenshots(graph)
1373+
result += await library.generate_material_screenshots(graph)
13711374
print(result)
13721375

13731376
func generate_graph_screenshot():

material_maker/panels/library/library.gd

Lines changed: 36 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,39 @@ func get_icon_name(item_name : String) -> String:
216216
func _on_Filter_text_changed(_filter : String) -> void:
217217
update_tree()
218218

219+
func generate_transparent_node_sceenshot(node : GraphElement, save_path : String) -> void:
220+
var csf : float = get_tree().root.content_scale_factor
221+
var image : Image = get_viewport().get_texture().get_image()
222+
image = image.get_region(Rect2(csf*(node.global_position-Vector2(6, 6)) ,csf*(node.size+Vector2(14, 12))))
223+
# Make background transparent
224+
image.convert(Image.FORMAT_RGBA8)
225+
var border_color : Color = image.get_pixel(0, 0)
226+
for y : int in image.get_height():
227+
for x : int in image.get_width():
228+
if image.get_pixel(x, y) != border_color:
229+
break
230+
image.set_pixel(x, y, Color(0, 0, 0, 0))
231+
for x : int in range(image.get_width()-1, 0, -1):
232+
if image.get_pixel(x, y) != border_color:
233+
break
234+
image.set_pixel(x, y, Color(0, 0, 0, 0))
235+
@warning_ignore("narrowing_conversion")
236+
image.resize(image.get_size().x/csf, image.get_size().y/csf, Image.INTERPOLATE_LANCZOS)
237+
image.save_png(save_path)
238+
239+
func generate_material_screenshots(graph_edit : MMGraphEdit) -> int:
240+
# generate sceenshots for material nodes
241+
var material_node : MMGraphNodeGeneric = graph_edit.get_node("node_Material")
242+
for i in mm_loader.get_material_nodes().size():
243+
await get_tree().create_timer(0.05).timeout
244+
material_node._on_menu_id_pressed(i)
245+
print(material_node.generator.model)
246+
generate_transparent_node_sceenshot(material_node,
247+
"res://material_maker/doc/images/node_%s.png" % [material_node.generator.model])
248+
return mm_loader.get_material_nodes().size()
249+
219250
# Should be moved to library manager
220-
func generate_screenshots(graph_edit : GraphEdit, parent_item : TreeItem = null) -> int:
251+
func generate_node_screenshots(graph_edit : GraphEdit, parent_item : TreeItem = null) -> int:
221252
var count : int = 0
222253
if parent_item == null:
223254
parent_item = tree.get_root()
@@ -229,29 +260,15 @@ func generate_screenshots(graph_edit : GraphEdit, parent_item : TreeItem = null)
229260
if item.get_metadata(0) != null:
230261
var new_nodes = graph_edit.create_nodes(item.get_metadata(0))
231262
await get_tree().create_timer(0.05).timeout
232-
var image = get_viewport().get_texture().get_image()
233-
var csf = mm_globals.main_window.get_window().content_scale_factor
234-
image = image.get_region(Rect2(csf*(new_nodes[0].global_position-Vector2(6, 6)),csf*(new_nodes[0].size+Vector2(14, 12))))
235-
# Make background transparent
236-
image.convert(Image.FORMAT_RGBA8)
237-
var border_color : Color = image.get_pixel(0, 0)
238-
for y : int in image.get_height():
239-
for x : int in image.get_width():
240-
if image.get_pixel(x, y) != border_color:
241-
break
242-
image.set_pixel(x, y, Color(0, 0, 0, 0))
243-
for x : int in range(image.get_width()-1, 0, -1):
244-
if image.get_pixel(x, y) != border_color:
245-
break
246-
image.set_pixel(x, y, Color(0, 0, 0, 0))
263+
generate_transparent_node_sceenshot(new_nodes[0],
264+
"res://material_maker/doc/images/node_%s.png" % [get_icon_name(get_item_path(item))])
247265
print(get_icon_name(get_item_path(item)))
248-
image.resize(image.get_size().x/csf, image.get_size().y/csf, Image.INTERPOLATE_LANCZOS)
249-
image.save_png("res://material_maker/doc/images/node_"+get_icon_name(get_item_path(item))+".png")
250266
for n in new_nodes:
251267
graph_edit.remove_node(n)
252268
count += 1
253-
var result = await generate_screenshots(graph_edit, item)
269+
var result = await generate_node_screenshots(graph_edit, item)
254270
count += result
271+
255272
if parent_item == null:
256273
graph_edit.remove_theme_stylebox_override("panel")
257274
return count

0 commit comments

Comments
 (0)