Node cycles python code

Hi,

To learn python, i’m coding a little Addon to parameter lights in the T panel.
Right now, I can Add lights, change type, size etc, but I d’ont find the good operator to add in my code.


I would like to add color and strength.

My current code :


import bpy


class LampsParametersAddLamps(bpy.types.Panel):
   
    bl_label = "Add Lamps"
    bl_idname = "OBJECT_PT_Lamps_Add"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'TOOLS'
    bl_category = "Tools"
    
    def draw(self, context):
        layout = self.layout
        layout.operator("object.lamp_add", text="Add Lamp", icon='LAMP_AREA')
    
    
class LampsParameters(bpy.types.Panel):
   
    bl_label = "Lamps Parameters"
    bl_idname = "OBJECT_PT_Lamps_Parameters"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'TOOLS'
    bl_category = "Tools"
    
    
    
    def draw(self, context):
        layout = self.layout
        
        obj = context.object
        row = layout.row(align=True)
        
        if context.object.data.type == 'AREA':
            row.prop(obj, "name", text="", icon='LAMP_AREA')
            
        if context.object.data.type == 'HEMI':    
            row.prop(obj, "name", text="", icon='LAMP_HEMI')   
        
        if context.object.data.type == 'SPOT':    
            row.prop(obj, "name", text="", icon='LAMP_SPOT')
        
        if context.object.data.type == 'SUN':    
            row.prop(obj, "name", text="", icon='LAMP_SUN')    
            
        if context.object.data.type == 'POINT':    
            row.prop(obj, "name", text="", icon='LAMP_POINT')     
               
        row.prop(context.object, "hide", icon='VISIBLE_IPO_ON', text="")
        row.prop(context.object, "hide_select", icon='RESTRICT_SELECT_OFF', text="")
        row.prop(context.object, "hide_render", icon='RESTRICT_RENDER_OFF', text="")
        layout.prop(context.object.data, "type", text="Type ") 
        
        if context.object.data.type in {'POINT', 'SUN'}:
            layout.prop(context.object.data, "shadow_soft_size", text="Size")
            row = layout.row(align=True)
            row.prop(context.object.data.cycles, "use_multiple_importance_sampling", text="MIS")  
            row.prop(context.object.data.cycles, "cast_shadow", text="Shadow")
            
        if context.object.data.type == 'AREA':
            layout.prop(context.object.data, "shape", text="")
            
            if context.object.data.shape == 'SQUARE':
                layout.prop(context.object.data, "size")
                
            elif context.object.data.shape == 'RECTANGLE':
                layout.prop(context.object.data, "size")
                layout.prop(context.object.data, "size_y")
            row = layout.row()
            row.prop(context.object.data.cycles, "use_multiple_importance_sampling", text="MIS")  
            row.prop(context.object.data.cycles, "cast_shadow", text="Shadow")    
        
        if context.object.data.type == 'HEMI':
            row = layout.row(align=True)
            row.prop(context.object.data.cycles, "use_multiple_importance_sampling", text="MIS")  
            row.prop(context.object.data.cycles, "cast_shadow", text="Shadow")
            layout.label(text="Not supported, interpreted as sun lamp")
            
        if context.object.data.type == 'SPOT':
            layout.prop(context.object.data, "shadow_soft_size", text="Size")
            row = layout.row(align=True)
            row.prop(context.object.data.cycles, "use_multiple_importance_sampling", text="MIS")  
            row.prop(context.object.data.cycles, "cast_shadow", text="Shadow")
            layout.label("Spot Shape :")
            layout.prop(context.object.data, "spot_size", text="Size")
            layout.prop(context.object.data, "spot_blend", text="Blend", slider=True)
            layout.prop(context.object.data, "show_cone")
        
                 
            
        node = find_node(context.object, 'OUTPUT_LAMP')    
        layout.prop(bpy.data.node_groups["Shader Nodetree"].nodes["Emission"].inputs[1], "default_value" )
       
