SVN maintenance.
[blender.git] / release / scripts / startup / bl_operators / view3d.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 # <pep8-80 compliant>
20
21 import bpy
22 from bpy.types import Operator
23
24
25 class VIEW3D_OT_edit_mesh_extrude_individual_move(Operator):
26     "Extrude individual elements and move"
27     bl_label = "Extrude Individual and Move"
28     bl_idname = "view3d.edit_mesh_extrude_individual_move"
29
30     def execute(self, context):
31         mesh = context.object.data
32         select_mode = context.tool_settings.mesh_select_mode
33
34         totface = mesh.total_face_sel
35         totedge = mesh.total_edge_sel
36         # totvert = mesh.total_vert_sel
37
38         if select_mode[2] and totface == 1:
39             bpy.ops.mesh.extrude_region_move('INVOKE_REGION_WIN', TRANSFORM_OT_translate={"constraint_orientation": 'NORMAL', "constraint_axis": (False, False, True)})
40         elif select_mode[2] and totface > 1:
41             bpy.ops.mesh.extrude_faces_move('INVOKE_REGION_WIN')
42         elif select_mode[1] and totedge >= 1:
43             bpy.ops.mesh.extrude_edges_move('INVOKE_REGION_WIN')
44         else:
45             bpy.ops.mesh.extrude_vertices_move('INVOKE_REGION_WIN')
46
47         # ignore return from operators above because they are 'RUNNING_MODAL', and cause this one not to be freed. [#24671]
48         return {'FINISHED'}
49
50     def invoke(self, context, event):
51         return self.execute(context)
52
53
54 class VIEW3D_OT_edit_mesh_extrude_move(Operator):
55     "Extrude and move along normals"
56     bl_label = "Extrude and Move on Normals"
57     bl_idname = "view3d.edit_mesh_extrude_move_normal"
58
59     def execute(self, context):
60         mesh = context.object.data
61
62         totface = mesh.total_face_sel
63         totedge = mesh.total_edge_sel
64         # totvert = mesh.total_vert_sel
65
66         if totface >= 1:
67             bpy.ops.mesh.extrude_region_move('INVOKE_REGION_WIN', TRANSFORM_OT_translate={"constraint_orientation": 'NORMAL', "constraint_axis": (False, False, True)})
68         elif totedge == 1:
69             bpy.ops.mesh.extrude_region_move('INVOKE_REGION_WIN', TRANSFORM_OT_translate={"constraint_orientation": 'NORMAL', "constraint_axis": (True, True, False)})
70         else:
71             bpy.ops.mesh.extrude_region_move('INVOKE_REGION_WIN')
72
73         # ignore return from operators above because they are 'RUNNING_MODAL', and cause this one not to be freed. [#24671]
74         return {'FINISHED'}
75
76     def invoke(self, context, event):
77         return self.execute(context)