The highlighted lines are the lines created to generate the “Light Import” batch widget command. The other code is a copy of code using the batch widget template “WidgetName.py”. You can see a detailed description on the Create a custom Batch Widget setcion.
This batch widget was created for tutorial purposes.

Light Import

Description: Import the light reference “light_shot.mb”, duplicate some lights and parent constraint they to some character animated locators cached with the batch widget “Alembic Cache”. In the Overview section you can see a playblast resulting of this process, which playblast was generated with the “Playblast” batch widget. 😉

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#===============================================================================
# #Autor: Rosenio Pinto
# #e-mail: kenio3d@gmail.com
# #
# # This is a batch widget example used for tutorial purpose
# #
#===============================================================================
from BatchWidgetEngine import *

WIDGET_NAME     = 'Light Import'
WIDGET_TYPE     = 'RENDER'
WIDGET_DESC     = 'Import the lights on the scene.'
WIDGET_SETTINGS = {'custom_list':[], 'custom_vale':''}

class LightImport_widget(BatchWidgetEngine):
    name        = "LightImport"
   
    def __init__(self, scene_info={}):
        super(LightImport_widget, self).__init__(scene_info)
       
        self.reference_type_level_on = False
        self.reference_level_on      = True
       
        self.onStart(self.scene_info)
       
    #===========================================================================
    # #The starter function
    #===========================================================================
    def onStart(self, scene_info):
        #===================================================================
        # #On Start level event commands here
        #===================================================================
       
        #=======================================================================
        # #Reference the light
        #=======================================================================
        cmds.file('scenes/REF/LOOKDEV/light_SHOT.mb', reference=True, namespace='')
        #===================================================================
        # #On Start level event commands here
        #===================================================================
       
        return self.run()
   
    #===========================================================================
    # #Run on the scene
    #===========================================================================
    def scene_level_event(self, scene_info):
        '''Scene level event'''

        #===================================================================
        # #Scene level event commands here
        #===================================================================
       
        #=======================================================================
        # #Parent a character light to the null on the extra cache global group
        #=======================================================================
        if cmds.objExists('EXTRA_CACHE_GLOBAL:NULL_loc'):
            char_light = cmds.duplicate('*:character_light')[0]
            cmds.parentConstraint('EXTRA_CACHE_GLOBAL:NULL_loc', char_light)
            cmds.setAttr(char_light+'.color', 0.0, 0.1, 0.7, type='double3')
            cmds.setAttr(char_light+'.intensity', 100)
            cmds.setAttr(char_light+'.visibility', True)
           
        #===================================================================
        # #Scene level event commands here
        #===================================================================

    #===========================================================================
    # #Run for each reference type
    #===========================================================================
    def reference_type_level_event(self, reference_type):
        '''Reference type event'''
       
        #===================================================================
        # #Reference type level event commands here
        #===================================================================
        # 'CODE HERE'
        #===================================================================
        # #Reference type level event commands here
        #===================================================================

    #===========================================================================
    # #Run for each reference
    #===========================================================================
    def reference_level_event(self, scene_info, reference_type, reference_name, isCamera):
        '''Reference level event'''
       
        #===================================================================
        # #Reference level event commands here
        #===================================================================
        # 'CODE HERE'
       
        #=======================================================================
        # #Handle if reference is of type CAMERA
        #=======================================================================
        if isCamera:
            print 'Camera name: %s'%reference_name
       

        #=======================================================================
        # #Parent constrain the light if the refs are the custom_list
        #=======================================================================
        if reference_name in WIDGET_SETTINGS['custom_list']:
            char_light = cmds.duplicate('*:character_light')[0]
            cmds.parentConstraint(reference_name+':move_all_loc', char_light)
            cmds.setAttr(char_light+'.visibility', True)
       
        #=======================================================================
        # #Parent the point light to the prop sphere
        #=======================================================================
        if WIDGET_SETTINGS['custom_value']:
            if (reference_type == 'PROP') and (reference_name == WIDGET_SETTINGS['custom_value']):
                cmds.parentConstraint(reference_name+':move_all_loc', '*:point_light')

        #===================================================================
        # #Reference level event commands here
        #===================================================================

    #===========================================================================
    # #Last function called
    #===========================================================================
    def onEnd(self, scene_info):

        #===================================================================
        # #On end level event commands here
        #===================================================================

        #=======================================================================
        # #Save the scene
        #=======================================================================
        cmds.file(save=True, f=True)
       

        #===================================================================
        # #On end level event commands here
        #===================================================================
        return scene_info
       
   
   
   
#===============================================================================
# # The function that returns the class from external tools
#===============================================================================
def main(sceneInfo={}):
    return LightImport_widget(sceneInfo)