def register():
    bpy.utils.register_class(LampsParametersAddLamps)
    bpy.utils.register_class(LampsParameters)
    
def unregister():
    bpy.utils.unregister_class(LampsParametersAddLamps)
    bpy.utils.unregister_class(LampsParameters)
    
    
if __name__ == "__main__":
    register()



I tested this code, but it’s not good.


node = find_node(context.object, 'OUTPUT_LAMP')    
layout.prop(bpy.data.node_groups["Shader Nodetree"].nodes["Emission"].inputs[1], "default_value" )

I have this error.

http://uppix.3dvf.com/images/nji5.png

Thx for your help :wink:

I give you part of a script to add cycles lamps
but first you have to test if you are in cycles or BL !



def addlampcycles1():
	
	global cycleson,layers
	
	bpy.ops.object.lamp_add(type='HEMI', view_align=False, location=(0.0, 0.0, 10.0), rotation=(1.537930, 0.711540, 3.687180), layers=(layers))
	lamp1 = bpy.context.object
	
	
	bpy.ops.object.lamp_add(type='AREA', view_align=False, location=(-5.0, 7.0, 5.0), rotation=(1.537930, 0.711540, 3.687180), layers=(layers))
	lamp2 = bpy.context.object
	
	
	
	
	### Configure Lighting Setup ###
	
	lamp1.name = 'Hemi1'
	lamp2.name = 'Area1'
	
	
	
	lamp1.data.energy = 0.4
	lamp1.data.distance = 15.0
	lamp1.data.use_specular = False 
	lamp1.data.color=(1.0,1.0,1.0)
#   lamp1.data.size = 10
	
	lamp1.data.use_nodes=True					# Make lamp in cycles   add nodes
	
	
	lamp2.data.energy = 0.25
	lamp2.data.distance = 15.0
	lamp2.data.shadow_method = 'RAY_SHADOW'
	lamp2.data.shadow_ray_samples_x = 4
	lamp2.data.color=(1.0,1.0,1.0)
	
	lamp2.data.use_nodes=True					# Make lamp in cycles   add nodes
	
	
	




happy bl

thx :wink:

My problem is not to add a lamp, that’s work on my code, I want to add the strength and Color the te parameters of the actual lamp in the T panel.

Salut Cédric,

c’est pas plutôt l’imput zéro:
inputs[1]

layout.prop(bpy.data.node_groups[“Shader Nodetree”].nodes[“Emission”].inputs[0], “default_value”)

à 1ère vue?

EDIT: non j’ai compris tu parlais de la puissance…je cherche…

EDIT 2: ton problème vient de la fonction find_node() et pas de ton panneau.
Cette fonction fait-elle parti de bpy pour la 2.72?
Blender ne trouve trouve pas le fonction find_node() mais s’il l’avait, il trouverai ton node…cqfd

pourquoi il ne connait pas la fonction find_node(), c’est un autre mystère…

EDIT 3: il me semble comprendre que tu as copier un code dans autre add-on qui possédait cette fonction défini dans ces classes, ailleurs dans le fichier.
Recherche où tu as regarder pour emprunter cette fonction find_node()
car actuellement, cette fonction n’est pas défini dans ta classe!!

Oui mais même en corrigeant, ça ne fonctionne pas.
Première fois que je m’attaque aux nodes cycles, j’ai du mal ^^

hello Cédric, j’ai compléter ma réponse…au dessus

J’ai fait un edit source sur le color de la lampe.

Même en copiant le find node ça ne fonctionne pas.

De base même en copiant ce qui est dans les properties pour les lampes, ça ne fonctionne pas, pour ça que mon code est différent.
Je doit trouver comment écrire l’operator pour que ça fonctionne.

non, c’est la fonction find_node() qui n’est pas défini dans ton add-on, c’est simple!

Blender ne sait pas de quelle fonction find_node() tu parles…

tu dois utiliser cette collection pour les node du matériaux contextuel afin de trouver l’imput du node emission actif:

