2009-11-01 15:21:20 +00:00
# ##### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
2009-11-03 07:23:02 +00:00
#
2009-11-01 15:21:20 +00:00
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
2009-11-03 07:23:02 +00:00
#
2009-11-01 15:21:20 +00:00
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
2010-02-12 13:34:04 +00:00
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
2009-11-01 15:21:20 +00:00
#
# ##### END GPL LICENSE BLOCK #####
2009-10-31 20:16:59 +00:00
2009-10-31 23:35:56 +00:00
# <pep8 compliant>
2009-07-11 13:32:20 +00:00
import bpy
2011-06-15 11:41:15 +00:00
from blf import gettext as _
2009-10-12 21:06:03 +00:00
2011-06-24 03:30:50 +00:00
2009-07-24 22:09:30 +00:00
class VIEW3D_HT_header ( bpy . types . Header ) :
2009-10-31 19:31:45 +00:00
bl_space_type = ' VIEW_3D '
def draw ( self , context ) :
layout = self . layout
2009-11-29 02:42:47 +00:00
view = context . space_data
2009-10-31 19:31:45 +00:00
mode_string = context . mode
edit_object = context . edit_object
2009-11-28 23:37:56 +00:00
obj = context . active_object
2010-01-16 14:31:21 +00:00
toolsettings = context . tool_settings
2009-12-04 17:54:48 +00:00
2010-05-20 03:52:35 +00:00
row = layout . row ( align = True )
2009-10-31 19:31:45 +00:00
row . template_header ( )
2009-12-04 17:54:48 +00:00
2009-10-31 19:31:45 +00:00
# Menus
if context . area . show_menus :
2010-05-20 03:52:35 +00:00
sub = row . row ( align = True )
2010-06-09 19:12:03 +00:00
2009-11-23 00:27:30 +00:00
sub . menu ( " VIEW3D_MT_view " )
2009-10-31 19:31:45 +00:00
# Select Menu
2011-03-07 13:23:45 +00:00
if mode_string not in { ' EDIT_TEXT ' , ' SCULPT ' , ' PAINT_WEIGHT ' , ' PAINT_VERTEX ' , ' PAINT_TEXTURE ' } :
2009-11-23 00:27:30 +00:00
sub . menu ( " VIEW3D_MT_select_ %s " % mode_string . lower ( ) )
2009-10-31 19:31:45 +00:00
if edit_object :
2009-11-23 00:27:30 +00:00
sub . menu ( " VIEW3D_MT_edit_ %s " % edit_object . type . lower ( ) )
2009-11-28 23:37:56 +00:00
elif obj :
2011-03-07 13:23:45 +00:00
if mode_string not in { ' PAINT_TEXTURE ' } :
2009-11-23 00:27:30 +00:00
sub . menu ( " VIEW3D_MT_ %s " % mode_string . lower ( ) )
2009-10-31 19:31:45 +00:00
else :
2009-11-23 00:27:30 +00:00
sub . menu ( " VIEW3D_MT_object " )
2009-10-31 19:31:45 +00:00
2010-05-20 03:52:35 +00:00
row = layout . row ( )
2009-12-03 09:49:21 +00:00
row . template_header_3D ( )
2009-07-24 22:09:30 +00:00
2010-01-30 01:25:02 +00:00
# do in C for now since these buttons cant be both toggle AND exclusive.
'''
2010-01-16 14:31:21 +00:00
if obj and obj . mode == ' EDIT ' and obj . type == ' MESH ' :
row_sub = row . row ( align = True )
2010-08-18 03:24:52 +00:00
row_sub . prop ( toolsettings , " mesh_select_mode " , text = " " , index = 0 , icon = ' VERTEXSEL ' )
row_sub . prop ( toolsettings , " mesh_select_mode " , text = " " , index = 1 , icon = ' EDGESEL ' )
row_sub . prop ( toolsettings , " mesh_select_mode " , text = " " , index = 2 , icon = ' FACESEL ' )
2010-01-30 01:25:02 +00:00
'''
2010-02-12 11:34:25 +00:00
if obj :
# Particle edit
if obj . mode == ' PARTICLE_EDIT ' :
2010-08-20 06:09:58 +00:00
row . prop ( toolsettings . particle_edit , " select_mode " , text = " " , expand = True , toggle = True )
2010-02-12 11:34:25 +00:00
# Occlude geometry
2011-03-07 13:23:45 +00:00
if view . viewport_shade in { ' SOLID ' , ' SHADED ' , ' TEXTURED ' } and ( obj . mode == ' PARTICLE_EDIT ' or ( obj . mode == ' EDIT ' and obj . type == ' MESH ' ) ) :
2010-08-17 07:49:53 +00:00
row . prop ( view , " use_occlude_geometry " , text = " " )
2010-02-12 11:34:25 +00:00
# Proportional editing
2011-03-07 13:23:45 +00:00
if obj . mode in { ' EDIT ' , ' PARTICLE_EDIT ' } :
2010-02-12 11:34:25 +00:00
row = layout . row ( align = True )
2010-08-18 03:24:52 +00:00
row . prop ( toolsettings , " proportional_edit " , text = " " , icon_only = True )
if toolsettings . proportional_edit != ' DISABLED ' :
row . prop ( toolsettings , " proportional_edit_falloff " , text = " " , icon_only = True )
2010-08-02 02:55:12 +00:00
elif obj . mode == ' OBJECT ' :
row = layout . row ( align = True )
2010-08-18 03:24:52 +00:00
row . prop ( toolsettings , " use_proportional_edit_objects " , text = " " , icon_only = True )
if toolsettings . use_proportional_edit_objects :
row . prop ( toolsettings , " proportional_edit_falloff " , text = " " , icon_only = True )
2010-02-22 23:32:58 +00:00
2009-11-28 22:35:56 +00:00
# Snap
row = layout . row ( align = True )
2010-08-18 03:42:26 +00:00
row . prop ( toolsettings , " use_snap " , text = " " )
2009-11-28 22:35:56 +00:00
row . prop ( toolsettings , " snap_element " , text = " " , icon_only = True )
if toolsettings . snap_element != ' INCREMENT ' :
2009-12-02 01:38:54 +00:00
row . prop ( toolsettings , " snap_target " , text = " " )
2009-11-29 02:42:47 +00:00
if obj and obj . mode == ' OBJECT ' :
2010-08-18 03:24:52 +00:00
row . prop ( toolsettings , " use_snap_align_rotation " , text = " " )
2009-11-28 22:35:56 +00:00
if toolsettings . snap_element == ' VOLUME ' :
2010-08-18 03:24:52 +00:00
row . prop ( toolsettings , " use_snap_peel_object " , text = " " )
2009-11-28 22:35:56 +00:00
elif toolsettings . snap_element == ' FACE ' :
2010-08-18 03:24:52 +00:00
row . prop ( toolsettings , " use_snap_project " , text = " " )
2011-06-24 03:30:50 +00:00
if toolsettings . use_snap_project and obj . mode == ' EDIT ' :
row . prop ( toolsettings , " use_snap_project_self " , text = " " )
2009-11-28 22:35:56 +00:00
# OpenGL render
row = layout . row ( align = True )
2010-03-08 16:36:53 +00:00
row . operator ( " render.opengl " , text = " " , icon = ' RENDER_STILL ' )
props = row . operator ( " render.opengl " , text = " " , icon = ' RENDER_ANIMATION ' )
2009-11-28 22:35:56 +00:00
props . animation = True
# Pose
2009-11-29 02:42:47 +00:00
if obj and obj . mode == ' POSE ' :
2009-11-28 22:35:56 +00:00
row = layout . row ( align = True )
2009-12-10 10:23:53 +00:00
row . operator ( " pose.copy " , text = " " , icon = ' COPYDOWN ' )
row . operator ( " pose.paste " , text = " " , icon = ' PASTEDOWN ' )
props = row . operator ( " pose.paste " , text = " " , icon = ' PASTEFLIPDOWN ' )
2009-11-28 22:35:56 +00:00
props . flipped = 1
2009-08-15 20:21:49 +00:00
# ********** Menu **********
2009-07-24 22:09:30 +00:00
2009-08-23 22:13:56 +00:00
# ********** Utilities **********
2009-10-31 23:35:56 +00:00
2010-08-02 02:55:12 +00:00
class ShowHideMenu ( ) :
2011-06-20 10:07:46 +00:00
bl_label = _ ( " Show/Hide " )
2009-10-31 19:31:45 +00:00
_operator_name = " "
2009-08-23 22:13:56 +00:00
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
2011-06-20 10:07:46 +00:00
layout . operator ( " %s .reveal " % self . _operator_name , text = _ ( " Show Hidden " ) )
layout . operator ( " %s .hide " % self . _operator_name , text = _ ( " Hide Selected " ) )
layout . operator ( " %s .hide " % self . _operator_name , text = _ ( " Hide Unselected " ) ) . unselected = True
2009-08-23 22:13:56 +00:00
2009-10-31 23:35:56 +00:00
2009-11-22 06:19:30 +00:00
class VIEW3D_MT_transform ( bpy . types . Menu ) :
2011-06-20 10:07:46 +00:00
bl_label = _ ( " Transform " )
2009-11-22 06:19:30 +00:00
# TODO: get rid of the custom text strings?
def draw ( self , context ) :
layout = self . layout
2009-11-28 23:37:56 +00:00
2011-06-20 10:07:46 +00:00
layout . operator ( " transform.translate " , text = _ ( " Grab/Move " ) )
2009-11-22 06:19:30 +00:00
# TODO: sub-menu for grab per axis
2011-06-20 10:07:46 +00:00
layout . operator ( " transform.rotate " , text = _ ( " Rotate " ) )
2009-11-22 06:19:30 +00:00
# TODO: sub-menu for rot per axis
2011-06-20 10:07:46 +00:00
layout . operator ( " transform.resize " , text = _ ( " Scale " ) )
2009-11-22 06:19:30 +00:00
# TODO: sub-menu for scale per axis
2009-11-28 23:37:56 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-11-28 23:37:56 +00:00
2011-06-20 10:07:46 +00:00
layout . operator ( " transform.tosphere " , text = _ ( " To Sphere " ) )
layout . operator ( " transform.shear " , text = _ ( " Shear " ) )
layout . operator ( " transform.warp " , text = _ ( " Warp " ) )
layout . operator ( " transform.push_pull " , text = _ ( " Push/Pull " ) )
2010-09-16 07:14:48 +00:00
2011-01-05 17:27:26 +00:00
layout . separator ( )
2011-06-20 10:07:46 +00:00
layout . operator ( " transform.translate " , text = _ ( " Move Texture Space " ) ) . texture_space = True
layout . operator ( " transform.resize " , text = _ ( " Scale Texture Space " ) ) . texture_space = True
2011-01-05 17:27:26 +00:00
layout . separator ( )
2010-09-16 07:14:48 +00:00
obj = context . object
2011-03-07 13:23:45 +00:00
if obj . type == ' ARMATURE ' and obj . mode in { ' EDIT ' , ' POSE ' } and obj . data . draw_type in { ' BBONE ' , ' ENVELOPE ' } :
2011-06-20 10:07:46 +00:00
layout . operator ( " transform.transform " , text = _ ( " Scale Envelope/BBone " ) ) . mode = ' BONE_SIZE '
2010-09-16 07:14:48 +00:00
2009-11-22 06:19:30 +00:00
if context . edit_object and context . edit_object . type == ' ARMATURE ' :
2009-11-23 00:27:30 +00:00
layout . operator ( " armature.align " )
2009-11-22 06:19:30 +00:00
else :
2009-12-02 19:59:57 +00:00
layout . operator_context = ' EXEC_REGION_WIN '
2011-06-20 10:07:46 +00:00
layout . operator ( " transform.transform " , text = _ ( " Align to Transform Orientation " ) ) . mode = ' ALIGN ' # XXX see alignmenu() in edit.c of b2.4x to get this working
2009-11-28 23:37:56 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-11-28 23:37:56 +00:00
2009-11-22 06:19:30 +00:00
layout . operator_context = ' EXEC_AREA '
2009-11-28 23:37:56 +00:00
2011-06-20 10:07:46 +00:00
layout . operator ( " object.origin_set " , text = _ ( " Geometry to Origin " ) ) . type = ' GEOMETRY_ORIGIN '
layout . operator ( " object.origin_set " , text = _ ( " Origin to Geometry " ) ) . type = ' ORIGIN_GEOMETRY '
layout . operator ( " object.origin_set " , text = _ ( " Origin to 3D Cursor " ) ) . type = ' ORIGIN_CURSOR '
2009-11-28 23:37:56 +00:00
2011-04-12 15:12:05 +00:00
layout . separator ( )
layout . operator ( " object.randomize_transform " )
layout . operator ( " object.align " )
2009-11-28 23:37:56 +00:00
2009-11-22 06:19:30 +00:00
class VIEW3D_MT_mirror ( bpy . types . Menu ) :
2011-06-20 10:07:46 +00:00
bl_label = _ ( " Mirror " )
2009-11-22 06:19:30 +00:00
def draw ( self , context ) :
layout = self . layout
2011-06-20 10:07:46 +00:00
layout . operator ( " transform.mirror " , text = _ ( " Interactive Mirror " ) )
2009-11-28 23:37:56 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-11-28 23:37:56 +00:00
2009-11-27 00:34:46 +00:00
layout . operator_context = ' INVOKE_REGION_WIN '
2009-11-28 23:37:56 +00:00
2011-06-20 10:07:46 +00:00
props = layout . operator ( " transform.mirror " , text = _ ( " X Global " ) )
2009-11-22 06:19:30 +00:00
props . constraint_axis = ( True , False , False )
props . constraint_orientation = ' GLOBAL '
2011-06-20 10:07:46 +00:00
props = layout . operator ( " transform.mirror " , text = _ ( " Y Global " ) )
2009-11-22 06:19:30 +00:00
props . constraint_axis = ( False , True , False )
props . constraint_orientation = ' GLOBAL '
2011-06-20 10:07:46 +00:00
props = layout . operator ( " transform.mirror " , text = _ ( " Z Global " ) )
2009-11-22 06:19:30 +00:00
props . constraint_axis = ( False , False , True )
props . constraint_orientation = ' GLOBAL '
2009-11-28 23:37:56 +00:00
2009-11-22 06:19:30 +00:00
if context . edit_object :
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-11-28 23:37:56 +00:00
2011-06-20 10:07:46 +00:00
props = layout . operator ( " transform.mirror " , text = _ ( " X Local " ) )
2009-11-22 06:19:30 +00:00
props . constraint_axis = ( True , False , False )
props . constraint_orientation = ' LOCAL '
2011-06-20 10:07:46 +00:00
props = layout . operator ( " transform.mirror " , text = _ ( " Y Local " ) )
2009-11-22 06:19:30 +00:00
props . constraint_axis = ( False , True , False )
props . constraint_orientation = ' LOCAL '
2011-06-20 10:07:46 +00:00
props = layout . operator ( " transform.mirror " , text = _ ( " Z Local " ) )
2009-11-22 06:19:30 +00:00
props . constraint_axis = ( False , False , True )
props . constraint_orientation = ' LOCAL '
2009-11-28 23:37:56 +00:00
2010-01-15 17:28:00 +00:00
layout . operator ( " object.vertex_group_mirror " )
2009-11-28 23:37:56 +00:00
2009-08-23 22:13:56 +00:00
class VIEW3D_MT_snap ( bpy . types . Menu ) :
2011-06-20 10:07:46 +00:00
bl_label = _ ( " Snap " )
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
2011-06-20 10:07:46 +00:00
layout . operator ( " view3d.snap_selected_to_grid " , text = _ ( " Selection to Grid " ) )
layout . operator ( " view3d.snap_selected_to_cursor " , text = _ ( " Selection to Cursor " ) )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2011-06-20 10:07:46 +00:00
layout . operator ( " view3d.snap_cursor_to_selected " , text = _ ( " Cursor to Selected " ) )
layout . operator ( " view3d.snap_cursor_to_center " , text = _ ( " Cursor to Center " ) )
layout . operator ( " view3d.snap_cursor_to_grid " , text = _ ( " Cursor to Grid " ) )
layout . operator ( " view3d.snap_cursor_to_active " , text = _ ( " Cursor to Active " ) )
2009-08-23 22:13:56 +00:00
2009-11-14 13:35:44 +00:00
2009-12-25 22:16:19 +00:00
class VIEW3D_MT_uv_map ( bpy . types . Menu ) :
2009-11-03 18:20:03 +00:00
bl_label = " UV Mapping "
def draw ( self , context ) :
layout = self . layout
2009-11-23 00:27:30 +00:00
layout . operator ( " uv.unwrap " )
2011-03-31 08:46:41 +00:00
layout . operator_context = ' INVOKE_DEFAULT '
2011-03-29 14:13:11 +00:00
layout . operator ( " uv.smart_project " )
layout . operator ( " uv.lightmap_pack " )
layout . operator ( " uv.follow_active_quads " )
layout . separator ( )
2011-03-31 08:46:41 +00:00
layout . operator_context = ' EXEC_DEFAULT '
2009-11-23 00:27:30 +00:00
layout . operator ( " uv.cube_project " )
layout . operator ( " uv.cylinder_project " )
layout . operator ( " uv.sphere_project " )
2011-03-29 14:13:11 +00:00
layout . separator ( )
2009-11-23 00:27:30 +00:00
layout . operator ( " uv.project_from_view " )
2009-12-21 11:42:31 +00:00
layout . operator ( " uv.project_from_view " , text = " Project from View (Bounds) " ) . scale_to_bounds = True
2009-11-03 18:20:03 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-11-03 18:20:03 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " uv.reset " )
2011-03-30 07:21:41 +00:00
2009-11-03 18:20:03 +00:00
2009-08-15 20:21:49 +00:00
# ********** View menus **********
2009-07-11 13:32:20 +00:00
2009-10-31 23:35:56 +00:00
2009-07-11 13:32:20 +00:00
class VIEW3D_MT_view ( bpy . types . Menu ) :
2011-06-17 03:53:51 +00:00
bl_label = _ ( " View " )
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
2009-12-10 10:23:53 +00:00
layout . operator ( " view3d.properties " , icon = ' MENU_PANEL ' )
2010-01-12 07:50:14 +00:00
layout . operator ( " view3d.toolshelf " , icon = ' MENU_PANEL ' )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2011-06-17 03:53:51 +00:00
layout . operator ( " view3d.viewnumpad " , text = _ ( " Camera " ) ) . type = ' CAMERA '
layout . operator ( " view3d.viewnumpad " , text = _ ( " Top " ) ) . type = ' TOP '
layout . operator ( " view3d.viewnumpad " , text = _ ( " Bottom " ) ) . type = ' BOTTOM '
layout . operator ( " view3d.viewnumpad " , text = _ ( " Front " ) ) . type = ' FRONT '
layout . operator ( " view3d.viewnumpad " , text = _ ( " Back " ) ) . type = ' BACK '
layout . operator ( " view3d.viewnumpad " , text = _ ( " Right " ) ) . type = ' RIGHT '
layout . operator ( " view3d.viewnumpad " , text = _ ( " Left " ) ) . type = ' LEFT '
2009-10-31 19:31:45 +00:00
2011-06-17 03:53:51 +00:00
layout . menu ( " VIEW3D_MT_view_cameras " , text = _ ( " Cameras " ) )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-28 13:39:35 +00:00
layout . operator ( " view3d.view_persportho " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_view_navigation " )
layout . menu ( " VIEW3D_MT_view_align " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-16 13:59:27 +00:00
layout . operator_context = ' INVOKE_REGION_WIN '
2009-10-31 19:31:45 +00:00
2011-06-15 11:41:15 +00:00
layout . operator ( " view3d.clip_border " , text = _ ( " Clipping Border... " ) )
layout . operator ( " view3d.zoom_border " , text = _ ( " Zoom Border... " ) )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2011-06-15 11:41:15 +00:00
layout . operator ( " view3d.layers " , text = _ ( " Show All Layers " ) ) . nr = 0
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2011-06-15 11:41:15 +00:00
layout . operator ( " view3d.localview " , text = _ ( " View Global/Local " ) )
2010-01-14 02:51:17 +00:00
layout . operator ( " view3d.view_selected " )
2009-11-23 00:27:30 +00:00
layout . operator ( " view3d.view_all " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-12-04 17:54:48 +00:00
2011-06-15 11:41:15 +00:00
layout . operator ( " screen.animation_play " , text = _ ( " Playback Animation " ) )
2009-12-04 17:54:48 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-12-04 17:54:48 +00:00
2009-12-03 16:28:50 +00:00
layout . operator ( " screen.area_dupli " )
2009-12-04 00:49:02 +00:00
layout . operator ( " screen.region_quadview " )
2009-12-03 16:28:50 +00:00
layout . operator ( " screen.screen_full_area " )
2009-10-31 23:35:56 +00:00
2009-08-15 20:21:49 +00:00
class VIEW3D_MT_view_navigation ( bpy . types . Menu ) :
2011-06-15 11:41:15 +00:00
bl_label = _ ( " Navigation " )
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
2011-02-18 06:07:41 +00:00
layout . operator_enum ( " view3d.view_orbit " , " type " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2011-02-18 06:07:41 +00:00
layout . operator_enum ( " view3d.view_pan " , " type " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2011-06-15 11:41:15 +00:00
layout . operator ( " view3d.zoom " , text = _ ( " Zoom In " ) ) . delta = 1
layout . operator ( " view3d.zoom " , text = _ ( " Zoom Out " ) ) . delta = - 1
layout . operator ( " view3d.zoom_camera_1_to_1 " , text = _ ( " Zoom Camera 1:1 " ) )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " view3d.fly " )
2009-08-15 20:21:49 +00:00
2009-10-31 23:35:56 +00:00
2009-08-23 22:13:56 +00:00
class VIEW3D_MT_view_align ( bpy . types . Menu ) :
2011-06-15 11:41:15 +00:00
bl_label = _ ( " Align View " )
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_view_align_selected " )
2009-11-06 21:10:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-11-06 21:10:45 +00:00
2011-06-15 11:41:15 +00:00
layout . operator ( " view3d.view_all " , text = _ ( " Center Cursor and View All " ) ) . center = True
layout . operator ( " view3d.camera_to_view " , text = _ ( " Align Active Camera to View " ) )
2010-01-14 02:51:17 +00:00
layout . operator ( " view3d.view_selected " )
2009-11-23 00:27:30 +00:00
layout . operator ( " view3d.view_center_cursor " )
2009-10-31 19:31:45 +00:00
2009-10-31 23:35:56 +00:00
2009-11-06 21:10:45 +00:00
class VIEW3D_MT_view_align_selected ( bpy . types . Menu ) :
2011-06-15 11:41:15 +00:00
bl_label = _ ( " Align View to Selected " )
2009-11-06 21:10:45 +00:00
def draw ( self , context ) :
layout = self . layout
2011-06-15 11:41:15 +00:00
props = layout . operator ( " view3d.viewnumpad " , text = _ ( " Top " ) )
2009-11-06 21:10:45 +00:00
props . align_active = True
props . type = ' TOP '
2011-06-15 11:41:15 +00:00
props = layout . operator ( " view3d.viewnumpad " , text = _ ( " Bottom " ) )
2009-11-06 21:10:45 +00:00
props . align_active = True
props . type = ' BOTTOM '
2011-06-15 11:41:15 +00:00
props = layout . operator ( " view3d.viewnumpad " , text = _ ( " Front " ) )
2009-11-06 21:10:45 +00:00
props . align_active = True
props . type = ' FRONT '
2011-06-15 11:41:15 +00:00
props = layout . operator ( " view3d.viewnumpad " , text = _ ( " Back " ) )
2009-11-06 21:10:45 +00:00
props . align_active = True
props . type = ' BACK '
2011-06-15 11:41:15 +00:00
props = layout . operator ( " view3d.viewnumpad " , text = _ ( " Right " ) )
2009-11-06 21:10:45 +00:00
props . align_active = True
props . type = ' RIGHT '
2011-06-15 11:41:15 +00:00
props = layout . operator ( " view3d.viewnumpad " , text = _ ( " Left " ) )
2009-11-06 21:10:45 +00:00
props . align_active = True
props . type = ' LEFT '
2009-08-23 22:13:56 +00:00
class VIEW3D_MT_view_cameras ( bpy . types . Menu ) :
2011-06-17 03:53:51 +00:00
bl_label = " Cameras "
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
2009-08-23 22:13:56 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " view3d.object_as_camera " )
2011-06-15 11:41:15 +00:00
layout . operator ( " view3d.viewnumpad " , text = _ ( " Active Camera " ) ) . type = ' CAMERA '
2009-08-23 22:13:56 +00:00
2009-08-16 03:40:00 +00:00
# ********** Select menus, suffix from context.mode **********
2009-08-15 19:40:09 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_select_object ( bpy . types . Menu ) :
2011-06-17 03:53:51 +00:00
bl_label = _ ( " Select " )
2009-08-15 19:40:09 +00:00
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " view3d.select_border " )
layout . operator ( " view3d.select_circle " )
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-08-15 19:40:09 +00:00
2011-06-17 03:53:51 +00:00
layout . operator ( " object.select_all " , text = _ ( " Select/Deselect All " ) )
layout . operator ( " object.select_inverse " , text = _ ( " Inverse " ) )
layout . operator ( " object.select_random " , text = _ ( " Random " ) )
layout . operator ( " object.select_mirror " , text = _ ( " Mirror " ) )
layout . operator ( " object.select_by_layer " , text = _ ( " Select All by Layer " ) )
layout . operator_menu_enum ( " object.select_by_type " , " type " , text = _ ( " Select All by Type... " ) )
layout . operator ( " object.select_camera " , text = _ ( " Select Camera " ) )
2009-11-03 07:23:02 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-11-03 07:23:02 +00:00
2011-06-17 03:53:51 +00:00
layout . operator_menu_enum ( " object.select_grouped " , " type " , text = _ ( " Grouped " ) )
layout . operator_menu_enum ( " object.select_linked " , " type " , text = _ ( " Linked " ) )
layout . operator ( " object.select_pattern " , text = _ ( " Select Pattern... " ) )
2009-08-15 19:40:09 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_select_pose ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Select "
def draw ( self , context ) :
layout = self . layout
2009-11-23 00:27:30 +00:00
layout . operator ( " view3d.select_border " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-29 22:16:29 +00:00
layout . operator ( " pose.select_all " , text = " Select/Deselect All " )
2009-11-23 00:27:30 +00:00
layout . operator ( " pose.select_inverse " , text = " Inverse " )
2011-02-23 04:58:08 +00:00
layout . operator ( " pose.select_flip_active " , text = " Flip Active " )
2009-11-23 00:27:30 +00:00
layout . operator ( " pose.select_constraint_target " , text = " Constraint Target " )
layout . operator ( " pose.select_linked " , text = " Linked " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-28 11:32:09 +00:00
layout . operator ( " pose.select_hierarchy " , text = " Parent " ) . direction = ' PARENT '
layout . operator ( " pose.select_hierarchy " , text = " Child " ) . direction = ' CHILD '
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 11:43:38 +00:00
props = layout . operator ( " pose.select_hierarchy " , text = " Extend Parent " )
2009-10-31 19:31:45 +00:00
props . extend = True
props . direction = ' PARENT '
2009-11-23 11:43:38 +00:00
props = layout . operator ( " pose.select_hierarchy " , text = " Extend Child " )
2009-10-31 19:31:45 +00:00
props . extend = True
props . direction = ' CHILD '
2009-12-04 17:54:48 +00:00
2010-01-25 10:16:36 +00:00
layout . separator ( )
layout . operator_menu_enum ( " pose.select_grouped " , " type " , text = " Grouped " )
2009-12-01 14:48:36 +00:00
layout . operator ( " object.select_pattern " , text = " Select Pattern... " )
2009-08-15 19:40:09 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_select_particle ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Select "
def draw ( self , context ) :
layout = self . layout
2009-11-23 00:27:30 +00:00
layout . operator ( " view3d.select_border " )
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-08-15 19:40:09 +00:00
2009-11-29 22:16:29 +00:00
layout . operator ( " particle.select_all " , text = " Select/Deselect All " )
2009-11-23 00:27:30 +00:00
layout . operator ( " particle.select_linked " )
layout . operator ( " particle.select_inverse " )
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " particle.select_more " )
layout . operator ( " particle.select_less " )
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-11-09 08:51:34 +00:00
2010-04-30 01:22:21 +00:00
layout . operator ( " particle.select_roots " , text = " Roots " )
layout . operator ( " particle.select_tips " , text = " Tips " )
2009-11-09 08:51:34 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_select_edit_mesh ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Select "
def draw ( self , context ) :
layout = self . layout
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " view3d.select_border " )
layout . operator ( " view3d.select_circle " )
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-08-15 19:40:09 +00:00
2009-11-29 22:16:29 +00:00
layout . operator ( " mesh.select_all " , text = " Select/Deselect All " )
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.select_inverse " , text = " Inverse " )
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-08-15 19:40:09 +00:00
2010-03-20 05:14:22 +00:00
layout . operator ( " mesh.select_random " , text = " Random " )
layout . operator ( " mesh.select_nth " , text = " Every N Number of Verts " )
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.edges_select_sharp " , text = " Sharp Edges " )
layout . operator ( " mesh.faces_select_linked_flat " , text = " Linked Flat Faces " )
layout . operator ( " mesh.faces_select_interior " , text = " Interior Faces " )
layout . operator ( " mesh.select_axis " , text = " Side of Active " )
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-08-15 19:40:09 +00:00
2009-11-23 11:43:38 +00:00
layout . operator ( " mesh.select_by_number_vertices " , text = " Triangles " ) . type = ' TRIANGLES '
layout . operator ( " mesh.select_by_number_vertices " , text = " Quads " ) . type = ' QUADS '
2010-08-18 03:24:52 +00:00
if context . scene . tool_settings . mesh_select_mode [ 2 ] == False :
2010-03-19 06:57:55 +00:00
layout . operator ( " mesh.select_non_manifold " , text = " Non Manifold " )
2009-11-23 11:43:38 +00:00
layout . operator ( " mesh.select_by_number_vertices " , text = " Loose Verts/Edges " ) . type = ' OTHER '
2010-03-20 05:14:22 +00:00
layout . operator ( " mesh.select_similar " , text = " Similar " )
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.select_less " , text = " Less " )
layout . operator ( " mesh.select_more " , text = " More " )
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.select_mirror " , text = " Mirror " )
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.select_linked " , text = " Linked " )
layout . operator ( " mesh.select_vertex_path " , text = " Vertex Path " )
layout . operator ( " mesh.loop_multi_select " , text = " Edge Loop " )
2009-11-23 11:43:38 +00:00
layout . operator ( " mesh.loop_multi_select " , text = " Edge Ring " ) . ring = True
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.loop_to_region " )
layout . operator ( " mesh.region_to_loop " )
2009-08-15 19:40:09 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_select_edit_curve ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Select "
2009-08-15 19:40:09 +00:00
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " view3d.select_border " )
layout . operator ( " view3d.select_circle " )
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-08-15 19:40:09 +00:00
2009-11-29 22:16:29 +00:00
layout . operator ( " curve.select_all " , text = " Select/Deselect All " )
2009-11-23 00:27:30 +00:00
layout . operator ( " curve.select_inverse " )
layout . operator ( " curve.select_random " )
2010-05-10 17:32:11 +00:00
layout . operator ( " curve.select_nth " , text = " Every Nth Number of Points " )
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " curve.de_select_first " )
layout . operator ( " curve.de_select_last " )
layout . operator ( " curve.select_next " )
layout . operator ( " curve.select_previous " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " curve.select_more " )
layout . operator ( " curve.select_less " )
2009-08-15 19:40:09 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_select_edit_surface ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Select "
def draw ( self , context ) :
layout = self . layout
2009-11-23 00:27:30 +00:00
layout . operator ( " view3d.select_border " )
layout . operator ( " view3d.select_circle " )
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-08-15 19:40:09 +00:00
2009-11-29 22:16:29 +00:00
layout . operator ( " curve.select_all " , text = " Select/Deselect All " )
2009-11-23 00:27:30 +00:00
layout . operator ( " curve.select_inverse " )
layout . operator ( " curve.select_random " )
2010-05-10 17:32:11 +00:00
layout . operator ( " curve.select_nth " , text = " Every Nth Number of Points " )
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " curve.select_row " )
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " curve.select_more " )
layout . operator ( " curve.select_less " )
2009-08-15 19:40:09 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_select_edit_metaball ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Select "
def draw ( self , context ) :
layout = self . layout
2009-11-23 00:27:30 +00:00
layout . operator ( " view3d.select_border " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2011-01-04 13:10:46 +00:00
layout . operator ( " mball.select_all " ) . action = ' TOGGLE '
2009-11-23 00:27:30 +00:00
layout . operator ( " mball.select_inverse_metaelems " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " mball.select_random_metaelems " )
2009-08-15 19:40:09 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_select_edit_lattice ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Select "
def draw ( self , context ) :
layout = self . layout
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " view3d.select_border " )
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-08-15 19:40:09 +00:00
2009-11-29 22:16:29 +00:00
layout . operator ( " lattice.select_all " , text = " Select/Deselect All " )
2009-08-15 19:40:09 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_select_edit_armature ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Select "
def draw ( self , context ) :
layout = self . layout
2009-11-23 00:27:30 +00:00
layout . operator ( " view3d.select_border " )
2009-11-03 07:23:02 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-08-15 19:40:09 +00:00
2009-11-29 22:16:29 +00:00
layout . operator ( " armature.select_all " , text = " Select/Deselect All " )
2009-11-23 00:27:30 +00:00
layout . operator ( " armature.select_inverse " , text = " Inverse " )
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-08-15 19:40:09 +00:00
2009-11-23 11:43:38 +00:00
layout . operator ( " armature.select_hierarchy " , text = " Parent " ) . direction = ' PARENT '
layout . operator ( " armature.select_hierarchy " , text = " Child " ) . direction = ' CHILD '
2009-08-15 19:40:09 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-08-21 12:57:47 +00:00
2009-11-23 11:43:38 +00:00
props = layout . operator ( " armature.select_hierarchy " , text = " Extend Parent " )
2009-10-31 19:31:45 +00:00
props . extend = True
props . direction = ' PARENT '
2009-11-23 11:43:38 +00:00
props = layout . operator ( " armature.select_hierarchy " , text = " Extend Child " )
2009-10-31 19:31:45 +00:00
props . extend = True
props . direction = ' CHILD '
2009-12-04 17:54:48 +00:00
2009-12-01 14:48:36 +00:00
layout . operator ( " object.select_pattern " , text = " Select Pattern... " )
2009-08-15 19:40:09 +00:00
2009-10-31 23:35:56 +00:00
2010-09-07 15:17:42 +00:00
class VIEW3D_MT_select_face ( bpy . types . Menu ) : # XXX no matching enum
2009-10-31 19:31:45 +00:00
bl_label = " Select "
2009-08-15 19:40:09 +00:00
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
2011-02-17 04:35:41 +00:00
# layout = self.layout
2009-11-28 23:37:56 +00:00
2009-11-22 10:02:32 +00:00
# TODO
# see view3d_select_faceselmenu
2011-02-17 04:35:41 +00:00
pass
2009-08-15 19:40:09 +00:00
2009-08-15 22:28:48 +00:00
# ********** Object menu **********
2011-01-01 07:20:34 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_object ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_context = " objectmode "
2011-06-17 03:53:51 +00:00
bl_label = _ ( " Object " )
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
2010-09-18 16:17:32 +00:00
layout . operator ( " ed.undo " )
layout . operator ( " ed.redo " )
Code holiday commit:
- fix: user pref, window title was reset to 'Blender' on tab usage
- Undo history menu back:
- name "Undo History"
- hotkey alt+ctrl+z (alt+apple+z for mac)
- works like 2.4x, only for global undo, editmode and particle edit.
- Menu scroll
- for small windows or screens, popup menus now allow to display
all items, using internal scrolling
- works with a timer, scrolling 10 items per second when mouse
is over the top or bottom arrow
- if menu is too big to display, it now draws to top or bottom,
based on largest available space.
- also works for hotkey driven pop up menus.
- User pref "DPI" follows widget/layout size
- widgets & headers now become bigger and smaller, to match
'dpi' font sizes. Works well to match UI to monitor size.
- note that icons can get fuzzy, we need better mipmaps for it
2011-06-04 17:03:46 +00:00
layout . operator ( " ed.undo_history " )
2010-09-18 16:17:32 +00:00
layout . separator ( )
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_transform " )
layout . menu ( " VIEW3D_MT_mirror " )
layout . menu ( " VIEW3D_MT_object_clear " )
layout . menu ( " VIEW3D_MT_object_apply " )
layout . menu ( " VIEW3D_MT_snap " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2010-09-18 16:17:32 +00:00
layout . menu ( " VIEW3D_MT_object_animation " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " object.duplicate_move " )
2010-01-14 04:36:27 +00:00
layout . operator ( " object.duplicate_move_linked " )
2011-06-17 03:53:51 +00:00
layout . operator ( " object.delete " , text = _ ( " Delete... " ) )
layout . operator ( " object.proxy_make " , text = _ ( " Make Proxy... " ) )
layout . menu ( " VIEW3D_MT_make_links " , text = _ ( " Make Links... " ) )
2010-12-19 07:14:42 +00:00
layout . operator ( " object.make_dupli_face " )
2011-06-17 03:53:51 +00:00
layout . operator_menu_enum ( " object.make_local " , " type " , text = _ ( " Make Local... " ) )
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_make_single_user " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_object_parent " )
layout . menu ( " VIEW3D_MT_object_track " )
layout . menu ( " VIEW3D_MT_object_group " )
layout . menu ( " VIEW3D_MT_object_constraints " )
2010-06-03 06:41:24 +00:00
layout . separator ( )
2010-09-18 16:17:32 +00:00
layout . menu ( " VIEW3D_MT_object_game " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2010-01-14 14:06:27 +00:00
layout . operator ( " object.join_uvs " )
2009-11-23 00:27:30 +00:00
layout . operator ( " object.join " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2011-06-17 03:53:51 +00:00
layout . operator ( " object.move_to_layer " , text = _ ( " Move to Layer... " ) )
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_object_showhide " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator_menu_enum ( " object.convert " , " target " )
2009-10-31 19:31:45 +00:00
2009-10-31 23:35:56 +00:00
2010-09-18 16:17:32 +00:00
class VIEW3D_MT_object_animation ( bpy . types . Menu ) :
2011-06-20 10:07:46 +00:00
bl_label = _ ( " Animation " )
2010-09-18 16:17:32 +00:00
def draw ( self , context ) :
layout = self . layout
2011-06-20 10:07:46 +00:00
layout . operator ( " anim.keyframe_insert_menu " , text = _ ( " Insert Keyframe... " ) )
layout . operator ( " anim.keyframe_delete_v3d " , text = _ ( " Delete Keyframe... " ) )
layout . operator ( " anim.keying_set_active_set " , text = _ ( " Change Keying Set... " ) )
2010-09-18 16:17:32 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_object_clear ( bpy . types . Menu ) :
2011-06-20 10:07:46 +00:00
bl_label = _ ( " Clear " )
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
2011-06-20 10:07:46 +00:00
layout . operator ( " object.location_clear " , text = _ ( " Location " ) )
layout . operator ( " object.rotation_clear " , text = _ ( " Rotation " ) )
layout . operator ( " object.scale_clear " , text = _ ( " Scale " ) )
layout . operator ( " object.origin_clear " , text = _ ( " Origin " ) )
2009-10-31 19:31:45 +00:00
2009-10-31 23:35:56 +00:00
2010-02-21 14:05:02 +00:00
class VIEW3D_MT_object_specials ( bpy . types . Menu ) :
bl_label = " Specials "
2010-08-09 01:37:09 +00:00
@classmethod
def poll ( cls , context ) :
2010-02-21 14:05:02 +00:00
# add more special types
2010-05-20 15:30:28 +00:00
return context . object
2010-02-21 14:05:02 +00:00
def draw ( self , context ) :
layout = self . layout
obj = context . object
2010-06-26 19:00:44 +00:00
if obj . type == ' CAMERA ' :
2010-02-21 14:05:02 +00:00
layout . operator_context = ' INVOKE_REGION_WIN '
2010-06-26 19:00:44 +00:00
props = layout . operator ( " wm.context_modal_mouse " , text = " Camera Lens Angle " )
2010-06-14 03:52:10 +00:00
props . data_path_iter = " selected_editable_objects "
2010-06-26 19:00:44 +00:00
props . data_path_item = " data.lens "
props . input_scale = 0.1
if not obj . data . dof_object :
#layout.label(text="Test Has DOF obj");
props = layout . operator ( " wm.context_modal_mouse " , text = " DOF Distance " )
props . data_path_iter = " selected_editable_objects "
props . data_path_item = " data.dof_distance "
props . input_scale = 0.02
2011-03-07 13:23:45 +00:00
if obj . type in { ' CURVE ' , ' FONT ' } :
2010-06-26 19:00:44 +00:00
layout . operator_context = ' INVOKE_REGION_WIN '
props = layout . operator ( " wm.context_modal_mouse " , text = " Extrude Size " )
props . data_path_iter = " selected_editable_objects "
props . data_path_item = " data.extrude "
2010-02-21 14:05:02 +00:00
props . input_scale = 0.01
2010-02-22 23:32:58 +00:00
2010-06-26 19:00:44 +00:00
props = layout . operator ( " wm.context_modal_mouse " , text = " Width Size " )
2010-06-14 03:52:10 +00:00
props . data_path_iter = " selected_editable_objects "
2010-08-20 06:09:58 +00:00
props . data_path_item = " data.offset "
2010-06-26 19:00:44 +00:00
props . input_scale = 0.01
if obj . type == ' EMPTY ' :
layout . operator_context = ' INVOKE_REGION_WIN '
2010-02-22 23:32:58 +00:00
2010-06-26 19:00:44 +00:00
props = layout . operator ( " wm.context_modal_mouse " , text = " Empty Draw Size " )
2010-06-14 03:52:10 +00:00
props . data_path_iter = " selected_editable_objects "
2010-06-26 19:00:44 +00:00
props . data_path_item = " empty_draw_size "
props . input_scale = 0.01
if obj . type == ' LAMP ' :
layout . operator_context = ' INVOKE_REGION_WIN '
2010-02-22 23:32:58 +00:00
2010-06-26 19:00:44 +00:00
props = layout . operator ( " wm.context_modal_mouse " , text = " Energy " )
2010-06-14 03:52:10 +00:00
props . data_path_iter = " selected_editable_objects "
2010-06-26 19:00:44 +00:00
props . data_path_item = " data.energy "
2010-02-21 14:05:02 +00:00
2011-03-07 13:23:45 +00:00
if obj . data . type in { ' SPOT ' , ' AREA ' , ' POINT ' } :
2010-06-26 19:00:44 +00:00
props = layout . operator ( " wm.context_modal_mouse " , text = " Falloff Distance " )
props . data_path_iter = " selected_editable_objects "
props . data_path_item = " data.distance "
props . input_scale = 0.1
if obj . data . type == ' SPOT ' :
layout . separator ( )
props = layout . operator ( " wm.context_modal_mouse " , text = " Spot Size " )
props . data_path_iter = " selected_editable_objects "
props . data_path_item = " data.spot_size "
props . input_scale = 0.01
props = layout . operator ( " wm.context_modal_mouse " , text = " Spot Blend " )
props . data_path_iter = " selected_editable_objects "
props . data_path_item = " data.spot_blend "
props . input_scale = - 0.01
props = layout . operator ( " wm.context_modal_mouse " , text = " Clip Start " )
props . data_path_iter = " selected_editable_objects "
props . data_path_item = " data.shadow_buffer_clip_start "
props . input_scale = 0.05
props = layout . operator ( " wm.context_modal_mouse " , text = " Clip End " )
props . data_path_iter = " selected_editable_objects "
props . data_path_item = " data.shadow_buffer_clip_end "
props . input_scale = 0.05
layout . separator ( )
2010-05-20 15:30:28 +00:00
props = layout . operator ( " object.isolate_type_render " )
2010-07-30 23:25:26 +00:00
props = layout . operator ( " object.hide_render_clear_all " )
2010-02-21 14:05:02 +00:00
2010-09-07 15:17:42 +00:00
2009-10-15 20:15:21 +00:00
class VIEW3D_MT_object_apply ( bpy . types . Menu ) :
2011-06-20 10:07:46 +00:00
bl_label = _ ( " Apply " )
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
2011-06-20 10:07:46 +00:00
layout . operator ( " object.transform_apply " , text = _ ( " Location " ) ) . location = True
layout . operator ( " object.transform_apply " , text = _ ( " Rotation " ) ) . rotation = True
layout . operator ( " object.transform_apply " , text = _ ( " Scale " ) ) . scale = True
props = layout . operator ( " object.transform_apply " , text = _ ( " Rotation & Scale " ) )
2011-05-03 07:09:02 +00:00
props . scale = True
props . rotation = True
2009-11-23 00:27:30 +00:00
layout . separator ( )
2011-05-03 07:09:02 +00:00
2011-06-20 10:07:46 +00:00
layout . operator ( " object.visual_transform_apply " , text = _ ( " Visual Transform " ) )
2009-11-23 00:27:30 +00:00
layout . operator ( " object.duplicates_make_real " )
2009-10-31 19:31:45 +00:00
2009-10-15 20:15:21 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_object_parent ( bpy . types . Menu ) :
2011-06-20 10:07:46 +00:00
bl_label = _ ( " Parent " )
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
2011-06-20 10:07:46 +00:00
layout . operator ( " object.parent_set " , text = _ ( " Set " ) )
layout . operator ( " object.parent_clear " , text = _ ( " Clear " ) )
2009-10-31 19:31:45 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_object_track ( bpy . types . Menu ) :
2011-06-20 10:07:46 +00:00
bl_label = _ ( " Track " )
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
2011-06-20 10:07:46 +00:00
layout . operator ( " object.track_set " , text = _ ( " Set " ) )
layout . operator ( " object.track_clear " , text = _ ( " Clear " ) )
2009-10-31 19:31:45 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_object_group ( bpy . types . Menu ) :
2011-06-20 10:07:46 +00:00
bl_label = _ ( " Group " )
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
2009-11-23 00:27:30 +00:00
layout . operator ( " group.create " )
layout . operator ( " group.objects_remove " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " group.objects_add_active " )
layout . operator ( " group.objects_remove_active " )
2009-10-31 19:31:45 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_object_constraints ( bpy . types . Menu ) :
2011-06-20 10:07:46 +00:00
bl_label = _ ( " Constraints " )
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
2009-11-23 00:27:30 +00:00
layout . operator ( " object.constraint_add_with_targets " )
2010-05-27 11:56:31 +00:00
layout . operator ( " object.constraints_copy " )
2009-11-23 00:27:30 +00:00
layout . operator ( " object.constraints_clear " )
2009-10-31 19:31:45 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_object_showhide ( bpy . types . Menu ) :
2011-06-20 10:07:46 +00:00
bl_label = _ ( " Show/Hide " )
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
2009-08-15 22:28:48 +00:00
2011-06-20 10:07:46 +00:00
layout . operator ( " object.hide_view_clear " , text = _ ( " Show Hidden " ) )
layout . operator ( " object.hide_view_set " , text = _ ( " Hide Selected " ) )
layout . operator ( " object.hide_view_set " , text = _ ( " Hide Unselected " ) ) . unselected = True
2009-08-15 19:40:09 +00:00
2009-10-31 23:35:56 +00:00
2009-10-16 10:00:45 +00:00
class VIEW3D_MT_make_single_user ( bpy . types . Menu ) :
2011-06-20 10:07:46 +00:00
bl_label = _ ( " Make Single User " )
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
2011-06-20 10:07:46 +00:00
props = layout . operator ( " object.make_single_user " , text = _ ( " Object " ) )
2009-10-31 19:31:45 +00:00
props . object = True
2011-06-20 10:07:46 +00:00
props = layout . operator ( " object.make_single_user " , text = _ ( " Object & Data " ) )
2009-10-31 19:31:45 +00:00
props . object = props . obdata = True
2011-06-20 10:07:46 +00:00
props = layout . operator ( " object.make_single_user " , text = _ ( " Object & Data & Materials+Tex " ) )
2009-10-31 19:31:45 +00:00
props . object = props . obdata = props . material = props . texture = True
2011-06-20 10:07:46 +00:00
props = layout . operator ( " object.make_single_user " , text = _ ( " Materials+Tex " ) )
2009-10-31 19:31:45 +00:00
props . material = props . texture = True
2011-06-20 10:07:46 +00:00
props = layout . operator ( " object.make_single_user " , text = _ ( " Object Animation " ) )
2009-10-31 19:31:45 +00:00
props . animation = True
2009-11-04 10:25:57 +00:00
class VIEW3D_MT_make_links ( bpy . types . Menu ) :
2011-06-20 10:07:46 +00:00
bl_label = _ ( " Make Links " )
2009-11-04 10:25:57 +00:00
def draw ( self , context ) :
layout = self . layout
2009-11-07 22:07:46 +00:00
2010-12-02 22:58:23 +00:00
if ( len ( bpy . data . scenes ) > 10 ) :
layout . operator_context = ' INVOKE_DEFAULT '
2011-06-20 10:07:46 +00:00
layout . operator ( " object.make_links_scene " , text = _ ( " Objects to Scene... " ) , icon = ' OUTLINER_OB_EMPTY ' )
layout . operator ( " object.make_links_scene " , text = _ ( " Markers to Scene... " ) , icon = ' OUTLINER_OB_EMPTY ' )
2010-12-02 22:58:23 +00:00
else :
2011-06-20 10:07:46 +00:00
layout . operator_menu_enum ( " object.make_links_scene " , " scene " , text = _ ( " Objects to Scene... " ) )
layout . operator_menu_enum ( " marker.make_links_scene " , " scene " , text = _ ( " Markers to Scene... " ) )
2010-12-02 22:58:23 +00:00
2011-02-18 06:07:41 +00:00
layout . operator_enum ( " object.make_links_data " , " type " ) # inline
2009-11-04 10:25:57 +00:00
2010-09-18 16:17:32 +00:00
class VIEW3D_MT_object_game ( bpy . types . Menu ) :
2011-06-20 10:07:46 +00:00
bl_label = _ ( " Game " )
2010-05-25 06:24:45 +00:00
def draw ( self , context ) :
layout = self . layout
2011-06-20 10:07:46 +00:00
layout . operator ( " object.logic_bricks_copy " , text = _ ( " Copy Logic Bricks " ) )
2010-09-18 16:17:32 +00:00
2010-06-03 06:41:24 +00:00
layout . separator ( )
2011-06-20 10:07:46 +00:00
layout . operator ( " object.game_property_copy " , text = _ ( " Replace Properties " ) ) . operation = ' REPLACE '
layout . operator ( " object.game_property_copy " , text = _ ( " Merge Properties " ) ) . operation = ' MERGE '
layout . operator_menu_enum ( " object.game_property_copy " , " property " , text = _ ( " Copy Properties... " ) )
2010-06-03 06:41:24 +00:00
2010-09-18 16:17:32 +00:00
layout . separator ( )
2010-06-03 06:41:24 +00:00
2010-09-18 16:17:32 +00:00
layout . operator ( " object.game_property_clear " )
2010-06-03 06:41:24 +00:00
2010-05-25 06:24:45 +00:00
2009-10-31 19:31:45 +00:00
# ********** Vertex paint menu **********
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_paint_vertex ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Paint "
def draw ( self , context ) :
layout = self . layout
2009-08-22 02:27:37 +00:00
2010-09-18 16:17:32 +00:00
layout . operator ( " ed.undo " )
layout . operator ( " ed.redo " )
layout . separator ( )
2009-11-23 00:27:30 +00:00
layout . operator ( " paint.vertex_color_set " )
2010-04-21 16:22:37 +00:00
layout . operator ( " paint.vertex_color_dirt " )
2009-10-31 19:31:45 +00:00
2009-11-16 13:59:27 +00:00
class VIEW3D_MT_hook ( bpy . types . Menu ) :
bl_label = " Hooks "
def draw ( self , context ) :
layout = self . layout
layout . operator_context = ' EXEC_AREA '
2009-11-23 00:27:30 +00:00
layout . operator ( " object.hook_add_newob " )
layout . operator ( " object.hook_add_selob " )
2009-11-28 23:37:56 +00:00
2009-11-22 06:20:56 +00:00
if [ mod . type == ' HOOK ' for mod in context . active_object . modifiers ] :
2009-11-23 00:27:30 +00:00
layout . separator ( )
layout . operator_menu_enum ( " object.hook_assign " , " modifier " )
layout . operator_menu_enum ( " object.hook_remove " , " modifier " )
layout . separator ( )
layout . operator_menu_enum ( " object.hook_select " , " modifier " )
layout . operator_menu_enum ( " object.hook_reset " , " modifier " )
layout . operator_menu_enum ( " object.hook_recenter " , " modifier " )
2009-11-22 06:20:56 +00:00
class VIEW3D_MT_vertex_group ( bpy . types . Menu ) :
bl_label = " Vertex Groups "
def draw ( self , context ) :
layout = self . layout
layout . operator_context = ' EXEC_AREA '
2009-11-23 11:43:38 +00:00
layout . operator ( " object.vertex_group_assign " , text = " Assign to New Group " ) . new = True
2009-11-28 23:37:56 +00:00
2009-11-22 06:20:56 +00:00
ob = context . active_object
if ob . mode == ' EDIT ' :
2010-08-24 04:02:50 +00:00
if ob . vertex_groups . active :
2009-11-23 00:27:30 +00:00
layout . separator ( )
layout . operator ( " object.vertex_group_assign " , text = " Assign to Active Group " )
layout . operator ( " object.vertex_group_remove_from " , text = " Remove from Active Group " )
2009-11-23 11:43:38 +00:00
layout . operator ( " object.vertex_group_remove_from " , text = " Remove from All " ) . all = True
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-11-28 23:37:56 +00:00
2010-08-24 04:02:50 +00:00
if ob . vertex_groups . active :
2009-11-23 00:27:30 +00:00
layout . operator_menu_enum ( " object.vertex_group_set_active " , " group " , text = " Set Active Group " )
layout . operator ( " object.vertex_group_remove " , text = " Remove Active Group " )
2009-11-23 11:43:38 +00:00
layout . operator ( " object.vertex_group_remove " , text = " Remove All Groups " ) . all = True
2009-11-16 13:59:27 +00:00
2010-01-26 11:11:53 +00:00
# ********** Weight paint menu **********
2010-01-31 14:46:28 +00:00
2010-01-26 11:11:53 +00:00
class VIEW3D_MT_paint_weight ( bpy . types . Menu ) :
bl_label = " Weights "
def draw ( self , context ) :
layout = self . layout
2010-09-18 16:17:32 +00:00
layout . operator ( " ed.undo " )
layout . operator ( " ed.redo " )
Code holiday commit:
- fix: user pref, window title was reset to 'Blender' on tab usage
- Undo history menu back:
- name "Undo History"
- hotkey alt+ctrl+z (alt+apple+z for mac)
- works like 2.4x, only for global undo, editmode and particle edit.
- Menu scroll
- for small windows or screens, popup menus now allow to display
all items, using internal scrolling
- works with a timer, scrolling 10 items per second when mouse
is over the top or bottom arrow
- if menu is too big to display, it now draws to top or bottom,
based on largest available space.
- also works for hotkey driven pop up menus.
- User pref "DPI" follows widget/layout size
- widgets & headers now become bigger and smaller, to match
'dpi' font sizes. Works well to match UI to monitor size.
- note that icons can get fuzzy, we need better mipmaps for it
2011-06-04 17:03:46 +00:00
layout . operator ( " ed.undo_history " )
2010-09-18 16:17:32 +00:00
layout . separator ( )
2010-01-26 11:11:53 +00:00
layout . operator ( " paint.weight_from_bones " , text = " Assign Automatic From Bones " ) . type = ' AUTOMATIC '
layout . operator ( " paint.weight_from_bones " , text = " Assign From Bone Envelopes " ) . type = ' ENVELOPES '
layout . separator ( )
layout . operator ( " object.vertex_group_normalize_all " , text = " Normalize All " )
layout . operator ( " object.vertex_group_normalize " , text = " Normalize " )
layout . operator ( " object.vertex_group_invert " , text = " Invert " )
layout . operator ( " object.vertex_group_clean " , text = " Clean " )
layout . operator ( " object.vertex_group_levels " , text = " Levels " )
2011-04-04 22:42:43 +00:00
2011-04-01 22:19:03 +00:00
layout . separator ( )
2011-04-04 22:42:43 +00:00
2011-04-01 22:19:03 +00:00
layout . operator ( " paint.weight_set " )
2009-11-16 13:59:27 +00:00
2009-10-31 19:31:45 +00:00
# ********** Sculpt menu **********
2009-08-22 02:27:37 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_sculpt ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Sculpt "
def draw ( self , context ) :
layout = self . layout
2010-07-26 23:49:23 +00:00
tool_settings = context . tool_settings
sculpt = tool_settings . sculpt
brush = tool_settings . sculpt . brush
2009-10-31 19:31:45 +00:00
2010-09-18 16:17:32 +00:00
layout . operator ( " ed.undo " )
layout . operator ( " ed.redo " )
layout . separator ( )
2010-08-19 17:46:00 +00:00
layout . prop ( sculpt , " use_symmetry_x " )
layout . prop ( sculpt , " use_symmetry_y " )
layout . prop ( sculpt , " use_symmetry_z " )
2009-11-23 00:27:30 +00:00
layout . separator ( )
layout . prop ( sculpt , " lock_x " )
layout . prop ( sculpt , " lock_y " )
layout . prop ( sculpt , " lock_z " )
layout . separator ( )
2010-03-24 15:08:15 +00:00
layout . operator_menu_enum ( " brush.curve_preset " , " shape " )
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-14 13:35:44 +00:00
sculpt_tool = brush . sculpt_tool
if sculpt_tool != ' GRAB ' :
2011-02-15 19:19:36 +00:00
layout . prop_menu_enum ( brush , " stroke_method " )
2009-10-31 19:31:45 +00:00
2011-03-07 13:23:45 +00:00
if sculpt_tool in { ' DRAW ' , ' PINCH ' , ' INFLATE ' , ' LAYER ' , ' CLAY ' } :
2010-08-04 15:59:15 +00:00
layout . prop_menu_enum ( brush , " direction " )
2009-10-31 19:31:45 +00:00
2009-11-14 13:35:44 +00:00
if sculpt_tool == ' LAYER ' :
2009-11-23 00:27:30 +00:00
layout . prop ( brush , " use_persistent " )
layout . operator ( " sculpt.set_persistent_base " )
2009-10-31 19:31:45 +00:00
2010-07-26 23:49:23 +00:00
layout . separator ( )
2010-08-19 17:46:00 +00:00
layout . prop ( sculpt , " use_threaded " , text = " Threaded Sculpt " )
2010-07-26 23:49:23 +00:00
layout . prop ( sculpt , " show_brush " )
# TODO, make availabel from paint menu!
layout . prop ( tool_settings , " sculpt_paint_use_unified_size " , text = " Unify Size " )
layout . prop ( tool_settings , " sculpt_paint_use_unified_strength " , text = " Unify Strength " )
2009-10-31 19:31:45 +00:00
# ********** Particle menu **********
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_particle ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Particle "
def draw ( self , context ) :
layout = self . layout
particle_edit = context . tool_settings . particle_edit
2010-09-18 16:17:32 +00:00
layout . operator ( " ed.undo " )
layout . operator ( " ed.redo " )
Code holiday commit:
- fix: user pref, window title was reset to 'Blender' on tab usage
- Undo history menu back:
- name "Undo History"
- hotkey alt+ctrl+z (alt+apple+z for mac)
- works like 2.4x, only for global undo, editmode and particle edit.
- Menu scroll
- for small windows or screens, popup menus now allow to display
all items, using internal scrolling
- works with a timer, scrolling 10 items per second when mouse
is over the top or bottom arrow
- if menu is too big to display, it now draws to top or bottom,
based on largest available space.
- also works for hotkey driven pop up menus.
- User pref "DPI" follows widget/layout size
- widgets & headers now become bigger and smaller, to match
'dpi' font sizes. Works well to match UI to monitor size.
- note that icons can get fuzzy, we need better mipmaps for it
2011-06-04 17:03:46 +00:00
layout . operator ( " ed.undo_history " )
2010-09-18 16:17:32 +00:00
layout . separator ( )
2009-11-23 00:27:30 +00:00
layout . operator ( " particle.mirror " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " particle.remove_doubles " )
layout . operator ( " particle.delete " )
2009-10-31 19:31:45 +00:00
2010-08-20 06:09:58 +00:00
if particle_edit . select_mode == ' POINT ' :
2009-11-23 00:27:30 +00:00
layout . operator ( " particle.subdivide " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " particle.rekey " )
2010-01-15 17:28:00 +00:00
layout . operator ( " particle.weight_set " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_particle_showhide " )
2009-08-23 22:13:56 +00:00
2009-10-31 23:35:56 +00:00
2009-12-24 10:39:30 +00:00
class VIEW3D_MT_particle_specials ( bpy . types . Menu ) :
bl_label = " Specials "
def draw ( self , context ) :
layout = self . layout
particle_edit = context . tool_settings . particle_edit
layout . operator ( " particle.rekey " )
layout . separator ( )
2010-08-20 06:09:58 +00:00
if particle_edit . select_mode == ' POINT ' :
2009-12-24 10:39:30 +00:00
layout . operator ( " particle.subdivide " )
2010-05-03 07:42:40 +00:00
layout . operator ( " particle.select_roots " )
layout . operator ( " particle.select_tips " )
2009-12-24 10:39:30 +00:00
layout . operator ( " particle.remove_doubles " )
2010-08-02 02:55:12 +00:00
class VIEW3D_MT_particle_showhide ( ShowHideMenu , bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
_operator_name = " particle "
2009-08-23 22:13:56 +00:00
# ********** Pose Menu **********
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_pose ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Pose "
def draw ( self , context ) :
layout = self . layout
2010-09-18 16:17:32 +00:00
layout . operator ( " ed.undo " )
layout . operator ( " ed.redo " )
Code holiday commit:
- fix: user pref, window title was reset to 'Blender' on tab usage
- Undo history menu back:
- name "Undo History"
- hotkey alt+ctrl+z (alt+apple+z for mac)
- works like 2.4x, only for global undo, editmode and particle edit.
- Menu scroll
- for small windows or screens, popup menus now allow to display
all items, using internal scrolling
- works with a timer, scrolling 10 items per second when mouse
is over the top or bottom arrow
- if menu is too big to display, it now draws to top or bottom,
based on largest available space.
- also works for hotkey driven pop up menus.
- User pref "DPI" follows widget/layout size
- widgets & headers now become bigger and smaller, to match
'dpi' font sizes. Works well to match UI to monitor size.
- note that icons can get fuzzy, we need better mipmaps for it
2011-06-04 17:03:46 +00:00
layout . operator ( " ed.undo_history " )
2010-09-18 16:17:32 +00:00
layout . separator ( )
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_transform " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_pose_transform " )
2011-03-27 05:23:14 +00:00
layout . menu ( " VIEW3D_MT_pose_apply " )
2011-03-24 03:02:34 +00:00
layout . menu ( " VIEW3D_MT_snap " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2011-03-24 03:23:30 +00:00
layout . menu ( " VIEW3D_MT_object_animation " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2011-03-24 03:02:34 +00:00
layout . menu ( " VIEW3D_MT_pose_slide " )
layout . menu ( " VIEW3D_MT_pose_propagate " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " pose.copy " )
layout . operator ( " pose.paste " )
2009-11-23 11:43:38 +00:00
layout . operator ( " pose.paste " , text = " Paste X-Flipped Pose " ) . flipped = True
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2011-03-24 03:02:34 +00:00
layout . menu ( " VIEW3D_MT_pose_library " )
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_pose_motion " )
layout . menu ( " VIEW3D_MT_pose_group " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2010-08-25 02:56:37 +00:00
layout . menu ( " VIEW3D_MT_object_parent " )
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_pose_ik " )
layout . menu ( " VIEW3D_MT_pose_constraints " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-16 13:59:27 +00:00
layout . operator_context = ' EXEC_AREA '
2009-11-23 11:43:38 +00:00
layout . operator ( " pose.autoside_names " , text = " AutoName Left/Right " ) . axis = ' XAXIS '
layout . operator ( " pose.autoside_names " , text = " AutoName Front/Back " ) . axis = ' YAXIS '
layout . operator ( " pose.autoside_names " , text = " AutoName Top/Bottom " ) . axis = ' ZAXIS '
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " pose.flip_names " )
2010-01-31 14:46:28 +00:00
2010-01-25 10:16:36 +00:00
layout . operator ( " pose.quaternions_flip " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-16 13:59:27 +00:00
layout . operator_context = ' INVOKE_AREA '
2009-11-23 00:27:30 +00:00
layout . operator ( " pose.armature_layers " , text = " Change Armature Layers... " )
layout . operator ( " pose.bone_layers " , text = " Change Bone Layers... " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_pose_showhide " )
layout . operator_menu_enum ( " pose.flags_set " , ' mode ' , text = " Bone Settings " )
2009-08-23 22:13:56 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_pose_transform ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Clear Transform "
def draw ( self , context ) :
layout = self . layout
2011-01-11 11:09:37 +00:00
layout . operator ( " pose.transforms_clear " , text = " All " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " pose.loc_clear " , text = " Location " )
layout . operator ( " pose.rot_clear " , text = " Rotation " )
layout . operator ( " pose.scale_clear " , text = " Scale " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . label ( text = " Origin " )
2009-10-31 19:31:45 +00:00
2009-10-31 23:35:56 +00:00
2011-03-24 03:02:34 +00:00
class VIEW3D_MT_pose_slide ( bpy . types . Menu ) :
bl_label = " In-Betweens "
def draw ( self , context ) :
layout = self . layout
layout . operator ( " pose.push " )
layout . operator ( " pose.relax " )
layout . operator ( " pose.breakdown " )
class VIEW3D_MT_pose_propagate ( bpy . types . Menu ) :
bl_label = " Propagate "
def draw ( self , context ) :
layout = self . layout
layout . operator ( " pose.propagate " )
2011-03-31 01:37:42 +00:00
layout . separator ( )
2011-03-24 03:02:34 +00:00
layout . operator ( " pose.propagate " , text = " To Next Keyframe " ) . mode = ' NEXT_KEY '
2011-03-31 00:45:52 +00:00
layout . operator ( " pose.propagate " , text = " To Last Keyframe (Make Cyclic) " ) . mode = ' LAST_KEY '
2011-03-24 03:02:34 +00:00
2011-03-31 01:37:42 +00:00
layout . separator ( )
layout . operator ( " pose.propagate " , text = " On Selected Markers " ) . mode = ' SELECTED_MARKERS '
2011-03-24 03:02:34 +00:00
class VIEW3D_MT_pose_library ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Pose Library "
def draw ( self , context ) :
layout = self . layout
2009-11-23 00:27:30 +00:00
layout . operator ( " poselib.browse_interactive " , text = " Browse Poses... " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " poselib.pose_add " , text = " Add Pose... " )
layout . operator ( " poselib.pose_rename " , text = " Rename Pose... " )
layout . operator ( " poselib.pose_remove " , text = " Remove Pose... " )
2009-08-23 22:13:56 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_pose_motion ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Motion Paths "
def draw ( self , context ) :
layout = self . layout
2009-11-23 00:27:30 +00:00
layout . operator ( " pose.paths_calculate " , text = " Calculate " )
layout . operator ( " pose.paths_clear " , text = " Clear " )
2009-10-31 19:31:45 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_pose_group ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Bone Groups "
def draw ( self , context ) :
layout = self . layout
2009-11-23 00:27:30 +00:00
layout . operator ( " pose.group_add " )
layout . operator ( " pose.group_remove " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " pose.group_assign " )
layout . operator ( " pose.group_unassign " )
2009-10-31 19:31:45 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_pose_ik ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Inverse Kinematics "
def draw ( self , context ) :
layout = self . layout
2009-11-23 00:27:30 +00:00
layout . operator ( " pose.ik_add " )
layout . operator ( " pose.ik_clear " )
2009-10-31 19:31:45 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_pose_constraints ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Constraints "
def draw ( self , context ) :
layout = self . layout
2009-11-23 00:27:30 +00:00
layout . operator ( " pose.constraint_add_with_targets " , text = " Add (With Targets)... " )
2010-05-27 11:56:31 +00:00
layout . operator ( " pose.constraints_copy " )
2009-11-23 00:27:30 +00:00
layout . operator ( " pose.constraints_clear " )
2009-10-31 19:31:45 +00:00
2009-10-31 23:35:56 +00:00
2010-08-02 02:55:12 +00:00
class VIEW3D_MT_pose_showhide ( ShowHideMenu , bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
_operator_name = " pose "
2009-08-23 22:13:56 +00:00
2010-02-19 15:34:26 +00:00
class VIEW3D_MT_pose_apply ( bpy . types . Menu ) :
bl_label = " Apply "
def draw ( self , context ) :
layout = self . layout
layout . operator ( " pose.armature_apply " )
layout . operator ( " pose.visual_transform_apply " )
2009-08-23 22:13:56 +00:00
# ********** Edit Menus, suffix from ob.type **********
2009-08-17 10:13:24 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_edit_mesh ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Mesh "
def draw ( self , context ) :
layout = self . layout
settings = context . tool_settings
2009-11-23 00:27:30 +00:00
layout . operator ( " ed.undo " )
layout . operator ( " ed.redo " )
Code holiday commit:
- fix: user pref, window title was reset to 'Blender' on tab usage
- Undo history menu back:
- name "Undo History"
- hotkey alt+ctrl+z (alt+apple+z for mac)
- works like 2.4x, only for global undo, editmode and particle edit.
- Menu scroll
- for small windows or screens, popup menus now allow to display
all items, using internal scrolling
- works with a timer, scrolling 10 items per second when mouse
is over the top or bottom arrow
- if menu is too big to display, it now draws to top or bottom,
based on largest available space.
- also works for hotkey driven pop up menus.
- User pref "DPI" follows widget/layout size
- widgets & headers now become bigger and smaller, to match
'dpi' font sizes. Works well to match UI to monitor size.
- note that icons can get fuzzy, we need better mipmaps for it
2011-06-04 17:03:46 +00:00
layout . operator ( " ed.undo_history " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_transform " )
layout . menu ( " VIEW3D_MT_mirror " )
layout . menu ( " VIEW3D_MT_snap " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_uv_map " , text = " UV Unwrap... " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2010-02-17 16:04:06 +00:00
layout . operator ( " view3d.edit_mesh_extrude_move_normal " , text = " Extrude Region " )
layout . operator ( " view3d.edit_mesh_extrude_individual_move " , text = " Extrude Individual " )
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.duplicate_move " )
layout . operator ( " mesh.delete " , text = " Delete... " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_edit_mesh_vertices " )
layout . menu ( " VIEW3D_MT_edit_mesh_edges " )
layout . menu ( " VIEW3D_MT_edit_mesh_faces " )
layout . menu ( " VIEW3D_MT_edit_mesh_normals " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2010-08-18 03:24:52 +00:00
layout . prop ( settings , " use_mesh_automerge " )
layout . prop_menu_enum ( settings , " proportional_edit " )
layout . prop_menu_enum ( settings , " proportional_edit_falloff " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_edit_mesh_showhide " )
2009-08-17 10:13:24 +00:00
2009-10-31 23:35:56 +00:00
2009-10-12 21:06:03 +00:00
class VIEW3D_MT_edit_mesh_specials ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Specials "
def draw ( self , context ) :
layout = self . layout
layout . operator_context = ' INVOKE_REGION_WIN '
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.subdivide " , text = " Subdivide " )
2009-11-23 11:43:38 +00:00
layout . operator ( " mesh.subdivide " , text = " Subdivide Smooth " ) . smoothness = 1.0
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.merge " , text = " Merge... " )
layout . operator ( " mesh.remove_doubles " )
layout . operator ( " mesh.hide " , text = " Hide " )
layout . operator ( " mesh.reveal " , text = " Reveal " )
layout . operator ( " mesh.select_inverse " )
layout . operator ( " mesh.flip_normals " )
layout . operator ( " mesh.vertices_smooth " , text = " Smooth " )
# layout.operator("mesh.bevel", text="Bevel")
layout . operator ( " mesh.faces_shade_smooth " )
layout . operator ( " mesh.faces_shade_flat " )
layout . operator ( " mesh.blend_from_shape " )
layout . operator ( " mesh.shape_propagate_to_all " )
layout . operator ( " mesh.select_vertex_path " )
2009-10-12 21:06:03 +00:00
2009-10-31 23:35:56 +00:00
2010-10-05 15:29:06 +00:00
class VIEW3D_MT_edit_mesh_select_mode ( bpy . types . Menu ) :
2009-12-22 16:11:11 +00:00
bl_label = " Mesh Select Mode "
def draw ( self , context ) :
layout = self . layout
layout . operator_context = ' INVOKE_REGION_WIN '
2009-12-26 09:36:50 +00:00
prop = layout . operator ( " wm.context_set_value " , text = " Vertex " , icon = ' VERTEXSEL ' )
2009-12-22 16:11:11 +00:00
prop . value = " (True, False, False) "
2010-08-18 03:24:52 +00:00
prop . data_path = " tool_settings.mesh_select_mode "
2009-12-22 16:11:11 +00:00
2009-12-26 09:36:50 +00:00
prop = layout . operator ( " wm.context_set_value " , text = " Edge " , icon = ' EDGESEL ' )
2009-12-22 16:11:11 +00:00
prop . value = " (False, True, False) "
2010-08-18 03:24:52 +00:00
prop . data_path = " tool_settings.mesh_select_mode "
2009-12-22 16:11:11 +00:00
2009-12-26 09:36:50 +00:00
prop = layout . operator ( " wm.context_set_value " , text = " Face " , icon = ' FACESEL ' )
2009-12-22 16:11:11 +00:00
prop . value = " (False, False, True) "
2010-08-18 03:24:52 +00:00
prop . data_path = " tool_settings.mesh_select_mode "
2009-12-22 16:11:11 +00:00
2010-02-12 22:13:47 +00:00
2010-02-01 18:30:00 +00:00
class VIEW3D_MT_edit_mesh_extrude ( bpy . types . Menu ) :
bl_label = " Extrude "
2010-10-11 02:05:44 +00:00
_extrude_funcs = { \
" VERT " : lambda layout : layout . operator ( " mesh.extrude_vertices_move " , text = " Vertices Only " ) ,
" EDGE " : lambda layout : layout . operator ( " mesh.extrude_edges_move " , text = " Edges Only " ) ,
" FACE " : lambda layout : layout . operator ( " mesh.extrude_faces_move " , text = " Individual Faces " ) ,
" REGION " : lambda layout : layout . operator ( " view3d.edit_mesh_extrude_move_normal " , text = " Region " ) ,
}
2010-02-12 22:13:47 +00:00
@staticmethod
def extrude_options ( context ) :
mesh = context . object . data
2010-10-05 15:29:06 +00:00
select_mode = context . tool_settings . mesh_select_mode
2010-02-12 22:13:47 +00:00
2010-10-11 02:05:44 +00:00
menu = [ ]
if mesh . total_face_sel :
menu + = [ " REGION " , " FACE " ]
if mesh . total_edge_sel and ( select_mode [ 0 ] or select_mode [ 1 ] ) :
menu + = [ " EDGE " ]
if mesh . total_vert_sel and select_mode [ 0 ] :
2011-01-01 07:20:34 +00:00
menu + = [ " VERT " ]
2010-02-22 23:32:58 +00:00
2010-02-12 22:13:47 +00:00
# should never get here
2010-10-11 02:05:44 +00:00
return menu
2010-02-12 22:13:47 +00:00
2010-02-01 18:30:00 +00:00
def draw ( self , context ) :
layout = self . layout
layout . operator_context = ' INVOKE_REGION_WIN '
2010-02-22 23:32:58 +00:00
2010-10-11 02:05:44 +00:00
for menu_id in self . extrude_options ( context ) :
self . _extrude_funcs [ menu_id ] ( layout )
2010-02-12 22:13:47 +00:00
2010-02-22 23:32:58 +00:00
2010-02-12 22:13:47 +00:00
class VIEW3D_OT_edit_mesh_extrude_individual_move ( bpy . types . Operator ) :
2010-02-13 20:08:54 +00:00
" Extrude individual elements and move "
2010-02-12 22:13:47 +00:00
bl_label = " Extrude Individual and Move "
bl_idname = " view3d.edit_mesh_extrude_individual_move "
def execute ( self , context ) :
mesh = context . object . data
2010-10-05 15:29:06 +00:00
select_mode = context . tool_settings . mesh_select_mode
2010-02-01 18:30:00 +00:00
2010-02-12 22:13:47 +00:00
totface = mesh . total_face_sel
totedge = mesh . total_edge_sel
2011-02-17 04:35:41 +00:00
# totvert = mesh.total_vert_sel
2010-02-22 23:32:58 +00:00
2010-10-05 15:29:06 +00:00
if select_mode [ 2 ] and totface == 1 :
2010-11-17 12:32:39 +00:00
bpy . ops . mesh . extrude_region_move ( ' INVOKE_REGION_WIN ' , TRANSFORM_OT_translate = { " constraint_orientation " : ' NORMAL ' , " constraint_axis " : ( False , False , True ) } )
2010-10-05 15:29:06 +00:00
elif select_mode [ 2 ] and totface > 1 :
2010-11-17 12:32:39 +00:00
bpy . ops . mesh . extrude_faces_move ( ' INVOKE_REGION_WIN ' )
2010-10-05 15:29:06 +00:00
elif select_mode [ 1 ] and totedge > = 1 :
2010-11-17 12:32:39 +00:00
bpy . ops . mesh . extrude_edges_move ( ' INVOKE_REGION_WIN ' )
2010-02-22 23:32:58 +00:00
else :
2010-11-17 12:32:39 +00:00
bpy . ops . mesh . extrude_vertices_move ( ' INVOKE_REGION_WIN ' )
# ignore return from operators above because they are 'RUNNING_MODAL', and cause this one not to be freed. [#24671]
return { ' FINISHED ' }
2010-02-22 23:32:58 +00:00
2010-02-12 22:13:47 +00:00
def invoke ( self , context , event ) :
return self . execute ( context )
2010-02-22 23:32:58 +00:00
2010-02-12 22:13:47 +00:00
class VIEW3D_OT_edit_mesh_extrude_move ( bpy . types . Operator ) :
2010-02-13 20:08:54 +00:00
" Extrude and move along normals "
bl_label = " Extrude and Move on Normals "
bl_idname = " view3d.edit_mesh_extrude_move_normal "
2010-02-12 22:13:47 +00:00
def execute ( self , context ) :
mesh = context . object . data
totface = mesh . total_face_sel
totedge = mesh . total_edge_sel
2011-02-17 04:35:41 +00:00
# totvert = mesh.total_vert_sel
2010-02-22 23:32:58 +00:00
2010-03-17 00:54:34 +00:00
if totface > = 1 :
2010-11-17 12:32:39 +00:00
bpy . ops . mesh . extrude_region_move ( ' INVOKE_REGION_WIN ' , TRANSFORM_OT_translate = { " constraint_orientation " : ' NORMAL ' , " constraint_axis " : ( False , False , True ) } )
2010-02-22 23:32:58 +00:00
elif totedge == 1 :
2010-11-17 12:32:39 +00:00
bpy . ops . mesh . extrude_region_move ( ' INVOKE_REGION_WIN ' , TRANSFORM_OT_translate = { " constraint_orientation " : ' NORMAL ' , " constraint_axis " : ( True , True , False ) } )
2010-02-12 22:13:47 +00:00
else :
2010-11-17 12:32:39 +00:00
bpy . ops . mesh . extrude_region_move ( ' INVOKE_REGION_WIN ' )
# ignore return from operators above because they are 'RUNNING_MODAL', and cause this one not to be freed. [#24671]
return { ' FINISHED ' }
2010-02-22 23:32:58 +00:00
2010-02-12 22:13:47 +00:00
def invoke ( self , context , event ) :
return self . execute ( context )
2009-12-22 16:11:11 +00:00
2010-02-22 23:32:58 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_edit_mesh_vertices ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Vertices "
def draw ( self , context ) :
layout = self . layout
layout . operator_context = ' INVOKE_REGION_WIN '
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.merge " )
2010-09-16 20:16:20 +00:00
layout . operator ( " mesh.rip_move " )
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.split " )
layout . operator ( " mesh.separate " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.vertices_smooth " )
layout . operator ( " mesh.remove_doubles " )
2011-02-23 05:17:29 +00:00
layout . operator ( " mesh.vertices_sort " )
layout . operator ( " mesh.vertices_randomize " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.select_vertex_path " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.blend_from_shape " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " object.vertex_group_blend " )
layout . operator ( " mesh.shape_propagate_to_all " )
2009-08-23 22:13:56 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-11-16 13:59:27 +00:00
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_vertex_group " )
layout . menu ( " VIEW3D_MT_hook " )
2009-11-16 13:59:27 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_edit_mesh_edges ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Edges "
def draw ( self , context ) :
layout = self . layout
layout . operator_context = ' INVOKE_REGION_WIN '
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.edge_face_add " )
layout . operator ( " mesh.subdivide " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.mark_seam " )
2009-11-23 11:43:38 +00:00
layout . operator ( " mesh.mark_seam " , text = " Clear Seam " ) . clear = True
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.mark_sharp " )
2009-11-23 11:43:38 +00:00
layout . operator ( " mesh.mark_sharp " , text = " Clear Sharp " ) . clear = True
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 11:43:38 +00:00
layout . operator ( " mesh.edge_rotate " , text = " Rotate Edge CW " ) . direction = ' CW '
layout . operator ( " mesh.edge_rotate " , text = " Rotate Edge CCW " ) . direction = ' CCW '
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2010-01-09 20:42:35 +00:00
layout . operator ( " TRANSFORM_OT_edge_slide " )
layout . operator ( " TRANSFORM_OT_edge_crease " )
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.loop_multi_select " , text = " Edge Loop " )
2009-10-31 19:31:45 +00:00
# uiItemO(layout, "Loopcut", 0, "mesh.loop_cut"); // CutEdgeloop(em, 1);
# uiItemO(layout, "Edge Slide", 0, "mesh.edge_slide"); // EdgeSlide(em, 0,0.0);
2009-11-23 11:43:38 +00:00
layout . operator ( " mesh.loop_multi_select " , text = " Edge Ring " ) . ring = True
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.loop_to_region " )
layout . operator ( " mesh.region_to_loop " )
2009-10-12 21:06:03 +00:00
2009-12-25 22:16:19 +00:00
class VIEW3D_MT_edit_mesh_faces ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Faces "
bl_idname = " VIEW3D_MT_edit_mesh_faces "
def draw ( self , context ) :
layout = self . layout
layout . operator_context = ' INVOKE_REGION_WIN '
2010-07-10 11:38:40 +00:00
layout . operator ( " mesh.flip_normals " )
2009-11-23 00:27:30 +00:00
# layout.operator("mesh.bevel")
# layout.operator("mesh.bevel")
layout . operator ( " mesh.edge_face_add " )
layout . operator ( " mesh.fill " )
2010-01-26 11:14:44 +00:00
layout . operator ( " mesh.beautify_fill " )
2009-12-14 23:35:13 +00:00
layout . operator ( " mesh.solidify " )
2010-07-06 19:26:38 +00:00
layout . operator ( " mesh.sort_faces " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2010-09-07 00:20:31 +00:00
layout . operator ( " mesh.fgon_make " )
layout . operator ( " mesh.fgon_clear " )
layout . separator ( )
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.quads_convert_to_tris " )
layout . operator ( " mesh.tris_convert_to_quads " )
layout . operator ( " mesh.edge_flip " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.faces_shade_smooth " )
layout . operator ( " mesh.faces_shade_flat " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
# uiItemO(layout, NULL, 0, "mesh.face_mode"); // mesh_set_face_flags(em, 1);
# uiItemBooleanO(layout, NULL, 0, "mesh.face_mode", "clear", 1); // mesh_set_face_flags(em, 0);
2009-11-23 11:43:38 +00:00
layout . operator ( " mesh.edge_rotate " , text = " Rotate Edge CW " ) . direction = ' CW '
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator_menu_enum ( " mesh.uvs_rotate " , " direction " )
layout . operator_menu_enum ( " mesh.uvs_mirror " , " axis " )
layout . operator_menu_enum ( " mesh.colors_rotate " , " direction " )
layout . operator_menu_enum ( " mesh.colors_mirror " , " axis " )
2009-10-12 21:06:03 +00:00
2009-08-17 10:13:24 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_edit_mesh_normals ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Normals "
def draw ( self , context ) :
layout = self . layout
2009-08-17 10:13:24 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.normals_make_consistent " , text = " Recalculate Outside " )
2009-11-23 11:43:38 +00:00
layout . operator ( " mesh.normals_make_consistent " , text = " Recalculate Inside " ) . inside = True
2009-08-17 10:13:24 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " mesh.flip_normals " )
2009-08-17 10:13:24 +00:00
2009-10-31 23:35:56 +00:00
2010-08-02 02:55:12 +00:00
class VIEW3D_MT_edit_mesh_showhide ( ShowHideMenu , bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
_operator_name = " mesh "
2009-08-17 10:13:24 +00:00
2009-09-15 10:23:44 +00:00
# Edit Curve
# draw_curve is used by VIEW3D_MT_edit_curve and VIEW3D_MT_edit_surface
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
def draw_curve ( self , context ) :
2009-10-31 19:31:45 +00:00
layout = self . layout
settings = context . tool_settings
2009-11-28 23:37:56 +00:00
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_transform " )
layout . menu ( " VIEW3D_MT_mirror " )
layout . menu ( " VIEW3D_MT_snap " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " curve.extrude " )
layout . operator ( " curve.duplicate " )
layout . operator ( " curve.separate " )
layout . operator ( " curve.make_segment " )
layout . operator ( " curve.cyclic_toggle " )
layout . operator ( " curve.delete " , text = " Delete... " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_edit_curve_ctrlpoints " )
layout . menu ( " VIEW3D_MT_edit_curve_segments " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2010-08-18 03:24:52 +00:00
layout . prop_menu_enum ( settings , " proportional_edit " )
layout . prop_menu_enum ( settings , " proportional_edit_falloff " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_edit_curve_showhide " )
2009-08-17 10:13:24 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_edit_curve ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Curve "
draw = draw_curve
2009-08-17 10:13:24 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_edit_curve_ctrlpoints ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Control Points "
def draw ( self , context ) :
layout = self . layout
edit_object = context . edit_object
if edit_object . type == ' CURVE ' :
2011-01-10 12:50:46 +00:00
layout . operator ( " transform.transform " , text = " Tilt " ) . mode = ' TILT '
2009-11-23 00:27:30 +00:00
layout . operator ( " curve.tilt_clear " )
layout . operator ( " curve.separate " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator_menu_enum ( " curve.handle_type_set " , " type " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-11-16 13:59:27 +00:00
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_hook " )
2009-11-16 13:59:27 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_edit_curve_segments ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Segments "
2009-08-17 10:13:24 +00:00
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
2009-11-23 00:27:30 +00:00
layout . operator ( " curve.subdivide " )
layout . operator ( " curve.switch_direction " )
2009-12-26 09:36:50 +00:00
2009-12-24 10:39:30 +00:00
class VIEW3D_MT_edit_curve_specials ( bpy . types . Menu ) :
bl_label = " Specials "
2009-08-17 10:13:24 +00:00
2009-12-24 10:39:30 +00:00
def draw ( self , context ) :
layout = self . layout
layout . operator ( " curve.subdivide " )
layout . operator ( " curve.switch_direction " )
layout . operator ( " curve.spline_weight_set " )
layout . operator ( " curve.radius_set " )
layout . operator ( " curve.smooth " )
layout . operator ( " curve.smooth_radius " )
2009-10-31 23:35:56 +00:00
2009-12-26 09:36:50 +00:00
2010-08-02 02:55:12 +00:00
class VIEW3D_MT_edit_curve_showhide ( ShowHideMenu , bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
_operator_name = " curve "
2009-08-17 10:13:24 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_edit_surface ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Surface "
2009-08-17 10:13:24 +00:00
2009-10-31 19:31:45 +00:00
draw = draw_curve
2009-08-17 10:13:24 +00:00
2009-10-31 23:35:56 +00:00
2010-11-25 18:22:59 +00:00
class VIEW3D_MT_edit_font ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Text "
def draw ( self , context ) :
layout = self . layout
2009-11-23 00:27:30 +00:00
layout . operator ( " font.file_paste " )
2009-08-17 10:13:24 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_edit_text_chars " )
2009-08-17 10:13:24 +00:00
2010-07-13 23:51:21 +00:00
layout . separator ( )
2010-09-07 15:17:42 +00:00
2010-07-13 23:51:21 +00:00
layout . operator ( " font.style_toggle " , text = " Toggle Bold " ) . style = ' BOLD '
layout . operator ( " font.style_toggle " , text = " Toggle Italic " ) . style = ' ITALIC '
layout . operator ( " font.style_toggle " , text = " Toggle Underline " ) . style = ' UNDERLINE '
layout . operator ( " font.style_toggle " , text = " Toggle Small Caps " ) . style = ' SMALL_CAPS '
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_edit_text_chars ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Special Characters "
def draw ( self , context ) :
layout = self . layout
2009-11-23 11:43:38 +00:00
layout . operator ( " font.text_insert " , text = " Copyright|Alt C " ) . text = b ' \xC2 \xA9 ' . decode ( )
layout . operator ( " font.text_insert " , text = " Registered Trademark|Alt R " ) . text = b ' \xC2 \xAE ' . decode ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 11:43:38 +00:00
layout . operator ( " font.text_insert " , text = " Degree Sign|Alt G " ) . text = b ' \xC2 \xB0 ' . decode ( )
layout . operator ( " font.text_insert " , text = " Multiplication Sign|Alt x " ) . text = b ' \xC3 \x97 ' . decode ( )
layout . operator ( " font.text_insert " , text = " Circle|Alt . " ) . text = b ' \xC2 \x8A ' . decode ( )
layout . operator ( " font.text_insert " , text = " Superscript 1|Alt 1 " ) . text = b ' \xC2 \xB9 ' . decode ( )
layout . operator ( " font.text_insert " , text = " Superscript 2|Alt 2 " ) . text = b ' \xC2 \xB2 ' . decode ( )
layout . operator ( " font.text_insert " , text = " Superscript 3|Alt 3 " ) . text = b ' \xC2 \xB3 ' . decode ( )
layout . operator ( " font.text_insert " , text = " Double >>|Alt > " ) . text = b ' \xC2 \xBB ' . decode ( )
layout . operator ( " font.text_insert " , text = " Double <<|Alt < " ) . text = b ' \xC2 \xAB ' . decode ( )
layout . operator ( " font.text_insert " , text = " Promillage|Alt % " ) . text = b ' \xE2 \x80 \xB0 ' . decode ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 11:43:38 +00:00
layout . operator ( " font.text_insert " , text = " Dutch Florin|Alt F " ) . text = b ' \xC2 \xA4 ' . decode ( )
layout . operator ( " font.text_insert " , text = " British Pound|Alt L " ) . text = b ' \xC2 \xA3 ' . decode ( )
layout . operator ( " font.text_insert " , text = " Japanese Yen|Alt Y " ) . text = b ' \xC2 \xA5 ' . decode ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 11:43:38 +00:00
layout . operator ( " font.text_insert " , text = " German S|Alt S " ) . text = b ' \xC3 \x9F ' . decode ( )
layout . operator ( " font.text_insert " , text = " Spanish Question Mark|Alt ? " ) . text = b ' \xC2 \xBF ' . decode ( )
layout . operator ( " font.text_insert " , text = " Spanish Exclamation Mark|Alt ! " ) . text = b ' \xC2 \xA1 ' . decode ( )
2009-08-17 10:13:24 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_edit_meta ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Metaball "
def draw ( self , context ) :
layout = self . layout
settings = context . tool_settings
2009-11-23 00:27:30 +00:00
layout . operator ( " ed.undo " )
layout . operator ( " ed.redo " )
Code holiday commit:
- fix: user pref, window title was reset to 'Blender' on tab usage
- Undo history menu back:
- name "Undo History"
- hotkey alt+ctrl+z (alt+apple+z for mac)
- works like 2.4x, only for global undo, editmode and particle edit.
- Menu scroll
- for small windows or screens, popup menus now allow to display
all items, using internal scrolling
- works with a timer, scrolling 10 items per second when mouse
is over the top or bottom arrow
- if menu is too big to display, it now draws to top or bottom,
based on largest available space.
- also works for hotkey driven pop up menus.
- User pref "DPI" follows widget/layout size
- widgets & headers now become bigger and smaller, to match
'dpi' font sizes. Works well to match UI to monitor size.
- note that icons can get fuzzy, we need better mipmaps for it
2011-06-04 17:03:46 +00:00
layout . operator ( " ed.undo_history " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-11-28 23:37:56 +00:00
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_transform " )
layout . menu ( " VIEW3D_MT_mirror " )
layout . menu ( " VIEW3D_MT_snap " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " mball.delete_metaelems " , text = " Delete... " )
layout . operator ( " mball.duplicate_metaelems " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2010-08-18 03:24:52 +00:00
layout . prop_menu_enum ( settings , " proportional_edit " )
layout . prop_menu_enum ( settings , " proportional_edit_falloff " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_edit_meta_showhide " )
2009-08-17 10:13:24 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_edit_meta_showhide ( bpy . types . Menu ) :
2011-06-20 10:07:46 +00:00
bl_label = _ ( " Show/Hide " )
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
2009-08-17 10:13:24 +00:00
2011-06-20 10:07:46 +00:00
layout . operator ( " mball.reveal_metaelems " , text = _ ( " Show Hidden " ) )
layout . operator ( " mball.hide_metaelems " , text = _ ( " Hide Selected " ) )
layout . operator ( " mball.hide_metaelems " , text = _ ( " Hide Unselected " ) ) . unselected = True
2009-08-17 10:13:24 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_edit_lattice ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Lattice "
def draw ( self , context ) :
layout = self . layout
settings = context . tool_settings
2009-11-28 23:37:56 +00:00
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_transform " )
layout . menu ( " VIEW3D_MT_mirror " )
layout . menu ( " VIEW3D_MT_snap " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " lattice.make_regular " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2010-08-18 03:24:52 +00:00
layout . prop_menu_enum ( settings , " proportional_edit " )
layout . prop_menu_enum ( settings , " proportional_edit_falloff " )
2009-08-17 10:13:24 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_edit_armature ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Armature "
def draw ( self , context ) :
layout = self . layout
edit_object = context . edit_object
arm = edit_object . data
2009-11-28 23:37:56 +00:00
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_transform " )
layout . menu ( " VIEW3D_MT_mirror " )
layout . menu ( " VIEW3D_MT_snap " )
layout . menu ( " VIEW3D_MT_edit_armature_roll " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " armature.extrude_move " )
2009-10-31 19:31:45 +00:00
2010-08-20 06:09:58 +00:00
if arm . use_mirror_x :
2009-11-23 00:27:30 +00:00
layout . operator ( " armature.extrude_forked " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " armature.duplicate_move " )
layout . operator ( " armature.merge " )
layout . operator ( " armature.fill " )
layout . operator ( " armature.delete " )
layout . operator ( " armature.separate " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2010-10-15 03:24:47 +00:00
layout . operator ( " armature.subdivide " , text = " Subdivide " )
2009-11-23 00:27:30 +00:00
layout . operator ( " armature.switch_direction " , text = " Switch Direction " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-16 13:59:27 +00:00
layout . operator_context = ' EXEC_AREA '
2009-11-23 11:43:38 +00:00
layout . operator ( " armature.autoside_names " , text = " AutoName Left/Right " ) . type = ' XAXIS '
layout . operator ( " armature.autoside_names " , text = " AutoName Front/Back " ) . type = ' YAXIS '
layout . operator ( " armature.autoside_names " , text = " AutoName Top/Bottom " ) . type = ' ZAXIS '
2009-11-23 00:27:30 +00:00
layout . operator ( " armature.flip_names " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-16 13:59:27 +00:00
layout . operator_context = ' INVOKE_DEFAULT '
2009-11-23 00:27:30 +00:00
layout . operator ( " armature.armature_layers " )
layout . operator ( " armature.bone_layers " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . menu ( " VIEW3D_MT_edit_armature_parent " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . operator_menu_enum ( " armature.flags_set " , " mode " , text = " Bone Settings " )
2009-08-17 10:13:24 +00:00
2009-11-21 00:05:43 +00:00
2009-11-20 11:49:47 +00:00
class VIEW3D_MT_armature_specials ( bpy . types . Menu ) :
bl_label = " Specials "
def draw ( self , context ) :
layout = self . layout
2009-11-21 00:05:43 +00:00
2009-11-20 11:49:47 +00:00
layout . operator_context = ' INVOKE_REGION_WIN '
2009-11-21 00:05:43 +00:00
2010-10-15 03:24:47 +00:00
layout . operator ( " armature.subdivide " , text = " Subdivide " )
2009-11-23 00:27:30 +00:00
layout . operator ( " armature.switch_direction " , text = " Switch Direction " )
2009-11-21 00:05:43 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-11-21 00:05:43 +00:00
2009-11-20 11:49:47 +00:00
layout . operator_context = ' EXEC_REGION_WIN '
2009-11-23 11:43:38 +00:00
layout . operator ( " armature.autoside_names " , text = " AutoName Left/Right " ) . type = ' XAXIS '
layout . operator ( " armature.autoside_names " , text = " AutoName Front/Back " ) . type = ' YAXIS '
layout . operator ( " armature.autoside_names " , text = " AutoName Top/Bottom " ) . type = ' ZAXIS '
2009-11-23 00:27:30 +00:00
layout . operator ( " armature.flip_names " , text = " Flip Names " )
2009-10-31 23:35:56 +00:00
2009-11-21 00:05:43 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_edit_armature_parent ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Parent "
def draw ( self , context ) :
layout = self . layout
2009-08-17 10:13:24 +00:00
2009-11-23 00:27:30 +00:00
layout . operator ( " armature.parent_set " , text = " Make " )
layout . operator ( " armature.parent_clear " , text = " Clear " )
2009-08-17 10:13:24 +00:00
2009-10-31 23:35:56 +00:00
2009-09-15 10:23:44 +00:00
class VIEW3D_MT_edit_armature_roll ( bpy . types . Menu ) :
2009-10-31 19:31:45 +00:00
bl_label = " Bone Roll "
def draw ( self , context ) :
layout = self . layout
2011-02-16 02:25:03 +00:00
layout . operator_menu_enum ( " armature.calculate_roll " , " type " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
layout . separator ( )
2009-10-31 19:31:45 +00:00
2009-12-10 10:36:32 +00:00
layout . operator ( " transform.transform " , text = " Set Roll " ) . mode = ' BONE_ROLL '
2009-08-17 10:13:24 +00:00
2009-08-15 20:21:49 +00:00
# ********** Panel **********
2009-07-11 13:32:20 +00:00
2009-10-31 23:35:56 +00:00
2010-04-28 07:25:39 +00:00
class VIEW3D_PT_view3d_properties ( bpy . types . Panel ) :
2009-10-31 19:31:45 +00:00
bl_space_type = ' VIEW_3D '
bl_region_type = ' UI '
bl_label = " View "
2010-08-09 01:37:09 +00:00
@classmethod
def poll ( cls , context ) :
2009-10-31 19:31:45 +00:00
view = context . space_data
return ( view )
def draw ( self , context ) :
layout = self . layout
view = context . space_data
col = layout . column ( )
2010-06-07 03:44:54 +00:00
col . active = view . region_3d . view_perspective != ' CAMERA '
2009-11-23 00:27:30 +00:00
col . prop ( view , " lens " )
2009-11-28 13:39:35 +00:00
col . label ( text = " Lock to Object: " )
col . prop ( view , " lock_object " , text = " " )
if view . lock_object and view . lock_object . type == ' ARMATURE ' :
2010-08-23 05:47:45 +00:00
col . prop_search ( view , " lock_bone " , view . lock_object . data , " bones " , text = " " )
2010-10-31 01:18:26 +00:00
elif not view . lock_object :
col . prop ( view , " lock_cursor " , text = " Lock to Cursor " )
2009-10-31 19:31:45 +00:00
2011-05-14 17:50:33 +00:00
col = layout . column ( )
col . prop ( view , " lock_camera " )
2009-10-31 19:31:45 +00:00
col = layout . column ( align = True )
2009-11-23 00:27:30 +00:00
col . label ( text = " Clip: " )
col . prop ( view , " clip_start " , text = " Start " )
col . prop ( view , " clip_end " , text = " End " )
2009-10-31 19:31:45 +00:00
2010-04-27 06:47:12 +00:00
subcol = col . column ( )
subcol . enabled = not view . lock_camera_and_layers
subcol . label ( text = " Local Camera: " )
subcol . prop ( view , " camera " , text = " " )
2010-03-17 00:05:40 +00:00
layout . column ( ) . prop ( view , " cursor_location " )
2009-10-31 19:31:45 +00:00
2009-11-14 13:35:44 +00:00
2010-04-28 07:25:39 +00:00
class VIEW3D_PT_view3d_name ( bpy . types . Panel ) :
2009-11-05 17:22:11 +00:00
bl_space_type = ' VIEW_3D '
bl_region_type = ' UI '
bl_label = " Item "
2009-11-21 00:05:43 +00:00
2010-08-09 01:37:09 +00:00
@classmethod
def poll ( cls , context ) :
2009-11-19 18:48:31 +00:00
return ( context . space_data and context . active_object )
2009-11-07 22:07:46 +00:00
2009-11-05 17:22:11 +00:00
def draw ( self , context ) :
layout = self . layout
2009-11-07 22:07:46 +00:00
2009-11-11 10:07:52 +00:00
ob = context . active_object
2009-11-05 17:22:11 +00:00
row = layout . row ( )
2009-12-10 10:23:53 +00:00
row . label ( text = " " , icon = ' OBJECT_DATA ' )
2009-11-23 00:27:30 +00:00
row . prop ( ob , " name " , text = " " )
2009-11-07 22:07:46 +00:00
2011-03-07 13:23:45 +00:00
if ob . type == ' ARMATURE ' and ob . mode in { ' EDIT ' , ' POSE ' } :
2009-11-05 17:22:11 +00:00
bone = context . active_bone
2009-11-11 10:07:52 +00:00
if bone :
row = layout . row ( )
2009-12-10 10:23:53 +00:00
row . label ( text = " " , icon = ' BONE_DATA ' )
2009-11-23 00:27:30 +00:00
row . prop ( bone , " name " , text = " " )
2009-10-31 23:35:56 +00:00
2009-11-14 13:35:44 +00:00
2010-04-28 07:25:39 +00:00
class VIEW3D_PT_view3d_display ( bpy . types . Panel ) :
2009-10-31 19:31:45 +00:00
bl_space_type = ' VIEW_3D '
bl_region_type = ' UI '
bl_label = " Display "
2010-08-26 01:05:37 +00:00
bl_options = { ' DEFAULT_CLOSED ' }
2009-10-31 19:31:45 +00:00
2010-08-09 01:37:09 +00:00
@classmethod
def poll ( cls , context ) :
2009-10-31 19:31:45 +00:00
view = context . space_data
return ( view )
def draw ( self , context ) :
layout = self . layout
view = context . space_data
2010-11-23 14:14:06 +00:00
scene = context . scene
gs = scene . game_settings
2009-10-31 19:31:45 +00:00
ob = context . object
2009-11-28 23:37:56 +00:00
2009-10-31 19:31:45 +00:00
col = layout . column ( )
2010-08-17 07:49:53 +00:00
col . prop ( view , " show_only_render " )
2010-03-16 17:49:31 +00:00
col = layout . column ( )
2010-08-17 07:49:53 +00:00
display_all = not view . show_only_render
2010-03-16 17:49:31 +00:00
col . active = display_all
2010-08-17 07:49:53 +00:00
col . prop ( view , " show_outline_selected " )
col . prop ( view , " show_all_objects_origin " )
col . prop ( view , " show_relationship_lines " )
2009-10-31 23:35:56 +00:00
if ob and ob . type == ' MESH ' :
2009-11-02 16:07:49 +00:00
mesh = ob . data
2010-08-17 17:03:52 +00:00
col . prop ( mesh , " show_all_edges " )
2009-11-28 23:37:56 +00:00
2009-11-28 13:39:35 +00:00
col = layout . column ( )
2010-03-16 17:49:31 +00:00
col . active = display_all
split = col . split ( percentage = 0.55 )
2010-08-17 07:49:53 +00:00
split . prop ( view , " show_floor " , text = " Grid Floor " )
2010-04-04 14:52:15 +00:00
2010-03-16 17:49:31 +00:00
row = split . row ( align = True )
2010-08-17 07:49:53 +00:00
row . prop ( view , " show_axis_x " , text = " X " , toggle = True )
row . prop ( view , " show_axis_y " , text = " Y " , toggle = True )
row . prop ( view , " show_axis_z " , text = " Z " , toggle = True )
2010-04-04 14:52:15 +00:00
2009-11-28 13:39:35 +00:00
sub = col . column ( align = True )
2010-08-17 07:49:53 +00:00
sub . active = ( display_all and view . show_floor )
2009-11-28 13:39:35 +00:00
sub . prop ( view , " grid_lines " , text = " Lines " )
2010-11-23 14:14:06 +00:00
sub . prop ( view , " grid_scale " , text = " Scale " )
subsub = sub . column ( align = True )
subsub . active = scene . unit_settings . system == ' NONE '
subsub . prop ( view , " grid_subdivisions " , text = " Subdivisions " )
2009-11-28 23:37:56 +00:00
2009-10-31 19:31:45 +00:00
col = layout . column ( )
2009-11-23 00:27:30 +00:00
col . label ( text = " Shading: " )
col . prop ( gs , " material_mode " , text = " " )
2010-08-17 07:49:53 +00:00
col . prop ( view , " show_textured_solid " )
2009-10-31 19:31:45 +00:00
2010-01-30 03:22:22 +00:00
layout . separator ( )
region = view . region_quadview
layout . operator ( " screen.region_quadview " , text = " Toggle Quad View " )
2009-08-22 11:51:26 +00:00
2010-01-30 03:22:22 +00:00
if region :
col = layout . column ( )
col . prop ( region , " lock_rotation " )
row = col . row ( )
row . enabled = region . lock_rotation
2010-08-17 17:03:52 +00:00
row . prop ( region , " show_sync_view " )
2010-01-30 03:22:22 +00:00
row = col . row ( )
2010-08-17 17:03:52 +00:00
row . enabled = region . lock_rotation and region . show_sync_view
2010-08-19 17:46:00 +00:00
row . prop ( region , " use_box_clip " )
2009-10-31 23:35:56 +00:00
2010-01-31 14:46:28 +00:00
2010-04-28 07:25:39 +00:00
class VIEW3D_PT_view3d_meshdisplay ( bpy . types . Panel ) :
2009-10-31 19:31:45 +00:00
bl_space_type = ' VIEW_3D '
bl_region_type = ' UI '
bl_label = " Mesh Display "
2010-08-09 01:37:09 +00:00
@classmethod
def poll ( cls , context ) :
2009-11-04 16:26:08 +00:00
# The active object check is needed because of localmode
return ( context . active_object and ( context . mode == ' EDIT_MESH ' ) )
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
mesh = context . active_object . data
col = layout . column ( )
2009-11-23 00:27:30 +00:00
col . label ( text = " Overlays: " )
2010-08-17 17:03:52 +00:00
col . prop ( mesh , " show_edges " , text = " Edges " )
col . prop ( mesh , " show_faces " , text = " Faces " )
col . prop ( mesh , " show_edge_crease " , text = " Creases " )
col . prop ( mesh , " show_edge_bevel_weight " , text = " Bevel Weights " )
col . prop ( mesh , " show_edge_seams " , text = " Seams " )
col . prop ( mesh , " show_edge_sharp " , text = " Sharp " )
2009-11-23 00:27:30 +00:00
col . separator ( )
col . label ( text = " Normals: " )
2010-08-17 17:03:52 +00:00
col . prop ( mesh , " show_normal_face " , text = " Face " )
col . prop ( mesh , " show_normal_vertex " , text = " Vertex " )
2009-11-23 00:27:30 +00:00
col . prop ( context . scene . tool_settings , " normal_size " , text = " Normal Size " )
col . separator ( )
col . label ( text = " Numerics: " )
2010-08-17 17:03:52 +00:00
col . prop ( mesh , " show_extra_edge_length " )
2011-01-11 07:40:31 +00:00
col . prop ( mesh , " show_extra_face_angle " )
2010-08-17 17:03:52 +00:00
col . prop ( mesh , " show_extra_face_area " )
2009-09-08 07:35:07 +00:00
2009-10-31 23:35:56 +00:00
2010-04-28 07:25:39 +00:00
class VIEW3D_PT_view3d_curvedisplay ( bpy . types . Panel ) :
2009-10-31 19:31:45 +00:00
bl_space_type = ' VIEW_3D '
bl_region_type = ' UI '
bl_label = " Curve Display "
2010-08-09 01:37:09 +00:00
@classmethod
def poll ( cls , context ) :
2009-10-31 19:31:45 +00:00
editmesh = context . mode == ' EDIT_CURVE '
return ( editmesh )
2009-09-08 07:35:07 +00:00
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
2009-09-08 07:35:07 +00:00
2009-10-31 19:31:45 +00:00
curve = context . active_object . data
2009-09-08 07:35:07 +00:00
2009-10-31 19:31:45 +00:00
col = layout . column ( )
2009-11-23 00:27:30 +00:00
col . label ( text = " Overlays: " )
2010-08-17 17:03:52 +00:00
col . prop ( curve , " show_handles " , text = " Handles " )
col . prop ( curve , " show_normal_face " , text = " Normals " )
2009-11-23 00:27:30 +00:00
col . prop ( context . scene . tool_settings , " normal_size " , text = " Normal Size " )
2009-10-13 17:49:05 +00:00
2009-10-31 23:35:56 +00:00
2009-07-14 12:32:19 +00:00
class VIEW3D_PT_background_image ( bpy . types . Panel ) :
2009-10-31 19:31:45 +00:00
bl_space_type = ' VIEW_3D '
bl_region_type = ' UI '
2010-01-19 22:44:43 +00:00
bl_label = " Background Images "
2010-08-26 01:05:37 +00:00
bl_options = { ' DEFAULT_CLOSED ' }
2009-10-31 19:31:45 +00:00
2010-08-09 01:37:09 +00:00
@classmethod
def poll ( cls , context ) :
2009-10-31 19:31:45 +00:00
view = context . space_data
2009-11-14 13:35:44 +00:00
# bg = context.space_data.background_image
2009-10-31 19:31:45 +00:00
return ( view )
def draw_header ( self , context ) :
layout = self . layout
view = context . space_data
2010-08-17 07:49:53 +00:00
layout . prop ( view , " show_background_images " , text = " " )
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
view = context . space_data
2010-01-31 14:46:28 +00:00
2010-01-19 22:44:43 +00:00
col = layout . column ( )
2010-12-08 11:42:11 +00:00
col . operator ( " view3d.background_image_add " , text = " Add Image " )
2009-10-31 19:31:45 +00:00
2010-01-19 22:44:43 +00:00
for i , bg in enumerate ( view . background_images ) :
2010-08-17 07:49:53 +00:00
layout . active = view . show_background_images
2010-01-14 02:16:45 +00:00
box = layout . box ( )
2010-01-19 22:44:43 +00:00
row = box . row ( align = True )
2010-06-26 20:00:45 +00:00
row . prop ( bg , " show_expanded " , text = " " , emboss = False )
2010-09-06 22:00:15 +00:00
if bg . image :
row . prop ( bg . image , " name " , text = " " , emboss = False )
else :
2010-09-07 20:27:40 +00:00
row . label ( text = " Not Set " )
2010-12-08 11:42:11 +00:00
row . operator ( " view3d.background_image_remove " , text = " " , emboss = False , icon = ' X ' ) . index = i
2010-01-31 14:46:28 +00:00
2010-01-19 22:44:43 +00:00
box . prop ( bg , " view_axis " , text = " Axis " )
2010-01-31 14:46:28 +00:00
2010-01-19 22:44:43 +00:00
if bg . show_expanded :
row = box . row ( )
row . template_ID ( bg , " image " , open = " image.open " )
if ( bg . image ) :
box . template_image ( bg , " image " , bg . image_user , compact = True )
2010-11-06 21:40:09 +00:00
box . prop ( bg , " opacity " , slider = True )
2010-07-20 12:20:55 +00:00
if bg . view_axis != ' CAMERA ' :
box . prop ( bg , " size " )
row = box . row ( align = True )
row . prop ( bg , " offset_x " , text = " X " )
row . prop ( bg , " offset_y " , text = " Y " )
2010-01-31 14:46:28 +00:00
2009-07-14 12:32:19 +00:00
2009-09-28 19:49:36 +00:00
class VIEW3D_PT_transform_orientations ( bpy . types . Panel ) :
2009-10-31 19:31:45 +00:00
bl_space_type = ' VIEW_3D '
bl_region_type = ' UI '
bl_label = " Transform Orientations "
2010-08-26 01:05:37 +00:00
bl_options = { ' DEFAULT_CLOSED ' }
2009-10-31 19:31:45 +00:00
2010-08-09 01:37:09 +00:00
@classmethod
def poll ( cls , context ) :
2009-10-31 19:31:45 +00:00
view = context . space_data
return ( view )
def draw ( self , context ) :
layout = self . layout
view = context . space_data
col = layout . column ( )
2009-11-23 00:27:30 +00:00
col . prop ( view , " transform_orientation " )
2009-12-10 10:36:32 +00:00
col . operator ( " transform.create_orientation " , text = " Create " )
2009-10-31 19:31:45 +00:00
orientation = view . current_orientation
if orientation :
2009-11-23 00:27:30 +00:00
col . prop ( orientation , " name " )
2009-12-10 10:36:32 +00:00
col . operator ( " transform.delete_orientation " , text = " Delete " )
2009-10-08 07:54:20 +00:00
2009-10-31 23:35:56 +00:00
2009-10-20 00:45:51 +00:00
class VIEW3D_PT_etch_a_ton ( bpy . types . Panel ) :
2009-10-31 19:31:45 +00:00
bl_space_type = ' VIEW_3D '
bl_region_type = ' UI '
bl_label = " Skeleton Sketching "
2010-08-26 01:05:37 +00:00
bl_options = { ' DEFAULT_CLOSED ' }
2009-10-31 19:31:45 +00:00
2010-08-09 01:37:09 +00:00
@classmethod
def poll ( cls , context ) :
2009-10-31 19:31:45 +00:00
scene = context . space_data
ob = context . active_object
return scene and ob and ob . type == ' ARMATURE ' and ob . mode == ' EDIT '
def draw_header ( self , context ) :
layout = self . layout
toolsettings = context . scene . tool_settings
2010-08-18 03:24:52 +00:00
layout . prop ( toolsettings , " use_bone_sketching " , text = " " )
2009-10-31 19:31:45 +00:00
def draw ( self , context ) :
layout = self . layout
toolsettings = context . scene . tool_settings
col = layout . column ( )
2010-08-18 03:24:52 +00:00
col . prop ( toolsettings , " use_etch_quick " )
col . prop ( toolsettings , " use_etch_overdraw " )
2009-10-31 19:31:45 +00:00
2009-11-23 00:27:30 +00:00
col . prop ( toolsettings , " etch_convert_mode " )
2009-10-31 19:31:45 +00:00
2009-11-07 22:12:03 +00:00
if toolsettings . etch_convert_mode == ' LENGTH ' :
2009-11-23 00:27:30 +00:00
col . prop ( toolsettings , " etch_length_limit " )
2009-11-07 22:12:03 +00:00
elif toolsettings . etch_convert_mode == ' ADAPTIVE ' :
2009-11-23 00:27:30 +00:00
col . prop ( toolsettings , " etch_adaptive_limit " )
2009-11-07 22:12:03 +00:00
elif toolsettings . etch_convert_mode == ' FIXED ' :
2009-11-23 00:27:30 +00:00
col . prop ( toolsettings , " etch_subdivision_number " )
2009-11-07 22:12:03 +00:00
elif toolsettings . etch_convert_mode == ' RETARGET ' :
2009-11-23 00:27:30 +00:00
col . prop ( toolsettings , " etch_template " )
col . prop ( toolsettings , " etch_roll_mode " )
2010-08-18 03:24:52 +00:00
col . prop ( toolsettings , " use_etch_autoname " )
2009-11-23 00:27:30 +00:00
col . prop ( toolsettings , " etch_number " )
col . prop ( toolsettings , " etch_side " )
2011-05-29 16:04:09 +00:00
col . operator ( " sketch.convert " , text = " Convert " )
2009-10-31 19:31:45 +00:00
2009-11-18 20:01:35 +00:00
class VIEW3D_PT_context_properties ( bpy . types . Panel ) :
bl_space_type = ' VIEW_3D '
bl_region_type = ' UI '
2011-06-15 11:41:15 +00:00
bl_label = _ ( " Properties " )
2010-08-26 01:05:37 +00:00
bl_options = { ' DEFAULT_CLOSED ' }
2009-11-18 20:01:35 +00:00
2010-08-05 21:58:57 +00:00
def _active_context_member ( context ) :
2009-11-18 20:01:35 +00:00
obj = context . object
if obj :
mode = obj . mode
if mode == ' POSE ' :
2009-11-24 17:12:32 +00:00
return " active_pose_bone "
2009-11-18 20:01:35 +00:00
elif mode == ' EDIT ' and obj . type == ' ARMATURE ' :
2009-11-23 13:06:26 +00:00
return " active_bone "
2009-11-18 20:01:35 +00:00
else :
2009-11-23 13:06:26 +00:00
return " object "
return " "
2009-11-28 23:37:56 +00:00
2010-08-09 01:37:09 +00:00
@classmethod
def poll ( cls , context ) :
member = cls . _active_context_member ( context )
2009-11-23 13:06:26 +00:00
if member :
2009-11-23 15:19:30 +00:00
context_member = getattr ( context , member )
return context_member and context_member . keys ( )
2009-11-23 13:06:26 +00:00
return False
def draw ( self , context ) :
import rna_prop_ui
2010-08-05 21:58:57 +00:00
member = __class__ . _active_context_member ( context )
2009-11-18 20:01:35 +00:00
2009-11-23 13:06:26 +00:00
if member :
2009-11-18 20:01:35 +00:00
# Draw with no edit button
2010-12-19 13:04:14 +00:00
rna_prop_ui . draw ( self . layout , context , member , object , False )
2011-03-24 03:02:34 +00:00
def register ( ) :
bpy . utils . register_module ( __name__ )
def unregister ( ) :
bpy . utils . unregister_module ( __name__ )
if __name__ == " __main__ " :
register ( )
2011-04-04 10:13:04 +00:00
if __name__ == " __main__ " : # only for live edit.
bpy . utils . register_module ( __name__ )