connect selection to new or existing fileout
This commit is contained in:
		
							parent
							
								
									a6e8da6973
								
							
						
					
					
						commit
						1a97f75692
					
				| @ -14,6 +14,10 @@ Activate / deactivate layer opacity according to prefix | |||||||
| Activate / deactivate all masks using MA layers | Activate / deactivate all masks using MA layers | ||||||
| --> | --> | ||||||
| 
 | 
 | ||||||
|  | 1.6.0 | ||||||
|  | 
 | ||||||
|  | - added: Connect selection to new or existing fileout | ||||||
|  | 
 | ||||||
| 1.5.0 | 1.5.0 | ||||||
| 
 | 
 | ||||||
| - added: swf export (include binary for linux and windows) | - added: swf export (include binary for linux and windows) | ||||||
|  | |||||||
| @ -256,6 +256,26 @@ class GPEXP_OT_reset_render_settings(bpy.types.Operator): | |||||||
| 
 | 
 | ||||||
|         return {"FINISHED"} |         return {"FINISHED"} | ||||||
| 
 | 
 | ||||||
|  | class GPEXP_OT_connect_selected_to_file_out(bpy.types.Operator): | ||||||
|  |     bl_idname = "gp.connect_selected_to_file_out" | ||||||
|  |     bl_label = "Connect Selected To File Output" | ||||||
|  |     bl_description = "Connect Selected Nodes to a fileoutput node\ | ||||||
|  |         \nIf a fileoutput node is selected, socket are added to it" | ||||||
|  |     bl_options = {"REGISTER", "UNDO"} | ||||||
|  | 
 | ||||||
|  |     def execute(self, context): | ||||||
|  |         scn = context.scene | ||||||
|  |         nodes = scn.node_tree.nodes | ||||||
|  |         selected = [n for n in nodes if n.select] | ||||||
|  |         outfile = next((n for n in selected if n.type == 'OUTPUT_FILE'), None) | ||||||
|  |         # Exclude output file from  | ||||||
|  |         selected = [n for n in selected if n.type != 'OUTPUT_FILE']         | ||||||
|  |          | ||||||
|  |         # fn.connect_to_file_output(selected, outfile) | ||||||
|  |         for n in selected: | ||||||
|  |             fn.connect_to_file_output(n, outfile) | ||||||
|  |         return {"FINISHED"} | ||||||
|  | 
 | ||||||
