addons-contrib: more view_layer syntax updates
[blender-addons-contrib.git] / oscurart_worn_edges_map.py
1 # ##### BEGIN GPL LICENSE BLOCK #####
2 #
3 #  This program is free software; you can redistribute it and/or
4 #  modify it under the terms of the GNU General Public License
5 #  as published by the Free Software Foundation; either version 2
6 #  of the License, or (at your option) any later version.
7 #
8 #  This program is distributed in the hope that it will be useful,
9 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 #  GNU General Public License for more details.
12 #
13 #  You should have received a copy of the GNU General Public License
14 #  along with this program; if not, write to the Free Software Foundation,
15 #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 #
17 # ##### END GPL LICENSE BLOCK #####
18
19 bl_info = {
20     "name": "Worn Edges",
21     "author": "Oscurart",
22     "version": (1, 2),
23     "blender": (2, 68, 0),
24     "location": "Vertex Paint > Paint > Worn Edges",
25     "description": "Create a Vertex Color map with Worn Edges",
26     "warning": "",
27     "wiki_url": "",
28     "tracker_url": "https://developer.blender.org/maniphest/task/edit/form/2/",
29     "category": "Paint"}
30
31 import bpy
32 from random import random
33 import bmesh
34
35
36 def CreateWornEdges(context, factor):
37     actobj = bpy.context.object
38
39     bpy.ops.object.mode_set(mode="EDIT")
40     bm = bmesh.from_edit_mesh(actobj.data)
41
42     sf = [(vert.calc_shell_factor() - 1.0) * factor for vert in bm.verts[:]]
43
44     bpy.ops.object.mode_set(mode="VERTEX_PAINT")
45     purge = {}
46
47     for ind, loop in enumerate(bpy.context.object.data.loops[:]):
48         if loop.vertex_index not in purge:
49             purge[loop.vertex_index] = [ind]
50         else:
51             purge[loop.vertex_index].append(ind)
52
53     for vert in actobj.data.vertices[:]:
54         if vert.select:
55             ran = (sf[vert.index], sf[vert.index], sf[vert.index])
56             for i in purge[vert.index]:
57                 actobj.data.vertex_colors.active.data[i].color = ran
58     actobj.data.update()
59
60
61 class OscurartWorn(bpy.types.Operator):
62     """Tooltip"""
63     bl_idname = "paint.worn_edges"
64     bl_label = "Worn Edges Map"
65     bl_options = {"REGISTER", "UNDO"}
66
67     @classmethod
68     def poll(cls, context):
69         return context.active_object is not None
70
71     factor: bpy.props.FloatProperty(name="Factor", min=.001, default=1)
72
73     def execute(self, context):
74         CreateWornEdges(context, self.factor)
75         return {'FINISHED'}
76
77
78 def add_osc_futurism_button(self, context):
79     self.layout.operator(
80         OscurartWorn.bl_idname,
81         text="Worn Edges",
82         icon="PLUGIN")
83
84
85 def register():
86     bpy.utils.register_class(OscurartWorn)
87     bpy.types.VIEW3D_MT_paint_vertex.append(add_osc_futurism_button)
88
89
90 def unregister():
91     bpy.utils.unregister_class(OscurartWorn)
92     bpy.types.VIEW3D_MT_paint_vertex.remove(add_osc_futurism_button)
93
94
95 if __name__ == '__main__':
96     register()