How can I access the node group and then draw the input sliders of node group in layout panel my test script is this
bl_info = {
"name": "Add Test Material",
"author": "Rakesh Choudhary",
"version": (1, 0),
"blender": (2, 80, 0),
"location": "View3D > Sidebar > Test Material Node",
"description": "Click on the 'Test Material' button to add a material to your object.",
"warning": "",
"wiki_url": "",
"category": "3D View"
}
import bpy
class TestMaterial_OT_add_material(bpy.types.Operator):
bl_idname = "test_material.add_material"
bl_label = "Add Test Material"
bl_description = "This button will add a material to your object"
def execute(self, context):
self.create_material()
return {'FINISHED'}
def create_material(self):
bpy.context.scene.use_nodes = True
tree = bpy.context.scene.node_tree
# removes unwanted nodes
for node in tree.nodes:
tree.nodes.remove(node)
test_shader_mat = bpy.data.materials.new("TestMat")
mesh = bpy.context.object.data
mesh.materials.clear()
mesh.materials.append(test_shader_mat)
bpy.context.object.active_material.use_nodes = True
for mat in bpy.data.materials:
if "TestMat" in mat.name:
nodes = mat.node_tree.nodes
for node in nodes:
if node.type != 'OUTPUT_MATERIAL': # skip the material output node as we'll need it later
nodes.remove(node)
# Creating Node Group Test_Material
group = bpy.data.node_groups.new(type="ShaderNodeTree", name="Test_Material")
# Creating Group Input
group.inputs.new("NodeSocketColor", "Diffuse Color")
group.inputs.new("NodeSocketColor", "Glossy Color")
group.inputs.new("NodeSocketFloat", "Mix Factor")
group.inputs.new("NodeSocketFloat", "Glossyness")
input_node = group.nodes.new("NodeGroupInput")
input_node.location = (-800, 0)
# Creating Group Output Node
group.outputs.new("NodeSocketShader", "Diffuse Color")
group.outputs.new("NodeSocketShader", "Glossy Color")
group.outputs.new("NodeSocketShader", "Mix Output")
output_node = group.nodes.new("NodeGroupOutput")
output_node.location = (1500, 0)
# Creating Diffuse Node
diffuse_node = group.nodes.new(type='ShaderNodeBsdfDiffuse')
diffuse_node.location = (150, 100)
# Creating Glossy Node
glossy_node = group.nodes.new(type='ShaderNodeBsdfGlossy')
glossy_node.location = (300, 250)
# Creating Mix Shader Node
mix_shader_node = group.nodes.new(type='ShaderNodeMixShader')
mix_shader_node.location = (450, 100)
# Creating Links Between Nodes
group.links.new(diffuse_node.outputs["BSDF"], mix_shader_node.inputs[1])
group.links.new(glossy_node.outputs["BSDF"], mix_shader_node.inputs[2])
group.links.new(input_node.outputs["Diffuse Color"], diffuse_node.inputs[0])
group.links.new(input_node.outputs["Glossy Color"], glossy_node.inputs[0])
group.links.new(input_node.outputs["Mix Factor"], mix_shader_node.inputs[0])
group.links.new(input_node.outputs["Glossyness"], glossy_node.inputs[1])
group.links.new(output_node.inputs["Diffuse Color"], diffuse_node.outputs[0])
group.links.new(output_node.inputs["Glossy Color"], glossy_node.outputs[0])
group.links.new(output_node.inputs["Mix Output"], mix_shader_node.outputs[0])
# Putting Node Group to the node editor
tree = bpy.context.object.active_material.node_tree
group_node = tree.nodes.new("ShaderNodeGroup")
group_node.node_tree = group
group_node.location = (-40, 300)
group_node.use_custom_color = True
group_node.color = (1, 0.341, 0.034)
group_node.width = 250
shader_node_output_material_node = tree.nodes["Material Output"]
links = tree.links
links.new(group_node.outputs[0], shader_node_output_material_node.inputs[0])
class TestMaterial_PT_layout_panel(bpy.types.Panel):
bl_label = "Test Material Node"
bl_category = "Test Material"
bl_space_type = "VIEW_3D"
bl_region_type = "UI"
def draw(self, context):
layout = self.layout
layout.operator("test_material.add_material", icon='IMPORT')
classes = (TestMaterial_OT_add_material, TestMaterial_PT_layout_panel)
def register():
for cls in classes:
bpy.utils.register_class(cls)
def unregister():
for cls in classes:
bpy.utils.unregister_class(cls)
if __name__ == "__main__":
register()