| classes=( | classes=( | ||||||
| GPEXP_OT_mute_toggle_output_nodes, | GPEXP_OT_mute_toggle_output_nodes, | ||||||
| GPEXP_OT_set_output_node_format, | GPEXP_OT_set_output_node_format, | ||||||
| @ -263,6 +283,7 @@ GPEXP_OT_number_outputs, | |||||||
| GPEXP_OT_enable_all_viewlayers, | GPEXP_OT_enable_all_viewlayers, | ||||||
| GPEXP_OT_activate_only_selected_layers, | GPEXP_OT_activate_only_selected_layers, | ||||||
| GPEXP_OT_reset_render_settings, | GPEXP_OT_reset_render_settings, | ||||||
|  | GPEXP_OT_connect_selected_to_file_out, | ||||||
| # GPEXP_OT_normalize_outnames, | # GPEXP_OT_normalize_outnames, | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ bl_info = { | |||||||
|     "name": "GP Render", |     "name": "GP Render", | ||||||
|     "description": "Organise export of gp layers through compositor output", |     "description": "Organise export of gp layers through compositor output", | ||||||
|     "author": "Samuel Bernou", |     "author": "Samuel Bernou", | ||||||
|     "version": (1, 5, 1), |     "version": (1, 6, 0), | ||||||
|     "blender": (3, 0, 0), |     "blender": (3, 0, 0), | ||||||
|     "location": "View3D", |     "location": "View3D", | ||||||
|     "warning": "", |     "warning": "", | ||||||
|  | |||||||
							
								
								
									
										78
									
								
								fn.py
									
									
									
									
									
								
							
							
						
						
									
										78
									
								
								fn.py
									
									
									
									
									
								
							| @ -1787,3 +1787,81 @@ def clean_mats_duplication(ob, skip_different_materials=True): | |||||||
|     if diff_ct: |     if diff_ct: | ||||||
|         print(f'{diff_ct} mat skipped >> same name but different color settings!') |         print(f'{diff_ct} mat skipped >> same name but different color settings!') | ||||||
|         # return ('INFO', f'{diff_ct} mat skipped >> same name but different color settings!') |         # return ('INFO', f'{diff_ct} mat skipped >> same name but different color settings!') | ||||||
|  | 
 | ||||||
|  | def connect_to_file_output(node_list, file_out=None): | ||||||
|  |     scene = bpy.context.scene | ||||||
|  |     nodes = scene.node_tree.nodes | ||||||
|  |     links = scene.node_tree.links | ||||||
|  |     if not isinstance(node_list, list): | ||||||
|  |         node_list = [node_list] | ||||||
|  |     node_list = [n for n in node_list if n.type != 'OUTPUT_FILE'] | ||||||
|  |     if not node_list: | ||||||
|  |         return | ||||||
|  | 
 | ||||||
|  |     for node in node_list: | ||||||
|  |         ## create one output facing node and connect all | ||||||
|  |         outs = [o for o in node.outputs if not o.is_unavailable and not 'crypto' in o.name.lower()] | ||||||
|  |         cryptout = [o for o in node.outputs if not o.is_unavailable and 'crypto' in o.name.lower()] | ||||||
|  |          | ||||||
|  |         if node.type == 'R_LAYERS': | ||||||
|  |             out_base = node.layer | ||||||
|  |         elif node.label: | ||||||
|  |             out_base = node.label | ||||||
|  |         else: | ||||||
|  |             out_base = node.name | ||||||
|  |         bpy.path.clean_name(out_base) | ||||||
|  |         out_name = f'OUT_{out_base}' | ||||||
|  | 
 | ||||||
|  |         if outs: | ||||||
|  |             fo = file_out | ||||||
|  |             if not fo: | ||||||
|  |                 fo = nodes.get(out_name) | ||||||
|  |             if not fo: | ||||||
|  |                 # color = (0.2,0.3,0.5) | ||||||
|  |                 fo = create_node('CompositorNodeOutputFile', tree=scene.node_tree, location=(real_loc(node)[0]+500, real_loc(node)[1]+50), width=600) | ||||||
|  |                 set_file_output_format(fo) | ||||||
|  |                 fo.name = out_name | ||||||
|  |                 if node.parent: | ||||||
|  |                     fo.parent = node.parent | ||||||
|  |                 fo.base_path = f'//render/{out_base}' | ||||||
|  | 
 | ||||||
|  |             for o in outs: | ||||||
|  |                 # if o.name == 'Deprecated': | ||||||
|  |                 #     continue | ||||||
|  |                 slot_name = bpy.path.clean_name(o.name) | ||||||
|  |                 slot_name = f'{slot_name}/{slot_name}_' | ||||||
|  |                 fo.file_slots.new(slot_name) | ||||||
|  |                 out_input = fo.inputs[-1] | ||||||
|  |                 links.new(o, out_input) | ||||||
|  |             clear_disconnected(fo) | ||||||
|  |             fo.update() | ||||||
|  | 
 | ||||||
|  |         ## Create separate file out for cryptos | ||||||
|  |         if cryptout: | ||||||
|  |             out_name += '_cryptos' | ||||||
|  |             fo = file_out | ||||||
|  |             if not fo: | ||||||
|  |                 fo = nodes.get(out_name) | ||||||
|  |             if not fo: | ||||||
|  |                 # color = (0.2,0.3,0.5) | ||||||
|  |                 fo = create_node('CompositorNodeOutputFile', tree=scene.node_tree, location=(real_loc(node)[0]+400, real_loc(node)[1]-200), width=220) | ||||||
|  |                 set_file_output_format(fo) | ||||||
|  |                 fo.format.file_format = 'OPEN_EXR_MULTILAYER' | ||||||
|  |                 fo.format.color_mode = 'RGBA' | ||||||
|  |                 fo.format.color_depth = '32' | ||||||
|  |                 fo.format.exr_codec = 'ZIP' | ||||||
|  |                 fo.name = out_name | ||||||
|  |                 if node.parent: | ||||||
|  |                     fo.parent = node.parent | ||||||
|  |                 fo.base_path = f'//render/{out_base}/cryptos/cryptos_' | ||||||
|  | 
 | ||||||
|  |             for o in cryptout: | ||||||
|  |                 slot_name = bpy.path.clean_name(o.name) # directly use name in multi layer exr | ||||||
|  |                 # slot_name = f'{slot_name}/{slot_name}_' | ||||||
|  |                 fo.file_slots.new(slot_name) | ||||||
|  |                 out_input = fo.inputs[-1] | ||||||
|  |                 links.new(o, out_input) | ||||||
|  |             clear_disconnected(fo) | ||||||
|  |             fo.update() | ||||||
|  |          | ||||||
|  |          | ||||||
							
								
								
									
										1
									
								
								ui.py
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								ui.py
									
									
									
									
									
								
							| @ -134,6 +134,7 @@ class GPEXP_PT_gp_node_ui(Panel): | |||||||
|             subcol.operator('gp.set_output_node_format', icon='OUTPUT', text='Copy Active Output Format') |             subcol.operator('gp.set_output_node_format', icon='OUTPUT', text='Copy Active Output Format') | ||||||
|             subcol.operator('gp.set_active_fileout_to_compout', icon='OUTPUT', text='Active Slot to Composite') |             subcol.operator('gp.set_active_fileout_to_compout', icon='OUTPUT', text='Active Slot to Composite') | ||||||
| 
 | 
 | ||||||
|  |         col.operator('gp.connect_selected_to_file_out', icon='OUTPUT', text='Connect Selection To Ouput') | ||||||
| 
 | 
 | ||||||
|         layout.separator() |         layout.separator() | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user