*Cleaned up Transform panel in n-key area. It's now single column so that this view can be nice and slim, while you can still access everything. This is especially important in edit mode where you cannot change the transform values numerically from the Properties. Transform properties don't seem to work for Metaball edit yet, so wasn't able to test this *Removed some lingering tools in curve transform and put them in the toolbar instead. *Improved alignment in toolbar *Made Image Properties use regular checkmark toggle buttons *Added Delete as an alternative to X key, as it was in 2.4x
1359 lines
36 KiB
Python
1359 lines
36 KiB
Python
|
|
import bpy
|
|
|
|
# ********** Header **********
|
|
|
|
class VIEW3D_HT_header(bpy.types.Header):
|
|
__space_type__ = 'VIEW_3D'
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
view = context.space_data
|
|
mode_string = context.mode
|
|
edit_object = context.edit_object
|
|
object = context.active_object
|
|
|
|
row = layout.row(align=True)
|
|
row.template_header()
|
|
|
|
# Menus
|
|
if context.area.show_menus:
|
|
sub = row.row(align=True)
|
|
|
|
sub.itemM("VIEW3D_MT_view")
|
|
|
|
# Select Menu
|
|
if mode_string not in ('EDIT_TEXT', 'SCULPT', 'PAINT_WEIGHT', 'PAINT_VERTEX', 'PAINT_TEXTURE'):
|
|
sub.itemM("VIEW3D_MT_select_%s" % mode_string.lower())
|
|
|
|
if edit_object:
|
|
sub.itemM("VIEW3D_MT_edit_%s" % edit_object.type.lower())
|
|
elif object:
|
|
ob_mode_string = object.mode
|
|
|
|
if mode_string not in ['PAINT_WEIGHT', 'PAINT_TEXTURE']:
|
|
sub.itemM("VIEW3D_MT_%s" % mode_string.lower())
|
|
else:
|
|
sub.itemM("VIEW3D_MT_object")
|
|
|
|
layout.template_header_3D()
|
|
|
|
# ********** Menu **********
|
|
|
|
# ********** Utilities **********
|
|
|
|
class VIEW3D_MT_showhide(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Show/Hide"
|
|
_operator_name = ""
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("%s.reveal" % self._operator_name, text="Show Hidden")
|
|
layout.itemO("%s.hide" % self._operator_name, text="Hide Selected")
|
|
layout.item_booleanO("%s.hide" % self._operator_name, "unselected", True, text="Hide Unselected")
|
|
|
|
class VIEW3D_MT_snap(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Snap"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("view3d.snap_selected_to_grid", text="Selection to Grid")
|
|
layout.itemO("view3d.snap_selected_to_cursor", text="Selection to Cursor")
|
|
layout.itemO("view3d.snap_selected_to_center", text="Selection to Center")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("view3d.snap_cursor_to_selected", text="Cursor to Selected")
|
|
layout.itemO("view3d.snap_cursor_to_grid", text="Cursor to Grid")
|
|
layout.itemO("view3d.snap_cursor_to_active", text="Cursor to Active")
|
|
|
|
# ********** View menus **********
|
|
|
|
class VIEW3D_MT_view(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "View"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("view3d.properties", icon='ICON_MENU_PANEL')
|
|
layout.itemO("view3d.toolbar", icon='ICON_MENU_PANEL')
|
|
|
|
layout.itemS()
|
|
|
|
layout.item_enumO("view3d.viewnumpad", "type", 'CAMERA')
|
|
layout.item_enumO("view3d.viewnumpad", "type", 'TOP')
|
|
layout.item_enumO("view3d.viewnumpad", "type", 'FRONT')
|
|
layout.item_enumO("view3d.viewnumpad", "type", 'RIGHT')
|
|
|
|
layout.itemM("VIEW3D_MT_view_cameras", text="Cameras")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("view3d.view_persportho")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemM("VIEW3D_MT_view_navigation")
|
|
layout.itemM("VIEW3D_MT_view_align")
|
|
|
|
layout.itemS()
|
|
|
|
layout.operator_context = "INVOKE_REGION_WIN"
|
|
|
|
layout.itemO("view3d.clip_border", text="Clipping Border...")
|
|
layout.itemO("view3d.zoom_border", text="Zoom Border...")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("view3d.view_center")
|
|
layout.itemO("view3d.view_all")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("screen.region_foursplit", text="Toggle Quad View")
|
|
layout.itemO("screen.screen_full_area", text="Toggle Full Screen")
|
|
|
|
class VIEW3D_MT_view_navigation(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Navigation"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.items_enumO("view3d.view_orbit", "type")
|
|
|
|
layout.itemS()
|
|
|
|
layout.items_enumO("view3d.view_pan", "type")
|
|
|
|
layout.itemS()
|
|
|
|
layout.item_floatO("view3d.zoom", "delta", 1.0, text="Zoom In")
|
|
layout.item_floatO("view3d.zoom", "delta", -1.0, text="Zoom Out")
|
|
|
|
class VIEW3D_MT_view_align(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Align View"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("view3d.view_center")
|
|
|
|
class VIEW3D_MT_view_cameras(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Cameras"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
# ********** Select menus, suffix from context.mode **********
|
|
|
|
class VIEW3D_MT_select_object(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Select"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("view3d.select_border")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("object.select_all_toggle", text="Select/Deselect All")
|
|
layout.itemO("object.select_inverse", text="Inverse")
|
|
layout.itemO("object.select_random", text="Random")
|
|
layout.itemO("object.select_mirror", text="Mirror")
|
|
layout.itemO("object.select_by_layer", text="Select All by Layer")
|
|
layout.item_enumO("object.select_by_type", "type", "", text="Select All by Type...")
|
|
layout.itemO("object.select_grouped", text="Select Grouped...")
|
|
|
|
class VIEW3D_MT_select_pose(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Select"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("view3d.select_border", text="Border Select...")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("pose.select_all_toggle", text="Select/Deselect All")
|
|
layout.itemO("pose.select_inverse", text="Inverse")
|
|
layout.itemO("pose.select_constraint_target", text="Constraint Target")
|
|
layout.itemO("pose.select_linked", text="Linked")
|
|
|
|
layout.itemS()
|
|
|
|
layout.item_enumO("pose.select_hierarchy", "direction", 'PARENT')
|
|
layout.item_enumO("pose.select_hierarchy", "direction", 'CHILD')
|
|
|
|
layout.itemS()
|
|
|
|
props = layout.itemO("pose.select_hierarchy", properties=True, text="Extend Parent")
|
|
props.extend = True
|
|
props.direction = 'PARENT'
|
|
|
|
props = layout.itemO("pose.select_hierarchy", properties=True, text="Extend Child")
|
|
props.extend = True
|
|
props.direction = 'CHILD'
|
|
|
|
class VIEW3D_MT_select_particle(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Select"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("view3d.select_border")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("particle.select_all_toggle", text="Select/Deselect All")
|
|
layout.itemO("particle.select_linked")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("particle.select_more")
|
|
layout.itemO("particle.select_less")
|
|
|
|
class VIEW3D_MT_select_edit_mesh(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Select"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("view3d.select_border", text="Border Select...")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("mesh.select_all_toggle", text="Select/Deselect All")
|
|
layout.itemO("mesh.select_inverse", text="Inverse")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("mesh.select_random", text="Random...")
|
|
layout.itemO("mesh.edges_select_sharp", text="Sharp Edges")
|
|
layout.itemO("mesh.faces_select_linked_flat", text="Linked Flat Faces")
|
|
|
|
layout.itemS()
|
|
|
|
layout.item_enumO("mesh.select_by_number_vertices", "type", 'TRIANGLES', text="Triangles")
|
|
layout.item_enumO("mesh.select_by_number_vertices", "type", 'QUADS', text="Quads")
|
|
layout.item_enumO("mesh.select_by_number_vertices", "type", 'OTHER', text="Loose Verts/Edges")
|
|
layout.itemO("mesh.select_similar", text="Similar...")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("mesh.select_less", text="Less")
|
|
layout.itemO("mesh.select_more", text="More")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("mesh.select_linked", text="Linked")
|
|
layout.itemO("mesh.select_vertex_path", text="Vertex Path")
|
|
layout.itemO("mesh.loop_multi_select", text="Edge Loop")
|
|
layout.item_booleanO("mesh.loop_multi_select", "ring", True, text="Edge Ring")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("mesh.loop_to_region")
|
|
layout.itemO("mesh.region_to_loop")
|
|
|
|
class VIEW3D_MT_select_edit_curve(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Select"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("view3d.select_border", text="Border Select...")
|
|
layout.itemO("view3d.select_circle", text="Circle Select...")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("curve.select_all_toggle", text="Select/Deselect All")
|
|
layout.itemO("curve.select_inverse")
|
|
layout.itemO("curve.select_random")
|
|
layout.itemO("curve.select_every_nth")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("curve.de_select_first")
|
|
layout.itemO("curve.de_select_last")
|
|
layout.itemO("curve.select_next")
|
|
layout.itemO("curve.select_previous")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("curve.select_more")
|
|
layout.itemO("curve.select_less")
|
|
|
|
class VIEW3D_MT_select_edit_surface(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Select"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("view3d.select_border", text="Border Select...")
|
|
layout.itemO("view3d.select_circle", text="Circle Select...")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("curve.select_all_toggle", text="Select/Deselect All")
|
|
layout.itemO("curve.select_inverse")
|
|
layout.itemO("curve.select_random")
|
|
layout.itemO("curve.select_every_nth")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("curve.select_row")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("curve.select_more")
|
|
layout.itemO("curve.select_less")
|
|
|
|
class VIEW3D_MT_select_edit_metaball(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Select"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("view3d.select_border")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("mball.select_deselect_all_metaelems")
|
|
layout.itemO("mball.select_inverse_metaelems")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("mball.select_random_metaelems")
|
|
|
|
class VIEW3D_MT_select_edit_lattice(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Select"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("view3d.select_border")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("lattice.select_all_toggle", text="Select/Deselect All")
|
|
|
|
class VIEW3D_MT_select_edit_armature(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Select"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("view3d.select_border", text="Border Select...")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("armature.select_all_toggle", text="Select/Deselect All")
|
|
layout.itemO("armature.select_inverse", text="Inverse")
|
|
|
|
layout.itemS()
|
|
|
|
layout.item_enumO("armature.select_hierarchy", "direction", 'PARENT', text="Parent")
|
|
layout.item_enumO("armature.select_hierarchy", "direction", 'CHILD', text="Child")
|
|
|
|
layout.itemS()
|
|
|
|
props = layout.itemO("armature.select_hierarchy", properties=True, text="Extend Parent")
|
|
props.extend = True
|
|
props.direction = 'PARENT'
|
|
|
|
props = layout.itemO("armature.select_hierarchy", properties=True, text="Extend Child")
|
|
props.extend = True
|
|
props.direction = 'CHILD'
|
|
|
|
class VIEW3D_MT_select_face(bpy.types.Menu):# XXX no matching enum
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Select"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.view3d_select_faceselmenu()
|
|
|
|
# ********** Object menu **********
|
|
|
|
class VIEW3D_MT_object(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__context__ = "objectmode"
|
|
__label__ = "Object"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemM("VIEW3D_MT_object_clear")
|
|
layout.itemM("VIEW3D_MT_snap")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("anim.insert_keyframe_menu", text="Insert Keyframe...")
|
|
layout.itemO("anim.delete_keyframe_v3d", text="Delete Keyframe...")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("object.duplicate_move")
|
|
layout.item_booleanO("object.duplicate", "linked", True, text="Duplicate Linked")
|
|
layout.itemO("object.delete", text="Delete...")
|
|
layout.itemO("object.proxy_make", text="Make Proxy...")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemM("VIEW3D_MT_object_parent")
|
|
layout.itemM("VIEW3D_MT_object_track")
|
|
layout.itemM("VIEW3D_MT_object_group")
|
|
layout.itemM("VIEW3D_MT_object_constraints")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("object.join")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemM("VIEW3D_MT_object_showhide")
|
|
|
|
class VIEW3D_MT_object_clear(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Clear"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("object.location_clear", text="Location")
|
|
layout.itemO("object.rotation_clear", text="Rotation")
|
|
layout.itemO("object.scale_clear", text="Scale")
|
|
layout.itemO("object.origin_clear", text="Origin")
|
|
|
|
class VIEW3D_MT_object_parent(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Parent"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("object.parent_set", text="Set")
|
|
layout.itemO("object.parent_clear", text="Clear")
|
|
|
|
class VIEW3D_MT_object_track(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Track"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("object.track_set", text="Set")
|
|
layout.itemO("object.track_clear", text="Clear")
|
|
|
|
class VIEW3D_MT_object_group(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Group"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("group.group_create")
|
|
layout.itemO("group.objects_remove")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("group.objects_add_active")
|
|
layout.itemO("group.objects_remove_active")
|
|
|
|
class VIEW3D_MT_object_constraints(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Constraints"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("object.constraint_add_with_targets")
|
|
layout.itemO("object.constraints_clear")
|
|
|
|
class VIEW3D_MT_object_showhide(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Show/Hide"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("object.restrictview_clear", text="Show Hidden")
|
|
layout.itemO("object.restrictview_set", text="Hide Selected")
|
|
layout.item_booleanO("object.restrictview_set", "unselected", True, text="Hide Unselected")
|
|
|
|
# ********** Vertex paint menu **********
|
|
|
|
class VIEW3D_MT_paint_vertex(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Paint"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
sculpt = context.tool_settings.sculpt
|
|
|
|
layout.itemO("paint.vertex_color_set")
|
|
props = layout.itemO("paint.vertex_color_set", text="Set Selected Vertex Colors", properties=True)
|
|
props.selected = True
|
|
|
|
# ********** Sculpt menu **********
|
|
|
|
class VIEW3D_MT_sculpt(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Sculpt"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
sculpt = context.tool_settings.sculpt
|
|
brush = context.tool_settings.sculpt.brush
|
|
|
|
layout.itemR(sculpt, "symmetry_x")
|
|
layout.itemR(sculpt, "symmetry_y")
|
|
layout.itemR(sculpt, "symmetry_z")
|
|
layout.itemS()
|
|
layout.itemR(sculpt, "lock_x")
|
|
layout.itemR(sculpt, "lock_y")
|
|
layout.itemR(sculpt, "lock_z")
|
|
layout.itemS()
|
|
layout.item_menu_enumO("brush.curve_preset", property="shape")
|
|
layout.itemS()
|
|
|
|
if brush.sculpt_tool != 'GRAB':
|
|
layout.itemR(brush, "airbrush")
|
|
|
|
if brush.sculpt_tool != 'LAYER':
|
|
layout.itemR(brush, "anchored")
|
|
|
|
if brush.sculpt_tool in ('DRAW', 'PINCH', 'INFLATE', 'LAYER', 'CLAY'):
|
|
layout.itemR(brush, "flip_direction")
|
|
|
|
if brush.sculpt_tool == 'LAYER':
|
|
layout.itemR(brush, "persistent")
|
|
layout.itemO("sculpt.set_persistent_base")
|
|
|
|
# ********** Particle menu **********
|
|
|
|
class VIEW3D_MT_particle(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Particle"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
particle_edit = context.tool_settings.particle_edit
|
|
|
|
layout.itemO("particle.mirror")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("particle.remove_doubles")
|
|
layout.itemO("particle.delete")
|
|
|
|
if particle_edit.selection_mode == 'POINT':
|
|
layout.itemO("particle.subdivide")
|
|
|
|
layout.itemO("particle.rekey")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemM("VIEW3D_MT_particle_showhide")
|
|
|
|
class VIEW3D_MT_particle_showhide(VIEW3D_MT_showhide):
|
|
_operator_name = "particle"
|
|
|
|
# ********** Pose Menu **********
|
|
|
|
class VIEW3D_MT_pose(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Pose"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
arm = context.active_object.data
|
|
|
|
if arm.drawtype in ('BBONE', 'ENVELOPE'):
|
|
layout.item_enumO("tfm.transform", "mode", 'BONESIZE', text="Scale Envelope Distance")
|
|
|
|
layout.itemM("VIEW3D_MT_pose_transform")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("anim.insert_keyframe_menu", text="Insert Keyframe...")
|
|
layout.itemO("anim.delete_keyframe_v3d", text="Delete Keyframe...")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("pose.apply")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("pose.copy")
|
|
layout.itemO("pose.paste")
|
|
layout.item_booleanO("pose.paste", "flipped", True, text="Paste X-Flipped Pose")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemM("VIEW3D_MT_pose_pose")
|
|
layout.itemM("VIEW3D_MT_pose_motion")
|
|
layout.itemM("VIEW3D_MT_pose_group")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemM("VIEW3D_MT_pose_ik")
|
|
layout.itemM("VIEW3D_MT_pose_constraints")
|
|
|
|
layout.itemS()
|
|
|
|
layout.operator_context = "EXEC_AREA"
|
|
layout.item_enumO("pose.autoside_names", "axis", 'XAXIS', text="AutoName Left/Right")
|
|
layout.item_enumO("pose.autoside_names", "axis", 'YAXIS', text="AutoName Front/Back")
|
|
layout.item_enumO("pose.autoside_names", "axis", 'ZAXIS', text="AutoName Top/Bottom")
|
|
|
|
layout.itemO("pose.flip_names")
|
|
|
|
layout.itemS()
|
|
|
|
layout.operator_context = "INVOKE_AREA"
|
|
layout.itemO("pose.armature_layers", text="Change Armature Layers...")
|
|
layout.itemO("pose.bone_layers", text="Change Bone Layers...")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemM("VIEW3D_MT_pose_showhide")
|
|
layout.item_menu_enumO("pose.flags_set", 'mode', text="Bone Settings")
|
|
|
|
class VIEW3D_MT_pose_transform(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Clear Transform"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemL(text="User Transform")
|
|
|
|
layout.itemO("pose.loc_clear", text="Location")
|
|
layout.itemO("pose.rot_clear", text="Rotation")
|
|
layout.itemO("pose.scale_clear", text="Scale")
|
|
|
|
layout.itemL(text="Origin")
|
|
|
|
class VIEW3D_MT_pose_pose(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Pose Library"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("poselib.browse_interactive", text="Browse Poses...")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("poselib.pose_add", text="Add Pose...")
|
|
layout.itemO("poselib.pose_rename", text="Rename Pose...")
|
|
layout.itemO("poselib.pose_remove", text="Remove Pose...")
|
|
|
|
class VIEW3D_MT_pose_motion(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Motion Paths"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("pose.paths_calculate", text="Calculate")
|
|
layout.itemO("pose.paths_clear", text="Clear")
|
|
|
|
class VIEW3D_MT_pose_group(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Bone Groups"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
layout.itemO("pose.group_add")
|
|
layout.itemO("pose.group_remove")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("pose.group_assign")
|
|
layout.itemO("pose.group_unassign")
|
|
|
|
|
|
class VIEW3D_MT_pose_ik(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Inverse Kinematics"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("pose.ik_add")
|
|
layout.itemO("pose.ik_clear")
|
|
|
|
class VIEW3D_MT_pose_constraints(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Constraints"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("pose.constraint_add_with_targets", text="Add (With Targets)...")
|
|
layout.itemO("pose.constraints_clear")
|
|
|
|
class VIEW3D_MT_pose_showhide(VIEW3D_MT_showhide):
|
|
_operator_name = "pose"
|
|
|
|
# ********** Edit Menus, suffix from ob.type **********
|
|
|
|
# Edit MESH
|
|
class VIEW3D_MT_edit_mesh(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Mesh"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
settings = context.tool_settings
|
|
|
|
layout.itemO("ed.undo")
|
|
layout.itemO("ed.redo")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemM("VIEW3D_MT_snap")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("uv.mapping_menu", text="UV Unwrap...")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("mesh.extrude")
|
|
layout.itemO("mesh.duplicate")
|
|
layout.itemO("mesh.delete", text="Delete...")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemM("VIEW3D_MT_edit_mesh_vertices")
|
|
layout.itemM("VIEW3D_MT_edit_mesh_edges")
|
|
layout.itemM("VIEW3D_MT_edit_mesh_faces")
|
|
layout.itemM("VIEW3D_MT_edit_mesh_normals")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemR(settings, "automerge_editing")
|
|
layout.itemR(settings, "proportional_editing")
|
|
layout.item_menu_enumR(settings, "proportional_editing_falloff")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemM("VIEW3D_MT_edit_mesh_showhide")
|
|
|
|
class VIEW3D_MT_edit_mesh_vertices(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Vertices"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("mesh.merge")
|
|
layout.itemO("mesh.rip")
|
|
layout.itemO("mesh.split")
|
|
layout.itemO("mesh.separate")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("mesh.vertices_smooth")
|
|
layout.itemO("mesh.remove_doubles")
|
|
|
|
class VIEW3D_MT_edit_mesh_edges(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Edges"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("mesh.edge_face_add")
|
|
layout.itemO("mesh.subdivide")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("mesh.mark_seam")
|
|
layout.item_booleanO("mesh.mark_seam", "clear", True, text="Clear Seam")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("mesh.mark_sharp")
|
|
layout.item_booleanO("mesh.mark_sharp", "clear", True, text="Clear Sharp")
|
|
|
|
layout.itemS()
|
|
|
|
layout.item_enumO("mesh.edge_rotate", "direction", 'CW', text="Rotate Edge CW")
|
|
layout.item_enumO("mesh.edge_rotate", "direction", 'CCW', text="Rotate Edge CCW")
|
|
|
|
class VIEW3D_MT_edit_mesh_faces(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Faces"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("mesh.edge_face_add")
|
|
layout.itemO("mesh.fill")
|
|
layout.itemO("mesh.beauty_fill")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("mesh.quads_convert_to_tris")
|
|
layout.itemO("mesh.tris_convert_to_quads")
|
|
layout.itemO("mesh.edge_flip")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("mesh.faces_shade_smooth")
|
|
layout.itemO("mesh.faces_shade_flat")
|
|
|
|
class VIEW3D_MT_edit_mesh_normals(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Normals"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("mesh.normals_make_consistent", text="Recalculate Outside")
|
|
layout.item_booleanO("mesh.normals_make_consistent", "inside", True, text="Recalculate Inside")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("mesh.flip_normals")
|
|
|
|
class VIEW3D_MT_edit_mesh_showhide(VIEW3D_MT_showhide):
|
|
_operator_name = "mesh"
|
|
|
|
# Edit Curve
|
|
|
|
# draw_curve is used by VIEW3D_MT_edit_curve and VIEW3D_MT_edit_surface
|
|
def draw_curve(self, context):
|
|
layout = self.layout
|
|
|
|
settings = context.tool_settings
|
|
|
|
layout.itemM("VIEW3D_MT_snap")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("curve.extrude")
|
|
layout.itemO("curve.duplicate")
|
|
layout.itemO("curve.separate")
|
|
layout.itemO("curve.make_segment")
|
|
layout.itemO("curve.cyclic_toggle")
|
|
layout.itemO("curve.delete", text="Delete...")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemM("VIEW3D_MT_edit_curve_ctrlpoints")
|
|
layout.itemM("VIEW3D_MT_edit_curve_segments")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemR(settings, "proportional_editing")
|
|
layout.item_menu_enumR(settings, "proportional_editing_falloff")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemM("VIEW3D_MT_edit_curve_showhide")
|
|
|
|
class VIEW3D_MT_edit_curve(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Curve"
|
|
|
|
draw = draw_curve
|
|
|
|
class VIEW3D_MT_edit_curve_ctrlpoints(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Control Points"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
edit_object = context.edit_object
|
|
|
|
if edit_object.type == 'CURVE':
|
|
layout.item_enumO("tfm.transform", "mode", 'TILT')
|
|
layout.itemO("curve.tilt_clear")
|
|
layout.itemO("curve.separate")
|
|
|
|
layout.itemS()
|
|
|
|
layout.item_menu_enumO("curve.handle_type_set", "type")
|
|
|
|
class VIEW3D_MT_edit_curve_segments(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Segments"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("curve.subdivide")
|
|
layout.itemO("curve.switch_direction")
|
|
|
|
class VIEW3D_MT_edit_curve_showhide(VIEW3D_MT_showhide):
|
|
_operator_name = "curve"
|
|
|
|
# Edit SURFACE
|
|
class VIEW3D_MT_edit_surface(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Surface"
|
|
|
|
draw = draw_curve
|
|
|
|
# Edit TEXT
|
|
class VIEW3D_MT_edit_text(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Text"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("font.file_paste")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemm("view3d_mt_edit_text_chars")
|
|
|
|
class VIEW3D_MT_edit_text_chars(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Special Characters"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.item_stringO("font.text_insert", "text", b'\xC2\xA9'.decode(), text="Copyright|Alt C")
|
|
layout.item_stringO("font.text_insert", "text", b'\xC2\xAE'.decode(), text="Registered Trademark|Alt R")
|
|
|
|
layout.itemS()
|
|
|
|
layout.item_stringO("font.text_insert", "text", b'\xC2\xB0'.decode(), text="Degree Sign|Alt G")
|
|
layout.item_stringO("font.text_insert", "text", b'\xC3\x97'.decode(), text="Multiplication Sign|Alt x")
|
|
layout.item_stringO("font.text_insert", "text", b'\xC2\x8A'.decode(), text="Circle|Alt .")
|
|
layout.item_stringO("font.text_insert", "text", b'\xC2\xB9'.decode(), text="Superscript 1|Alt 1")
|
|
layout.item_stringO("font.text_insert", "text", b'\xC2\xB2'.decode(), text="Superscript 2|Alt 2")
|
|
layout.item_stringO("font.text_insert", "text", b'\xC2\xB3'.decode(), text="Superscript 3|Alt 3")
|
|
layout.item_stringO("font.text_insert", "text", b'\xC2\xBB'.decode(), text="Double >>|Alt >")
|
|
layout.item_stringO("font.text_insert", "text", b'\xC2\xAB'.decode(), text="Double <<|Alt <")
|
|
layout.item_stringO("font.text_insert", "text", b'\xE2\x80\xB0'.decode(), text="Promillage|Alt %")
|
|
|
|
layout.itemS()
|
|
|
|
layout.item_stringO("font.text_insert", "text", b'\xC2\xA4'.decode(), text="Dutch Florin|Alt F")
|
|
layout.item_stringO("font.text_insert", "text", b'\xC2\xA3'.decode(), text="British Pound|Alt L")
|
|
layout.item_stringO("font.text_insert", "text", b'\xC2\xA5'.decode(), text="Japanese Yen|Alt Y")
|
|
|
|
layout.itemS()
|
|
|
|
layout.item_stringO("font.text_insert", "text", b'\xC3\x9F'.decode(), text="German S|Alt S")
|
|
layout.item_stringO("font.text_insert", "text", b'\xC2\xBF'.decode(), text="Spanish Question Mark|Alt ?")
|
|
layout.item_stringO("font.text_insert", "text", b'\xC2\xA1'.decode(), text="Spanish Exclamation Mark|Alt !")
|
|
|
|
# Edit META
|
|
class VIEW3D_MT_edit_meta(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Metaball"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
settings = context.tool_settings
|
|
|
|
layout.itemO("ed.undo")
|
|
layout.itemO("ed.redo")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemM("VIEW3D_MT_snap")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("mball.delete_metaelems", text="Delete...")
|
|
layout.itemO("mball.duplicate_metaelems")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemR(settings, "proportional_editing")
|
|
layout.item_menu_enumR(settings, "proportional_editing_falloff")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemM("VIEW3D_MT_edit_meta_showhide")
|
|
|
|
class VIEW3D_MT_edit_meta_showhide(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Show/Hide"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("mball.reveal_metaelems", text="Show Hidden")
|
|
layout.itemO("mball.hide_metaelems", text="Hide Selected")
|
|
layout.item_booleanO("mball.hide_metaelems", "unselected", True, text="Hide Unselected")
|
|
|
|
# Edit LATTICE
|
|
class VIEW3D_MT_edit_lattice(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Lattice"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
settings = context.tool_settings
|
|
|
|
layout.itemM("VIEW3D_MT_snap")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("lattice.make_regular")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemR(settings, "proportional_editing")
|
|
layout.item_menu_enumR(settings, "proportional_editing_falloff")
|
|
|
|
# Edit ARMATURE
|
|
class VIEW3D_MT_edit_armature(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Armature"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
edit_object = context.edit_object
|
|
arm = edit_object.data
|
|
|
|
layout.itemM("VIEW3D_MT_snap")
|
|
layout.itemM("VIEW3D_MT_edit_armature_roll")
|
|
|
|
if arm.drawtype == 'ENVELOPE':
|
|
layout.item_enumO("tfm.transform", "mode", 'BONESIZE', text="Scale Envelope Distance")
|
|
else:
|
|
layout.item_enumO("tfm.transform", "mode", 'BONESIZE', text="Scale B-Bone Width")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("armature.extrude")
|
|
|
|
if arm.x_axis_mirror:
|
|
layout.item_booleanO("armature.extrude", "forked", True, text="Extrude Forked")
|
|
|
|
layout.itemO("armature.duplicate")
|
|
layout.itemO("armature.merge")
|
|
layout.itemO("armature.fill")
|
|
layout.itemO("armature.delete")
|
|
layout.itemO("armature.separate")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("armature.subdivide_multi", text="Subdivide")
|
|
|
|
layout.itemS()
|
|
|
|
layout.operator_context = "EXEC_AREA"
|
|
layout.item_enumO("armature.autoside_names", "type", 'XAXIS', text="AutoName Left/Right")
|
|
layout.item_enumO("armature.autoside_names", "type", 'YAXIS', text="AutoName Front/Back")
|
|
layout.item_enumO("armature.autoside_names", "type", 'ZAXIS', text="AutoName Top/Bottom")
|
|
layout.itemO("armature.flip_names")
|
|
|
|
layout.itemS()
|
|
|
|
layout.operator_context = "INVOKE_DEFAULT"
|
|
layout.itemO("armature.armature_layers")
|
|
layout.itemO("armature.bone_layers")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemM("VIEW3D_MT_edit_armature_parent")
|
|
|
|
layout.itemS()
|
|
|
|
layout.item_menu_enumO("armature.flags_set", "mode", text="Bone Settings")
|
|
|
|
class VIEW3D_MT_edit_armature_parent(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Parent"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.itemO("armature.parent_set", text="Make")
|
|
layout.itemO("armature.parent_clear", text="Clear")
|
|
|
|
class VIEW3D_MT_edit_armature_roll(bpy.types.Menu):
|
|
__space_type__ = 'VIEW_3D'
|
|
__label__ = "Bone Roll"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
layout.item_enumO("armature.calculate_roll", "type", 'GLOBALUP', text="Clear Roll (Z-Axis Up)")
|
|
layout.item_enumO("armature.calculate_roll", "type", 'CURSOR', text="Roll to Cursor")
|
|
|
|
layout.itemS()
|
|
|
|
layout.item_enumO("tfm.transform", "mode", 'BONE_ROLL', text="Set Roll")
|
|
|
|
# ********** Panel **********
|
|
|
|
class VIEW3D_PT_3dview_properties(bpy.types.Panel):
|
|
__space_type__ = 'VIEW_3D'
|
|
__region_type__ = 'UI'
|
|
__label__ = "View"
|
|
|
|
def poll(self, context):
|
|
view = context.space_data
|
|
return (view)
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
view = context.space_data
|
|
scene = context.scene
|
|
|
|
col = layout.column()
|
|
col.itemL(text="Camera:")
|
|
col.itemR(view, "camera", text="")
|
|
col.itemR(view, "lens")
|
|
|
|
col = layout.column(align=True)
|
|
col.itemL(text="Clip:")
|
|
col.itemR(view, "clip_start", text="Start")
|
|
col.itemR(view, "clip_end", text="End")
|
|
|
|
col = layout.column(align=True)
|
|
col.itemL(text="Grid:")
|
|
col.itemR(view, "grid_lines", text="Lines")
|
|
col.itemR(view, "grid_spacing", text="Spacing")
|
|
col.itemR(view, "grid_subdivisions", text="Subdivisions")
|
|
|
|
layout.column().itemR(scene, "cursor_location", text="3D Cursor:")
|
|
|
|
class VIEW3D_PT_3dview_display(bpy.types.Panel):
|
|
__space_type__ = 'VIEW_3D'
|
|
__region_type__ = 'UI'
|
|
__label__ = "Display"
|
|
__default_closed__ = True
|
|
|
|
def poll(self, context):
|
|
view = context.space_data
|
|
return (view)
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
view = context.space_data
|
|
|
|
col = layout.column()
|
|
col.itemR(view, "display_floor", text="Grid Floor")
|
|
col.itemR(view, "display_x_axis", text="X Axis")
|
|
col.itemR(view, "display_y_axis", text="Y Axis")
|
|
col.itemR(view, "display_z_axis", text="Z Axis")
|
|
col.itemR(view, "outline_selected")
|
|
col.itemR(view, "all_object_centers")
|
|
col.itemR(view, "relationship_lines")
|
|
col.itemR(view, "textured_solid")
|
|
|
|
layout.itemS()
|
|
|
|
layout.itemO("screen.region_foursplit", text="Toggle Quad View")
|
|
|
|
col = layout.column()
|
|
col.itemR(view, "lock_rotation")
|
|
col.itemR(view, "box_preview")
|
|
col.itemR(view, "box_clip")
|
|
|
|
class VIEW3D_PT_3dview_meshdisplay(bpy.types.Panel):
|
|
__space_type__ = 'VIEW_3D'
|
|
__region_type__ = 'UI'
|
|
__label__ = "Mesh Display"
|
|
|
|
def poll(self, context):
|
|
editmesh = context.mode == 'EDIT_MESH'
|
|
return (editmesh)
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
mesh = context.active_object.data
|
|
|
|
col = layout.column()
|
|
col.itemL(text="Overlays:")
|
|
col.itemR(mesh, "draw_edges", text="Edges")
|
|
col.itemR(mesh, "draw_faces", text="Faces")
|
|
col.itemR(mesh, "draw_creases", text="Creases")
|
|
col.itemR(mesh, "draw_bevel_weights", text="Bevel Weights")
|
|
col.itemR(mesh, "draw_seams", text="Seams")
|
|
col.itemR(mesh, "draw_sharp", text="Sharp")
|
|
|
|
col.itemS()
|
|
col.itemL(text="Normals:")
|
|
col.itemR(mesh, "draw_normals", text="Face")
|
|
col.itemR(mesh, "draw_vertex_normals", text="Vertex")
|
|
col.itemR(context.scene.tool_settings, "normal_size", text="Normal Size")
|
|
|
|
col.itemS()
|
|
col.itemL(text="Numerics:")
|
|
col.itemR(mesh, "draw_edge_lenght")
|
|
col.itemR(mesh, "draw_edge_angle")
|
|
col.itemR(mesh, "draw_face_area")
|
|
|
|
|
|
class VIEW3D_PT_3dview_curvedisplay(bpy.types.Panel):
|
|
__space_type__ = 'VIEW_3D'
|
|
__region_type__ = 'UI'
|
|
__label__ = "Curve Display"
|
|
|
|
def poll(self, context):
|
|
editmesh = context.mode == 'EDIT_CURVE'
|
|
return (editmesh)
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
curve = context.active_object.data
|
|
|
|
col = layout.column()
|
|
col.itemL(text="Overlays:")
|
|
col.itemR(curve, "draw_handles", text="Handles")
|
|
col.itemR(curve, "draw_normals", text="Normals")
|
|
col.itemR(context.scene.tool_settings, "normal_size", text="Normal Size")
|
|
|
|
|
|
class VIEW3D_PT_background_image(bpy.types.Panel):
|
|
__space_type__ = 'VIEW_3D'
|
|
__region_type__ = 'UI'
|
|
__label__ = "Background Image"
|
|
__default_closed__ = True
|
|
|
|
def poll(self, context):
|
|
view = context.space_data
|
|
bg = context.space_data.background_image
|
|
return (view)
|
|
|
|
def draw_header(self, context):
|
|
layout = self.layout
|
|
view = context.space_data
|
|
|
|
layout.itemR(view, "display_background_image", text="")
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
view = context.space_data
|
|
bg = view.background_image
|
|
|
|
if bg:
|
|
layout.active = view.display_background_image
|
|
|
|
col = layout.column()
|
|
col.itemR(bg, "image", text="")
|
|
#col.itemR(bg, "image_user")
|
|
col.itemR(bg, "size")
|
|
col.itemR(bg, "transparency", slider=True)
|
|
|
|
|
|
col = layout.column(align=True)
|
|
col.itemL(text="Offset:")
|
|
col.itemR(bg, "offset_x", text="X")
|
|
col.itemR(bg, "offset_y", text="Y")
|
|
|
|
bpy.types.register(VIEW3D_HT_header) # Header
|
|
|
|
bpy.types.register(VIEW3D_MT_view) #View Menus
|
|
bpy.types.register(VIEW3D_MT_view_navigation)
|
|
bpy.types.register(VIEW3D_MT_view_align)
|
|
bpy.types.register(VIEW3D_MT_view_cameras)
|
|
|
|
bpy.types.register(VIEW3D_MT_select_object) # Select Menus
|
|
bpy.types.register(VIEW3D_MT_select_pose)
|
|
bpy.types.register(VIEW3D_MT_select_particle)
|
|
bpy.types.register(VIEW3D_MT_select_edit_mesh)
|
|
bpy.types.register(VIEW3D_MT_select_edit_curve)
|
|
bpy.types.register(VIEW3D_MT_select_edit_surface)
|
|
bpy.types.register(VIEW3D_MT_select_edit_metaball)
|
|
bpy.types.register(VIEW3D_MT_select_edit_lattice)
|
|
bpy.types.register(VIEW3D_MT_select_edit_armature)
|
|
bpy.types.register(VIEW3D_MT_select_face) # XXX todo
|
|
|
|
bpy.types.register(VIEW3D_MT_object) # Object Menu
|
|
bpy.types.register(VIEW3D_MT_object_clear)
|
|
bpy.types.register(VIEW3D_MT_object_parent)
|
|
bpy.types.register(VIEW3D_MT_object_track)
|
|
bpy.types.register(VIEW3D_MT_object_group)
|
|
bpy.types.register(VIEW3D_MT_object_constraints)
|
|
bpy.types.register(VIEW3D_MT_object_showhide)
|
|
|
|
bpy.types.register(VIEW3D_MT_sculpt) # Sculpt Menu
|
|
|
|
bpy.types.register(VIEW3D_MT_paint_vertex)
|
|
|
|
bpy.types.register(VIEW3D_MT_particle) # Particle Menu
|
|
bpy.types.register(VIEW3D_MT_particle_showhide)
|
|
|
|
bpy.types.register(VIEW3D_MT_pose) # POSE Menu
|
|
bpy.types.register(VIEW3D_MT_pose_transform)
|
|
bpy.types.register(VIEW3D_MT_pose_pose)
|
|
bpy.types.register(VIEW3D_MT_pose_motion)
|
|
bpy.types.register(VIEW3D_MT_pose_group)
|
|
bpy.types.register(VIEW3D_MT_pose_ik)
|
|
bpy.types.register(VIEW3D_MT_pose_constraints)
|
|
bpy.types.register(VIEW3D_MT_pose_showhide)
|
|
|
|
bpy.types.register(VIEW3D_MT_snap) # Edit Menus
|
|
|
|
bpy.types.register(VIEW3D_MT_edit_mesh)
|
|
bpy.types.register(VIEW3D_MT_edit_mesh_vertices)
|
|
bpy.types.register(VIEW3D_MT_edit_mesh_edges)
|
|
bpy.types.register(VIEW3D_MT_edit_mesh_faces)
|
|
bpy.types.register(VIEW3D_MT_edit_mesh_normals)
|
|
bpy.types.register(VIEW3D_MT_edit_mesh_showhide)
|
|
|
|
bpy.types.register(VIEW3D_MT_edit_curve)
|
|
bpy.types.register(VIEW3D_MT_edit_curve_ctrlpoints)
|
|
bpy.types.register(VIEW3D_MT_edit_curve_segments)
|
|
bpy.types.register(VIEW3D_MT_edit_curve_showhide)
|
|
|
|
bpy.types.register(VIEW3D_MT_edit_surface)
|
|
|
|
bpy.types.register(VIEW3D_MT_edit_text)
|
|
bpy.types.register(VIEW3D_MT_edit_text_chars)
|
|
|
|
bpy.types.register(VIEW3D_MT_edit_meta)
|
|
bpy.types.register(VIEW3D_MT_edit_meta_showhide)
|
|
|
|
bpy.types.register(VIEW3D_MT_edit_lattice)
|
|
|
|
bpy.types.register(VIEW3D_MT_edit_armature)
|
|
bpy.types.register(VIEW3D_MT_edit_armature_parent)
|
|
bpy.types.register(VIEW3D_MT_edit_armature_roll)
|
|
|
|
bpy.types.register(VIEW3D_PT_3dview_properties) # Panels
|
|
bpy.types.register(VIEW3D_PT_3dview_display)
|
|
bpy.types.register(VIEW3D_PT_3dview_meshdisplay)
|
|
bpy.types.register(VIEW3D_PT_3dview_curvedisplay)
|
|
bpy.types.register(VIEW3D_PT_background_image)
|