bpy.context.object.active_material.node_tree

à compléter…par ta définition de la fonction find_node()
JE REPETE: cette fonction find_node() vient d’un autre add-on!

bpy.data.node_groups[“Shader Nodetree”].nodes[“Emission”].inputs[1].default_value"

en plus ton noeud “shader Nodetree” doit être créé par une fonction pour qu’il soit en mémoire de ton blend.
Il ne peut pas le trouver avec ton add-on dans l’état car tu n’as aucune fonction qui a créé ce groupe de noeuds
Il faut d’abord que tu crée une fonction pour créer ce groupe de noeud avec un noeud emmision de base.
et ensuite dans ton panneau tu pourras appeler ce noeud avec sa valeur paramètre.

bpy.data.node_groups[“Shader Nodetree”].nodes[“Emission”].inputs[1].default_value"

Voilà mes explications!

Ok thx je test ca ; )

qu’est ce que le T panel a faire avec les lampes ?

les donnees sont de l’autre cote a droite user preference data pour les lampes!

et toute les fonctions doit etre defini sinon devient une error de compilation!

salut

Je fais un addon qui me donne accès à toutes les lampes d’un coup et à la cam pour gagner du temps, donc je le met dans le panneau T tout simplement ^^

Exercising my French by reading a BlenderArtists thread… :stuck_out_tongue:

Hi RickyBlender, very well you speak a little french, not?

Antoni4040, you are welcome! Bien le bonjour de France et bonne journée.
A bientôt.
Spirou4D

I still not have found my code yet.

I would like add the possibility to orient the lamp/camera bye the view orientation when I create one.

The problème is that I don’t find the good code.

The code blender give me is :


bpy.ops.object.lamp_add(type='AREA', view_align=True, location=(0, 0, 0), rotation=(0.965999, -2.15031e-007, 0.0910001), layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))


bpy.data.window_managers["WinMan"].(null) = True

And when creating object or lamp, I need to activate the align to view in the window manager like in the code.
But if I copy and run this code, that dosn’t work.

Any idea for this ?

et si tu lui appliques un modifier track_to camera…
Qu’est ce que ça fait?

Je sais bien que tu veux tourner ta lampe mais pour voir…
ou alors capte le xyz de l’axe de la camera et envoie les à la lampe corrigé…en négatif.

Je connais la commande ctrl+alt+0 et son code pour placer la cam, mais pas pour copier les coordonnées de la vue 3D sans cam.

Le but est de créer une lampe ou une cam et de cliquer sur le bouton “align to view” si on le veut.

Oui je sais j’avais déjà demandé ça à Lapineige en discutant d’un type sur Blenderartist qui en avait besoin…moi j’avais pas le temps de m’en occuper.

Je voulais dire qu’il faut obtenir par python la direction Z (axe de vue) de la vue3D et envoyer les coordonnées à la rotation à ta camera ou lampe créée.
Ce sont les mêmes mais inversées mais il faut les calculer avec python. C’est pas tout cuit.
Commence par chercher dans tes add-ons, avec notepad, fait une recherche dans un dossier d’add-on sur une fonction particulière ou bien cherche toi même quelle add-on utilise des cameras ou dirigent des camera (camera rig, camera FX, etc yen a plein)
et récupère des fonctions déjà écrites que tu peux améliorer…
C’est du boulot mais pas insurmontable.

Ciao
Spirou4D

ouep, ou j’attend lapineige ^^ hu hu hu
Je vais chercher, on verra bien !

Sinon, j’ai ajouté la camera avec la possibilité de cacher ce qui ne nous intéresse pas.

Le but c’est de tout avoir au même endroit, bon, là c’est en fonction de la sélection, mais j’espère pouroir tout afficher histoire d’avoir toutes les lampes d’un coup et pourquoi pas en connecter les unes au autre pour avoir les mêmes paramètres.
Pareil pour les cameras.