Amaranth Addon
[blender-addons-contrib.git] / amaranth / render / meshlight_select.py
1 #  This program is free software; you can redistribute it and/or
2 #  modify it under the terms of the GNU General Public License
3 #  as published by the Free Software Foundation; either version 2
4 #  of the License, or (at your option) any later version.
5 #
6 #  This program is distributed in the hope that it will be useful,
7 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
8 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9 #  GNU General Public License for more details.
10 #
11 #  You should have received a copy of the GNU General Public License
12 #  along with this program; if not, write to the Free Software Foundation,
13 #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
14 """
15 Select Meshlights
16
17 Select all the meshes that emit light. On the header of the 3D View, top
18 of the select menu.
19 """
20
21 import bpy
22 from amaranth import utils
23
24
25 class AMTH_OBJECT_OT_select_meshlights(bpy.types.Operator):
26
27     """Select light emitting meshes"""
28     bl_idname = "object.select_meshlights"
29     bl_label = "Select Meshlights"
30     bl_options = {"UNDO"}
31
32     @classmethod
33     def poll(cls, context):
34         return context.scene.render.engine == "CYCLES"
35
36     def execute(self, context):
37         # Deselect everything first
38         bpy.ops.object.select_all(action="DESELECT")
39
40         for ob in context.scene.objects:
41             if utils.cycles_is_emission(context, ob):
42                 ob.select = True
43                 context.scene.objects.active = ob
44
45         if not context.selected_objects and not context.scene.objects.active:
46             self.report({"INFO"}, "No meshlights to select")
47
48         return {"FINISHED"}
49
50
51 def button_select_meshlights(self, context):
52     if utils.cycles_exists() and utils.cycles_active(context):
53         self.layout.operator('object.select_meshlights', icon="LAMP_SUN")
54
55
56 def register():
57     bpy.utils.register_class(AMTH_OBJECT_OT_select_meshlights)
58     bpy.types.VIEW3D_MT_select_object.append(button_select_meshlights)
59
60
61 def unregister():
62     bpy.utils.unregister_class(AMTH_OBJECT_OT_select_meshlights)
63     bpy.types.VIEW3D_MT_select_object.remove(button_select_meshlights)