| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2018-12-02 13:26:10 +11:00
										 |  |  | from bpy.types import ( | 
					
						
							|  |  |  |     Header, | 
					
						
							|  |  |  |     Menu, | 
					
						
							|  |  |  |     Panel, | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | from .properties_paint_common import ( | 
					
						
							|  |  |  |     UnifiedPaintPanel, | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | from .properties_grease_pencil_common import ( | 
					
						
							|  |  |  |     AnnotationDataPanel, | 
					
						
							|  |  |  |     AnnotationOnionSkin, | 
					
						
							|  |  |  |     GreasePencilMaterialsPanel, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2013-03-28 15:41:43 +00:00
										 |  |  | from bpy.app.translations import contexts as i18n_contexts | 
					
						
							| 
									
										
										
										
											2009-10-12 21:06:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-24 03:30:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-18 21:13:22 +02:00
										 |  |  | class VIEW3D_HT_tool_header(Header): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							| 
									
										
										
										
											2019-04-18 21:13:22 +02:00
										 |  |  |     bl_region_type = "TOOL_HEADER" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-18 21:13:22 +02:00
										 |  |  |         layout.row(align=True).template_header() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-25 05:31:20 +10:00
										 |  |  |         # mode_string = context.mode | 
					
						
							| 
									
										
										
										
											2009-11-28 23:37:56 +00:00
										 |  |  |         obj = context.active_object | 
					
						
							| 
									
										
										
										
											2018-06-13 14:11:59 +02:00
										 |  |  |         tool_settings = context.tool_settings | 
					
						
							| 
									
										
										
										
											2009-12-04 17:54:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-19 09:25:05 +02:00
										 |  |  |         object_mode = 'OBJECT' if obj is None else obj.mode | 
					
						
							| 
									
										
										
										
											2019-03-12 10:35:11 +11:00
										 |  |  |         has_pose_mode = ( | 
					
						
							|  |  |  |             (object_mode == 'POSE') or | 
					
						
							|  |  |  |             (object_mode == 'WEIGHT_PAINT' and context.pose_object is not None) | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2018-05-14 14:00:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-18 21:13:22 +02:00
										 |  |  |         self.draw_tool_settings(context) | 
					
						
							| 
									
										
										
										
											2018-05-14 14:00:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-11 16:57:35 +02:00
										 |  |  |         layout.separator_spacer() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-12 21:06:54 +02:00
										 |  |  |         # Mode & Transform Settings | 
					
						
							|  |  |  |         scene = context.scene | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-02 15:53:46 +02:00
										 |  |  |         # Orientation | 
					
						
							| 
									
										
										
										
											2019-03-12 10:35:11 +11:00
										 |  |  |         if object_mode in {'OBJECT', 'EDIT', 'EDIT_GPENCIL'} or has_pose_mode: | 
					
						
							| 
									
										
										
										
											2018-12-19 20:51:04 +11:00
										 |  |  |             orient_slot = scene.transform_orientation_slots[0] | 
					
						
							| 
									
										
										
										
											2018-07-02 18:43:30 +02:00
										 |  |  |             row = layout.row(align=True) | 
					
						
							| 
									
										
										
										
											2018-09-26 17:40:39 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |             sub = row.row() | 
					
						
							|  |  |  |             sub.ui_units_x = 4 | 
					
						
							| 
									
										
										
										
											2019-03-25 20:10:32 +11:00
										 |  |  |             sub.prop_with_popover( | 
					
						
							| 
									
										
										
										
											2019-03-25 19:30:59 +11:00
										 |  |  |                 orient_slot, | 
					
						
							|  |  |  |                 "type", | 
					
						
							|  |  |  |                 text="", | 
					
						
							| 
									
										
										
										
											2018-07-13 19:13:44 +02:00
										 |  |  |                 panel="VIEW3D_PT_transform_orientations", | 
					
						
							| 
									
										
										
										
											2018-07-02 18:43:30 +02:00
										 |  |  |             ) | 
					
						
							| 
									
										
										
										
											2018-06-12 21:06:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-26 20:24:40 +01:00
										 |  |  |         # Pivot | 
					
						
							| 
									
										
										
										
											2019-03-12 10:35:11 +11:00
										 |  |  |         if object_mode in {'OBJECT', 'EDIT', 'EDIT_GPENCIL', 'SCULPT_GPENCIL'} or has_pose_mode: | 
					
						
							| 
									
										
										
										
											2019-03-25 20:10:32 +11:00
										 |  |  |             layout.prop_with_popover( | 
					
						
							| 
									
										
										
										
											2019-03-25 19:30:59 +11:00
										 |  |  |                 tool_settings, | 
					
						
							|  |  |  |                 "transform_pivot_point", | 
					
						
							| 
									
										
										
										
											2019-02-26 20:24:40 +01:00
										 |  |  |                 text="", | 
					
						
							| 
									
										
										
										
											2019-03-25 19:30:59 +11:00
										 |  |  |                 icon_only=True, | 
					
						
							|  |  |  |                 panel="VIEW3D_PT_pivot_point", | 
					
						
							| 
									
										
										
										
											2019-02-26 20:24:40 +01:00
										 |  |  |             ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-02 15:53:46 +02:00
										 |  |  |         # Snap | 
					
						
							|  |  |  |         show_snap = False | 
					
						
							|  |  |  |         if obj is None: | 
					
						
							|  |  |  |             show_snap = True | 
					
						
							|  |  |  |         else: | 
					
						
							| 
									
										
										
										
											2019-03-12 10:35:11 +11:00
										 |  |  |             if (object_mode not in { | 
					
						
							|  |  |  |                     'SCULPT', 'VERTEX_PAINT', 'WEIGHT_PAINT', 'TEXTURE_PAINT', | 
					
						
							|  |  |  |                     'PAINT_GPENCIL', 'SCULPT_GPENCIL', 'WEIGHT_GPENCIL' | 
					
						
							|  |  |  |             }) or has_pose_mode: | 
					
						
							| 
									
										
										
										
											2018-07-02 15:53:46 +02:00
										 |  |  |                 show_snap = True | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 from .properties_paint_common import UnifiedPaintPanel | 
					
						
							|  |  |  |                 paint_settings = UnifiedPaintPanel.paint_settings(context) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 if paint_settings: | 
					
						
							|  |  |  |                     brush = paint_settings.brush | 
					
						
							|  |  |  |                     if brush and brush.stroke_method == 'CURVE': | 
					
						
							|  |  |  |                         show_snap = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if show_snap: | 
					
						
							| 
									
										
										
										
											2018-12-18 15:01:03 +11:00
										 |  |  |             snap_items = bpy.types.ToolSettings.bl_rna.properties["snap_elements"].enum_items | 
					
						
							| 
									
										
										
										
											2018-10-10 10:31:00 +11:00
										 |  |  |             snap_elements = tool_settings.snap_elements | 
					
						
							|  |  |  |             if len(snap_elements) == 1: | 
					
						
							| 
									
										
										
										
											2018-10-09 20:10:52 -03:00
										 |  |  |                 text = "" | 
					
						
							| 
									
										
										
										
											2018-10-10 10:54:18 +11:00
										 |  |  |                 for elem in snap_elements: | 
					
						
							|  |  |  |                     icon = snap_items[elem].icon | 
					
						
							|  |  |  |                     break | 
					
						
							| 
									
										
										
										
											2018-07-02 15:53:46 +02:00
										 |  |  |             else: | 
					
						
							| 
									
										
										
										
											2018-10-09 20:10:52 -03:00
										 |  |  |                 text = "Mix" | 
					
						
							| 
									
										
										
										
											2018-07-02 15:53:46 +02:00
										 |  |  |                 icon = 'NONE' | 
					
						
							| 
									
										
										
										
											2018-10-10 10:54:18 +11:00
										 |  |  |             del snap_items, snap_elements | 
					
						
							| 
									
										
										
										
											2018-07-02 15:53:46 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-13 15:03:09 +02:00
										 |  |  |             row = layout.row(align=True) | 
					
						
							| 
									
										
										
										
											2018-07-02 15:53:46 +02:00
										 |  |  |             row.prop(tool_settings, "use_snap", text="") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             sub = row.row(align=True) | 
					
						
							|  |  |  |             sub.popover( | 
					
						
							| 
									
										
										
										
											2018-07-13 19:13:44 +02:00
										 |  |  |                 panel="VIEW3D_PT_snapping", | 
					
						
							| 
									
										
										
										
											2018-07-02 15:53:46 +02:00
										 |  |  |                 icon=icon, | 
					
						
							| 
									
										
										
										
											2018-10-09 20:10:52 -03:00
										 |  |  |                 text=text, | 
					
						
							| 
									
										
										
										
											2018-06-13 15:03:09 +02:00
										 |  |  |             ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-02 15:53:46 +02:00
										 |  |  |         # Proportional editing | 
					
						
							| 
									
										
										
										
											2019-03-06 14:59:09 +01:00
										 |  |  |         gpd = context.gpencil_data | 
					
						
							|  |  |  |         if object_mode in {'EDIT', 'PARTICLE_EDIT'}: | 
					
						
							|  |  |  |             row = layout.row(align=True) | 
					
						
							|  |  |  |             row.prop(tool_settings, "proportional_edit", icon_only=True) | 
					
						
							|  |  |  |             sub = row.row(align=True) | 
					
						
							|  |  |  |             sub.active = tool_settings.proportional_edit != 'DISABLED' | 
					
						
							|  |  |  |             sub.prop(tool_settings, "proportional_edit_falloff", icon_only=True) | 
					
						
							| 
									
										
										
										
											2018-12-02 13:09:15 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-06 14:59:09 +01:00
										 |  |  |         elif object_mode == 'OBJECT': | 
					
						
							|  |  |  |             row = layout.row(align=True) | 
					
						
							|  |  |  |             row.prop(tool_settings, "use_proportional_edit_objects", icon_only=True) | 
					
						
							|  |  |  |             sub = row.row(align=True) | 
					
						
							|  |  |  |             sub.active = tool_settings.use_proportional_edit_objects | 
					
						
							|  |  |  |             sub.prop(tool_settings, "proportional_edit_falloff", icon_only=True) | 
					
						
							| 
									
										
										
										
											2018-12-02 00:05:01 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-06 14:59:09 +01:00
										 |  |  |         elif gpd is not None and obj.type == 'GPENCIL': | 
					
						
							|  |  |  |             if gpd.use_stroke_edit_mode or gpd.is_stroke_sculpt_mode: | 
					
						
							| 
									
										
										
										
											2018-06-12 21:06:54 +02:00
										 |  |  |                 row = layout.row(align=True) | 
					
						
							| 
									
										
										
										
											2018-06-13 14:11:59 +02:00
										 |  |  |                 row.prop(tool_settings, "proportional_edit", icon_only=True) | 
					
						
							| 
									
										
										
										
											2019-03-06 14:59:09 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-12 21:06:54 +02:00
										 |  |  |                 sub = row.row(align=True) | 
					
						
							| 
									
										
										
										
											2018-06-13 14:11:59 +02:00
										 |  |  |                 sub.active = tool_settings.proportional_edit != 'DISABLED' | 
					
						
							|  |  |  |                 sub.prop(tool_settings, "proportional_edit_falloff", icon_only=True) | 
					
						
							| 
									
										
										
										
											2018-06-12 21:06:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-20 18:50:07 +02:00
										 |  |  |         # grease pencil | 
					
						
							| 
									
										
										
										
											2018-12-14 16:45:57 +01:00
										 |  |  |         if object_mode == 'PAINT_GPENCIL': | 
					
						
							| 
									
										
										
										
											2019-03-25 20:10:32 +11:00
										 |  |  |             layout.prop_with_popover( | 
					
						
							| 
									
										
										
										
											2019-03-25 19:30:59 +11:00
										 |  |  |                 tool_settings, | 
					
						
							|  |  |  |                 "gpencil_stroke_placement_view3d", | 
					
						
							|  |  |  |                 text="", | 
					
						
							| 
									
										
										
										
											2018-09-20 18:50:07 +02:00
										 |  |  |                 panel="VIEW3D_PT_gpencil_origin", | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-14 16:45:57 +01:00
										 |  |  |         if object_mode in {'PAINT_GPENCIL', 'SCULPT_GPENCIL'}: | 
					
						
							| 
									
										
										
										
											2019-03-27 13:59:18 +01:00
										 |  |  |             layout.prop_with_popover( | 
					
						
							| 
									
										
										
										
											2019-03-25 19:30:59 +11:00
										 |  |  |                 tool_settings.gpencil_sculpt, | 
					
						
							|  |  |  |                 "lock_axis", | 
					
						
							|  |  |  |                 text="", | 
					
						
							| 
									
										
										
										
											2018-09-21 08:51:04 +02:00
										 |  |  |                 panel="VIEW3D_PT_gpencil_lock", | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2019-01-21 10:41:39 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 10:35:11 +11:00
										 |  |  |         if object_mode == 'PAINT_GPENCIL': | 
					
						
							| 
									
										
										
										
											2019-03-15 12:45:41 +11:00
										 |  |  |             # FIXME: this is bad practice! | 
					
						
							|  |  |  |             # Tool options are to be displayed in the topbar. | 
					
						
							| 
									
										
										
										
											2019-03-17 09:33:23 +01:00
										 |  |  |             if context.workspace.tools.from_space_view3d_mode(object_mode).idname == "builtin_brush.Draw": | 
					
						
							| 
									
										
										
										
											2019-01-11 19:15:23 +01:00
										 |  |  |                 settings = tool_settings.gpencil_sculpt.guide | 
					
						
							|  |  |  |                 row = layout.row(align=True) | 
					
						
							|  |  |  |                 row.prop(settings, "use_guide", text="", icon='GRID') | 
					
						
							|  |  |  |                 sub = row.row(align=True) | 
					
						
							|  |  |  |                 sub.active = settings.use_guide | 
					
						
							|  |  |  |                 sub.popover( | 
					
						
							|  |  |  |                     panel="VIEW3D_PT_gpencil_guide", | 
					
						
							| 
									
										
										
										
											2019-04-13 12:44:34 +02:00
										 |  |  |                     text="Guides", | 
					
						
							| 
									
										
										
										
											2019-01-11 19:15:23 +01:00
										 |  |  |                 ) | 
					
						
							| 
									
										
										
										
											2018-06-12 21:06:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 13:06:01 +02:00
										 |  |  |         layout.separator_spacer() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-18 21:13:22 +02:00
										 |  |  |         self.draw_mode_settings(context) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw_tool_settings(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Active Tool | 
					
						
							|  |  |  |         # ----------- | 
					
						
							|  |  |  |         from .space_toolsystem_common import ToolSelectPanelHelper | 
					
						
							|  |  |  |         tool = ToolSelectPanelHelper.draw_active_tool_header(context, layout) | 
					
						
							|  |  |  |         tool_mode = context.mode if tool is None else tool.mode | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Object Mode Options | 
					
						
							|  |  |  |         # ------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Example of how tool_settings can be accessed as pop-overs. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # TODO(campbell): editing options should be after active tool options | 
					
						
							|  |  |  |         # (obviously separated for from the users POV) | 
					
						
							|  |  |  |         draw_fn = getattr(_draw_tool_settings_context_mode, tool_mode, None) | 
					
						
							|  |  |  |         if draw_fn is not None: | 
					
						
							|  |  |  |             draw_fn(context, layout, tool) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Note: general mode options should be added to 'draw_mode_settings'. | 
					
						
							|  |  |  |         if tool_mode == 'SCULPT': | 
					
						
							|  |  |  |             if (tool is not None) and tool.has_datablock: | 
					
						
							|  |  |  |                 layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".paint_common", category="") | 
					
						
							|  |  |  |         elif tool_mode == 'PAINT_VERTEX': | 
					
						
							|  |  |  |             if (tool is not None) and tool.has_datablock: | 
					
						
							|  |  |  |                 layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".paint_common", category="") | 
					
						
							|  |  |  |         elif tool_mode == 'PAINT_WEIGHT': | 
					
						
							|  |  |  |             if (tool is not None) and tool.has_datablock: | 
					
						
							|  |  |  |                 layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".paint_common", category="") | 
					
						
							|  |  |  |         elif tool_mode == 'PAINT_TEXTURE': | 
					
						
							|  |  |  |             if (tool is not None) and tool.has_datablock: | 
					
						
							|  |  |  |                 layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".paint_common", category="") | 
					
						
							|  |  |  |         elif tool_mode == 'EDIT_ARMATURE': | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  |         elif tool_mode == 'EDIT_CURVE': | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  |         elif tool_mode == 'EDIT_MESH': | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  |         elif tool_mode == 'POSE': | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  |         elif tool_mode == 'PARTICLE': | 
					
						
							|  |  |  |             # Disable, only shows "Brush" panel, which is already in the top-bar. | 
					
						
							|  |  |  |             # if tool.has_datablock: | 
					
						
							|  |  |  |             #     layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".paint_common", category="") | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  |         elif tool_mode == 'PAINT_GPENCIL': | 
					
						
							|  |  |  |             if (tool is not None) and tool.has_datablock: | 
					
						
							|  |  |  |                 layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".greasepencil_paint", category="") | 
					
						
							|  |  |  |         elif tool_mode == 'SCULPT_GPENCIL': | 
					
						
							|  |  |  |             layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".greasepencil_sculpt", category="") | 
					
						
							|  |  |  |         elif tool_mode == 'WEIGHT_GPENCIL': | 
					
						
							|  |  |  |             layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".greasepencil_weight", category="") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw_mode_settings(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Active Tool | 
					
						
							|  |  |  |         # ----------- | 
					
						
							|  |  |  |         from .space_toolsystem_common import ToolSelectPanelHelper | 
					
						
							|  |  |  |         tool = ToolSelectPanelHelper.tool_active_from_context(context) | 
					
						
							|  |  |  |         tool_mode = context.mode if tool is None else tool.mode | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if tool_mode == 'SCULPT': | 
					
						
							|  |  |  |             layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".sculpt_mode", category="") | 
					
						
							|  |  |  |         elif tool_mode == 'PAINT_VERTEX': | 
					
						
							|  |  |  |             layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".vertexpaint", category="") | 
					
						
							|  |  |  |         elif tool_mode == 'PAINT_WEIGHT': | 
					
						
							|  |  |  |             layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".weightpaint", category="") | 
					
						
							|  |  |  |         elif tool_mode == 'PAINT_TEXTURE': | 
					
						
							|  |  |  |             layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".imagepaint", category="") | 
					
						
							|  |  |  |         elif tool_mode == 'EDIT_TEXT': | 
					
						
							|  |  |  |             layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".text_edit", category="") | 
					
						
							|  |  |  |         elif tool_mode == 'EDIT_ARMATURE': | 
					
						
							|  |  |  |             layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".armature_edit", category="") | 
					
						
							|  |  |  |         elif tool_mode == 'EDIT_METABALL': | 
					
						
							|  |  |  |             layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".mball_edit", category="") | 
					
						
							|  |  |  |         elif tool_mode == 'EDIT_LATTICE': | 
					
						
							|  |  |  |             layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".lattice_edit", category="") | 
					
						
							|  |  |  |         elif tool_mode == 'EDIT_CURVE': | 
					
						
							|  |  |  |             layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".curve_edit", category="") | 
					
						
							|  |  |  |         elif tool_mode == 'EDIT_MESH': | 
					
						
							|  |  |  |             layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".mesh_edit", category="") | 
					
						
							|  |  |  |         elif tool_mode == 'POSE': | 
					
						
							|  |  |  |             layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".posemode", category="") | 
					
						
							|  |  |  |         elif tool_mode == 'PARTICLE': | 
					
						
							|  |  |  |             layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".particlemode", category="") | 
					
						
							|  |  |  |         elif tool_mode == 'OBJECT': | 
					
						
							|  |  |  |             layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".objectmode", category="") | 
					
						
							|  |  |  |         elif tool_mode in {'PAINT_GPENCIL', 'EDIT_GPENCIL', 'SCULPT_GPENCIL', 'WEIGHT_GPENCIL'}: | 
					
						
							|  |  |  |             # Grease pencil layer. | 
					
						
							|  |  |  |             gpl = context.active_gpencil_layer | 
					
						
							|  |  |  |             if gpl and gpl.info is not None: | 
					
						
							|  |  |  |                 text = gpl.info | 
					
						
							|  |  |  |                 maxw = 25 | 
					
						
							|  |  |  |                 if len(text) > maxw: | 
					
						
							|  |  |  |                     text = text[:maxw - 5] + '..' + text[-3:] | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 text = "" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             layout.label(text="Layer:") | 
					
						
							|  |  |  |             sub = layout.row() | 
					
						
							|  |  |  |             sub.ui_units_x = 8 | 
					
						
							|  |  |  |             sub.popover( | 
					
						
							|  |  |  |                 panel="TOPBAR_PT_gpencil_layers", | 
					
						
							|  |  |  |                 text=text, | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class _draw_tool_settings_context_mode: | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def SCULPT(context, layout, tool): | 
					
						
							|  |  |  |         if (tool is None) or (not tool.has_datablock): | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         paint = context.tool_settings.sculpt | 
					
						
							|  |  |  |         layout.template_ID_preview(paint, "brush", rows=3, cols=8, hide_buttons=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         brush = paint.brush | 
					
						
							|  |  |  |         if brush is None: | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         from .properties_paint_common import ( | 
					
						
							|  |  |  |             brush_basic_sculpt_settings, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         brush_basic_sculpt_settings(layout, context, brush, compact=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def PAINT_TEXTURE(context, layout, tool): | 
					
						
							|  |  |  |         if (tool is None) or (not tool.has_datablock): | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         paint = context.tool_settings.image_paint | 
					
						
							|  |  |  |         layout.template_ID_preview(paint, "brush", rows=3, cols=8, hide_buttons=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         brush = paint.brush | 
					
						
							|  |  |  |         if brush is None: | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         from .properties_paint_common import ( | 
					
						
							|  |  |  |             UnifiedPaintPanel, | 
					
						
							|  |  |  |             brush_basic_texpaint_settings, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         capabilities = brush.image_paint_capabilities | 
					
						
							|  |  |  |         if capabilities.has_color: | 
					
						
							|  |  |  |             UnifiedPaintPanel.prop_unified_color(layout, context, brush, "color", text="") | 
					
						
							|  |  |  |         brush_basic_texpaint_settings(layout, context, brush, compact=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def PAINT_VERTEX(context, layout, tool): | 
					
						
							|  |  |  |         if (tool is None) or (not tool.has_datablock): | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         paint = context.tool_settings.vertex_paint | 
					
						
							|  |  |  |         layout.template_ID_preview(paint, "brush", rows=3, cols=8, hide_buttons=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         brush = paint.brush | 
					
						
							|  |  |  |         if brush is None: | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         from .properties_paint_common import ( | 
					
						
							|  |  |  |             UnifiedPaintPanel, | 
					
						
							|  |  |  |             brush_basic_vpaint_settings, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         capabilities = brush.vertex_paint_capabilities | 
					
						
							|  |  |  |         if capabilities.has_color: | 
					
						
							|  |  |  |             UnifiedPaintPanel.prop_unified_color(layout, context, brush, "color", text="") | 
					
						
							|  |  |  |         brush_basic_vpaint_settings(layout, context, brush, compact=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def PAINT_WEIGHT(context, layout, tool): | 
					
						
							|  |  |  |         if (tool is None) or (not tool.has_datablock): | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         paint = context.tool_settings.weight_paint | 
					
						
							|  |  |  |         layout.template_ID_preview(paint, "brush", rows=3, cols=8, hide_buttons=True) | 
					
						
							|  |  |  |         brush = paint.brush | 
					
						
							|  |  |  |         if brush is None: | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         from .properties_paint_common import brush_basic_wpaint_settings | 
					
						
							|  |  |  |         brush_basic_wpaint_settings(layout, context, brush, compact=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def PAINT_GPENCIL(context, layout, tool): | 
					
						
							|  |  |  |         if tool is None: | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # is_paint = True | 
					
						
							|  |  |  |         # FIXME: tools must use their own UI drawing! | 
					
						
							|  |  |  |         if tool.idname in {"builtin.line", "builtin.box", "builtin.circle", "builtin.arc", "builtin.curve"}: | 
					
						
							|  |  |  |             # is_paint = False | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  |         elif tool.idname == "Cutter": | 
					
						
							|  |  |  |             row = layout.row(align=True) | 
					
						
							|  |  |  |             row.prop(context.tool_settings.gpencil_sculpt, "intersection_threshold") | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  |         elif not tool.has_datablock: | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         paint = context.tool_settings.gpencil_paint | 
					
						
							|  |  |  |         brush = paint.brush | 
					
						
							|  |  |  |         if brush is None: | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         gp_settings = brush.gpencil_settings | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def draw_color_selector(): | 
					
						
							|  |  |  |             ma = gp_settings.material | 
					
						
							|  |  |  |             row = layout.row(align=True) | 
					
						
							|  |  |  |             if not gp_settings.use_material_pin: | 
					
						
							|  |  |  |                 ma = context.object.active_material | 
					
						
							|  |  |  |             icon_id = 0 | 
					
						
							|  |  |  |             if ma: | 
					
						
							|  |  |  |                 icon_id = ma.id_data.preview.icon_id | 
					
						
							|  |  |  |                 txt_ma = ma.name | 
					
						
							|  |  |  |                 maxw = 25 | 
					
						
							|  |  |  |                 if len(txt_ma) > maxw: | 
					
						
							|  |  |  |                     txt_ma = txt_ma[:maxw - 5] + '..' + txt_ma[-3:] | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 txt_ma = "" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             sub = row.row() | 
					
						
							|  |  |  |             sub.ui_units_x = 8 | 
					
						
							|  |  |  |             sub.popover( | 
					
						
							|  |  |  |                 panel="TOPBAR_PT_gpencil_materials", | 
					
						
							|  |  |  |                 text=txt_ma, | 
					
						
							|  |  |  |                 icon_value=icon_id, | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             row.prop(gp_settings, "use_material_pin", text="") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         row = layout.row(align=True) | 
					
						
							|  |  |  |         tool_settings = context.scene.tool_settings | 
					
						
							|  |  |  |         settings = tool_settings.gpencil_paint | 
					
						
							|  |  |  |         row.template_ID_preview(settings, "brush", rows=3, cols=8, hide_buttons=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if context.object and brush.gpencil_tool in {'FILL', 'DRAW'}: | 
					
						
							|  |  |  |             draw_color_selector() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         from .properties_paint_common import ( | 
					
						
							|  |  |  |             brush_basic_gpencil_paint_settings, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         brush_basic_gpencil_paint_settings(layout, context, brush, compact=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # FIXME: tools must use their own UI drawing! | 
					
						
							|  |  |  |         if tool.idname in {"builtin.arc", "builtin.curve", "builtin.line", "builtin.box", "builtin.circle"}: | 
					
						
							|  |  |  |             settings = context.tool_settings.gpencil_sculpt | 
					
						
							|  |  |  |             row = layout.row(align=True) | 
					
						
							|  |  |  |             row.prop(settings, "use_thickness_curve", text="", icon='CURVE_DATA') | 
					
						
							|  |  |  |             sub = row.row(align=True) | 
					
						
							|  |  |  |             sub.active = settings.use_thickness_curve | 
					
						
							|  |  |  |             sub.popover( | 
					
						
							|  |  |  |                 panel="TOPBAR_PT_gpencil_primitive", | 
					
						
							|  |  |  |                 text="Thickness Profile", | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if brush.gpencil_tool == 'FILL': | 
					
						
							|  |  |  |             settings = context.tool_settings.gpencil_sculpt | 
					
						
							|  |  |  |             row = layout.row(align=True) | 
					
						
							|  |  |  |             sub = row.row(align=True) | 
					
						
							|  |  |  |             sub.popover( | 
					
						
							|  |  |  |                 panel="TOPBAR_PT_gpencil_fill", | 
					
						
							|  |  |  |                 text="Fill Options", | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def SCULPT_GPENCIL(context, layout, tool): | 
					
						
							|  |  |  |         if (tool is None) or (not tool.has_datablock): | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  |         tool_settings = context.tool_settings | 
					
						
							|  |  |  |         settings = tool_settings.gpencil_sculpt | 
					
						
							|  |  |  |         brush = settings.brush | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         from .properties_paint_common import ( | 
					
						
							|  |  |  |             brush_basic_gpencil_sculpt_settings, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         brush_basic_gpencil_sculpt_settings(layout, context, brush, compact=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def WEIGHT_GPENCIL(context, layout, tool): | 
					
						
							|  |  |  |         if (tool is None) or (not tool.has_datablock): | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  |         tool_settings = context.tool_settings | 
					
						
							|  |  |  |         settings = tool_settings.gpencil_sculpt | 
					
						
							|  |  |  |         brush = settings.brush | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         from .properties_paint_common import ( | 
					
						
							|  |  |  |             brush_basic_gpencil_weight_settings, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         brush_basic_gpencil_weight_settings(layout, context, brush, compact=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def PARTICLE(context, layout, tool): | 
					
						
							|  |  |  |         if (tool is None) or (not tool.has_datablock): | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # See: 'VIEW3D_PT_tools_brush', basically a duplicate | 
					
						
							|  |  |  |         settings = context.tool_settings.particle_edit | 
					
						
							|  |  |  |         brush = settings.brush | 
					
						
							|  |  |  |         tool = settings.tool | 
					
						
							|  |  |  |         if tool != 'NONE': | 
					
						
							|  |  |  |             layout.prop(brush, "size", slider=True) | 
					
						
							|  |  |  |             if tool == 'ADD': | 
					
						
							|  |  |  |                 layout.prop(brush, "count") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 layout.prop(settings, "use_default_interpolate") | 
					
						
							|  |  |  |                 layout.prop(brush, "steps", slider=True) | 
					
						
							|  |  |  |                 layout.prop(settings, "default_key_count", slider=True) | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 layout.prop(brush, "strength", slider=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 if tool == 'LENGTH': | 
					
						
							|  |  |  |                     layout.row().prop(brush, "length_mode", expand=True) | 
					
						
							|  |  |  |                 elif tool == 'PUFF': | 
					
						
							|  |  |  |                     layout.row().prop(brush, "puff_mode", expand=True) | 
					
						
							|  |  |  |                     layout.prop(brush, "use_puff_volume") | 
					
						
							|  |  |  |                 elif tool == 'COMB': | 
					
						
							|  |  |  |                     row = layout.row() | 
					
						
							|  |  |  |                     row.active = settings.is_editable | 
					
						
							|  |  |  |                     row.prop(settings, "use_emitter_deflect", text="Deflect Emitter") | 
					
						
							|  |  |  |                     sub = row.row(align=True) | 
					
						
							|  |  |  |                     sub.active = settings.use_emitter_deflect | 
					
						
							|  |  |  |                     sub.prop(settings, "emitter_distance", text="Distance") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_HT_header(Header): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         tool_settings = context.tool_settings | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							|  |  |  |         shading = view.shading | 
					
						
							|  |  |  |         # mode_string = context.mode | 
					
						
							|  |  |  |         obj = context.active_object | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if not view.show_region_tool_header: | 
					
						
							|  |  |  |             layout.row(align=True).template_header() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         row = layout.row(align=True) | 
					
						
							|  |  |  |         object_mode = 'OBJECT' if obj is None else obj.mode | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Note: This is actually deadly in case enum_items have to be dynamically generated | 
					
						
							|  |  |  |         #       (because internal RNA array iterator will free everything immediately...). | 
					
						
							|  |  |  |         # XXX This is an RNA internal issue, not sure how to fix it. | 
					
						
							|  |  |  |         # Note: Tried to add an accessor to get translated UI strings instead of manual call | 
					
						
							|  |  |  |         #       to pgettext_iface below, but this fails because translated enumitems | 
					
						
							|  |  |  |         #       are always dynamically allocated. | 
					
						
							|  |  |  |         act_mode_item = bpy.types.Object.bl_rna.properties["mode"].enum_items[object_mode] | 
					
						
							|  |  |  |         act_mode_i18n_context = bpy.types.Object.bl_rna.properties["mode"].translation_context | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         sub = row.row(align=True) | 
					
						
							|  |  |  |         sub.ui_units_x = 5.5 | 
					
						
							|  |  |  |         sub.operator_menu_enum( | 
					
						
							|  |  |  |             "object.mode_set", "mode", | 
					
						
							|  |  |  |             text=bpy.app.translations.pgettext_iface(act_mode_item.name, act_mode_i18n_context), | 
					
						
							|  |  |  |             icon=act_mode_item.icon, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         del act_mode_item | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.template_header_3D_mode() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Contains buttons like Mode, Pivot, Layer, Mesh Select Mode... | 
					
						
							|  |  |  |         if obj: | 
					
						
							|  |  |  |             # Particle edit | 
					
						
							|  |  |  |             if object_mode == 'PARTICLE_EDIT': | 
					
						
							|  |  |  |                 row = layout.row() | 
					
						
							|  |  |  |                 row.prop(tool_settings.particle_edit, "select_mode", text="", expand=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Grease Pencil | 
					
						
							|  |  |  |         if obj and obj.type == 'GPENCIL' and context.gpencil_data: | 
					
						
							|  |  |  |             gpd = context.gpencil_data | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if gpd.is_stroke_paint_mode: | 
					
						
							|  |  |  |                 row = layout.row() | 
					
						
							|  |  |  |                 sub = row.row(align=True) | 
					
						
							|  |  |  |                 sub.prop(tool_settings, "use_gpencil_draw_onback", text="", icon='MOD_OPACITY') | 
					
						
							|  |  |  |                 sub.separator(factor=0.4) | 
					
						
							|  |  |  |                 sub.prop(tool_settings, "use_gpencil_weight_data_add", text="", icon='WPAINT_HLT') | 
					
						
							|  |  |  |                 sub.separator(factor=0.4) | 
					
						
							|  |  |  |                 sub.prop(tool_settings, "use_gpencil_draw_additive", text="", icon='FREEZE') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if gpd.use_stroke_edit_mode: | 
					
						
							|  |  |  |                 row = layout.row(align=True) | 
					
						
							|  |  |  |                 row.prop(tool_settings, "gpencil_selectmode", text="", expand=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if gpd.use_stroke_edit_mode or gpd.is_stroke_sculpt_mode or gpd.is_stroke_weight_mode: | 
					
						
							|  |  |  |                 row = layout.row(align=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 if gpd.is_stroke_sculpt_mode: | 
					
						
							|  |  |  |                     row.prop(tool_settings.gpencil_sculpt, "use_select_mask", text="") | 
					
						
							|  |  |  |                     row.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 row.prop(gpd, "use_multiedit", text="", icon='GP_MULTIFRAME_EDITING') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 sub = row.row(align=True) | 
					
						
							|  |  |  |                 sub.active = gpd.use_multiedit | 
					
						
							|  |  |  |                 sub.popover( | 
					
						
							|  |  |  |                     panel="VIEW3D_PT_gpencil_multi_frame", | 
					
						
							|  |  |  |                     text="Multiframe", | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if gpd.use_stroke_edit_mode: | 
					
						
							|  |  |  |                 row = layout.row(align=True) | 
					
						
							|  |  |  |                 row.prop(tool_settings.gpencil_sculpt, "use_select_mask", text="") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 row.popover( | 
					
						
							|  |  |  |                     panel="VIEW3D_PT_tools_grease_pencil_interpolate", | 
					
						
							|  |  |  |                     text="Interpolate", | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         overlay = view.overlay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         VIEW3D_MT_editor_menus.draw_collapsible(context, layout) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator_spacer() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 13:06:01 +02:00
										 |  |  |         # Viewport Settings | 
					
						
							| 
									
										
										
										
											2018-07-11 13:24:04 +02:00
										 |  |  |         layout.popover( | 
					
						
							| 
									
										
										
										
											2018-07-13 19:13:44 +02:00
										 |  |  |             panel="VIEW3D_PT_object_type_visibility", | 
					
						
							| 
									
										
										
										
											2018-07-12 09:38:19 +02:00
										 |  |  |             icon_value=view.icon_from_show_object_viewport, | 
					
						
							| 
									
										
										
										
											2018-07-11 13:58:10 +02:00
										 |  |  |             text="", | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2018-07-11 13:24:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-15 15:54:25 +02:00
										 |  |  |         # Gizmo toggle & popover. | 
					
						
							|  |  |  |         row = layout.row(align=True) | 
					
						
							|  |  |  |         # FIXME: place-holder icon. | 
					
						
							|  |  |  |         row.prop(view, "show_gizmo", text="", toggle=True, icon='EMPTY_DATA') | 
					
						
							|  |  |  |         sub = row.row(align=True) | 
					
						
							|  |  |  |         sub.active = view.show_gizmo | 
					
						
							|  |  |  |         sub.popover( | 
					
						
							|  |  |  |             panel="VIEW3D_PT_gizmo_display", | 
					
						
							|  |  |  |             text="", | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Overlay toggle & popover. | 
					
						
							| 
									
										
										
										
											2018-07-11 13:06:01 +02:00
										 |  |  |         row = layout.row(align=True) | 
					
						
							| 
									
										
										
										
											2018-08-24 12:54:48 +02:00
										 |  |  |         row.prop(overlay, "show_overlays", icon='OVERLAY', text="") | 
					
						
							| 
									
										
										
										
											2018-07-11 13:06:01 +02:00
										 |  |  |         sub = row.row(align=True) | 
					
						
							|  |  |  |         sub.active = overlay.show_overlays | 
					
						
							| 
									
										
										
										
											2019-04-13 12:14:12 +02:00
										 |  |  |         sub.popover(panel="VIEW3D_PT_overlay", text="") | 
					
						
							| 
									
										
										
										
											2018-07-11 13:06:01 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-26 20:31:14 +02:00
										 |  |  |         row = layout.row() | 
					
						
							|  |  |  |         row.active = (shading.type in {'WIREFRAME', 'SOLID'}) or object_mode in {'EDIT'} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if shading.type == 'WIREFRAME': | 
					
						
							| 
									
										
										
										
											2018-10-01 10:45:50 +02:00
										 |  |  |             row.prop(shading, "show_xray_wireframe", text="", icon='XRAY') | 
					
						
							| 
									
										
										
										
											2018-09-26 20:31:14 +02:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2018-10-01 10:45:50 +02:00
										 |  |  |             row.prop(shading, "show_xray", text="", icon='XRAY') | 
					
						
							| 
									
										
										
										
											2018-09-26 20:31:14 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 20:10:27 +02:00
										 |  |  |         row = layout.row(align=True) | 
					
						
							|  |  |  |         row.prop(shading, "type", text="", expand=True) | 
					
						
							|  |  |  |         sub = row.row(align=True) | 
					
						
							| 
									
										
										
										
											2018-12-19 11:23:21 +11:00
										 |  |  |         # TODO, currently render shading type ignores mesh two-side, until it's supported | 
					
						
							|  |  |  |         # show the shading popover which shows double-sided option. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # sub.enabled = shading.type != 'RENDERED' | 
					
						
							| 
									
										
										
										
											2019-04-13 12:14:12 +02:00
										 |  |  |         sub.popover(panel="VIEW3D_PT_shading", text="") | 
					
						
							| 
									
										
										
										
											2018-07-11 20:10:27 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-28 22:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-27 18:38:53 +11:00
										 |  |  | class VIEW3D_MT_editor_menus(Menu): | 
					
						
							|  |  |  |     bl_label = "" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							| 
									
										
										
										
											2018-12-20 12:02:21 +11:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2014-01-27 18:38:53 +11:00
										 |  |  |         obj = context.active_object | 
					
						
							|  |  |  |         mode_string = context.mode | 
					
						
							|  |  |  |         edit_object = context.edit_object | 
					
						
							| 
									
										
										
										
											2018-12-14 16:45:57 +01:00
										 |  |  |         gp_edit = obj and obj.mode in {'EDIT_GPENCIL', 'PAINT_GPENCIL', 'SCULPT_GPENCIL', 'WEIGHT_GPENCIL'} | 
					
						
							| 
									
										
										
										
											2014-01-27 18:38:53 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-02 15:01:20 +02:00
										 |  |  |         layout.menu("VIEW3D_MT_view") | 
					
						
							| 
									
										
										
										
											2014-01-27 18:38:53 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # Select Menu | 
					
						
							| 
									
										
										
										
											2015-12-13 21:03:13 +13:00
										 |  |  |         if gp_edit: | 
					
						
							| 
									
										
										
										
											2018-12-14 16:45:57 +01:00
										 |  |  |             if mode_string not in {'PAINT_GPENCIL', 'WEIGHT_GPENCIL'}: | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |                 layout.menu("VIEW3D_MT_select_gpencil") | 
					
						
							| 
									
										
										
										
											2015-12-13 21:03:13 +13:00
										 |  |  |         elif mode_string in {'PAINT_WEIGHT', 'PAINT_VERTEX', 'PAINT_TEXTURE'}: | 
					
						
							| 
									
										
										
										
											2014-01-27 18:38:53 +11:00
										 |  |  |             mesh = obj.data | 
					
						
							|  |  |  |             if mesh.use_paint_mask: | 
					
						
							| 
									
										
										
										
											2018-07-02 15:01:20 +02:00
										 |  |  |                 layout.menu("VIEW3D_MT_select_paint_mask") | 
					
						
							| 
									
										
										
										
											2017-09-29 17:10:15 +10:00
										 |  |  |             elif mesh.use_paint_mask_vertex and mode_string in {'PAINT_WEIGHT', 'PAINT_VERTEX'}: | 
					
						
							| 
									
										
										
										
											2018-07-02 15:01:20 +02:00
										 |  |  |                 layout.menu("VIEW3D_MT_select_paint_mask_vertex") | 
					
						
							| 
									
										
										
										
											2014-04-30 00:52:43 +10:00
										 |  |  |         elif mode_string != 'SCULPT': | 
					
						
							| 
									
										
										
										
											2018-07-02 15:01:20 +02:00
										 |  |  |             layout.menu("VIEW3D_MT_select_%s" % mode_string.lower()) | 
					
						
							| 
									
										
										
										
											2014-01-27 18:38:53 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-13 21:03:13 +13:00
										 |  |  |         if gp_edit: | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  |         elif mode_string == 'OBJECT': | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  |             layout.menu("VIEW3D_MT_add", text="Add") | 
					
						
							| 
									
										
										
										
											2014-01-27 18:38:53 +11:00
										 |  |  |         elif mode_string == 'EDIT_MESH': | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  |             layout.menu("VIEW3D_MT_mesh_add", text="Add") | 
					
						
							| 
									
										
										
										
											2014-01-27 18:38:53 +11:00
										 |  |  |         elif mode_string == 'EDIT_CURVE': | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  |             layout.menu("VIEW3D_MT_curve_add", text="Add") | 
					
						
							| 
									
										
										
										
											2014-01-27 18:38:53 +11:00
										 |  |  |         elif mode_string == 'EDIT_SURFACE': | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  |             layout.menu("VIEW3D_MT_surface_add", text="Add") | 
					
						
							| 
									
										
										
										
											2014-01-27 18:38:53 +11:00
										 |  |  |         elif mode_string == 'EDIT_METABALL': | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  |             layout.menu("VIEW3D_MT_metaball_add", text="Add") | 
					
						
							| 
									
										
										
										
											2014-01-27 18:38:53 +11:00
										 |  |  |         elif mode_string == 'EDIT_ARMATURE': | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  |             layout.menu("TOPBAR_MT_edit_armature_add", text="Add") | 
					
						
							| 
									
										
										
										
											2014-01-27 18:38:53 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-13 21:03:13 +13:00
										 |  |  |         if gp_edit: | 
					
						
							| 
									
										
										
										
											2018-12-14 16:45:57 +01:00
										 |  |  |             if obj and obj.mode == 'PAINT_GPENCIL': | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |                 layout.menu("VIEW3D_MT_paint_gpencil") | 
					
						
							| 
									
										
										
										
											2018-12-14 16:45:57 +01:00
										 |  |  |             elif obj and obj.mode == 'EDIT_GPENCIL': | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |                 layout.menu("VIEW3D_MT_edit_gpencil") | 
					
						
							| 
									
										
										
										
											2018-12-14 16:45:57 +01:00
										 |  |  |             elif obj and obj.mode == 'WEIGHT_GPENCIL': | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |                 layout.menu("VIEW3D_MT_weight_gpencil") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-13 21:03:13 +13:00
										 |  |  |         elif edit_object: | 
					
						
							| 
									
										
										
										
											2018-07-02 15:01:20 +02:00
										 |  |  |             layout.menu("VIEW3D_MT_edit_%s" % edit_object.type.lower()) | 
					
						
							| 
									
										
										
										
											2018-05-23 15:39:39 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |             if mode_string == 'EDIT_MESH': | 
					
						
							| 
									
										
										
										
											2018-07-02 15:01:20 +02:00
										 |  |  |                 layout.menu("VIEW3D_MT_edit_mesh_vertices") | 
					
						
							|  |  |  |                 layout.menu("VIEW3D_MT_edit_mesh_edges") | 
					
						
							|  |  |  |                 layout.menu("VIEW3D_MT_edit_mesh_faces") | 
					
						
							| 
									
										
										
										
											2018-08-22 13:32:14 +02:00
										 |  |  |                 layout.menu("VIEW3D_MT_uv_map", text="UV") | 
					
						
							| 
									
										
										
										
											2018-12-08 15:01:47 +11:00
										 |  |  |             elif mode_string in {'EDIT_CURVE', 'EDIT_SURFACE'}: | 
					
						
							| 
									
										
										
										
											2018-11-30 09:45:13 +11:00
										 |  |  |                 layout.menu("VIEW3D_MT_edit_curve_ctrlpoints") | 
					
						
							|  |  |  |                 layout.menu("VIEW3D_MT_edit_curve_segments") | 
					
						
							| 
									
										
										
										
											2018-05-23 15:39:39 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-27 18:38:53 +11:00
										 |  |  |         elif obj: | 
					
						
							| 
									
										
										
										
											2015-04-14 10:29:11 +10:00
										 |  |  |             if mode_string != 'PAINT_TEXTURE': | 
					
						
							| 
									
										
										
										
											2018-07-02 15:01:20 +02:00
										 |  |  |                 layout.menu("VIEW3D_MT_%s" % mode_string.lower()) | 
					
						
							| 
									
										
										
										
											2014-01-27 18:38:53 +11:00
										 |  |  |             if mode_string in {'SCULPT', 'PAINT_VERTEX', 'PAINT_WEIGHT', 'PAINT_TEXTURE'}: | 
					
						
							| 
									
										
										
										
											2018-07-02 15:01:20 +02:00
										 |  |  |                 layout.menu("VIEW3D_MT_brush") | 
					
						
							| 
									
										
										
										
											2014-01-27 18:38:53 +11:00
										 |  |  |             if mode_string == 'SCULPT': | 
					
						
							| 
									
										
										
										
											2018-07-02 15:01:20 +02:00
										 |  |  |                 layout.menu("VIEW3D_MT_hide_mask") | 
					
						
							| 
									
										
										
										
											2014-01-27 18:38:53 +11:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2018-07-02 15:01:20 +02:00
										 |  |  |             layout.menu("VIEW3D_MT_object") | 
					
						
							| 
									
										
										
										
											2014-01-27 18:38:53 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-15 20:21:49 +00:00
										 |  |  | # ********** Menu ********** | 
					
						
							| 
									
										
										
										
											2009-07-24 22:09:30 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-23 22:13:56 +00:00
										 |  |  | # ********** Utilities ********** | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-29 15:35:06 +11:00
										 |  |  | class ShowHideMenu: | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Show/Hide" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |     _operator_name = "" | 
					
						
							| 
									
										
										
										
											2009-08-23 22:13:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-19 22:25:25 +01:00
										 |  |  |         layout.operator("%s.reveal" % self._operator_name) | 
					
						
							| 
									
										
										
										
											2012-04-24 17:50:01 +00:00
										 |  |  |         layout.operator("%s.hide" % self._operator_name, text="Hide Selected").unselected = False | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-06 06:37:07 +00:00
										 |  |  | # Standard transforms which apply to all cases | 
					
						
							|  |  |  | # NOTE: this doesn't seem to be able to be used directly | 
					
						
							|  |  |  | class VIEW3D_MT_transform_base(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Transform" | 
					
						
							| 
									
										
										
										
											2018-09-27 16:22:50 +10:00
										 |  |  |     bl_category = "View" | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-11 16:18:34 +01:00
										 |  |  |         layout.operator("transform.translate") | 
					
						
							|  |  |  |         layout.operator("transform.rotate") | 
					
						
							|  |  |  |         layout.operator("transform.resize", text="Scale") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         layout.operator("transform.tosphere", text="To Sphere") | 
					
						
							|  |  |  |         layout.operator("transform.shear", text="Shear") | 
					
						
							| 
									
										
										
										
											2013-11-20 12:14:10 +11:00
										 |  |  |         layout.operator("transform.bend", text="Bend") | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         layout.operator("transform.push_pull", text="Push/Pull") | 
					
						
							| 
									
										
										
										
											2015-05-26 17:55:34 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if context.mode != 'OBJECT': | 
					
						
							|  |  |  |             layout.operator("transform.vertex_warp", text="Warp") | 
					
						
							|  |  |  |             layout.operator("transform.vertex_random", text="Randomize") | 
					
						
							| 
									
										
										
										
											2010-09-16 07:14:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-06 06:37:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Generic transform menu - geometry types | 
					
						
							|  |  |  | class VIEW3D_MT_transform(VIEW3D_MT_transform_base): | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         # base menu | 
					
						
							|  |  |  |         VIEW3D_MT_transform_base.draw(self, context) | 
					
						
							| 
									
										
										
										
											2012-05-15 18:50:51 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-06 06:37:07 +00:00
										 |  |  |         # generic... | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2019-03-04 10:13:49 +01:00
										 |  |  |         if context.mode == 'EDIT_MESH': | 
					
						
							|  |  |  |             layout.operator("transform.shrink_fatten", text="Shrink Fatten") | 
					
						
							|  |  |  |         elif context.mode == 'EDIT_CURVE': | 
					
						
							|  |  |  |             layout.operator("transform.transform", text="Radius").mode = 'CURVE_SHRINKFATTEN' | 
					
						
							| 
									
										
										
										
											2012-11-09 06:06:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-05 17:27:26 +00:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +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
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-06 06:37:07 +00:00
										 |  |  | # Object-specific extensions to Transform menu | 
					
						
							|  |  |  | class VIEW3D_MT_transform_object(VIEW3D_MT_transform_base): | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							| 
									
										
										
										
											2012-07-29 10:03:46 +00:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2012-07-29 12:07:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-06 06:37:07 +00:00
										 |  |  |         # base menu | 
					
						
							|  |  |  |         VIEW3D_MT_transform_base.draw(self, context) | 
					
						
							| 
									
										
										
										
											2012-05-15 18:50:51 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-06 06:37:07 +00:00
										 |  |  |         # object-specific option follow... | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							| 
									
										
										
										
											2010-09-16 07:14:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-06 06:37:07 +00:00
										 |  |  |         layout.operator("transform.translate", text="Move Texture Space").texture_space = True | 
					
						
							|  |  |  |         layout.operator("transform.resize", text="Scale Texture Space").texture_space = True | 
					
						
							| 
									
										
										
										
											2012-05-15 18:50:51 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-06 06:37:07 +00:00
										 |  |  |         layout.separator() | 
					
						
							| 
									
										
										
										
											2012-05-15 18:50:51 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-06 06:37:07 +00:00
										 |  |  |         layout.operator_context = 'EXEC_REGION_WIN' | 
					
						
							| 
									
										
										
										
											2017-03-20 09:43:18 +11:00
										 |  |  |         # XXX see alignmenu() in edit.c of b2.4x to get this working | 
					
						
							|  |  |  |         layout.operator("transform.transform", text="Align to Transform Orientation").mode = 'ALIGN' | 
					
						
							| 
									
										
										
										
											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-04-12 15:12:05 +00:00
										 |  |  |         layout.operator("object.randomize_transform") | 
					
						
							|  |  |  |         layout.operator("object.align") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-06 19:47:25 +10:00
										 |  |  |         # TODO: there is a strange context bug here. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							|  |  |  |         layout.operator("object.transform_axis_target") | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-28 23:37:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-06 06:37:07 +00:00
										 |  |  | # Armature EditMode extensions to Transform menu | 
					
						
							|  |  |  | class VIEW3D_MT_transform_armature(VIEW3D_MT_transform_base): | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							| 
									
										
										
										
											2012-07-29 10:03:46 +00:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2012-07-29 12:07:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-06 06:37:07 +00:00
										 |  |  |         # base menu | 
					
						
							|  |  |  |         VIEW3D_MT_transform_base.draw(self, context) | 
					
						
							| 
									
										
										
										
											2012-05-15 18:50:51 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-06 06:37:07 +00:00
										 |  |  |         # armature specific extensions follow... | 
					
						
							|  |  |  |         obj = context.object | 
					
						
							| 
									
										
										
										
											2018-04-05 18:20:27 +02:00
										 |  |  |         if obj.type == 'ARMATURE' and obj.mode in {'EDIT', 'POSE'}: | 
					
						
							| 
									
										
										
										
											2018-09-03 18:58:41 +02:00
										 |  |  |             if obj.data.display_type == 'BBONE': | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  |                 layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-10 00:44:03 +13:00
										 |  |  |                 layout.operator("transform.transform", text="Scale BBone").mode = 'BONE_SIZE' | 
					
						
							| 
									
										
										
										
											2018-09-03 18:58:41 +02:00
										 |  |  |             elif obj.data.display_type == 'ENVELOPE': | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  |                 layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-10 00:44:03 +13:00
										 |  |  |                 layout.operator("transform.transform", text="Scale Envelope Distance").mode = 'BONE_SIZE' | 
					
						
							|  |  |  |                 layout.operator("transform.transform", text="Scale Radius").mode = 'BONE_ENVELOPE' | 
					
						
							| 
									
										
										
										
											2012-05-06 06:37:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if context.edit_object and context.edit_object.type == 'ARMATURE': | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  |             layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-06 06:37:07 +00:00
										 |  |  |             layout.operator("armature.align") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_mirror(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Mirror" | 
					
						
							| 
									
										
										
										
											2009-11-22 06:19:30 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-11-22 06:19:30 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-20 16:41:00 +11:00
										 |  |  |         layout.operator_context = 'EXEC_REGION_WIN' | 
					
						
							| 
									
										
										
										
											2009-11-28 23:37:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-20 16:41:00 +11:00
										 |  |  |         for (space_name, space_id) in (("Global", 'GLOBAL'), ("Local", 'LOCAL')): | 
					
						
							|  |  |  |             for axis_index, axis_name in enumerate("XYZ"): | 
					
						
							|  |  |  |                 props = layout.operator("transform.mirror", text=f"{axis_name!s} {space_name!s}") | 
					
						
							|  |  |  |                 props.constraint_axis[axis_index] = True | 
					
						
							|  |  |  |                 props.orient_type = 'GLOBAL' | 
					
						
							| 
									
										
										
										
											2009-11-28 23:37:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-20 16:41:00 +11:00
										 |  |  |             if space_id == 'GLOBAL': | 
					
						
							|  |  |  |                 layout.separator() | 
					
						
							| 
									
										
										
										
											2010-01-15 17:28:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-28 23:37:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_snap(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Snap" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         layout.operator("view3d.snap_selected_to_grid", text="Selection to Grid") | 
					
						
							| 
									
										
										
										
											2013-08-23 20:41:21 +00:00
										 |  |  |         layout.operator("view3d.snap_selected_to_cursor", text="Selection to Cursor").use_offset = False | 
					
						
							| 
									
										
										
										
											2018-07-23 13:15:20 +02:00
										 |  |  |         layout.operator("view3d.snap_selected_to_cursor", text="Selection to Cursor (Keep Offset)").use_offset = True | 
					
						
							| 
									
										
										
										
											2016-07-15 17:07:18 +10:00
										 |  |  |         layout.operator("view3d.snap_selected_to_active", text="Selection to Active") | 
					
						
							| 
									
										
										
										
											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-09-21 15:18:38 +00:00
										 |  |  |         layout.operator("view3d.snap_cursor_to_selected", text="Cursor to Selected") | 
					
						
							| 
									
										
										
										
											2018-11-01 16:12:38 +01:00
										 |  |  |         layout.operator("view3d.snap_cursor_to_center", text="Cursor to World Origin") | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_uv_map(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "UV Mapping" | 
					
						
							| 
									
										
										
										
											2009-11-03 18:20:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-11-03 18:20:03 +00:00
										 |  |  |         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-12-07 11:22:29 +00:00
										 |  |  |         layout.operator_context = 'EXEC_REGION_WIN' | 
					
						
							| 
									
										
										
										
											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() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-19 15:50:17 +00:00
										 |  |  |         layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							| 
									
										
										
										
											2012-01-14 06:30:27 +00:00
										 |  |  |         layout.operator("uv.project_from_view").scale_to_bounds = False | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +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() | 
					
						
							| 
									
										
										
										
											2018-09-06 14:12:16 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.mark_seam").clear = False | 
					
						
							|  |  |  |         layout.operator("mesh.mark_seam", text="Clear Seam").clear = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_view(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "View" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2017-10-19 12:35:58 +11:00
										 |  |  |         view = context.space_data | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-18 12:16:03 +02:00
										 |  |  |         layout.prop(view, "show_region_toolbar") | 
					
						
							|  |  |  |         layout.prop(view, "show_region_ui") | 
					
						
							| 
									
										
										
										
											2019-04-18 13:49:21 +02:00
										 |  |  |         layout.prop(view, "show_region_hud") | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator("view3d.view_selected", text="Frame Selected").use_all_regions = False | 
					
						
							| 
									
										
										
										
											2017-10-19 12:35:58 +11:00
										 |  |  |         if view.region_quadviews: | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |             layout.operator("view3d.view_selected", text="Frame Selected (Quad View)").use_all_regions = True | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator("view3d.view_all", text="Frame All").center = False | 
					
						
							|  |  |  |         layout.operator("view3d.view_persportho", text="Perspective/Orthographic") | 
					
						
							| 
									
										
										
										
											2018-11-29 23:44:37 -02:00
										 |  |  |         layout.menu("VIEW3D_MT_view_local") | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-19 12:35:58 +11: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() | 
					
						
							| 
									
										
										
										
											2017-10-19 12:35:58 +11:00
										 |  |  |         layout.menu("VIEW3D_MT_view_viewpoint") | 
					
						
							| 
									
										
										
										
											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' | 
					
						
							| 
									
										
										
										
											2019-03-06 16:43:37 +01:00
										 |  |  |         layout.menu("VIEW3D_MT_view_regions", text="View Regions") | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator("screen.animation_play", text="Play 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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-19 21:41:12 +01:00
										 |  |  |         layout.operator("render.opengl", text="Viewport Render Image", icon='RENDER_STILL') | 
					
						
							| 
									
										
										
										
											2018-10-31 00:29:45 +01:00
										 |  |  |         layout.operator("render.opengl", text="Viewport Render Animation", icon='RENDER_ANIMATION').animation = True | 
					
						
							| 
									
										
										
										
											2018-05-12 14:59:51 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 18:35:19 +02:00
										 |  |  |         layout.menu("INFO_MT_area") | 
					
						
							| 
									
										
										
										
											2009-12-03 16:28:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-29 23:44:37 -02:00
										 |  |  | class VIEW3D_MT_view_local(Menu): | 
					
						
							|  |  |  |     bl_label = "Local View" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2018-11-29 23:44:37 -02:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("view3d.localview", text="Toggle Local View") | 
					
						
							|  |  |  |         layout.operator("view3d.localview_remove_from") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-19 12:35:58 +11:00
										 |  |  | class VIEW3D_MT_view_cameras(Menu): | 
					
						
							|  |  |  |     bl_label = "Cameras" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2017-10-19 12:35:58 +11:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("view3d.object_as_camera") | 
					
						
							| 
									
										
										
										
											2018-07-05 16:54:30 +02:00
										 |  |  |         layout.operator("view3d.view_camera", text="Active Camera") | 
					
						
							| 
									
										
										
										
											2017-10-19 12:35:58 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_MT_view_viewpoint(Menu): | 
					
						
							|  |  |  |     bl_label = "Viewpoint" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2017-10-19 12:35:58 +11:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-05 16:54:30 +02:00
										 |  |  |         layout.operator("view3d.view_camera", text="Camera") | 
					
						
							| 
									
										
										
										
											2017-10-19 12:35:58 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-05 16:54:30 +02:00
										 |  |  |         layout.operator("view3d.view_axis", text="Top").type = 'TOP' | 
					
						
							|  |  |  |         layout.operator("view3d.view_axis", text="Bottom").type = 'BOTTOM' | 
					
						
							| 
									
										
										
										
											2017-10-19 12:35:58 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-05 16:54:30 +02:00
										 |  |  |         layout.operator("view3d.view_axis", text="Front").type = 'FRONT' | 
					
						
							|  |  |  |         layout.operator("view3d.view_axis", text="Back").type = 'BACK' | 
					
						
							| 
									
										
										
										
											2017-10-19 12:35:58 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-05 16:54:30 +02:00
										 |  |  |         layout.operator("view3d.view_axis", text="Right").type = 'RIGHT' | 
					
						
							|  |  |  |         layout.operator("view3d.view_axis", text="Left").type = 'LEFT' | 
					
						
							| 
									
										
										
										
											2017-10-19 12:35:58 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_view_navigation(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Navigation" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2013-09-01 14:17:43 +00:00
										 |  |  |         from math import pi | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-18 06:07:41 +00:00
										 |  |  |         layout.operator_enum("view3d.view_orbit", "type") | 
					
						
							| 
									
										
										
										
											2018-08-28 18:01:53 +02:00
										 |  |  |         props = layout.operator("view3d.view_orbit", text="Orbit Opposite") | 
					
						
							| 
									
										
										
										
											2015-03-13 04:45:40 +11:00
										 |  |  |         props.type = 'ORBITRIGHT' | 
					
						
							|  |  |  |         props.angle = pi | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-01 11:01:00 +11:00
										 |  |  |         layout.operator("view3d.view_roll", text="Roll Left").type = 'LEFT' | 
					
						
							|  |  |  |         layout.operator("view3d.view_roll", text="Roll Right").type = 'RIGHT' | 
					
						
							| 
									
										
										
										
											2013-09-01 14:17:43 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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-09-21 15:18:38 +00:00
										 |  |  |         layout.operator("view3d.zoom", text="Zoom In").delta = 1 | 
					
						
							|  |  |  |         layout.operator("view3d.zoom", text="Zoom Out").delta = -1 | 
					
						
							| 
									
										
										
										
											2017-10-19 12:35:58 +11:00
										 |  |  |         layout.operator("view3d.zoom_border", text="Zoom Border...") | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         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") | 
					
						
							| 
									
										
										
										
											2013-12-03 03:14:09 -02:00
										 |  |  |         layout.operator("view3d.walk") | 
					
						
							| 
									
										
										
										
											2009-08-15 20:21:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_view_align(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Align View" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         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-09-21 15:18:38 +00:00
										 |  |  |         layout.operator("view3d.camera_to_view", text="Align Active Camera to View") | 
					
						
							| 
									
										
										
										
											2011-11-14 03:54:23 +00:00
										 |  |  |         layout.operator("view3d.camera_to_view_selected", text="Align Active Camera to Selected") | 
					
						
							| 
									
										
										
										
											2018-07-17 11:59:24 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("view3d.view_all", text="Center Cursor and View All").center = True | 
					
						
							| 
									
										
										
										
											2009-11-23 00:27:30 +00:00
										 |  |  |         layout.operator("view3d.view_center_cursor") | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-05 16:38:23 +00:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("view3d.view_lock_to_active") | 
					
						
							|  |  |  |         layout.operator("view3d.view_lock_clear") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_view_align_selected(Menu): | 
					
						
							| 
									
										
										
										
											2014-06-17 15:27:59 +10:00
										 |  |  |     bl_label = "Align View to Active" | 
					
						
							| 
									
										
										
										
											2009-11-06 21:10:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-11-06 21:10:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-05 16:54:30 +02:00
										 |  |  |         props = layout.operator("view3d.view_axis", text="Top") | 
					
						
							| 
									
										
										
										
											2009-11-06 21:10:45 +00:00
										 |  |  |         props.align_active = True | 
					
						
							|  |  |  |         props.type = 'TOP' | 
					
						
							| 
									
										
										
										
											2012-07-29 12:07:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-05 16:54:30 +02:00
										 |  |  |         props = layout.operator("view3d.view_axis", text="Bottom") | 
					
						
							| 
									
										
										
										
											2009-11-06 21:10:45 +00:00
										 |  |  |         props.align_active = True | 
					
						
							|  |  |  |         props.type = 'BOTTOM' | 
					
						
							| 
									
										
										
										
											2012-07-29 12:07:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-17 11:59:24 +02:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-05 16:54:30 +02:00
										 |  |  |         props = layout.operator("view3d.view_axis", text="Front") | 
					
						
							| 
									
										
										
										
											2009-11-06 21:10:45 +00:00
										 |  |  |         props.align_active = True | 
					
						
							|  |  |  |         props.type = 'FRONT' | 
					
						
							| 
									
										
										
										
											2012-07-29 12:07:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-05 16:54:30 +02:00
										 |  |  |         props = layout.operator("view3d.view_axis", text="Back") | 
					
						
							| 
									
										
										
										
											2009-11-06 21:10:45 +00:00
										 |  |  |         props.align_active = True | 
					
						
							|  |  |  |         props.type = 'BACK' | 
					
						
							| 
									
										
										
										
											2012-07-29 12:07:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-17 11:59:24 +02:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-05 16:54:30 +02:00
										 |  |  |         props = layout.operator("view3d.view_axis", text="Right") | 
					
						
							| 
									
										
										
										
											2009-11-06 21:10:45 +00:00
										 |  |  |         props.align_active = True | 
					
						
							|  |  |  |         props.type = 'RIGHT' | 
					
						
							| 
									
										
										
										
											2012-07-29 12:07:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-05 16:54:30 +02:00
										 |  |  |         props = layout.operator("view3d.view_axis", text="Left") | 
					
						
							| 
									
										
										
										
											2009-11-06 21:10:45 +00:00
										 |  |  |         props.align_active = True | 
					
						
							|  |  |  |         props.type = 'LEFT' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-06 16:43:37 +01:00
										 |  |  | class VIEW3D_MT_view_regions(Menu): | 
					
						
							|  |  |  |     bl_label = "View Regions" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2019-03-06 16:43:37 +01:00
										 |  |  |         layout.operator("view3d.clip_border", text="Clipping Region...") | 
					
						
							|  |  |  |         layout.operator("view3d.render_border", text="Render Region...") | 
					
						
							| 
									
										
										
										
											2009-08-23 22:13:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-19 12:35:58 +11:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("view3d.clear_render_border") | 
					
						
							| 
									
										
										
										
											2009-08-23 22:13:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-14 09:41:11 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-16 03:40:00 +00:00
										 |  |  | # ********** Select menus, suffix from context.mode ********** | 
					
						
							| 
									
										
										
										
											2009-08-15 19:40:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-14 09:41:11 +11:00
										 |  |  | class VIEW3D_MT_select_object_more_less(Menu): | 
					
						
							|  |  |  |     bl_label = "Select More/Less" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2016-01-14 09:41:11 +11:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("object.select_more", text="More") | 
					
						
							|  |  |  |         layout.operator("object.select_less", text="Less") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         props = layout.operator("object.select_hierarchy", text="Parent") | 
					
						
							|  |  |  |         props.extend = False | 
					
						
							|  |  |  |         props.direction = 'PARENT' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         props = layout.operator("object.select_hierarchy", text="Child") | 
					
						
							|  |  |  |         props.extend = False | 
					
						
							|  |  |  |         props.direction = 'CHILD' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         props = layout.operator("object.select_hierarchy", text="Extend Parent") | 
					
						
							|  |  |  |         props.extend = True | 
					
						
							|  |  |  |         props.direction = 'PARENT' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         props = layout.operator("object.select_hierarchy", text="Extend Child") | 
					
						
							|  |  |  |         props.extend = True | 
					
						
							|  |  |  |         props.direction = 'CHILD' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_select_object(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Select" | 
					
						
							| 
									
										
										
										
											2009-08-15 19:40:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2009-08-15 19:40:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 15:44:56 +02:00
										 |  |  |         layout.operator("object.select_all", text="All").action = 'SELECT' | 
					
						
							|  |  |  |         layout.operator("object.select_all", text="None").action = 'DESELECT' | 
					
						
							|  |  |  |         layout.operator("object.select_all", text="Invert").action = 'INVERT' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |         layout.operator("view3d.select_box") | 
					
						
							| 
									
										
										
										
											2009-11-23 00:27:30 +00:00
										 |  |  |         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-09-21 15:18:38 +00:00
										 |  |  |         layout.operator_menu_enum("object.select_by_type", "type", text="Select All by Type...") | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator("object.select_camera", text="Select Active Camera") | 
					
						
							|  |  |  |         layout.operator("object.select_mirror", text="Mirror Selection") | 
					
						
							|  |  |  |         layout.operator("object.select_random", text="Select Random") | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-14 09:41:11 +11:00
										 |  |  |         layout.menu("VIEW3D_MT_select_object_more_less") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator_menu_enum("object.select_grouped", "type", text="Select Grouped") | 
					
						
							|  |  |  |         layout.operator_menu_enum("object.select_linked", "type", text="Select Linked") | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-14 09:41:11 +11:00
										 |  |  | class VIEW3D_MT_select_pose_more_less(Menu): | 
					
						
							|  |  |  |     bl_label = "Select More/Less" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-14 09:41:11 +11:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-29 17:34:05 +01:00
										 |  |  |         props = layout.operator("pose.select_hierarchy", text="Parent") | 
					
						
							|  |  |  |         props.extend = False | 
					
						
							|  |  |  |         props.direction = 'PARENT' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         props = layout.operator("pose.select_hierarchy", text="Child") | 
					
						
							|  |  |  |         props.extend = False | 
					
						
							|  |  |  |         props.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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18: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' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18: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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-14 09:41:11 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_MT_select_pose(Menu): | 
					
						
							|  |  |  |     bl_label = "Select" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2016-01-14 09:41:11 +11:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 15:44:56 +02:00
										 |  |  |         layout.operator("pose.select_all", text="All").action = 'SELECT' | 
					
						
							|  |  |  |         layout.operator("pose.select_all", text="None").action = 'DESELECT' | 
					
						
							|  |  |  |         layout.operator("pose.select_all", text="Invert").action = 'INVERT' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |         layout.operator("view3d.select_box") | 
					
						
							| 
									
										
										
										
											2016-01-14 09:41:11 +11:00
										 |  |  |         layout.operator("view3d.select_circle") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("pose.select_mirror", text="Flip Active") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-14 09:41:11 +11:00
										 |  |  |         layout.operator("pose.select_constraint_target", text="Constraint Target") | 
					
						
							|  |  |  |         layout.operator("pose.select_linked", text="Linked") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_select_pose_more_less") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-25 10:16:36 +00:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         layout.operator_menu_enum("pose.select_grouped", "type", text="Grouped") | 
					
						
							|  |  |  |         layout.operator("object.select_pattern", text="Select Pattern...") | 
					
						
							| 
									
										
										
										
											2009-08-15 19:40:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-28 17:30:58 +01:00
										 |  |  | class VIEW3D_MT_select_particle(Menu): | 
					
						
							|  |  |  |     bl_label = "Select" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2016-12-28 17:30:58 +01:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 15:44:56 +02:00
										 |  |  |         layout.operator("particle.select_all", text="All").action = 'SELECT' | 
					
						
							|  |  |  |         layout.operator("particle.select_all", text="None").action = 'DESELECT' | 
					
						
							|  |  |  |         layout.operator("particle.select_all", text="Invert").action = 'INVERT' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |         layout.operator("view3d.select_box") | 
					
						
							| 
									
										
										
										
											2016-11-15 15:55:54 +01:00
										 |  |  |         layout.operator("view3d.select_circle") | 
					
						
							| 
									
										
										
										
											2016-12-28 17:30:58 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("particle.select_linked") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("particle.select_more") | 
					
						
							|  |  |  |         layout.operator("particle.select_less") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("particle.select_random") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("particle.select_roots", text="Roots") | 
					
						
							|  |  |  |         layout.operator("particle.select_tips", text="Tips") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-09-27 18:30:48 +10:00
										 |  |  | class VIEW3D_MT_edit_mesh_select_similar(Menu): | 
					
						
							|  |  |  |     bl_label = "Select Similar" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2014-09-27 18:30:48 +10:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator_enum("mesh.select_similar", "type") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.select_similar_region", text="Face Regions") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-08 04:07:20 +11:00
										 |  |  | class VIEW3D_MT_edit_mesh_select_by_trait(Menu): | 
					
						
							|  |  |  |     bl_label = "Select All by Trait" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2018-06-13 14:11:59 +02:00
										 |  |  |         tool_settings = context.tool_settings | 
					
						
							|  |  |  |         if tool_settings.mesh_select_mode[2] is False: | 
					
						
							| 
									
										
										
										
											2016-01-08 04:07:20 +11:00
										 |  |  |             layout.operator("mesh.select_non_manifold", text="Non Manifold") | 
					
						
							|  |  |  |         layout.operator("mesh.select_loose", text="Loose Geometry") | 
					
						
							|  |  |  |         layout.operator("mesh.select_interior_faces", text="Interior Faces") | 
					
						
							| 
									
										
										
										
											2017-10-19 14:45:56 +11:00
										 |  |  |         layout.operator("mesh.select_face_by_sides", text="Faces by Sides") | 
					
						
							| 
									
										
										
										
											2016-01-08 04:07:20 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.select_ungrouped", text="Ungrouped Verts") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-08 04:42:17 +11:00
										 |  |  | class VIEW3D_MT_edit_mesh_select_more_less(Menu): | 
					
						
							|  |  |  |     bl_label = "Select More/Less" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2016-01-08 04:42:17 +11:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.select_more", text="More") | 
					
						
							|  |  |  |         layout.operator("mesh.select_less", text="Less") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.select_next_item", text="Next Active") | 
					
						
							|  |  |  |         layout.operator("mesh.select_prev_item", text="Previous Active") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-19 14:45:56 +11:00
										 |  |  | class VIEW3D_MT_edit_mesh_select_linked(Menu): | 
					
						
							|  |  |  |     bl_label = "Select Linked" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2017-10-19 14:45:56 +11:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.select_linked", text="Linked") | 
					
						
							|  |  |  |         layout.operator("mesh.shortest_path_select", text="Shortest Path") | 
					
						
							|  |  |  |         layout.operator("mesh.faces_select_linked_flat", text="Linked Flat Faces") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_MT_edit_mesh_select_loops(Menu): | 
					
						
							|  |  |  |     bl_label = "Select Loops" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2017-10-19 14:45:56 +11:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.loop_multi_select", text="Edge Loops").ring = False | 
					
						
							|  |  |  |         layout.operator("mesh.loop_multi_select", text="Edge Rings").ring = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.loop_to_region") | 
					
						
							|  |  |  |         layout.operator("mesh.region_to_loop") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_select_edit_mesh(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Select" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2009-08-15 19:40:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 15:44:56 +02:00
										 |  |  |         # primitive | 
					
						
							|  |  |  |         layout.operator("mesh.select_all", text="All").action = 'SELECT' | 
					
						
							|  |  |  |         layout.operator("mesh.select_all", text="None").action = 'DESELECT' | 
					
						
							|  |  |  |         layout.operator("mesh.select_all", text="Invert").action = 'INVERT' | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |         layout.operator("view3d.select_box") | 
					
						
							| 
									
										
										
										
											2018-07-03 15:44:56 +02:00
										 |  |  |         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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-01 05:59:58 +00:00
										 |  |  |         # numeric | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator("mesh.select_random", text="Select Random") | 
					
						
							| 
									
										
										
										
											2012-11-01 05:07:15 +00:00
										 |  |  |         layout.operator("mesh.select_nth") | 
					
						
							| 
									
										
										
										
											2013-05-01 05:59:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # geometric | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator("mesh.edges_select_sharp", text="Select Sharp Edges") | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-08 04:07:20 +11:00
										 |  |  |         # other ... | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_edit_mesh_select_similar") | 
					
						
							| 
									
										
										
										
											2013-05-01 05:59:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-08 04:07:20 +11:00
										 |  |  |         layout.menu("VIEW3D_MT_edit_mesh_select_by_trait") | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-08 04:42:17 +11:00
										 |  |  |         layout.menu("VIEW3D_MT_edit_mesh_select_more_less") | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-19 14:45:56 +11:00
										 |  |  |         layout.menu("VIEW3D_MT_edit_mesh_select_loops") | 
					
						
							| 
									
										
										
										
											2009-08-15 19:40:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-19 14:45:56 +11:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_edit_mesh_select_linked") | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-19 14:45:56 +11:00
										 |  |  |         layout.operator("mesh.select_axis", text="Side of Active") | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator("mesh.select_mirror", text="Mirror Selection") | 
					
						
							| 
									
										
										
										
											2009-08-15 19:40:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_select_edit_curve(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Select" | 
					
						
							| 
									
										
										
										
											2009-08-15 19:40:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2009-08-15 19:40:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 15:44:56 +02:00
										 |  |  |         layout.operator("curve.select_all", text="All").action = 'SELECT' | 
					
						
							|  |  |  |         layout.operator("curve.select_all", text="None").action = 'DESELECT' | 
					
						
							|  |  |  |         layout.operator("curve.select_all", text="Invert").action = 'INVERT' | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |         layout.operator("view3d.select_box") | 
					
						
							| 
									
										
										
										
											2018-07-03 15:44:56 +02:00
										 |  |  |         layout.operator("view3d.select_circle") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-23 00:27:30 +00:00
										 |  |  |         layout.operator("curve.select_random") | 
					
						
							| 
									
										
										
										
											2013-02-26 16:39:41 +00:00
										 |  |  |         layout.operator("curve.select_nth") | 
					
						
							| 
									
										
										
										
											2012-05-15 15:34:49 +00:00
										 |  |  |         layout.operator("curve.select_linked", text="Select Linked") | 
					
						
							| 
									
										
										
										
											2015-07-09 02:58:40 +10:00
										 |  |  |         layout.operator("curve.select_similar", text="Select Similar") | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_select_edit_surface(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Select" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 15:44:56 +02:00
										 |  |  |         layout.operator("curve.select_all", text="All").action = 'SELECT' | 
					
						
							|  |  |  |         layout.operator("curve.select_all", text="None").action = 'DESELECT' | 
					
						
							|  |  |  |         layout.operator("curve.select_all", text="Invert").action = 'INVERT' | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |         layout.operator("view3d.select_box") | 
					
						
							| 
									
										
										
										
											2018-07-03 15:44:56 +02:00
										 |  |  |         layout.operator("view3d.select_circle") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-23 00:27:30 +00:00
										 |  |  |         layout.operator("curve.select_random") | 
					
						
							| 
									
										
										
										
											2013-02-26 16:39:41 +00:00
										 |  |  |         layout.operator("curve.select_nth") | 
					
						
							| 
									
										
										
										
											2012-05-15 15:34:49 +00:00
										 |  |  |         layout.operator("curve.select_linked", text="Select Linked") | 
					
						
							| 
									
										
										
										
											2015-07-09 02:58:40 +10:00
										 |  |  |         layout.operator("curve.select_similar", text="Select 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("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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-20 10:51:37 +01:00
										 |  |  | class VIEW3D_MT_edit_text_context_menu(Menu): | 
					
						
							|  |  |  |     bl_label = "Text Context Menu" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2019-03-20 10:51:37 +01:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator_context = 'INVOKE_DEFAULT' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("font.text_cut", text="Cut") | 
					
						
							|  |  |  |         layout.operator("font.text_copy", text="Copy", icon='COPYDOWN') | 
					
						
							|  |  |  |         layout.operator("font.text_paste", text="Paste", icon='PASTEDOWN') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("font.select_all") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_edit_font") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-29 23:43:19 +11:00
										 |  |  | class VIEW3D_MT_select_edit_text(Menu): | 
					
						
							| 
									
										
										
										
											2018-09-19 17:48:11 +02:00
										 |  |  |     # intentional name mismatch | 
					
						
							| 
									
										
										
										
											2013-12-29 23:43:19 +11:00
										 |  |  |     # select menu for 3d-text doesn't make sense | 
					
						
							|  |  |  |     bl_label = "Edit" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2013-12-29 23:43:19 +11:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  |         layout.operator("font.text_cut", text="Cut") | 
					
						
							| 
									
										
										
										
											2018-11-23 13:55:33 +11:00
										 |  |  |         layout.operator("font.text_copy", text="Copy", icon='COPYDOWN') | 
					
						
							|  |  |  |         layout.operator("font.text_paste", text="Paste", icon='PASTEDOWN') | 
					
						
							| 
									
										
										
										
											2013-12-29 23:43:19 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-06 00:36:09 +11:00
										 |  |  |         layout.operator("font.text_paste_from_file") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-29 23:43:19 +11:00
										 |  |  |         layout.operator("font.select_all") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-20 10:51:37 +01:00
										 |  |  |         layout.menu("VIEW3D_MT_edit_font") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-29 23:43:19 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_select_edit_metaball(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Select" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 15:44:56 +02:00
										 |  |  |         layout.operator("mball.select_all", text="All").action = 'SELECT' | 
					
						
							|  |  |  |         layout.operator("mball.select_all", text="None").action = 'DESELECT' | 
					
						
							|  |  |  |         layout.operator("mball.select_all", text="Invert").action = 'INVERT' | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |         layout.operator("view3d.select_box") | 
					
						
							| 
									
										
										
										
											2018-07-03 15:44:56 +02:00
										 |  |  |         layout.operator("view3d.select_circle") | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-25 06:22:15 +00:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator_menu_enum("mball.select_similar", "type", text="Similar") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-20 10:51:37 +01:00
										 |  |  | class VIEW3D_MT_edit_lattice_context_menu(Menu): | 
					
						
							|  |  |  |     bl_label = "Lattice Context Menu" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2019-03-20 10:51:37 +01:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_mirror") | 
					
						
							|  |  |  |         layout.operator_menu_enum("lattice.flip", "axis") | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_snap") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("lattice.make_regular") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_select_edit_lattice(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Select" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2009-08-15 19:40:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 15:44:56 +02:00
										 |  |  |         layout.operator("lattice.select_all", text="All").action = 'SELECT' | 
					
						
							|  |  |  |         layout.operator("lattice.select_all", text="None").action = 'DESELECT' | 
					
						
							|  |  |  |         layout.operator("lattice.select_all", text="Invert").action = 'INVERT' | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |         layout.operator("view3d.select_box") | 
					
						
							| 
									
										
										
										
											2018-07-03 15:44:56 +02:00
										 |  |  |         layout.operator("view3d.select_circle") | 
					
						
							| 
									
										
										
										
											2009-08-15 19:40:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-16 16:11:50 +00:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  |         layout.operator("lattice.select_mirror") | 
					
						
							|  |  |  |         layout.operator("lattice.select_random") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-23 20:40:19 -03:00
										 |  |  |         layout.operator("lattice.select_more") | 
					
						
							|  |  |  |         layout.operator("lattice.select_less") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-16 16:11:50 +00:00
										 |  |  |         layout.operator("lattice.select_ungrouped", text="Ungrouped Verts") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_select_edit_armature(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Select" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 15:44:56 +02:00
										 |  |  |         layout.operator("armature.select_all", text="All").action = 'SELECT' | 
					
						
							|  |  |  |         layout.operator("armature.select_all", text="None").action = 'DESELECT' | 
					
						
							|  |  |  |         layout.operator("armature.select_all", text="Invert").action = 'INVERT' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |         layout.operator("view3d.select_box") | 
					
						
							| 
									
										
										
										
											2013-04-11 13:29:01 +00:00
										 |  |  |         layout.operator("view3d.select_circle") | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-05 21:47:35 +00:00
										 |  |  |         layout.operator("armature.select_mirror", text="Mirror").extend = False | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-19 10:51:54 +00:00
										 |  |  |         layout.operator("armature.select_more", text="More") | 
					
						
							|  |  |  |         layout.operator("armature.select_less", text="Less") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-29 17:34:05 +01:00
										 |  |  |         props = layout.operator("armature.select_hierarchy", text="Parent") | 
					
						
							|  |  |  |         props.extend = False | 
					
						
							|  |  |  |         props.direction = 'PARENT' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         props = layout.operator("armature.select_hierarchy", text="Child") | 
					
						
							|  |  |  |         props.extend = False | 
					
						
							|  |  |  |         props.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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18: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' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18: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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-23 18:50:56 +00:00
										 |  |  |         layout.operator_menu_enum("armature.select_similar", "type", text="Similar") | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-13 21:03:13 +13:00
										 |  |  | class VIEW3D_MT_select_gpencil(Menu): | 
					
						
							|  |  |  |     bl_label = "Select" | 
					
						
							| 
									
										
										
										
											2016-02-01 00:47:10 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2015-12-13 21:03:13 +13:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 15:44:56 +02:00
										 |  |  |         layout.operator("gpencil.select_all", text="All").action = 'SELECT' | 
					
						
							|  |  |  |         layout.operator("gpencil.select_all", text="None").action = 'DESELECT' | 
					
						
							|  |  |  |         layout.operator("gpencil.select_all", text="Invert").action = 'INVERT' | 
					
						
							| 
									
										
										
										
											2015-12-13 21:03:13 +13:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |         layout.operator("gpencil.select_box") | 
					
						
							| 
									
										
										
										
											2018-07-03 15:44:56 +02:00
										 |  |  |         layout.operator("gpencil.select_circle") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-13 21:03:13 +13:00
										 |  |  |         layout.operator("gpencil.select_linked", text="Linked") | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         layout.operator("gpencil.select_alternate") | 
					
						
							| 
									
										
										
										
											2016-08-26 16:38:31 +12:00
										 |  |  |         layout.operator_menu_enum("gpencil.select_grouped", "type", text="Grouped") | 
					
						
							| 
									
										
										
										
											2015-12-13 21:03:13 +13:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-09 17:23:15 +12:00
										 |  |  |         layout.operator("gpencil.select_first") | 
					
						
							|  |  |  |         layout.operator("gpencil.select_last") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-13 21:03:13 +13:00
										 |  |  |         layout.operator("gpencil.select_more") | 
					
						
							|  |  |  |         layout.operator("gpencil.select_less") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-26 15:42:33 +00:00
										 |  |  | class VIEW3D_MT_select_paint_mask(Menu): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |     bl_label = "Select" | 
					
						
							| 
									
										
										
										
											2009-08-15 19:40:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2013-02-26 15:42:33 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 15:44:56 +02:00
										 |  |  |         layout.operator("paint.face_select_all", text="All").action = 'SELECT' | 
					
						
							|  |  |  |         layout.operator("paint.face_select_all", text="None").action = 'DESELECT' | 
					
						
							|  |  |  |         layout.operator("paint.face_select_all", text="Invert").action = 'INVERT' | 
					
						
							| 
									
										
										
										
											2013-02-26 15:42:33 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |         layout.operator("view3d.select_box") | 
					
						
							| 
									
										
										
										
											2018-07-03 15:44:56 +02:00
										 |  |  |         layout.operator("view3d.select_circle") | 
					
						
							| 
									
										
										
										
											2013-02-26 15:42:33 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("paint.face_select_linked", text="Linked") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_MT_select_paint_mask_vertex(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Select" | 
					
						
							| 
									
										
										
										
											2009-08-15 19:40:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2013-02-26 15:42:33 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 15:44:56 +02:00
										 |  |  |         layout.operator("paint.vert_select_all", text="All").action = 'SELECT' | 
					
						
							|  |  |  |         layout.operator("paint.vert_select_all", text="None").action = 'DESELECT' | 
					
						
							|  |  |  |         layout.operator("paint.vert_select_all", text="Invert").action = 'INVERT' | 
					
						
							| 
									
										
										
										
											2013-02-26 15:42:33 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |         layout.operator("view3d.select_box") | 
					
						
							| 
									
										
										
										
											2018-07-03 15:44:56 +02:00
										 |  |  |         layout.operator("view3d.select_circle") | 
					
						
							| 
									
										
										
										
											2009-11-28 23:37:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-16 16:11:50 +00:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("paint.vert_select_ungrouped", text="Ungrouped Verts") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 11:56:26 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_MT_angle_control(Menu): | 
					
						
							|  |  |  |     bl_label = "Angle Control" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def poll(cls, context): | 
					
						
							|  |  |  |         settings = UnifiedPaintPanel.paint_settings(context) | 
					
						
							|  |  |  |         if not settings: | 
					
						
							|  |  |  |             return False | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         brush = settings.brush | 
					
						
							|  |  |  |         tex_slot = brush.texture_slot | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return tex_slot.has_texture_angle and tex_slot.has_texture_angle_source | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         settings = UnifiedPaintPanel.paint_settings(context) | 
					
						
							|  |  |  |         brush = settings.brush | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-22 16:26:00 +10:00
										 |  |  |         sculpt = (context.sculpt_object is not None) | 
					
						
							| 
									
										
										
										
											2015-02-24 11:56:26 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         tex_slot = brush.texture_slot | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.prop(tex_slot, "use_rake", text="Rake") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if brush.brush_capabilities.has_random_texture_angle and tex_slot.has_random_texture_angle: | 
					
						
							|  |  |  |             if sculpt: | 
					
						
							|  |  |  |                 if brush.sculpt_capabilities.has_random_texture_angle: | 
					
						
							|  |  |  |                     layout.prop(tex_slot, "use_random", text="Random") | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 layout.prop(tex_slot, "use_random", text="Random") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  | class VIEW3D_MT_mesh_add(Menu): | 
					
						
							|  |  |  |     bl_idname = "VIEW3D_MT_mesh_add" | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  |     bl_label = "Mesh" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							| 
									
										
										
										
											2014-03-20 01:32:44 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-24 16:13:03 +02:00
										 |  |  |         layout.operator("mesh.primitive_plane_add", text="Plane", icon='MESH_PLANE') | 
					
						
							|  |  |  |         layout.operator("mesh.primitive_cube_add", text="Cube", icon='MESH_CUBE') | 
					
						
							|  |  |  |         layout.operator("mesh.primitive_circle_add", text="Circle", icon='MESH_CIRCLE') | 
					
						
							|  |  |  |         layout.operator("mesh.primitive_uv_sphere_add", text="UV Sphere", icon='MESH_UVSPHERE') | 
					
						
							|  |  |  |         layout.operator("mesh.primitive_ico_sphere_add", text="Ico Sphere", icon='MESH_ICOSPHERE') | 
					
						
							|  |  |  |         layout.operator("mesh.primitive_cylinder_add", text="Cylinder", icon='MESH_CYLINDER') | 
					
						
							|  |  |  |         layout.operator("mesh.primitive_cone_add", text="Cone", icon='MESH_CONE') | 
					
						
							|  |  |  |         layout.operator("mesh.primitive_torus_add", text="Torus", icon='MESH_TORUS') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.primitive_grid_add", text="Grid", icon='MESH_GRID') | 
					
						
							|  |  |  |         layout.operator("mesh.primitive_monkey_add", text="Monkey", icon='MESH_MONKEY') | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  | class VIEW3D_MT_curve_add(Menu): | 
					
						
							|  |  |  |     bl_idname = "VIEW3D_MT_curve_add" | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  |     bl_label = "Curve" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							| 
									
										
										
										
											2014-03-20 01:32:44 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-24 16:13:03 +02:00
										 |  |  |         layout.operator("curve.primitive_bezier_curve_add", text="Bezier", icon='CURVE_BEZCURVE') | 
					
						
							|  |  |  |         layout.operator("curve.primitive_bezier_circle_add", text="Circle", icon='CURVE_BEZCIRCLE') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("curve.primitive_nurbs_curve_add", text="Nurbs Curve", icon='CURVE_NCURVE') | 
					
						
							|  |  |  |         layout.operator("curve.primitive_nurbs_circle_add", text="Nurbs Circle", icon='CURVE_NCIRCLE') | 
					
						
							|  |  |  |         layout.operator("curve.primitive_nurbs_path_add", text="Path", icon='CURVE_PATH') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  | class VIEW3D_MT_surface_add(Menu): | 
					
						
							|  |  |  |     bl_idname = "VIEW3D_MT_surface_add" | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  |     bl_label = "Surface" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							| 
									
										
										
										
											2014-03-20 01:32:44 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-23 17:23:38 -03:00
										 |  |  |         layout.operator("surface.primitive_nurbs_surface_curve_add", text="Nurbs Curve", icon='SURFACE_NCURVE') | 
					
						
							|  |  |  |         layout.operator("surface.primitive_nurbs_surface_circle_add", text="Nurbs Circle", icon='SURFACE_NCIRCLE') | 
					
						
							|  |  |  |         layout.operator("surface.primitive_nurbs_surface_surface_add", text="Nurbs Surface", icon='SURFACE_NSURFACE') | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator("surface.primitive_nurbs_surface_cylinder_add", | 
					
						
							|  |  |  |                         text="Nurbs Cylinder", icon='SURFACE_NCYLINDER') | 
					
						
							| 
									
										
										
										
											2018-05-23 17:23:38 -03:00
										 |  |  |         layout.operator("surface.primitive_nurbs_surface_sphere_add", text="Nurbs Sphere", icon='SURFACE_NSPHERE') | 
					
						
							|  |  |  |         layout.operator("surface.primitive_nurbs_surface_torus_add", text="Nurbs Torus", icon='SURFACE_NTORUS') | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-20 10:51:37 +01:00
										 |  |  | class VIEW3D_MT_edit_metaball_context_menu(Menu): | 
					
						
							|  |  |  |     bl_label = "Metaball Context Menu" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2019-03-20 10:51:37 +01:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Add | 
					
						
							|  |  |  |         layout.operator("mball.duplicate_move") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Modify | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_mirror") | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_snap") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Remove | 
					
						
							|  |  |  |         layout.operator_context = 'EXEC_DEFAULT' | 
					
						
							|  |  |  |         layout.operator("mball.delete_metaelems", text="Delete") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  | class VIEW3D_MT_metaball_add(Menu): | 
					
						
							|  |  |  |     bl_idname = "VIEW3D_MT_metaball_add" | 
					
						
							| 
									
										
										
										
											2013-11-19 17:16:15 +11:00
										 |  |  |     bl_label = "Metaball" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2013-11-19 17:16:15 +11:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							|  |  |  |         layout.operator_enum("object.metaball_add", "type") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  | class TOPBAR_MT_edit_curve_add(Menu): | 
					
						
							|  |  |  |     bl_idname = "TOPBAR_MT_edit_curve_add" | 
					
						
							| 
									
										
										
										
											2014-01-03 01:34:35 +06:00
										 |  |  |     bl_label = "Add" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         is_surf = context.active_object.type == 'SURFACE' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         layout.operator_context = 'EXEC_REGION_WIN' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if is_surf: | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  |             VIEW3D_MT_surface_add.draw(self, context) | 
					
						
							| 
									
										
										
										
											2014-01-03 01:34:35 +06:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  |             VIEW3D_MT_curve_add.draw(self, context) | 
					
						
							| 
									
										
										
										
											2014-01-03 01:34:35 +06:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  | class TOPBAR_MT_edit_armature_add(Menu): | 
					
						
							|  |  |  |     bl_idname = "TOPBAR_MT_edit_armature_add" | 
					
						
							| 
									
										
										
										
											2013-12-14 13:47:18 +01:00
										 |  |  |     bl_label = "Armature" | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-14 13:47:18 +01:00
										 |  |  |         layout.operator_context = 'EXEC_REGION_WIN' | 
					
						
							|  |  |  |         layout.operator("armature.bone_primitive_add", text="Single Bone", icon='BONE_DATA') | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  | class VIEW3D_MT_armature_add(Menu): | 
					
						
							|  |  |  |     bl_idname = "VIEW3D_MT_armature_add" | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  |     bl_label = "Armature" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator_context = 'EXEC_REGION_WIN' | 
					
						
							|  |  |  |         layout.operator("object.armature_add", text="Single Bone", icon='BONE_DATA') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  | class VIEW3D_MT_light_add(Menu): | 
					
						
							|  |  |  |     bl_idname = "VIEW3D_MT_light_add" | 
					
						
							| 
									
										
										
										
											2018-06-27 14:41:53 +02:00
										 |  |  |     bl_label = "Light" | 
					
						
							| 
									
										
										
										
											2015-04-12 11:38:18 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2015-04-12 11:38:18 +01:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							| 
									
										
										
										
											2018-06-27 14:41:53 +02:00
										 |  |  |         layout.operator_enum("object.light_add", "type") | 
					
						
							| 
									
										
										
										
											2015-04-12 11:38:18 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  | class VIEW3D_MT_lightprobe_add(Menu): | 
					
						
							|  |  |  |     bl_idname = "VIEW3D_MT_lightprobe_add" | 
					
						
							| 
									
										
										
										
											2017-06-12 20:59:54 +10:00
										 |  |  |     bl_label = "Light Probe" | 
					
						
							| 
									
										
										
										
											2017-06-07 18:32:27 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2017-06-07 18:32:27 +02:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							| 
									
										
										
										
											2017-06-12 20:59:54 +10:00
										 |  |  |         layout.operator_enum("object.lightprobe_add", "type") | 
					
						
							| 
									
										
										
										
											2017-06-07 18:32:27 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  | class VIEW3D_MT_camera_add(Menu): | 
					
						
							|  |  |  |     bl_idname = "VIEW3D_MT_camera_add" | 
					
						
							| 
									
										
										
										
											2017-03-23 20:42:44 +11:00
										 |  |  |     bl_label = "Camera" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2017-03-23 20:42:44 +11:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  |         layout.operator_context = 'EXEC_REGION_WIN' | 
					
						
							|  |  |  |         layout.operator("object.camera_add", text="Camera", icon='OUTLINER_OB_CAMERA') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  | class VIEW3D_MT_add(Menu): | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  |     bl_label = "Add" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-03 16:49:08 +02:00
										 |  |  |         # note, don't use 'EXEC_SCREEN' or operators won't get the 'v3d' context. | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # Note: was EXEC_AREA, but this context does not have the 'rv3d', which prevents | 
					
						
							|  |  |  |         #       "align_view" to work on first call (see [#32719]). | 
					
						
							|  |  |  |         layout.operator_context = 'EXEC_REGION_WIN' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  |         # layout.operator_menu_enum("object.mesh_add", "type", text="Mesh", icon='OUTLINER_OB_MESH') | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  |         layout.menu("VIEW3D_MT_mesh_add", icon='OUTLINER_OB_MESH') | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  |         # layout.operator_menu_enum("object.curve_add", "type", text="Curve", icon='OUTLINER_OB_CURVE') | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  |         layout.menu("VIEW3D_MT_curve_add", icon='OUTLINER_OB_CURVE') | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  |         # layout.operator_menu_enum("object.surface_add", "type", text="Surface", icon='OUTLINER_OB_SURFACE') | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  |         layout.menu("VIEW3D_MT_surface_add", icon='OUTLINER_OB_SURFACE') | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_metaball_add", text="Metaball", icon='OUTLINER_OB_META') | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  |         layout.operator("object.text_add", text="Text", icon='OUTLINER_OB_FONT') | 
					
						
							| 
									
										
										
										
											2018-08-08 20:22:40 +02:00
										 |  |  |         layout.operator_menu_enum("object.gpencil_add", "type", text="Grease Pencil", icon='OUTLINER_OB_GREASEPENCIL') | 
					
						
							| 
									
										
										
										
											2019-02-28 18:53:49 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-28 18:53:49 +01:00
										 |  |  |         if VIEW3D_MT_armature_add.is_extended(): | 
					
						
							|  |  |  |             layout.menu("VIEW3D_MT_armature_add", icon='OUTLINER_OB_ARMATURE') | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             layout.operator("object.armature_add", text="Armature", icon='OUTLINER_OB_ARMATURE') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  |         layout.operator("object.add", text="Lattice", icon='OUTLINER_OB_LATTICE').type = 'LATTICE' | 
					
						
							| 
									
										
										
										
											2019-02-28 18:53:49 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  |         layout.operator_menu_enum("object.empty_add", "type", text="Empty", icon='OUTLINER_OB_EMPTY') | 
					
						
							| 
									
										
										
										
											2018-11-20 12:44:42 +01:00
										 |  |  |         layout.menu("VIEW3D_MT_image_add", text="Image", icon='OUTLINER_OB_IMAGE') | 
					
						
							| 
									
										
										
										
											2018-09-27 16:21:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-28 18:53:49 +01:00
										 |  |  |         layout.menu("VIEW3D_MT_light_add", icon='OUTLINER_OB_LIGHT') | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_lightprobe_add", icon='OUTLINER_OB_LIGHTPROBE') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  |         if VIEW3D_MT_camera_add.is_extended(): | 
					
						
							|  |  |  |             layout.menu("VIEW3D_MT_camera_add", icon='OUTLINER_OB_CAMERA') | 
					
						
							| 
									
										
										
										
											2017-03-23 20:42:44 +11:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  |             VIEW3D_MT_camera_add.draw(self, context) | 
					
						
							| 
									
										
										
										
											2017-03-23 20:42:44 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-22 17:20:39 +02:00
										 |  |  |         layout.separator() | 
					
						
							| 
									
										
										
										
											2019-02-28 18:53:49 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("object.speaker_add", text="Speaker", icon='OUTLINER_OB_SPEAKER') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-10 16:41:58 +02:00
										 |  |  |         layout.operator_menu_enum("object.effector_add", "type", text="Force Field", icon='OUTLINER_OB_FORCE_FIELD') | 
					
						
							| 
									
										
										
										
											2019-02-28 18:53:49 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-01 15:07:32 +02:00
										 |  |  |         has_collections = bool(bpy.data.collections) | 
					
						
							|  |  |  |         col = layout.column() | 
					
						
							|  |  |  |         col.enabled = has_collections | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if not has_collections or len(bpy.data.collections) > 10: | 
					
						
							|  |  |  |             col.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							|  |  |  |             col.operator( | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |                 "object.collection_instance_add", | 
					
						
							| 
									
										
										
										
											2018-06-01 15:07:32 +02:00
										 |  |  |                 text="Collection Instance..." if has_collections else "No Collections to Instance", | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |                 icon='OUTLINER_OB_GROUP_INSTANCE', | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2018-06-01 15:07:32 +02:00
										 |  |  |             col.operator_menu_enum( | 
					
						
							| 
									
										
											  
											
												Collections and groups unification
OVERVIEW
* In 2.7 terminology, all layers and groups are now collection datablocks.
* These collections are nestable, linkable, instanceable, overrideable, ..
  which opens up new ways to set up scenes and link + override data.
* Viewport/render visibility and selectability are now a part of the collection
  and shared across all view layers and linkable.
* View layers define which subset of the scene collection hierarchy is excluded
  for each. For many workflows one view layer can be used, these are more of an
  advanced feature now.
OUTLINER
* The outliner now has a "View Layer" display mode instead of "Collections",
  which can display the collections and/or objects in the view layer.
* In this display mode, collections can be excluded with the right click menu.
  These will then be greyed out and their objects will be excluded.
* To view collections not linked to any scene, the "Blender File" display mode
  can be used, with the new filtering option to just see Colleciton datablocks.
* The outliner right click menus for collections and objects were reorganized.
* Drag and drop still needs to be improved. Like before, dragging the icon or
  text gives different results, we'll unify this later.
LINKING AND OVERRIDES
* Collections can now be linked into the scene without creating an instance,
  with the link/append operator or from the collections view in the outliner.
* Collections can get static overrides with the right click menu in the outliner,
  but this is rather unreliable and not clearly communicated at the moment.
* We still need to improve the make override operator to turn collection instances
  into collections with overrides directly in the scene.
PERFORMANCE
* We tried to make performance not worse than before and improve it in some
  cases. The main thing that's still a bit slower is multiple scenes, we have to
  change the layer syncing to only updated affected scenes.
* Collections keep a list of their parent collections for faster incremental
  updates in syncing and caching.
* View layer bases are now in a object -> base hash to avoid quadratic time
  lookups internally and in API functions like visible_get().
VERSIONING
* Compatibility with 2.7 files should be improved due to the new visibility
  controls. Of course users may not want to set up their scenes differently
  now to avoid having separate layers and groups.
* Compatibility with 2.8 is mostly there, and was tested on Eevee demo and Hero
  files. There's a few things which are know to be not quite compatible, like
  nested layer collections inside groups.
* The versioning code for 2.8 files is quite complicated, and isolated behind
  #ifdef so it can be removed at the end of the release cycle.
KNOWN ISSUES
* The G-key group operators in the 3D viewport were left mostly as is, they
  need to be modified still to fit better.
* Same for the groups panel in the object properties. This needs to be updated
  still, or perhaps replaced by something better.
* Collections must all have a unique name. Less restrictive namespacing is to
  be done later, we'll have to see how important this is as all objects within
  the collections must also have a unique name anyway.
* Full scene copy and delete scene are exactly doing the right thing yet.
Differential Revision: https://developer.blender.org/D3383
https://code.blender.org/2018/05/collections-and-groups/
											
										 
											2018-04-30 15:57:22 +02:00
										 |  |  |                 "object.collection_instance_add", | 
					
						
							|  |  |  |                 "collection", | 
					
						
							|  |  |  |                 text="Collection Instance", | 
					
						
							| 
									
										
										
										
											2017-10-19 11:24:01 +11:00
										 |  |  |                 icon='OUTLINER_OB_GROUP_INSTANCE', | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2013-11-04 22:49:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-15 19:40:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-20 12:44:42 +01:00
										 |  |  | class VIEW3D_MT_image_add(Menu): | 
					
						
							|  |  |  |     bl_label = "Add Image" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2018-11-20 12:44:42 +01:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2018-11-22 15:31:19 +11:00
										 |  |  |         layout.operator("object.load_reference_image", text="Reference", icon='IMAGE_REFERENCE') | 
					
						
							|  |  |  |         layout.operator("object.load_background_image", text="Background", icon='IMAGE_BACKGROUND') | 
					
						
							| 
									
										
										
										
											2018-11-20 12:44:42 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-19 16:09:21 +11:00
										 |  |  | class VIEW3D_MT_object_relations(Menu): | 
					
						
							|  |  |  |     bl_label = "Relations" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2017-10-19 16:09:21 +11:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("object.proxy_make", text="Make Proxy...") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("object.make_dupli_face") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator_menu_enum("object.make_local", "type", text="Make Local...") | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_make_single_user") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("object.data_transfer") | 
					
						
							|  |  |  |         layout.operator("object.datalayout_transfer") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_object(Menu): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |     bl_context = "objectmode" | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Object" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-06 06:37:07 +00:00
										 |  |  |         layout.menu("VIEW3D_MT_transform_object") | 
					
						
							| 
									
										
										
										
											2019-03-11 23:33:13 +01:00
										 |  |  |         layout.operator_menu_enum("object.origin_set", text="Set Origin", property="type") | 
					
						
							| 
									
										
										
										
											2009-11-23 00:27:30 +00:00
										 |  |  |         layout.menu("VIEW3D_MT_mirror") | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_object_clear") | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_object_apply") | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02: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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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") | 
					
						
							| 
									
										
										
										
											2017-10-19 16:09:21 +11:00
										 |  |  |         layout.operator("object.join") | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-23 00:27:30 +00:00
										 |  |  |         layout.separator() | 
					
						
							| 
									
										
										
										
											2018-05-25 08:16:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-23 13:55:33 +11:00
										 |  |  |         layout.operator("view3d.copybuffer", text="Copy Objects", icon='COPYDOWN') | 
					
						
							|  |  |  |         layout.operator("view3d.pastebuffer", text="Paste Objects", icon='PASTEDOWN') | 
					
						
							| 
									
										
										
										
											2018-05-25 08:16:24 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.menu("VIEW3D_MT_object_parent") | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_object_collection") | 
					
						
							| 
									
										
										
										
											2017-10-19 16:09:21 +11:00
										 |  |  |         layout.menu("VIEW3D_MT_object_relations") | 
					
						
							| 
									
										
										
										
											2009-11-23 00:27:30 +00:00
										 |  |  |         layout.menu("VIEW3D_MT_object_constraints") | 
					
						
							| 
									
										
										
										
											2017-10-19 16:09:21 +11:00
										 |  |  |         layout.menu("VIEW3D_MT_object_track") | 
					
						
							| 
									
										
										
										
											2019-03-11 23:33:13 +01:00
										 |  |  |         layout.menu("VIEW3D_MT_make_links", text="Make Links") | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-17 12:33:47 +02:00
										 |  |  |         layout.operator("object.shade_smooth") | 
					
						
							|  |  |  |         layout.operator("object.shade_flat") | 
					
						
							| 
									
										
										
										
											2018-05-25 08:16:24 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-19 16:09:21 +11:00
										 |  |  |         layout.menu("VIEW3D_MT_object_animation") | 
					
						
							| 
									
										
										
										
											2018-04-24 20:46:18 +02:00
										 |  |  |         layout.menu("VIEW3D_MT_object_rigid_body") | 
					
						
							| 
									
										
										
										
											2010-06-03 06:41:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-06 05:45:06 +00:00
										 |  |  |         layout.menu("VIEW3D_MT_object_quick_effects") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-23 16:12:28 +01:00
										 |  |  |         ob = context.active_object | 
					
						
							|  |  |  |         if ob and ob.type == 'GPENCIL' and context.gpencil_data: | 
					
						
							|  |  |  |             layout.operator_menu_enum("gpencil.convert", "type", text="Convert to") | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             layout.operator_menu_enum("object.convert", "target") | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Objects: restore H key per object hiding.
H hides selected objects, Shift+H hides unselected objects, and Alt+H
reveals hidden objects.
This hiding state is distinct from restrict viewport and render, and
meant for temporarily hiding objects without affecting more persistent
collection hiding.
Object hiding is per view-layer, same as selection. It affects the
viewport and any preview renders in there, but not final renders.
In the outliner, different icons are now used for temporary hiding, and
restrict viewport and render. Hidden objects are greyed out.
Remaining design issues:
* For lamps we probably still want to keep their effect on the scene,
  currently they are fully disabled by hiding. Arguably mesh lights or
  even objects being reflected or casting shadows are not that different
  but perhaps the special lamp exception from local view should remain.
* We need a feature still to disabled this hiding for specific viewports,
  for render or animation preview where you want to see the entire scene
  while working in another view.
* We need a new icon for restrict viewport, for now it uses a grid similar
  to the 2.4 icon.
* Hiding objects does not preserve selection state as it did in 2.7,
  it's probably convenient to support this again?
											
										 
											2018-05-14 23:36:56 +02:00
										 |  |  |         layout.menu("VIEW3D_MT_object_showhide") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-08 06:56:48 +10:00
										 |  |  |         layout.operator_context = 'EXEC_DEFAULT' | 
					
						
							|  |  |  |         layout.operator("object.delete", text="Delete").use_global = False | 
					
						
							|  |  |  |         layout.operator("object.delete", text="Delete Global").use_global = True | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_object_animation(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Animation" | 
					
						
							| 
									
										
										
										
											2010-09-18 16:17:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2010-09-18 16:17:32 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         layout.operator("anim.keyframe_insert_menu", text="Insert Keyframe...") | 
					
						
							| 
									
										
										
										
											2012-10-04 10:58:03 +00:00
										 |  |  |         layout.operator("anim.keyframe_delete_v3d", text="Delete Keyframes...") | 
					
						
							|  |  |  |         layout.operator("anim.keyframe_clear_v3d", text="Clear Keyframes...") | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         layout.operator("anim.keying_set_active_set", text="Change Keying Set...") | 
					
						
							| 
									
										
										
										
											2010-09-18 16:17:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-08 14:01:47 +00:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("nla.bake", text="Bake Action...") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-18 16:17:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-24 20:46:18 +02:00
										 |  |  | class VIEW3D_MT_object_rigid_body(Menu): | 
					
						
							|  |  |  |     bl_label = "Rigid Body" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2018-04-24 20:46:18 +02:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("rigidbody.objects_add", text="Add Active").type = 'ACTIVE' | 
					
						
							|  |  |  |         layout.operator("rigidbody.objects_add", text="Add Passive").type = 'PASSIVE' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("rigidbody.objects_remove", text="Remove") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("rigidbody.shape_change", text="Change Shape") | 
					
						
							|  |  |  |         layout.operator("rigidbody.mass_calculate", text="Calculate Mass") | 
					
						
							|  |  |  |         layout.operator("rigidbody.object_settings_copy", text="Copy from Active") | 
					
						
							|  |  |  |         layout.operator("object.visual_transform_apply", text="Apply Transformation") | 
					
						
							|  |  |  |         layout.operator("rigidbody.bake_to_keyframes", text="Bake To Keyframes") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("rigidbody.connect", text="Connect") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_object_clear(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Clear" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-03 16:10:00 +01:00
										 |  |  |         layout.operator("object.location_clear", text="Location").clear_delta = False | 
					
						
							|  |  |  |         layout.operator("object.rotation_clear", text="Rotation").clear_delta = False | 
					
						
							|  |  |  |         layout.operator("object.scale_clear", text="Scale").clear_delta = False | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-17 17:57:20 +00:00
										 |  |  |         layout.operator("object.origin_clear", text="Origin") | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 10:59:57 +11:00
										 |  |  | class VIEW3D_MT_object_context_menu(Menu): | 
					
						
							| 
									
										
										
										
											2018-06-05 09:12:19 +02:00
										 |  |  |     bl_label = "Object Context Menu" | 
					
						
							| 
									
										
										
										
											2010-02-21 14:05:02 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							| 
									
										
										
										
											2018-11-22 19:02:44 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-21 14:05:02 +00:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2018-11-29 23:44:37 -02:00
										 |  |  |         view = context.space_data | 
					
						
							| 
									
										
										
										
											2010-02-21 14:05:02 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         obj = context.object | 
					
						
							| 
									
										
										
										
											2018-11-22 19:02:44 +01:00
										 |  |  |         is_eevee = context.scene.render.engine == 'BLENDER_EEVEE' | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         selected_objects_len = len(context.selected_objects) | 
					
						
							| 
									
										
										
										
											2018-12-20 15:26:27 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # If nothing is selected | 
					
						
							|  |  |  |         # (disabled for now until it can be made more useful). | 
					
						
							|  |  |  |         '''
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         if selected_objects_len == 0: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             layout.menu("VIEW3D_MT_add", text="Add") | 
					
						
							|  |  |  |             layout.operator("view3d.pastebuffer", text="Paste Objects", icon='PASTEDOWN') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             return | 
					
						
							| 
									
										
										
										
											2018-12-20 15:26:27 +11:00
										 |  |  |         '''
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # If something is selected | 
					
						
							| 
									
										
										
										
											2019-01-02 19:03:32 +11:00
										 |  |  |         if obj is not None and obj.type in {'MESH', 'CURVE', 'SURFACE'}: | 
					
						
							| 
									
										
										
										
											2018-12-06 16:19:29 +01:00
										 |  |  |             layout.operator("object.shade_smooth", text="Shade Smooth") | 
					
						
							|  |  |  |             layout.operator("object.shade_flat", text="Shade Flat") | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |             layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-02 19:03:32 +11:00
										 |  |  |         if obj is None: | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  |         elif obj.type == 'MESH': | 
					
						
							| 
									
										
										
										
											2018-11-27 01:59:47 +01:00
										 |  |  |             layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							| 
									
										
										
										
											2019-03-11 23:33:13 +01:00
										 |  |  |             layout.operator_menu_enum("object.origin_set", text="Set Origin", property="type") | 
					
						
							| 
									
										
										
										
											2018-11-27 01:59:47 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |             layout.operator_context = 'INVOKE_DEFAULT' | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             # If more than one object is selected | 
					
						
							|  |  |  |             if selected_objects_len > 1: | 
					
						
							|  |  |  |                 layout.operator("object.join") | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-26 14:48:35 +01:00
										 |  |  |             layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-20 15:26:27 +11:00
										 |  |  |         elif obj.type == 'CAMERA': | 
					
						
							| 
									
										
										
										
											2010-02-21 14:05:02 +00:00
										 |  |  |             layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-24 03:41:07 +00:00
										 |  |  |             if obj.data.type == 'PERSP': | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |                 props = layout.operator("wm.context_modal_mouse", text="Camera Lens Angle") | 
					
						
							| 
									
										
										
										
											2011-06-24 03:41:07 +00:00
										 |  |  |                 props.data_path_iter = "selected_editable_objects" | 
					
						
							|  |  |  |                 props.data_path_item = "data.lens" | 
					
						
							|  |  |  |                 props.input_scale = 0.1 | 
					
						
							| 
									
										
										
										
											2012-02-25 19:49:23 +00:00
										 |  |  |                 if obj.data.lens_unit == 'MILLIMETERS': | 
					
						
							|  |  |  |                     props.header_text = "Camera Lens Angle: %.1fmm" | 
					
						
							|  |  |  |                 else: | 
					
						
							|  |  |  |                     props.header_text = "Camera Lens Angle: %.1f\u00B0" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-24 03:41:07 +00:00
										 |  |  |             else: | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |                 props = layout.operator("wm.context_modal_mouse", text="Camera Lens Scale") | 
					
						
							| 
									
										
										
										
											2011-06-24 03:41:07 +00:00
										 |  |  |                 props.data_path_iter = "selected_editable_objects" | 
					
						
							|  |  |  |                 props.data_path_item = "data.ortho_scale" | 
					
						
							|  |  |  |                 props.input_scale = 0.01 | 
					
						
							| 
									
										
										
										
											2012-02-25 19:49:23 +00:00
										 |  |  |                 props.header_text = "Camera Lens Scale: %.3f" | 
					
						
							| 
									
										
										
										
											2010-06-26 19:00:44 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |             if not obj.data.dof_object: | 
					
						
							| 
									
										
										
										
											2015-01-14 08:01:40 +11:00
										 |  |  |                 if view and view.camera == obj and view.region_3d.view_perspective == 'CAMERA': | 
					
						
							|  |  |  |                     props = layout.operator("ui.eyedropper_depth", text="DOF Distance (Pick)") | 
					
						
							|  |  |  |                 else: | 
					
						
							|  |  |  |                     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 | 
					
						
							|  |  |  |                     props.header_text = "DOF Distance: %.3f" | 
					
						
							| 
									
										
										
										
											2010-06-26 19:00:44 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-26 14:48:35 +01:00
										 |  |  |             layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-20 15:26:27 +11:00
										 |  |  |         elif obj.type in {'CURVE', 'FONT'}: | 
					
						
							| 
									
										
										
										
											2010-06-26 19:00:44 +00:00
										 |  |  |             layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |             props = layout.operator("wm.context_modal_mouse", text="Extrude Size") | 
					
						
							| 
									
										
										
										
											2010-06-26 19:00:44 +00:00
										 |  |  |             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 | 
					
						
							| 
									
										
										
										
											2012-02-25 19:49:23 +00:00
										 |  |  |             props.header_text = "Extrude Size: %.3f" | 
					
						
							| 
									
										
										
										
											2010-02-22 23:32:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +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 | 
					
						
							| 
									
										
										
										
											2012-02-25 19:49:23 +00:00
										 |  |  |             props.header_text = "Width Size: %.3f" | 
					
						
							| 
									
										
										
										
											2010-06-26 19:00:44 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-27 17:04:47 +01:00
										 |  |  |             layout.separator() | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-27 17:04:47 +01:00
										 |  |  |             layout.operator("object.convert", text="Convert to Mesh").target = 'MESH' | 
					
						
							| 
									
										
										
										
											2019-03-11 23:33:13 +01:00
										 |  |  |             layout.operator_menu_enum("object.origin_set", text="Set Origin", property="type") | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-26 14:48:35 +01:00
										 |  |  |             layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-20 15:26:27 +11:00
										 |  |  |         elif obj.type == 'GPENCIL': | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             layout.operator("gpencil.convert", text="Convert to Path").type = 'PATH' | 
					
						
							|  |  |  |             layout.operator("gpencil.convert", text="Convert to Bezier Curves").type = 'CURVE' | 
					
						
							|  |  |  |             layout.operator("gpencil.convert", text="Convert to Mesh").type = 'POLY' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-11 23:33:13 +01:00
										 |  |  |             layout.operator_menu_enum("object.origin_set", text="Set Origin", property="type") | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-26 14:48:35 +01:00
										 |  |  |             layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-20 15:26:27 +11:00
										 |  |  |         elif obj.type == 'EMPTY': | 
					
						
							| 
									
										
										
										
											2010-06-26 19:00:44 +00:00
										 |  |  |             layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							| 
									
										
										
										
											2010-02-22 23:32:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +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" | 
					
						
							| 
									
										
										
										
											2018-09-03 18:58:41 +02:00
										 |  |  |             props.data_path_item = "empty_display_size" | 
					
						
							| 
									
										
										
										
											2010-06-26 19:00:44 +00:00
										 |  |  |             props.input_scale = 0.01 | 
					
						
							| 
									
										
										
										
											2012-02-25 19:49:23 +00:00
										 |  |  |             props.header_text = "Empty Draw Size: %.3f" | 
					
						
							| 
									
										
										
										
											2010-06-26 19:00:44 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-26 14:48:35 +01:00
										 |  |  |             layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-20 15:26:27 +11:00
										 |  |  |         elif obj.type == 'LIGHT': | 
					
						
							| 
									
										
										
										
											2018-06-27 14:41:53 +02:00
										 |  |  |             light = obj.data | 
					
						
							| 
									
										
										
										
											2013-06-10 19:01:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-26 19:00:44 +00:00
										 |  |  |             layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							| 
									
										
										
										
											2013-06-10 19:01:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Remove Blender Internal and legacy viewport from Blender 2.8.
Brecht authored this commit, but he gave me the honours to actually
do it. Here it goes; Blender Internal. Bye bye, you did great!
* Point density, voxel data, ocean, environment map textures were removed,
  as these only worked within BI rendering. Note that the ocean modifier
  and the Cycles point density shader node continue to work.
* Dynamic paint using material shading was removed, as this only worked
  with BI. If we ever wanted to support this again probably it should go
  through the baking API.
* GPU shader export through the Python API was removed. This only worked
  for the old BI GLSL shaders, which no longer exists. Doing something
  similar for Eevee would be significantly more complicated because it
  uses a lot of multiplass rendering and logic outside the shader, it's
  probably impractical.
* Collada material import / export code is mostly gone, as it only worked
  for BI materials. We need to add Cycles / Eevee material support at some
  point.
* The mesh noise operator was removed since it only worked with BI
  material texture slots. A displacement modifier can be used instead.
* The delete texture paint slot operator was removed since it only worked
  for BI material texture slots. Could be added back with node support.
* Not all legacy viewport features are supported in the new viewport, but
  their code was removed. If we need to bring anything back we can look at
  older git revisions.
* There is some legacy viewport code that I could not remove yet, and some
  that I probably missed.
* Shader node execution code was left mostly intact, even though it is not
  used anywhere now. We may eventually use this to replace the texture
  nodes with Cycles / Eevee shader nodes.
* The Cycles Bake panel now includes settings for baking multires normal
  and displacement maps. The underlying code needs to be merged properly,
  and we plan to add back support for multires AO baking and add support
  to Cycles baking for features like vertex color, displacement, and other
  missing baking features.
* This commit removes DNA and the Python API for BI material, lamp, world
  and scene settings. This breaks a lot of addons.
* There is more DNA that can be removed or renamed, where Cycles or Eevee
  are reusing some old BI properties but the names are not really correct
  anymore.
* Texture slots for materials, lamps and world were removed. They remain
  for brushes, particles and freestyle linestyles.
* 'BLENDER_RENDER' remains in the COMPAT_ENGINES of UI panels. Cycles and
  other renderers use this to find all panels to show, minus a few panels
  that they have their own replacement for.
											
										 
											2018-04-19 17:34:44 +02:00
										 |  |  |             emission_node = None | 
					
						
							| 
									
										
										
										
											2018-06-27 14:41:53 +02:00
										 |  |  |             if light.node_tree: | 
					
						
							|  |  |  |                 for node in light.node_tree.nodes: | 
					
						
							| 
									
										
											  
											
												Remove Blender Internal and legacy viewport from Blender 2.8.
Brecht authored this commit, but he gave me the honours to actually
do it. Here it goes; Blender Internal. Bye bye, you did great!
* Point density, voxel data, ocean, environment map textures were removed,
  as these only worked within BI rendering. Note that the ocean modifier
  and the Cycles point density shader node continue to work.
* Dynamic paint using material shading was removed, as this only worked
  with BI. If we ever wanted to support this again probably it should go
  through the baking API.
* GPU shader export through the Python API was removed. This only worked
  for the old BI GLSL shaders, which no longer exists. Doing something
  similar for Eevee would be significantly more complicated because it
  uses a lot of multiplass rendering and logic outside the shader, it's
  probably impractical.
* Collada material import / export code is mostly gone, as it only worked
  for BI materials. We need to add Cycles / Eevee material support at some
  point.
* The mesh noise operator was removed since it only worked with BI
  material texture slots. A displacement modifier can be used instead.
* The delete texture paint slot operator was removed since it only worked
  for BI material texture slots. Could be added back with node support.
* Not all legacy viewport features are supported in the new viewport, but
  their code was removed. If we need to bring anything back we can look at
  older git revisions.
* There is some legacy viewport code that I could not remove yet, and some
  that I probably missed.
* Shader node execution code was left mostly intact, even though it is not
  used anywhere now. We may eventually use this to replace the texture
  nodes with Cycles / Eevee shader nodes.
* The Cycles Bake panel now includes settings for baking multires normal
  and displacement maps. The underlying code needs to be merged properly,
  and we plan to add back support for multires AO baking and add support
  to Cycles baking for features like vertex color, displacement, and other
  missing baking features.
* This commit removes DNA and the Python API for BI material, lamp, world
  and scene settings. This breaks a lot of addons.
* There is more DNA that can be removed or renamed, where Cycles or Eevee
  are reusing some old BI properties but the names are not really correct
  anymore.
* Texture slots for materials, lamps and world were removed. They remain
  for brushes, particles and freestyle linestyles.
* 'BLENDER_RENDER' remains in the COMPAT_ENGINES of UI panels. Cycles and
  other renderers use this to find all panels to show, minus a few panels
  that they have their own replacement for.
											
										 
											2018-04-19 17:34:44 +02:00
										 |  |  |                     if getattr(node, "type", None) == 'EMISSION': | 
					
						
							|  |  |  |                         emission_node = node | 
					
						
							|  |  |  |                         break | 
					
						
							| 
									
										
										
										
											2013-06-18 06:23:30 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-22 19:02:44 +01:00
										 |  |  |             if is_eevee and not emission_node: | 
					
						
							|  |  |  |                 props = layout.operator("wm.context_modal_mouse", text="Energy") | 
					
						
							|  |  |  |                 props.data_path_iter = "selected_editable_objects" | 
					
						
							|  |  |  |                 props.data_path_item = "data.energy" | 
					
						
							|  |  |  |                 props.header_text = "Light Energy: %.3f" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Remove Blender Internal and legacy viewport from Blender 2.8.
Brecht authored this commit, but he gave me the honours to actually
do it. Here it goes; Blender Internal. Bye bye, you did great!
* Point density, voxel data, ocean, environment map textures were removed,
  as these only worked within BI rendering. Note that the ocean modifier
  and the Cycles point density shader node continue to work.
* Dynamic paint using material shading was removed, as this only worked
  with BI. If we ever wanted to support this again probably it should go
  through the baking API.
* GPU shader export through the Python API was removed. This only worked
  for the old BI GLSL shaders, which no longer exists. Doing something
  similar for Eevee would be significantly more complicated because it
  uses a lot of multiplass rendering and logic outside the shader, it's
  probably impractical.
* Collada material import / export code is mostly gone, as it only worked
  for BI materials. We need to add Cycles / Eevee material support at some
  point.
* The mesh noise operator was removed since it only worked with BI
  material texture slots. A displacement modifier can be used instead.
* The delete texture paint slot operator was removed since it only worked
  for BI material texture slots. Could be added back with node support.
* Not all legacy viewport features are supported in the new viewport, but
  their code was removed. If we need to bring anything back we can look at
  older git revisions.
* There is some legacy viewport code that I could not remove yet, and some
  that I probably missed.
* Shader node execution code was left mostly intact, even though it is not
  used anywhere now. We may eventually use this to replace the texture
  nodes with Cycles / Eevee shader nodes.
* The Cycles Bake panel now includes settings for baking multires normal
  and displacement maps. The underlying code needs to be merged properly,
  and we plan to add back support for multires AO baking and add support
  to Cycles baking for features like vertex color, displacement, and other
  missing baking features.
* This commit removes DNA and the Python API for BI material, lamp, world
  and scene settings. This breaks a lot of addons.
* There is more DNA that can be removed or renamed, where Cycles or Eevee
  are reusing some old BI properties but the names are not really correct
  anymore.
* Texture slots for materials, lamps and world were removed. They remain
  for brushes, particles and freestyle linestyles.
* 'BLENDER_RENDER' remains in the COMPAT_ENGINES of UI panels. Cycles and
  other renderers use this to find all panels to show, minus a few panels
  that they have their own replacement for.
											
										 
											2018-04-19 17:34:44 +02:00
										 |  |  |             if emission_node is not None: | 
					
						
							| 
									
										
										
										
											2018-11-22 19:02:44 +01:00
										 |  |  |                 props = layout.operator("wm.context_modal_mouse", text="Energy") | 
					
						
							| 
									
										
										
										
											2013-06-06 11:18:39 +00:00
										 |  |  |                 props.data_path_iter = "selected_editable_objects" | 
					
						
							| 
									
										
										
										
											2018-10-10 11:21:30 +11:00
										 |  |  |                 props.data_path_item = ( | 
					
						
							|  |  |  |                     "data.node_tree" | 
					
						
							|  |  |  |                     ".nodes[\"" + emission_node.name + "\"]" | 
					
						
							|  |  |  |                     ".inputs[\"Strength\"].default_value" | 
					
						
							|  |  |  |                 ) | 
					
						
							| 
									
										
										
										
											2018-11-22 19:02:44 +01:00
										 |  |  |                 props.header_text = "Light Energy: %.3f" | 
					
						
							| 
									
										
											  
											
												Remove Blender Internal and legacy viewport from Blender 2.8.
Brecht authored this commit, but he gave me the honours to actually
do it. Here it goes; Blender Internal. Bye bye, you did great!
* Point density, voxel data, ocean, environment map textures were removed,
  as these only worked within BI rendering. Note that the ocean modifier
  and the Cycles point density shader node continue to work.
* Dynamic paint using material shading was removed, as this only worked
  with BI. If we ever wanted to support this again probably it should go
  through the baking API.
* GPU shader export through the Python API was removed. This only worked
  for the old BI GLSL shaders, which no longer exists. Doing something
  similar for Eevee would be significantly more complicated because it
  uses a lot of multiplass rendering and logic outside the shader, it's
  probably impractical.
* Collada material import / export code is mostly gone, as it only worked
  for BI materials. We need to add Cycles / Eevee material support at some
  point.
* The mesh noise operator was removed since it only worked with BI
  material texture slots. A displacement modifier can be used instead.
* The delete texture paint slot operator was removed since it only worked
  for BI material texture slots. Could be added back with node support.
* Not all legacy viewport features are supported in the new viewport, but
  their code was removed. If we need to bring anything back we can look at
  older git revisions.
* There is some legacy viewport code that I could not remove yet, and some
  that I probably missed.
* Shader node execution code was left mostly intact, even though it is not
  used anywhere now. We may eventually use this to replace the texture
  nodes with Cycles / Eevee shader nodes.
* The Cycles Bake panel now includes settings for baking multires normal
  and displacement maps. The underlying code needs to be merged properly,
  and we plan to add back support for multires AO baking and add support
  to Cycles baking for features like vertex color, displacement, and other
  missing baking features.
* This commit removes DNA and the Python API for BI material, lamp, world
  and scene settings. This breaks a lot of addons.
* There is more DNA that can be removed or renamed, where Cycles or Eevee
  are reusing some old BI properties but the names are not really correct
  anymore.
* Texture slots for materials, lamps and world were removed. They remain
  for brushes, particles and freestyle linestyles.
* 'BLENDER_RENDER' remains in the COMPAT_ENGINES of UI panels. Cycles and
  other renderers use this to find all panels to show, minus a few panels
  that they have their own replacement for.
											
										 
											2018-04-19 17:34:44 +02:00
										 |  |  |                 props.input_scale = 0.1 | 
					
						
							| 
									
										
										
										
											2013-06-06 11:18:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-27 14:41:53 +02:00
										 |  |  |             if light.type == 'AREA': | 
					
						
							| 
									
										
											  
											
												Remove Blender Internal and legacy viewport from Blender 2.8.
Brecht authored this commit, but he gave me the honours to actually
do it. Here it goes; Blender Internal. Bye bye, you did great!
* Point density, voxel data, ocean, environment map textures were removed,
  as these only worked within BI rendering. Note that the ocean modifier
  and the Cycles point density shader node continue to work.
* Dynamic paint using material shading was removed, as this only worked
  with BI. If we ever wanted to support this again probably it should go
  through the baking API.
* GPU shader export through the Python API was removed. This only worked
  for the old BI GLSL shaders, which no longer exists. Doing something
  similar for Eevee would be significantly more complicated because it
  uses a lot of multiplass rendering and logic outside the shader, it's
  probably impractical.
* Collada material import / export code is mostly gone, as it only worked
  for BI materials. We need to add Cycles / Eevee material support at some
  point.
* The mesh noise operator was removed since it only worked with BI
  material texture slots. A displacement modifier can be used instead.
* The delete texture paint slot operator was removed since it only worked
  for BI material texture slots. Could be added back with node support.
* Not all legacy viewport features are supported in the new viewport, but
  their code was removed. If we need to bring anything back we can look at
  older git revisions.
* There is some legacy viewport code that I could not remove yet, and some
  that I probably missed.
* Shader node execution code was left mostly intact, even though it is not
  used anywhere now. We may eventually use this to replace the texture
  nodes with Cycles / Eevee shader nodes.
* The Cycles Bake panel now includes settings for baking multires normal
  and displacement maps. The underlying code needs to be merged properly,
  and we plan to add back support for multires AO baking and add support
  to Cycles baking for features like vertex color, displacement, and other
  missing baking features.
* This commit removes DNA and the Python API for BI material, lamp, world
  and scene settings. This breaks a lot of addons.
* There is more DNA that can be removed or renamed, where Cycles or Eevee
  are reusing some old BI properties but the names are not really correct
  anymore.
* Texture slots for materials, lamps and world were removed. They remain
  for brushes, particles and freestyle linestyles.
* 'BLENDER_RENDER' remains in the COMPAT_ENGINES of UI panels. Cycles and
  other renderers use this to find all panels to show, minus a few panels
  that they have their own replacement for.
											
										 
											2018-04-19 17:34:44 +02:00
										 |  |  |                 props = layout.operator("wm.context_modal_mouse", text="Size X") | 
					
						
							| 
									
										
										
										
											2013-06-06 11:18:39 +00:00
										 |  |  |                 props.data_path_iter = "selected_editable_objects" | 
					
						
							| 
									
										
											  
											
												Remove Blender Internal and legacy viewport from Blender 2.8.
Brecht authored this commit, but he gave me the honours to actually
do it. Here it goes; Blender Internal. Bye bye, you did great!
* Point density, voxel data, ocean, environment map textures were removed,
  as these only worked within BI rendering. Note that the ocean modifier
  and the Cycles point density shader node continue to work.
* Dynamic paint using material shading was removed, as this only worked
  with BI. If we ever wanted to support this again probably it should go
  through the baking API.
* GPU shader export through the Python API was removed. This only worked
  for the old BI GLSL shaders, which no longer exists. Doing something
  similar for Eevee would be significantly more complicated because it
  uses a lot of multiplass rendering and logic outside the shader, it's
  probably impractical.
* Collada material import / export code is mostly gone, as it only worked
  for BI materials. We need to add Cycles / Eevee material support at some
  point.
* The mesh noise operator was removed since it only worked with BI
  material texture slots. A displacement modifier can be used instead.
* The delete texture paint slot operator was removed since it only worked
  for BI material texture slots. Could be added back with node support.
* Not all legacy viewport features are supported in the new viewport, but
  their code was removed. If we need to bring anything back we can look at
  older git revisions.
* There is some legacy viewport code that I could not remove yet, and some
  that I probably missed.
* Shader node execution code was left mostly intact, even though it is not
  used anywhere now. We may eventually use this to replace the texture
  nodes with Cycles / Eevee shader nodes.
* The Cycles Bake panel now includes settings for baking multires normal
  and displacement maps. The underlying code needs to be merged properly,
  and we plan to add back support for multires AO baking and add support
  to Cycles baking for features like vertex color, displacement, and other
  missing baking features.
* This commit removes DNA and the Python API for BI material, lamp, world
  and scene settings. This breaks a lot of addons.
* There is more DNA that can be removed or renamed, where Cycles or Eevee
  are reusing some old BI properties but the names are not really correct
  anymore.
* Texture slots for materials, lamps and world were removed. They remain
  for brushes, particles and freestyle linestyles.
* 'BLENDER_RENDER' remains in the COMPAT_ENGINES of UI panels. Cycles and
  other renderers use this to find all panels to show, minus a few panels
  that they have their own replacement for.
											
										 
											2018-04-19 17:34:44 +02:00
										 |  |  |                 props.data_path_item = "data.size" | 
					
						
							| 
									
										
										
										
											2018-06-27 14:41:53 +02:00
										 |  |  |                 props.header_text = "Light Size X: %.3f" | 
					
						
							| 
									
										
										
										
											2013-06-06 11:18:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-27 14:41:53 +02:00
										 |  |  |                 if light.shape in {'RECTANGLE', 'ELLIPSE'}: | 
					
						
							| 
									
										
											  
											
												Remove Blender Internal and legacy viewport from Blender 2.8.
Brecht authored this commit, but he gave me the honours to actually
do it. Here it goes; Blender Internal. Bye bye, you did great!
* Point density, voxel data, ocean, environment map textures were removed,
  as these only worked within BI rendering. Note that the ocean modifier
  and the Cycles point density shader node continue to work.
* Dynamic paint using material shading was removed, as this only worked
  with BI. If we ever wanted to support this again probably it should go
  through the baking API.
* GPU shader export through the Python API was removed. This only worked
  for the old BI GLSL shaders, which no longer exists. Doing something
  similar for Eevee would be significantly more complicated because it
  uses a lot of multiplass rendering and logic outside the shader, it's
  probably impractical.
* Collada material import / export code is mostly gone, as it only worked
  for BI materials. We need to add Cycles / Eevee material support at some
  point.
* The mesh noise operator was removed since it only worked with BI
  material texture slots. A displacement modifier can be used instead.
* The delete texture paint slot operator was removed since it only worked
  for BI material texture slots. Could be added back with node support.
* Not all legacy viewport features are supported in the new viewport, but
  their code was removed. If we need to bring anything back we can look at
  older git revisions.
* There is some legacy viewport code that I could not remove yet, and some
  that I probably missed.
* Shader node execution code was left mostly intact, even though it is not
  used anywhere now. We may eventually use this to replace the texture
  nodes with Cycles / Eevee shader nodes.
* The Cycles Bake panel now includes settings for baking multires normal
  and displacement maps. The underlying code needs to be merged properly,
  and we plan to add back support for multires AO baking and add support
  to Cycles baking for features like vertex color, displacement, and other
  missing baking features.
* This commit removes DNA and the Python API for BI material, lamp, world
  and scene settings. This breaks a lot of addons.
* There is more DNA that can be removed or renamed, where Cycles or Eevee
  are reusing some old BI properties but the names are not really correct
  anymore.
* Texture slots for materials, lamps and world were removed. They remain
  for brushes, particles and freestyle linestyles.
* 'BLENDER_RENDER' remains in the COMPAT_ENGINES of UI panels. Cycles and
  other renderers use this to find all panels to show, minus a few panels
  that they have their own replacement for.
											
										 
											2018-04-19 17:34:44 +02:00
										 |  |  |                     props = layout.operator("wm.context_modal_mouse", text="Size Y") | 
					
						
							| 
									
										
										
										
											2013-06-06 11:18:39 +00:00
										 |  |  |                     props.data_path_iter = "selected_editable_objects" | 
					
						
							| 
									
										
											  
											
												Remove Blender Internal and legacy viewport from Blender 2.8.
Brecht authored this commit, but he gave me the honours to actually
do it. Here it goes; Blender Internal. Bye bye, you did great!
* Point density, voxel data, ocean, environment map textures were removed,
  as these only worked within BI rendering. Note that the ocean modifier
  and the Cycles point density shader node continue to work.
* Dynamic paint using material shading was removed, as this only worked
  with BI. If we ever wanted to support this again probably it should go
  through the baking API.
* GPU shader export through the Python API was removed. This only worked
  for the old BI GLSL shaders, which no longer exists. Doing something
  similar for Eevee would be significantly more complicated because it
  uses a lot of multiplass rendering and logic outside the shader, it's
  probably impractical.
* Collada material import / export code is mostly gone, as it only worked
  for BI materials. We need to add Cycles / Eevee material support at some
  point.
* The mesh noise operator was removed since it only worked with BI
  material texture slots. A displacement modifier can be used instead.
* The delete texture paint slot operator was removed since it only worked
  for BI material texture slots. Could be added back with node support.
* Not all legacy viewport features are supported in the new viewport, but
  their code was removed. If we need to bring anything back we can look at
  older git revisions.
* There is some legacy viewport code that I could not remove yet, and some
  that I probably missed.
* Shader node execution code was left mostly intact, even though it is not
  used anywhere now. We may eventually use this to replace the texture
  nodes with Cycles / Eevee shader nodes.
* The Cycles Bake panel now includes settings for baking multires normal
  and displacement maps. The underlying code needs to be merged properly,
  and we plan to add back support for multires AO baking and add support
  to Cycles baking for features like vertex color, displacement, and other
  missing baking features.
* This commit removes DNA and the Python API for BI material, lamp, world
  and scene settings. This breaks a lot of addons.
* There is more DNA that can be removed or renamed, where Cycles or Eevee
  are reusing some old BI properties but the names are not really correct
  anymore.
* Texture slots for materials, lamps and world were removed. They remain
  for brushes, particles and freestyle linestyles.
* 'BLENDER_RENDER' remains in the COMPAT_ENGINES of UI panels. Cycles and
  other renderers use this to find all panels to show, minus a few panels
  that they have their own replacement for.
											
										 
											2018-04-19 17:34:44 +02:00
										 |  |  |                     props.data_path_item = "data.size_y" | 
					
						
							| 
									
										
										
										
											2018-06-27 14:41:53 +02:00
										 |  |  |                     props.header_text = "Light Size Y: %.3f" | 
					
						
							| 
									
										
											  
											
												Remove Blender Internal and legacy viewport from Blender 2.8.
Brecht authored this commit, but he gave me the honours to actually
do it. Here it goes; Blender Internal. Bye bye, you did great!
* Point density, voxel data, ocean, environment map textures were removed,
  as these only worked within BI rendering. Note that the ocean modifier
  and the Cycles point density shader node continue to work.
* Dynamic paint using material shading was removed, as this only worked
  with BI. If we ever wanted to support this again probably it should go
  through the baking API.
* GPU shader export through the Python API was removed. This only worked
  for the old BI GLSL shaders, which no longer exists. Doing something
  similar for Eevee would be significantly more complicated because it
  uses a lot of multiplass rendering and logic outside the shader, it's
  probably impractical.
* Collada material import / export code is mostly gone, as it only worked
  for BI materials. We need to add Cycles / Eevee material support at some
  point.
* The mesh noise operator was removed since it only worked with BI
  material texture slots. A displacement modifier can be used instead.
* The delete texture paint slot operator was removed since it only worked
  for BI material texture slots. Could be added back with node support.
* Not all legacy viewport features are supported in the new viewport, but
  their code was removed. If we need to bring anything back we can look at
  older git revisions.
* There is some legacy viewport code that I could not remove yet, and some
  that I probably missed.
* Shader node execution code was left mostly intact, even though it is not
  used anywhere now. We may eventually use this to replace the texture
  nodes with Cycles / Eevee shader nodes.
* The Cycles Bake panel now includes settings for baking multires normal
  and displacement maps. The underlying code needs to be merged properly,
  and we plan to add back support for multires AO baking and add support
  to Cycles baking for features like vertex color, displacement, and other
  missing baking features.
* This commit removes DNA and the Python API for BI material, lamp, world
  and scene settings. This breaks a lot of addons.
* There is more DNA that can be removed or renamed, where Cycles or Eevee
  are reusing some old BI properties but the names are not really correct
  anymore.
* Texture slots for materials, lamps and world were removed. They remain
  for brushes, particles and freestyle linestyles.
* 'BLENDER_RENDER' remains in the COMPAT_ENGINES of UI panels. Cycles and
  other renderers use this to find all panels to show, minus a few panels
  that they have their own replacement for.
											
										 
											2018-04-19 17:34:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-27 14:41:53 +02:00
										 |  |  |             elif light.type in {'SPOT', 'POINT', 'SUN'}: | 
					
						
							| 
									
										
										
										
											2018-11-22 19:02:44 +01:00
										 |  |  |                 props = layout.operator("wm.context_modal_mouse", text="Radius") | 
					
						
							| 
									
										
											  
											
												Remove Blender Internal and legacy viewport from Blender 2.8.
Brecht authored this commit, but he gave me the honours to actually
do it. Here it goes; Blender Internal. Bye bye, you did great!
* Point density, voxel data, ocean, environment map textures were removed,
  as these only worked within BI rendering. Note that the ocean modifier
  and the Cycles point density shader node continue to work.
* Dynamic paint using material shading was removed, as this only worked
  with BI. If we ever wanted to support this again probably it should go
  through the baking API.
* GPU shader export through the Python API was removed. This only worked
  for the old BI GLSL shaders, which no longer exists. Doing something
  similar for Eevee would be significantly more complicated because it
  uses a lot of multiplass rendering and logic outside the shader, it's
  probably impractical.
* Collada material import / export code is mostly gone, as it only worked
  for BI materials. We need to add Cycles / Eevee material support at some
  point.
* The mesh noise operator was removed since it only worked with BI
  material texture slots. A displacement modifier can be used instead.
* The delete texture paint slot operator was removed since it only worked
  for BI material texture slots. Could be added back with node support.
* Not all legacy viewport features are supported in the new viewport, but
  their code was removed. If we need to bring anything back we can look at
  older git revisions.
* There is some legacy viewport code that I could not remove yet, and some
  that I probably missed.
* Shader node execution code was left mostly intact, even though it is not
  used anywhere now. We may eventually use this to replace the texture
  nodes with Cycles / Eevee shader nodes.
* The Cycles Bake panel now includes settings for baking multires normal
  and displacement maps. The underlying code needs to be merged properly,
  and we plan to add back support for multires AO baking and add support
  to Cycles baking for features like vertex color, displacement, and other
  missing baking features.
* This commit removes DNA and the Python API for BI material, lamp, world
  and scene settings. This breaks a lot of addons.
* There is more DNA that can be removed or renamed, where Cycles or Eevee
  are reusing some old BI properties but the names are not really correct
  anymore.
* Texture slots for materials, lamps and world were removed. They remain
  for brushes, particles and freestyle linestyles.
* 'BLENDER_RENDER' remains in the COMPAT_ENGINES of UI panels. Cycles and
  other renderers use this to find all panels to show, minus a few panels
  that they have their own replacement for.
											
										 
											2018-04-19 17:34:44 +02:00
										 |  |  |                 props.data_path_iter = "selected_editable_objects" | 
					
						
							|  |  |  |                 props.data_path_item = "data.shadow_soft_size" | 
					
						
							| 
									
										
										
										
											2018-11-22 19:02:44 +01:00
										 |  |  |                 props.header_text = "Light Radius: %.3f" | 
					
						
							| 
									
										
										
										
											2010-06-26 19:00:44 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-27 14:41:53 +02:00
										 |  |  |             if light.type == 'SPOT': | 
					
						
							| 
									
										
										
										
											2010-06-26 19:00:44 +00:00
										 |  |  |                 layout.separator() | 
					
						
							| 
									
										
										
										
											2018-11-22 19:02:44 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |                 props = layout.operator("wm.context_modal_mouse", text="Spot Size") | 
					
						
							| 
									
										
										
										
											2010-06-26 19:00:44 +00:00
										 |  |  |                 props.data_path_iter = "selected_editable_objects" | 
					
						
							|  |  |  |                 props.data_path_item = "data.spot_size" | 
					
						
							|  |  |  |                 props.input_scale = 0.01 | 
					
						
							| 
									
										
										
										
											2012-02-25 19:49:23 +00:00
										 |  |  |                 props.header_text = "Spot Size: %.2f" | 
					
						
							| 
									
										
										
										
											2010-06-26 19:00:44 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |                 props = layout.operator("wm.context_modal_mouse", text="Spot Blend") | 
					
						
							| 
									
										
										
										
											2010-06-26 19:00:44 +00:00
										 |  |  |                 props.data_path_iter = "selected_editable_objects" | 
					
						
							|  |  |  |                 props.data_path_item = "data.spot_blend" | 
					
						
							|  |  |  |                 props.input_scale = -0.01 | 
					
						
							| 
									
										
										
										
											2012-02-25 19:49:23 +00:00
										 |  |  |                 props.header_text = "Spot Blend: %.2f" | 
					
						
							| 
									
										
										
										
											2010-06-26 19:00:44 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-26 14:48:35 +01:00
										 |  |  |             layout.separator() | 
					
						
							| 
									
										
										
										
											2019-03-26 14:36:15 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-22 19:02:44 +01:00
										 |  |  |         layout.operator("view3d.copybuffer", text="Copy Objects", icon='COPYDOWN') | 
					
						
							|  |  |  |         layout.operator("view3d.pastebuffer", text="Paste Objects", icon='PASTEDOWN') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-23 13:55:33 +11:00
										 |  |  |         layout.operator("object.duplicate_move", icon='DUPLICATE') | 
					
						
							| 
									
										
										
										
											2018-11-22 19:02:44 +01:00
										 |  |  |         layout.operator("object.duplicate_move_linked") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-26 14:48:35 +01:00
										 |  |  |         props = layout.operator("wm.call_panel", text="Rename Active Object...") | 
					
						
							|  |  |  |         props.name = "TOPBAR_PT_name" | 
					
						
							|  |  |  |         props.keep_open = False | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-20 10:17:10 +01:00
										 |  |  |         layout.menu("VIEW3D_MT_mirror") | 
					
						
							| 
									
										
										
										
											2018-11-22 19:02:44 +01:00
										 |  |  |         layout.menu("VIEW3D_MT_snap") | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_object_parent") | 
					
						
							|  |  |  |         layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							| 
									
										
										
										
											2018-11-29 23:44:37 -02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if view and view.local_view: | 
					
						
							|  |  |  |             layout.operator("view3d.localview_remove_from") | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             layout.operator("object.move_to_collection") | 
					
						
							| 
									
										
										
										
											2018-11-22 19:02:44 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("anim.keyframe_insert_menu", text="Insert Keyframe...") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-23 03:47:02 +01:00
										 |  |  |         layout.operator_context = 'EXEC_DEFAULT' | 
					
						
							|  |  |  |         layout.operator("object.delete", text="Delete").use_global = False | 
					
						
							| 
									
										
										
										
											2018-11-22 19:02:44 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-07 15:17:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-25 07:25:08 +02:00
										 |  |  | class VIEW3D_MT_object_shading(Menu): | 
					
						
							|  |  |  |     # XXX, this menu is a place to store shading operator in object mode | 
					
						
							|  |  |  |     bl_label = "Shading" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2018-04-25 07:25:08 +02:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  |         layout.operator("object.shade_smooth", text="Smooth") | 
					
						
							|  |  |  |         layout.operator("object.shade_flat", text="Flat") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_object_apply(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Apply" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-28 15:41:43 +00:00
										 |  |  |         props = layout.operator("object.transform_apply", text="Location", text_ctxt=i18n_contexts.default) | 
					
						
							| 
									
										
										
										
											2012-01-14 06:30:27 +00:00
										 |  |  |         props.location, props.rotation, props.scale = True, False, False | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-28 15:41:43 +00:00
										 |  |  |         props = layout.operator("object.transform_apply", text="Rotation", text_ctxt=i18n_contexts.default) | 
					
						
							| 
									
										
										
										
											2012-01-14 06:30:27 +00:00
										 |  |  |         props.location, props.rotation, props.scale = False, True, False | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-28 15:41:43 +00:00
										 |  |  |         props = layout.operator("object.transform_apply", text="Scale", text_ctxt=i18n_contexts.default) | 
					
						
							| 
									
										
										
										
											2012-01-14 06:30:27 +00:00
										 |  |  |         props.location, props.rotation, props.scale = False, False, True | 
					
						
							| 
									
										
										
										
											2019-03-11 16:12:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         props = layout.operator("object.transform_apply", text="All Transforms", text_ctxt=i18n_contexts.default) | 
					
						
							|  |  |  |         props.location, props.rotation, props.scale = True, True, True | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-28 15:41:43 +00:00
										 |  |  |         props = layout.operator("object.transform_apply", text="Rotation & Scale", text_ctxt=i18n_contexts.default) | 
					
						
							| 
									
										
										
										
											2012-01-14 06:30:27 +00:00
										 |  |  |         props.location, props.rotation, props.scale = False, True, True | 
					
						
							| 
									
										
										
										
											2011-05-03 07:09:02 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-04 12:52:51 +12:00
										 |  |  |         layout.separator() | 
					
						
							| 
									
										
										
										
											2016-08-01 11:54:02 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-19 11:24:01 +11:00
										 |  |  |         layout.operator( | 
					
						
							|  |  |  |             "object.transforms_to_deltas", | 
					
						
							|  |  |  |             text="Location to Deltas", | 
					
						
							|  |  |  |             text_ctxt=i18n_contexts.default, | 
					
						
							|  |  |  |         ).mode = 'LOC' | 
					
						
							|  |  |  |         layout.operator( | 
					
						
							|  |  |  |             "object.transforms_to_deltas", | 
					
						
							|  |  |  |             text="Rotation to Deltas", | 
					
						
							|  |  |  |             text_ctxt=i18n_contexts.default, | 
					
						
							|  |  |  |         ).mode = 'ROT' | 
					
						
							|  |  |  |         layout.operator( | 
					
						
							|  |  |  |             "object.transforms_to_deltas", | 
					
						
							|  |  |  |             text="Scale to Deltas", | 
					
						
							|  |  |  |             text_ctxt=i18n_contexts.default, | 
					
						
							|  |  |  |         ).mode = 'SCALE' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator( | 
					
						
							|  |  |  |             "object.transforms_to_deltas", | 
					
						
							|  |  |  |             text="All Transforms to Deltas", | 
					
						
							|  |  |  |             text_ctxt=i18n_contexts.default, | 
					
						
							|  |  |  |         ).mode = 'ALL' | 
					
						
							| 
									
										
										
										
											2016-07-04 12:52:51 +12:00
										 |  |  |         layout.operator("object.anim_transforms_to_deltas") | 
					
						
							| 
									
										
										
										
											2016-08-01 11:54:02 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-23 00:27:30 +00:00
										 |  |  |         layout.separator() | 
					
						
							| 
									
										
										
										
											2011-05-03 07:09:02 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-19 11:24:01 +11:00
										 |  |  |         layout.operator( | 
					
						
							|  |  |  |             "object.visual_transform_apply", | 
					
						
							|  |  |  |             text="Visual Transform", | 
					
						
							|  |  |  |             text_ctxt=i18n_contexts.default, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         layout.operator( | 
					
						
							|  |  |  |             "object.convert", | 
					
						
							|  |  |  |             text="Visual Geometry to Mesh", | 
					
						
							|  |  |  |             text_ctxt=i18n_contexts.default, | 
					
						
							|  |  |  |         ).target = 'MESH' | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_object_parent(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Parent" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-04 00:54:12 +00:00
										 |  |  |         layout.operator_enum("object.parent_set", "type") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-04 00:54:12 +00:00
										 |  |  |         layout.separator() | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-04 00:54:12 +00:00
										 |  |  |         layout.operator_enum("object.parent_clear", "type") | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_object_track(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Track" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-04 00:54:12 +00:00
										 |  |  |         layout.operator_enum("object.track_set", "type") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-04 00:54:12 +00:00
										 |  |  |         layout.separator() | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-04 00:54:12 +00:00
										 |  |  |         layout.operator_enum("object.track_clear", "type") | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Collections and groups unification
OVERVIEW
* In 2.7 terminology, all layers and groups are now collection datablocks.
* These collections are nestable, linkable, instanceable, overrideable, ..
  which opens up new ways to set up scenes and link + override data.
* Viewport/render visibility and selectability are now a part of the collection
  and shared across all view layers and linkable.
* View layers define which subset of the scene collection hierarchy is excluded
  for each. For many workflows one view layer can be used, these are more of an
  advanced feature now.
OUTLINER
* The outliner now has a "View Layer" display mode instead of "Collections",
  which can display the collections and/or objects in the view layer.
* In this display mode, collections can be excluded with the right click menu.
  These will then be greyed out and their objects will be excluded.
* To view collections not linked to any scene, the "Blender File" display mode
  can be used, with the new filtering option to just see Colleciton datablocks.
* The outliner right click menus for collections and objects were reorganized.
* Drag and drop still needs to be improved. Like before, dragging the icon or
  text gives different results, we'll unify this later.
LINKING AND OVERRIDES
* Collections can now be linked into the scene without creating an instance,
  with the link/append operator or from the collections view in the outliner.
* Collections can get static overrides with the right click menu in the outliner,
  but this is rather unreliable and not clearly communicated at the moment.
* We still need to improve the make override operator to turn collection instances
  into collections with overrides directly in the scene.
PERFORMANCE
* We tried to make performance not worse than before and improve it in some
  cases. The main thing that's still a bit slower is multiple scenes, we have to
  change the layer syncing to only updated affected scenes.
* Collections keep a list of their parent collections for faster incremental
  updates in syncing and caching.
* View layer bases are now in a object -> base hash to avoid quadratic time
  lookups internally and in API functions like visible_get().
VERSIONING
* Compatibility with 2.7 files should be improved due to the new visibility
  controls. Of course users may not want to set up their scenes differently
  now to avoid having separate layers and groups.
* Compatibility with 2.8 is mostly there, and was tested on Eevee demo and Hero
  files. There's a few things which are know to be not quite compatible, like
  nested layer collections inside groups.
* The versioning code for 2.8 files is quite complicated, and isolated behind
  #ifdef so it can be removed at the end of the release cycle.
KNOWN ISSUES
* The G-key group operators in the 3D viewport were left mostly as is, they
  need to be modified still to fit better.
* Same for the groups panel in the object properties. This needs to be updated
  still, or perhaps replaced by something better.
* Collections must all have a unique name. Less restrictive namespacing is to
  be done later, we'll have to see how important this is as all objects within
  the collections must also have a unique name anyway.
* Full scene copy and delete scene are exactly doing the right thing yet.
Differential Revision: https://developer.blender.org/D3383
https://code.blender.org/2018/05/collections-and-groups/
											
										 
											2018-04-30 15:57:22 +02:00
										 |  |  | class VIEW3D_MT_object_collection(Menu): | 
					
						
							|  |  |  |     bl_label = "Collection" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-05 22:36:09 +11:00
										 |  |  |         layout.operator("object.move_to_collection") | 
					
						
							|  |  |  |         layout.operator("object.link_to_collection") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Collections and groups unification
OVERVIEW
* In 2.7 terminology, all layers and groups are now collection datablocks.
* These collections are nestable, linkable, instanceable, overrideable, ..
  which opens up new ways to set up scenes and link + override data.
* Viewport/render visibility and selectability are now a part of the collection
  and shared across all view layers and linkable.
* View layers define which subset of the scene collection hierarchy is excluded
  for each. For many workflows one view layer can be used, these are more of an
  advanced feature now.
OUTLINER
* The outliner now has a "View Layer" display mode instead of "Collections",
  which can display the collections and/or objects in the view layer.
* In this display mode, collections can be excluded with the right click menu.
  These will then be greyed out and their objects will be excluded.
* To view collections not linked to any scene, the "Blender File" display mode
  can be used, with the new filtering option to just see Colleciton datablocks.
* The outliner right click menus for collections and objects were reorganized.
* Drag and drop still needs to be improved. Like before, dragging the icon or
  text gives different results, we'll unify this later.
LINKING AND OVERRIDES
* Collections can now be linked into the scene without creating an instance,
  with the link/append operator or from the collections view in the outliner.
* Collections can get static overrides with the right click menu in the outliner,
  but this is rather unreliable and not clearly communicated at the moment.
* We still need to improve the make override operator to turn collection instances
  into collections with overrides directly in the scene.
PERFORMANCE
* We tried to make performance not worse than before and improve it in some
  cases. The main thing that's still a bit slower is multiple scenes, we have to
  change the layer syncing to only updated affected scenes.
* Collections keep a list of their parent collections for faster incremental
  updates in syncing and caching.
* View layer bases are now in a object -> base hash to avoid quadratic time
  lookups internally and in API functions like visible_get().
VERSIONING
* Compatibility with 2.7 files should be improved due to the new visibility
  controls. Of course users may not want to set up their scenes differently
  now to avoid having separate layers and groups.
* Compatibility with 2.8 is mostly there, and was tested on Eevee demo and Hero
  files. There's a few things which are know to be not quite compatible, like
  nested layer collections inside groups.
* The versioning code for 2.8 files is quite complicated, and isolated behind
  #ifdef so it can be removed at the end of the release cycle.
KNOWN ISSUES
* The G-key group operators in the 3D viewport were left mostly as is, they
  need to be modified still to fit better.
* Same for the groups panel in the object properties. This needs to be updated
  still, or perhaps replaced by something better.
* Collections must all have a unique name. Less restrictive namespacing is to
  be done later, we'll have to see how important this is as all objects within
  the collections must also have a unique name anyway.
* Full scene copy and delete scene are exactly doing the right thing yet.
Differential Revision: https://developer.blender.org/D3383
https://code.blender.org/2018/05/collections-and-groups/
											
										 
											2018-04-30 15:57:22 +02:00
										 |  |  |         layout.operator("collection.create") | 
					
						
							|  |  |  |         # layout.operator_menu_enum("collection.objects_remove", "collection")  # BUGGY | 
					
						
							|  |  |  |         layout.operator("collection.objects_remove") | 
					
						
							|  |  |  |         layout.operator("collection.objects_remove_all") | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Collections and groups unification
OVERVIEW
* In 2.7 terminology, all layers and groups are now collection datablocks.
* These collections are nestable, linkable, instanceable, overrideable, ..
  which opens up new ways to set up scenes and link + override data.
* Viewport/render visibility and selectability are now a part of the collection
  and shared across all view layers and linkable.
* View layers define which subset of the scene collection hierarchy is excluded
  for each. For many workflows one view layer can be used, these are more of an
  advanced feature now.
OUTLINER
* The outliner now has a "View Layer" display mode instead of "Collections",
  which can display the collections and/or objects in the view layer.
* In this display mode, collections can be excluded with the right click menu.
  These will then be greyed out and their objects will be excluded.
* To view collections not linked to any scene, the "Blender File" display mode
  can be used, with the new filtering option to just see Colleciton datablocks.
* The outliner right click menus for collections and objects were reorganized.
* Drag and drop still needs to be improved. Like before, dragging the icon or
  text gives different results, we'll unify this later.
LINKING AND OVERRIDES
* Collections can now be linked into the scene without creating an instance,
  with the link/append operator or from the collections view in the outliner.
* Collections can get static overrides with the right click menu in the outliner,
  but this is rather unreliable and not clearly communicated at the moment.
* We still need to improve the make override operator to turn collection instances
  into collections with overrides directly in the scene.
PERFORMANCE
* We tried to make performance not worse than before and improve it in some
  cases. The main thing that's still a bit slower is multiple scenes, we have to
  change the layer syncing to only updated affected scenes.
* Collections keep a list of their parent collections for faster incremental
  updates in syncing and caching.
* View layer bases are now in a object -> base hash to avoid quadratic time
  lookups internally and in API functions like visible_get().
VERSIONING
* Compatibility with 2.7 files should be improved due to the new visibility
  controls. Of course users may not want to set up their scenes differently
  now to avoid having separate layers and groups.
* Compatibility with 2.8 is mostly there, and was tested on Eevee demo and Hero
  files. There's a few things which are know to be not quite compatible, like
  nested layer collections inside groups.
* The versioning code for 2.8 files is quite complicated, and isolated behind
  #ifdef so it can be removed at the end of the release cycle.
KNOWN ISSUES
* The G-key group operators in the 3D viewport were left mostly as is, they
  need to be modified still to fit better.
* Same for the groups panel in the object properties. This needs to be updated
  still, or perhaps replaced by something better.
* Collections must all have a unique name. Less restrictive namespacing is to
  be done later, we'll have to see how important this is as all objects within
  the collections must also have a unique name anyway.
* Full scene copy and delete scene are exactly doing the right thing yet.
Differential Revision: https://developer.blender.org/D3383
https://code.blender.org/2018/05/collections-and-groups/
											
										 
											2018-04-30 15:57:22 +02:00
										 |  |  |         layout.operator("collection.objects_add_active") | 
					
						
							|  |  |  |         layout.operator("collection.objects_remove_active") | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_object_constraints(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Constraints" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         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") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-06 05:45:06 +00:00
										 |  |  | class VIEW3D_MT_object_quick_effects(Menu): | 
					
						
							|  |  |  |     bl_label = "Quick Effects" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2011-10-06 05:45:06 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("object.quick_fur") | 
					
						
							|  |  |  |         layout.operator("object.quick_explode") | 
					
						
							|  |  |  |         layout.operator("object.quick_smoke") | 
					
						
							|  |  |  |         layout.operator("object.quick_fluid") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Objects: restore H key per object hiding.
H hides selected objects, Shift+H hides unselected objects, and Alt+H
reveals hidden objects.
This hiding state is distinct from restrict viewport and render, and
meant for temporarily hiding objects without affecting more persistent
collection hiding.
Object hiding is per view-layer, same as selection. It affects the
viewport and any preview renders in there, but not final renders.
In the outliner, different icons are now used for temporary hiding, and
restrict viewport and render. Hidden objects are greyed out.
Remaining design issues:
* For lamps we probably still want to keep their effect on the scene,
  currently they are fully disabled by hiding. Arguably mesh lights or
  even objects being reflected or casting shadows are not that different
  but perhaps the special lamp exception from local view should remain.
* We need a feature still to disabled this hiding for specific viewports,
  for render or animation preview where you want to see the entire scene
  while working in another view.
* We need a new icon for restrict viewport, for now it uses a grid similar
  to the 2.4 icon.
* Hiding objects does not preserve selection state as it did in 2.7,
  it's probably convenient to support this again?
											
										 
											2018-05-14 23:36:56 +02:00
										 |  |  | class VIEW3D_MT_object_showhide(Menu): | 
					
						
							|  |  |  |     bl_label = "Show/Hide" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
											  
											
												Objects: restore H key per object hiding.
H hides selected objects, Shift+H hides unselected objects, and Alt+H
reveals hidden objects.
This hiding state is distinct from restrict viewport and render, and
meant for temporarily hiding objects without affecting more persistent
collection hiding.
Object hiding is per view-layer, same as selection. It affects the
viewport and any preview renders in there, but not final renders.
In the outliner, different icons are now used for temporary hiding, and
restrict viewport and render. Hidden objects are greyed out.
Remaining design issues:
* For lamps we probably still want to keep their effect on the scene,
  currently they are fully disabled by hiding. Arguably mesh lights or
  even objects being reflected or casting shadows are not that different
  but perhaps the special lamp exception from local view should remain.
* We need a feature still to disabled this hiding for specific viewports,
  for render or animation preview where you want to see the entire scene
  while working in another view.
* We need a new icon for restrict viewport, for now it uses a grid similar
  to the 2.4 icon.
* Hiding objects does not preserve selection state as it did in 2.7,
  it's probably convenient to support this again?
											
										 
											2018-05-14 23:36:56 +02:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-19 22:25:25 +01:00
										 |  |  |         layout.operator("object.hide_view_clear") | 
					
						
							| 
									
										
											  
											
												Objects: restore H key per object hiding.
H hides selected objects, Shift+H hides unselected objects, and Alt+H
reveals hidden objects.
This hiding state is distinct from restrict viewport and render, and
meant for temporarily hiding objects without affecting more persistent
collection hiding.
Object hiding is per view-layer, same as selection. It affects the
viewport and any preview renders in there, but not final renders.
In the outliner, different icons are now used for temporary hiding, and
restrict viewport and render. Hidden objects are greyed out.
Remaining design issues:
* For lamps we probably still want to keep their effect on the scene,
  currently they are fully disabled by hiding. Arguably mesh lights or
  even objects being reflected or casting shadows are not that different
  but perhaps the special lamp exception from local view should remain.
* We need a feature still to disabled this hiding for specific viewports,
  for render or animation preview where you want to see the entire scene
  while working in another view.
* We need a new icon for restrict viewport, for now it uses a grid similar
  to the 2.4 icon.
* Hiding objects does not preserve selection state as it did in 2.7,
  it's probably convenient to support this again?
											
										 
											2018-05-14 23:36:56 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("object.hide_view_set", text="Hide Selected").unselected = False | 
					
						
							|  |  |  |         layout.operator("object.hide_view_set", text="Hide Unselected").unselected = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_make_single_user(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Make Single User" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         props = layout.operator("object.make_single_user", text="Object") | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         props.object = True | 
					
						
							| 
									
										
										
										
											2018-06-01 10:26:42 +02:00
										 |  |  |         props.obdata = props.material = props.animation = False | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +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 | 
					
						
							| 
									
										
										
										
											2018-06-01 10:26:42 +02:00
										 |  |  |         props.material = props.animation = False | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-29 09:07:35 +02:00
										 |  |  |         props = layout.operator("object.make_single_user", text="Object & Data & Materials") | 
					
						
							|  |  |  |         props.object = props.obdata = props.material = True | 
					
						
							| 
									
										
										
										
											2014-03-23 11:33:40 +01:00
										 |  |  |         props.animation = False | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-29 09:07:35 +02:00
										 |  |  |         props = layout.operator("object.make_single_user", text="Materials") | 
					
						
							|  |  |  |         props.material = True | 
					
						
							| 
									
										
										
										
											2014-03-23 11:33:40 +01:00
										 |  |  |         props.object = props.obdata = props.animation = False | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         props = layout.operator("object.make_single_user", text="Object Animation") | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         props.animation = True | 
					
						
							| 
									
										
										
										
											2018-04-29 09:07:35 +02:00
										 |  |  |         props.object = props.obdata = props.material = False | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-04 10:25:57 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_make_links(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Make Links" | 
					
						
							| 
									
										
										
										
											2009-11-04 10:25:57 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-11-04 10:25:57 +00:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2013-01-22 04:54:31 +00:00
										 |  |  |         operator_context_default = layout.operator_context | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-04 17:01:51 +00:00
										 |  |  |         if len(bpy.data.scenes) > 10: | 
					
						
							| 
									
										
										
										
											2013-01-22 04:54:31 +00:00
										 |  |  |             layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |             layout.operator("object.make_links_scene", text="Objects to Scene...", icon='OUTLINER_OB_EMPTY') | 
					
						
							| 
									
										
										
										
											2010-12-02 22:58:23 +00:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2013-01-22 04:54:31 +00:00
										 |  |  |             layout.operator_context = 'EXEC_REGION_WIN' | 
					
						
							| 
									
										
										
										
											2017-06-09 15:23:44 -04:00
										 |  |  |             layout.operator_menu_enum("object.make_links_scene", "scene", text="Objects to Scene") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-22 04:54:31 +00:00
										 |  |  |         layout.operator_context = operator_context_default | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-06 05:45:06 +00:00
										 |  |  |         layout.operator("object.join_uvs")  # stupid place to add this! | 
					
						
							| 
									
										
										
										
											2009-11-04 10:25:57 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-15 05:01:47 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-16 18:06:38 +00:00
										 |  |  | class VIEW3D_MT_brush(Menu): | 
					
						
							|  |  |  |     bl_label = "Brush" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-13 14:11:59 +02:00
										 |  |  |         tool_settings = context.tool_settings | 
					
						
							| 
									
										
										
										
											2012-02-16 18:06:38 +00:00
										 |  |  |         settings = UnifiedPaintPanel.paint_settings(context) | 
					
						
							| 
									
										
										
										
											2017-04-17 23:42:17 -04:00
										 |  |  |         brush = getattr(settings, "brush", None) | 
					
						
							| 
									
										
										
										
											2012-02-16 18:06:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-13 14:11:59 +02:00
										 |  |  |         ups = tool_settings.unified_paint_settings | 
					
						
							| 
									
										
										
										
											2012-02-16 18:06:38 +00:00
										 |  |  |         layout.prop(ups, "use_unified_size", text="Unified Size") | 
					
						
							|  |  |  |         layout.prop(ups, "use_unified_strength", text="Unified Strength") | 
					
						
							| 
									
										
										
										
											2014-09-20 23:47:10 +02:00
										 |  |  |         if context.image_paint_object or context.vertex_paint_object: | 
					
						
							|  |  |  |             layout.prop(ups, "use_unified_color", text="Unified Color") | 
					
						
							| 
									
										
										
										
											2012-03-15 09:11:24 +00:00
										 |  |  |         layout.separator() | 
					
						
							| 
									
										
										
										
											2012-03-24 07:36:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-17 23:42:17 -04:00
										 |  |  |         # skip if no active brush | 
					
						
							|  |  |  |         if not brush: | 
					
						
							| 
									
										
										
										
											2017-09-02 15:42:29 +10:00
										 |  |  |             layout.label(text="No Brushes currently available", icon='INFO') | 
					
						
							| 
									
										
										
										
											2017-04-17 23:42:17 -04:00
										 |  |  |             return | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-15 09:11:24 +00:00
										 |  |  |         # brush paint modes | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_brush_paint_modes") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # brush tool | 
					
						
							|  |  |  |         if context.sculpt_object: | 
					
						
							|  |  |  |             layout.operator("brush.reset") | 
					
						
							|  |  |  |             layout.prop_menu_enum(brush, "sculpt_tool") | 
					
						
							|  |  |  |         elif context.image_paint_object: | 
					
						
							|  |  |  |             layout.prop_menu_enum(brush, "image_tool") | 
					
						
							| 
									
										
										
										
											2018-11-06 18:06:33 +11:00
										 |  |  |         elif context.vertex_paint_object: | 
					
						
							| 
									
										
										
										
											2012-03-15 09:11:24 +00:00
										 |  |  |             layout.prop_menu_enum(brush, "vertex_tool") | 
					
						
							| 
									
										
										
										
											2018-11-06 18:06:33 +11:00
										 |  |  |         elif context.weight_paint_object: | 
					
						
							|  |  |  |             layout.prop_menu_enum(brush, "weight_tool") | 
					
						
							| 
									
										
										
										
											2012-02-16 18:06:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # TODO: still missing a lot of brush options here | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # sculpt options | 
					
						
							|  |  |  |         if context.sculpt_object: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             sculpt_tool = brush.sculpt_tool | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             layout.separator() | 
					
						
							| 
									
										
										
										
											2012-07-04 21:41:05 +00:00
										 |  |  |             layout.operator_menu_enum("brush.curve_preset", "shape", text="Curve Preset") | 
					
						
							| 
									
										
										
										
											2012-02-16 18:06:38 +00:00
										 |  |  |             layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if sculpt_tool != 'GRAB': | 
					
						
							| 
									
										
										
										
											2014-08-26 16:44:32 +02:00
										 |  |  |                 layout.prop_menu_enum(brush, "stroke_method") | 
					
						
							| 
									
										
										
										
											2012-02-16 18:06:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |                 if sculpt_tool in {'DRAW', 'PINCH', 'INFLATE', 'LAYER', 'CLAY'}: | 
					
						
							|  |  |  |                     layout.prop_menu_enum(brush, "direction") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 if sculpt_tool == 'LAYER': | 
					
						
							|  |  |  |                     layout.prop(brush, "use_persistent") | 
					
						
							|  |  |  |                     layout.operator("sculpt.set_persistent_base") | 
					
						
							| 
									
										
										
										
											2010-05-25 06:24:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-24 07:36:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-15 09:11:24 +00:00
										 |  |  | class VIEW3D_MT_brush_paint_modes(Menu): | 
					
						
							|  |  |  |     bl_label = "Enabled Modes" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         settings = UnifiedPaintPanel.paint_settings(context) | 
					
						
							|  |  |  |         brush = settings.brush | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.prop(brush, "use_paint_sculpt", text="Sculpt") | 
					
						
							|  |  |  |         layout.prop(brush, "use_paint_vertex", text="Vertex Paint") | 
					
						
							|  |  |  |         layout.prop(brush, "use_paint_weight", text="Weight Paint") | 
					
						
							|  |  |  |         layout.prop(brush, "use_paint_image", text="Texture Paint") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-09 16:18:33 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_paint_vertex(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Paint" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2009-08-22 02:27:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-23 00:27:30 +00:00
										 |  |  |         layout.operator("paint.vertex_color_set") | 
					
						
							| 
									
										
										
										
											2013-04-27 19:00:26 +00:00
										 |  |  |         layout.operator("paint.vertex_color_smooth") | 
					
						
							| 
									
										
										
										
											2010-04-21 16:22:37 +00:00
										 |  |  |         layout.operator("paint.vertex_color_dirt") | 
					
						
							| 
									
										
										
										
											2017-09-29 17:10:15 +10:00
										 |  |  |         layout.operator("paint.vertex_color_from_weight") | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-17 01:45:40 +10:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("paint.vertex_color_invert", text="Invert") | 
					
						
							|  |  |  |         layout.operator("paint.vertex_color_levels", text="Levels") | 
					
						
							|  |  |  |         layout.operator("paint.vertex_color_hsv", text="Hue Saturation Value") | 
					
						
							|  |  |  |         layout.operator("paint.vertex_color_brightness_contrast", text="Bright/Contrast") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-16 13:59:27 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_hook(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Hooks" | 
					
						
							| 
									
										
										
										
											2009-11-16 13:59:27 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     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") | 
					
						
							| 
									
										
										
										
											2012-08-22 15:38:03 +00:00
										 |  |  |         layout.operator("object.hook_add_selob").use_bone = False | 
					
						
							| 
									
										
										
										
											2012-08-13 08:54:33 +00:00
										 |  |  |         layout.operator("object.hook_add_selob", text="Hook to Selected Object Bone").use_bone = True | 
					
						
							| 
									
										
										
										
											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() | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-23 00:27:30 +00:00
										 |  |  |             layout.operator_menu_enum("object.hook_assign", "modifier") | 
					
						
							|  |  |  |             layout.operator_menu_enum("object.hook_remove", "modifier") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-23 00:27:30 +00:00
										 |  |  |             layout.separator() | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-23 00:27:30 +00:00
										 |  |  |             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
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_vertex_group(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Vertex Groups" | 
					
						
							| 
									
										
										
										
											2009-11-22 06:20:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2012-07-29 12:07:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-22 06:20:56 +00:00
										 |  |  |         layout.operator_context = 'EXEC_AREA' | 
					
						
							| 
									
										
										
										
											2013-07-01 13:02:53 +00:00
										 |  |  |         layout.operator("object.vertex_group_assign_new") | 
					
						
							| 
									
										
										
										
											2009-11-28 23:37:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-22 06:20:56 +00:00
										 |  |  |         ob = context.active_object | 
					
						
							| 
									
										
										
										
											2018-04-05 18:20:27 +02:00
										 |  |  |         if ob.mode == 'EDIT' or (ob.mode == 'WEIGHT_PAINT' and ob.type == 'MESH' and ob.data.use_paint_mask_vertex): | 
					
						
							| 
									
										
										
										
											2010-08-24 04:02:50 +00:00
										 |  |  |             if ob.vertex_groups.active: | 
					
						
							| 
									
										
										
										
											2009-11-23 00:27:30 +00:00
										 |  |  |                 layout.separator() | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-01 13:02:53 +00:00
										 |  |  |                 layout.operator("object.vertex_group_assign", text="Assign to Active Group") | 
					
						
							| 
									
										
										
										
											2017-10-19 11:24:01 +11:00
										 |  |  |                 layout.operator( | 
					
						
							|  |  |  |                     "object.vertex_group_remove_from", | 
					
						
							|  |  |  |                     text="Remove from Active Group", | 
					
						
							|  |  |  |                 ).use_all_groups = False | 
					
						
							| 
									
										
										
										
											2013-06-25 22:58:45 +00:00
										 |  |  |                 layout.operator("object.vertex_group_remove_from", text="Remove from All").use_all_groups = True | 
					
						
							| 
									
										
										
										
											2009-11-28 23:37:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-24 04:02:50 +00:00
										 |  |  |         if ob.vertex_groups.active: | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  |             layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |             layout.operator_menu_enum("object.vertex_group_set_active", "group", text="Set Active Group") | 
					
						
							| 
									
										
										
										
											2012-01-14 06:30:27 +00:00
										 |  |  |             layout.operator("object.vertex_group_remove", text="Remove Active Group").all = False | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |             layout.operator("object.vertex_group_remove", text="Remove All Groups").all = True | 
					
						
							| 
									
										
										
										
											2009-11-16 13:59:27 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-09 16:18:33 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_paint_weight(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Weights" | 
					
						
							| 
									
										
										
										
											2010-01-26 11:11:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-24 16:54:38 +02:00
										 |  |  |     @staticmethod | 
					
						
							|  |  |  |     def draw_generic(layout, is_editmode=False): | 
					
						
							| 
									
										
										
										
											2010-01-26 11:11:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-24 16:54:38 +02:00
										 |  |  |         if not is_editmode: | 
					
						
							| 
									
										
										
										
											2010-09-18 16:17:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-24 16:54:38 +02: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' | 
					
						
							| 
									
										
										
										
											2010-01-26 11:11:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-24 16:54:38 +02:00
										 |  |  |             layout.separator() | 
					
						
							| 
									
										
										
										
											2010-01-26 11:11:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         layout.operator("object.vertex_group_normalize_all", text="Normalize All") | 
					
						
							|  |  |  |         layout.operator("object.vertex_group_normalize", text="Normalize") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-01 08:11:55 +00:00
										 |  |  |         layout.operator("object.vertex_group_mirror", text="Mirror") | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         layout.operator("object.vertex_group_invert", text="Invert") | 
					
						
							|  |  |  |         layout.operator("object.vertex_group_clean", text="Clean") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-17 14:54:42 +11:00
										 |  |  |         layout.operator("object.vertex_group_quantize", text="Quantize") | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         layout.operator("object.vertex_group_levels", text="Levels") | 
					
						
							| 
									
										
										
										
											2015-06-25 16:10:18 +10:00
										 |  |  |         layout.operator("object.vertex_group_smooth", text="Smooth") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-24 16:54:38 +02:00
										 |  |  |         if not is_editmode: | 
					
						
							|  |  |  |             props = layout.operator("object.data_transfer", text="Transfer Weights") | 
					
						
							|  |  |  |             props.use_reverse_transfer = True | 
					
						
							|  |  |  |             props.data_type = 'VGROUP_WEIGHTS' | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-09 10:56:35 +00:00
										 |  |  |         layout.operator("object.vertex_group_limit_total", text="Limit Total") | 
					
						
							| 
									
										
										
										
											2011-07-29 17:36:49 +00:00
										 |  |  |         layout.operator("object.vertex_group_fix", text="Fix Deforms") | 
					
						
							| 
									
										
										
										
											2011-04-04 22:42:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-24 16:54:38 +02:00
										 |  |  |         if not is_editmode: | 
					
						
							|  |  |  |             layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             layout.operator("paint.weight_set") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         self.draw_generic(self.layout, is_editmode=False) | 
					
						
							| 
									
										
										
										
											2009-11-16 13:59:27 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-09 16:18:33 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_sculpt(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Sculpt" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-13 14:11:59 +02:00
										 |  |  |         tool_settings = context.tool_settings | 
					
						
							|  |  |  |         sculpt = tool_settings.sculpt | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-29 18:58:34 +01:00
										 |  |  |         layout.operator("sculpt.dynamic_topology_toggle", text="Toggle Dynamic Topology") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         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") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-23 00:27:30 +00:00
										 |  |  |         layout.separator() | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-23 00:27:30 +00:00
										 |  |  |         layout.prop(sculpt, "lock_x") | 
					
						
							|  |  |  |         layout.prop(sculpt, "lock_y") | 
					
						
							|  |  |  |         layout.prop(sculpt, "lock_z") | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-26 23:49:23 +00:00
										 |  |  |         layout.separator() | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         layout.prop(sculpt, "use_threaded", text="Threaded Sculpt") | 
					
						
							| 
									
										
										
										
											2012-02-16 16:38:05 +00:00
										 |  |  |         layout.prop(sculpt, "show_low_resolution") | 
					
						
							| 
									
										
										
										
											2010-07-26 23:49:23 +00:00
										 |  |  |         layout.prop(sculpt, "show_brush") | 
					
						
							| 
									
										
										
										
											2012-02-16 16:38:05 +00:00
										 |  |  |         layout.prop(sculpt, "use_deform_only") | 
					
						
							| 
									
										
										
										
											2012-10-22 17:33:53 +00:00
										 |  |  |         layout.prop(sculpt, "show_diffuse_color") | 
					
						
							| 
									
										
										
										
											2018-01-15 11:38:56 +01:00
										 |  |  |         layout.prop(sculpt, "show_mask") | 
					
						
							| 
									
										
										
										
											2010-07-26 23:49:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-10 20:36:13 +00:00
										 |  |  | class VIEW3D_MT_hide_mask(Menu): | 
					
						
							|  |  |  |     bl_label = "Hide/Mask" | 
					
						
							| 
									
										
										
										
											2012-03-14 06:32:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2012-03-14 06:32:43 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-09 13:05:36 +00:00
										 |  |  |         props = layout.operator("paint.hide_show", text="Show All") | 
					
						
							|  |  |  |         props.action = 'SHOW' | 
					
						
							|  |  |  |         props.area = 'ALL' | 
					
						
							| 
									
										
										
										
											2012-03-14 06:32:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-09 13:05:36 +00:00
										 |  |  |         props = layout.operator("paint.hide_show", text="Hide Bounding Box") | 
					
						
							|  |  |  |         props.action = 'HIDE' | 
					
						
							|  |  |  |         props.area = 'INSIDE' | 
					
						
							| 
									
										
										
										
											2012-03-14 06:32:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-09 13:05:36 +00:00
										 |  |  |         props = layout.operator("paint.hide_show", text="Show Bounding Box") | 
					
						
							|  |  |  |         props.action = 'SHOW' | 
					
						
							|  |  |  |         props.area = 'INSIDE' | 
					
						
							| 
									
										
										
										
											2012-05-15 18:50:51 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-09 13:05:36 +00:00
										 |  |  |         props = layout.operator("paint.hide_show", text="Hide Masked") | 
					
						
							|  |  |  |         props.area = 'MASKED' | 
					
						
							|  |  |  |         props.action = 'HIDE' | 
					
						
							| 
									
										
										
										
											2012-05-10 20:36:13 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-09 13:05:36 +00:00
										 |  |  |         props = layout.operator("paint.mask_flood_fill", text="Invert Mask") | 
					
						
							|  |  |  |         props.mode = 'INVERT' | 
					
						
							| 
									
										
										
										
											2012-05-10 20:36:13 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-09 13:05:36 +00:00
										 |  |  |         props = layout.operator("paint.mask_flood_fill", text="Fill Mask") | 
					
						
							|  |  |  |         props.mode = 'VALUE' | 
					
						
							|  |  |  |         props.value = 1 | 
					
						
							| 
									
										
										
										
											2012-05-10 20:36:13 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-09 13:05:36 +00:00
										 |  |  |         props = layout.operator("paint.mask_flood_fill", text="Clear Mask") | 
					
						
							|  |  |  |         props.mode = 'VALUE' | 
					
						
							|  |  |  |         props.value = 0 | 
					
						
							| 
									
										
										
										
											2013-11-20 03:38:18 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |         props = layout.operator("view3d.select_box", text="Box Mask") | 
					
						
							| 
									
										
										
										
											2013-10-30 00:54:41 +00:00
										 |  |  |         props = layout.operator("paint.mask_lasso_gesture", text="Lasso Mask") | 
					
						
							| 
									
										
										
										
											2012-03-24 07:36:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-14 06:32:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-28 17:30:58 +01:00
										 |  |  | class VIEW3D_MT_particle(Menu): | 
					
						
							|  |  |  |     bl_label = "Particle" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2018-06-13 14:11:59 +02:00
										 |  |  |         tool_settings = context.tool_settings | 
					
						
							| 
									
										
										
										
											2016-12-28 17:30:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-13 14:11:59 +02:00
										 |  |  |         particle_edit = tool_settings.particle_edit | 
					
						
							| 
									
										
										
										
											2016-12-28 17:30:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-19 15:38:34 +11:00
										 |  |  |         layout.operator("particle.mirror") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-28 17:30:58 +01:00
										 |  |  |         layout.operator("particle.remove_doubles") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:38:34 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							| 
									
										
										
										
											2016-12-28 17:30:58 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if particle_edit.select_mode == 'POINT': | 
					
						
							|  |  |  |             layout.operator("particle.subdivide") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-26 16:05:52 +02:00
										 |  |  |         layout.operator("particle.unify_length") | 
					
						
							| 
									
										
										
										
											2016-12-28 17:30:58 +01:00
										 |  |  |         layout.operator("particle.rekey") | 
					
						
							|  |  |  |         layout.operator("particle.weight_set") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_particle_showhide") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("particle.delete") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-28 17:30:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 10:59:57 +11:00
										 |  |  | class VIEW3D_MT_particle_context_menu(Menu): | 
					
						
							| 
									
										
										
										
											2018-06-05 09:12:19 +02:00
										 |  |  |     bl_label = "Particle Context Menu" | 
					
						
							| 
									
										
										
										
											2016-12-28 17:30:58 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2018-06-13 14:11:59 +02:00
										 |  |  |         tool_settings = context.tool_settings | 
					
						
							| 
									
										
										
										
											2016-12-28 17:30:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-13 14:11:59 +02:00
										 |  |  |         particle_edit = tool_settings.particle_edit | 
					
						
							| 
									
										
										
										
											2016-12-28 17:30:58 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("particle.rekey") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-28 17:30:58 +01:00
										 |  |  |         layout.operator("particle.delete") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-28 17:30:58 +01:00
										 |  |  |         layout.operator("particle.remove_doubles") | 
					
						
							| 
									
										
										
										
											2016-04-26 16:05:52 +02:00
										 |  |  |         layout.operator("particle.unify_length") | 
					
						
							| 
									
										
										
										
											2016-12-28 17:30:58 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if particle_edit.select_mode == 'POINT': | 
					
						
							|  |  |  |             layout.operator("particle.subdivide") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("particle.weight_set") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-28 17:30:58 +01:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("particle.mirror") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if particle_edit.select_mode == 'POINT': | 
					
						
							|  |  |  |             layout.separator() | 
					
						
							| 
									
										
										
										
											2018-07-03 15:44:56 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |             layout.operator("particle.select_all", text="All").action = 'SELECT' | 
					
						
							|  |  |  |             layout.operator("particle.select_all", text="None").action = 'DESELECT' | 
					
						
							|  |  |  |             layout.operator("particle.select_all", text="Invert").action = 'INVERT' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-28 17:30:58 +01:00
										 |  |  |             layout.operator("particle.select_roots") | 
					
						
							|  |  |  |             layout.operator("particle.select_tips") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             layout.operator("particle.select_random") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             layout.operator("particle.select_more") | 
					
						
							|  |  |  |             layout.operator("particle.select_less") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             layout.operator("particle.select_linked") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_MT_particle_showhide(ShowHideMenu, Menu): | 
					
						
							|  |  |  |     _operator_name = "particle" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-09 16:18:33 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_pose(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Pose" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-06 06:37:07 +00:00
										 |  |  |         layout.menu("VIEW3D_MT_transform_armature") | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-23 13:55:33 +11:00
										 |  |  |         layout.operator("pose.copy", icon='COPYDOWN') | 
					
						
							|  |  |  |         layout.operator("pose.paste", icon='PASTEDOWN').flipped = False | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         layout.operator("pose.paste", icon='PASTEFLIPDOWN', text="Paste Pose Flipped").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' | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18: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' | 
					
						
							| 
									
										
										
										
											2014-04-25 17:07:30 +02:00
										 |  |  |         layout.operator("armature.armature_layers", text="Change Armature Layers...") | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         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") | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         layout.menu("VIEW3D_MT_bone_options_toggle", text="Bone Settings") | 
					
						
							| 
									
										
										
										
											2009-08-23 22:13:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_pose_transform(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Clear Transform" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         layout.operator("pose.transforms_clear", text="All") | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-15 13:24:53 +00:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-15 13:24:53 +00:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-02 15:42:29 +10:00
										 |  |  |         layout.operator("pose.user_transforms_clear", text="Reset Unkeyed") | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_pose_slide(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "In-Betweens" | 
					
						
							| 
									
										
										
										
											2011-03-24 03:02:34 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2011-03-24 03:02:34 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("pose.push") | 
					
						
							|  |  |  |         layout.operator("pose.relax") | 
					
						
							|  |  |  |         layout.operator("pose.breakdown") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_pose_propagate(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Propagate" | 
					
						
							| 
									
										
										
										
											2011-03-24 03:02:34 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2011-03-24 03:02:34 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-14 06:30:27 +00:00
										 |  |  |         layout.operator("pose.propagate").mode = 'WHILE_HELD' | 
					
						
							| 
									
										
										
										
											2011-03-31 01:37:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         layout.operator("pose.propagate", text="To Next Keyframe").mode = 'NEXT_KEY' | 
					
						
							|  |  |  |         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() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-02 23:30:30 +13:00
										 |  |  |         layout.operator("pose.propagate", text="On Selected Keyframes").mode = 'SELECTED_KEYS' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         layout.operator("pose.propagate", text="On Selected Markers").mode = 'SELECTED_MARKERS' | 
					
						
							| 
									
										
										
										
											2011-03-31 01:37:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-24 03:02:34 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_pose_library(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Pose Library" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_pose_motion(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Motion Paths" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_pose_group(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Bone Groups" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2013-01-15 23:15:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-15 02:01:39 +00:00
										 |  |  |         pose = context.active_object.pose | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-15 02:01:39 +00:00
										 |  |  |         layout.operator_context = 'EXEC_AREA' | 
					
						
							|  |  |  |         layout.operator("pose.group_assign", text="Assign to New Group").type = 0 | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-15 02:01:39 +00:00
										 |  |  |         if pose.bone_groups: | 
					
						
							|  |  |  |             active_group = pose.bone_groups.active_index + 1 | 
					
						
							|  |  |  |             layout.operator("pose.group_assign", text="Assign to Group").type = active_group | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             layout.separator() | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-01 03:51:50 +10:00
										 |  |  |             # layout.operator_context = 'INVOKE_AREA' | 
					
						
							| 
									
										
										
										
											2012-10-15 02:01:39 +00:00
										 |  |  |             layout.operator("pose.group_unassign") | 
					
						
							|  |  |  |             layout.operator("pose.group_remove") | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_pose_ik(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Inverse Kinematics" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_pose_constraints(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Constraints" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_pose_showhide(ShowHideMenu, 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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_pose_apply(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |     bl_label = "Apply" | 
					
						
							| 
									
										
										
										
											2010-02-19 15:34:26 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2010-02-19 15:34:26 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("pose.armature_apply") | 
					
						
							|  |  |  |         layout.operator("pose.visual_transform_apply") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-15 22:37:12 +03:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         props = layout.operator("object.assign_property_defaults") | 
					
						
							|  |  |  |         props.process_bones = True | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-19 15:34:26 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 10:59:57 +11:00
										 |  |  | class VIEW3D_MT_pose_context_menu(Menu): | 
					
						
							| 
									
										
										
										
											2018-06-05 09:12:19 +02:00
										 |  |  |     bl_label = "Pose Context Menu" | 
					
						
							| 
									
										
										
										
											2012-05-06 12:13:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2012-05-06 12:13:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2013-04-07 01:38:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  |         layout.operator("anim.keyframe_insert_menu", text="Insert Keyframe...") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-23 13:55:33 +11:00
										 |  |  |         layout.operator("pose.copy", icon='COPYDOWN') | 
					
						
							|  |  |  |         layout.operator("pose.paste", icon='PASTEDOWN').flipped = False | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         layout.operator("pose.paste", icon='PASTEFLIPDOWN', text="Paste X-Flipped Pose").flipped = True | 
					
						
							| 
									
										
										
										
											2013-04-07 01:38:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-06 10:52:52 +00:00
										 |  |  |         layout.separator() | 
					
						
							| 
									
										
										
										
											2019-03-26 14:36:15 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         props = layout.operator("wm.call_panel", text="Rename Active Bone...") | 
					
						
							|  |  |  |         props.name = "TOPBAR_PT_name" | 
					
						
							|  |  |  |         props.keep_open = False | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							| 
									
										
										
										
											2013-04-07 01:38:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         layout.operator("pose.paths_calculate", text="Calculate") | 
					
						
							|  |  |  |         layout.operator("pose.paths_clear", text="Clear") | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         layout.operator("pose.push") | 
					
						
							|  |  |  |         layout.operator("pose.relax") | 
					
						
							|  |  |  |         layout.operator("pose.breakdown") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-26 14:37:10 +01:00
										 |  |  |         layout.operator("pose.paths_calculate", text="Calculate Motion Paths") | 
					
						
							|  |  |  |         layout.operator("pose.paths_clear", text="Clear Motion Paths") | 
					
						
							| 
									
										
										
										
											2012-05-06 12:13:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  |         layout.operator("pose.hide").unselected = False | 
					
						
							|  |  |  |         layout.operator("pose.reveal") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("pose.user_transforms_clear") | 
					
						
							| 
									
										
										
										
											2012-05-06 12:13:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-27 07:51:52 +00:00
										 |  |  | class BoneOptions: | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         options = [ | 
					
						
							|  |  |  |             "show_wire", | 
					
						
							|  |  |  |             "use_deform", | 
					
						
							|  |  |  |             "use_envelope_multiply", | 
					
						
							|  |  |  |             "use_inherit_rotation", | 
					
						
							|  |  |  |             "use_inherit_scale", | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-27 11:40:15 +00:00
										 |  |  |         if context.mode == 'EDIT_ARMATURE': | 
					
						
							|  |  |  |             bone_props = bpy.types.EditBone.bl_rna.properties | 
					
						
							| 
									
										
										
										
											2011-06-27 07:51:52 +00:00
										 |  |  |             data_path_iter = "selected_bones" | 
					
						
							|  |  |  |             opt_suffix = "" | 
					
						
							| 
									
										
										
										
											2011-06-27 11:40:15 +00:00
										 |  |  |             options.append("lock") | 
					
						
							| 
									
										
										
										
											2011-10-17 06:58:07 +00:00
										 |  |  |         else:  # pose-mode | 
					
						
							| 
									
										
										
										
											2011-06-27 11:40:15 +00:00
										 |  |  |             bone_props = bpy.types.Bone.bl_rna.properties | 
					
						
							|  |  |  |             data_path_iter = "selected_pose_bones" | 
					
						
							|  |  |  |             opt_suffix = "bone." | 
					
						
							| 
									
										
										
										
											2011-06-27 07:51:52 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         for opt in options: | 
					
						
							| 
									
										
										
										
											2013-02-24 15:40:28 +00:00
										 |  |  |             props = layout.operator("wm.context_collection_boolean_set", text=bone_props[opt].name, | 
					
						
							| 
									
										
										
										
											2013-03-28 15:41:43 +00:00
										 |  |  |                                     text_ctxt=i18n_contexts.default) | 
					
						
							| 
									
										
										
										
											2011-06-27 07:51:52 +00:00
										 |  |  |             props.data_path_iter = data_path_iter | 
					
						
							|  |  |  |             props.data_path_item = opt_suffix + opt | 
					
						
							|  |  |  |             props.type = self.type | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_bone_options_toggle(Menu, BoneOptions): | 
					
						
							| 
									
										
										
										
											2011-06-27 11:40:15 +00:00
										 |  |  |     bl_label = "Toggle Bone Options" | 
					
						
							| 
									
										
										
										
											2011-06-27 07:51:52 +00:00
										 |  |  |     type = 'TOGGLE' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_bone_options_enable(Menu, BoneOptions): | 
					
						
							| 
									
										
										
										
											2011-06-27 11:40:15 +00:00
										 |  |  |     bl_label = "Enable Bone Options" | 
					
						
							| 
									
										
										
										
											2011-06-27 07:51:52 +00:00
										 |  |  |     type = 'ENABLE' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_bone_options_disable(Menu, BoneOptions): | 
					
						
							| 
									
										
										
										
											2011-06-27 11:40:15 +00:00
										 |  |  |     bl_label = "Disable Bone Options" | 
					
						
							| 
									
										
										
										
											2011-06-27 07:51:52 +00:00
										 |  |  |     type = 'DISABLE' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-09 16:18:33 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_edit_mesh(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Mesh" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         with_bullet = bpy.app.build_options.bullet | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator("mesh.duplicate_move", text="Duplicate") | 
					
						
							| 
									
										
										
										
											2013-06-01 05:26:37 +00:00
										 |  |  |         layout.menu("VIEW3D_MT_edit_mesh_extrude") | 
					
						
							| 
									
										
										
										
											2018-05-25 08:26:14 +02:00
										 |  |  |         layout.operator("mesh.split") | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator("mesh.bisect") | 
					
						
							| 
									
										
										
										
											2018-12-06 16:52:49 +11:00
										 |  |  |         layout.operator("mesh.knife_project") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         if with_bullet: | 
					
						
							|  |  |  |             layout.operator("mesh.convex_hull") | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-20 19:09:18 +00:00
										 |  |  |         layout.operator("mesh.symmetrize") | 
					
						
							|  |  |  |         layout.operator("mesh.symmetry_snap") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.menu("VIEW3D_MT_edit_mesh_normals") | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_edit_mesh_shading") | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_edit_mesh_weights") | 
					
						
							|  |  |  |         layout.operator_menu_enum("mesh.sort_elements", "type", text="Sort Elements...") | 
					
						
							| 
									
										
										
										
											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") | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator_menu_enum("mesh.separate", "type") | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_edit_mesh_clean") | 
					
						
							| 
									
										
										
										
											2018-07-17 11:59:24 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.menu("VIEW3D_MT_edit_mesh_delete") | 
					
						
							| 
									
										
										
										
											2009-08-17 10:13:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 10:59:57 +11:00
										 |  |  | class VIEW3D_MT_edit_mesh_context_menu(Menu): | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |     bl_label = "" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         def count_selected_items_for_objects_in_mode(): | 
					
						
							|  |  |  |             selected_verts_len = 0 | 
					
						
							|  |  |  |             selected_edges_len = 0 | 
					
						
							|  |  |  |             selected_faces_len = 0 | 
					
						
							|  |  |  |             for ob in context.objects_in_mode_unique_data: | 
					
						
							|  |  |  |                 v, e, f = ob.data.count_selected_items() | 
					
						
							|  |  |  |                 selected_verts_len += v | 
					
						
							|  |  |  |                 selected_edges_len += e | 
					
						
							|  |  |  |                 selected_faces_len += f | 
					
						
							|  |  |  |             return (selected_verts_len, selected_edges_len, selected_faces_len) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         is_vert_mode, is_edge_mode, is_face_mode = context.tool_settings.mesh_select_mode | 
					
						
							|  |  |  |         selected_verts_len, selected_edges_len, selected_faces_len = count_selected_items_for_objects_in_mode() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         del count_selected_items_for_objects_in_mode | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-20 15:26:27 +11:00
										 |  |  |         # If nothing is selected | 
					
						
							|  |  |  |         # (disabled for now until it can be made more useful). | 
					
						
							|  |  |  |         '''
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         # If nothing is selected | 
					
						
							|  |  |  |         if not (selected_verts_len or selected_edges_len or selected_faces_len): | 
					
						
							|  |  |  |             layout.menu("VIEW3D_MT_mesh_add", text="Add") | 
					
						
							| 
									
										
										
										
											2013-01-21 10:48:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             return | 
					
						
							| 
									
										
										
										
											2018-12-20 15:26:27 +11:00
										 |  |  |         '''
 | 
					
						
							| 
									
										
										
										
											2013-01-21 10:48:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         # Else something is selected | 
					
						
							| 
									
										
										
										
											2013-01-21 10:48:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         row = layout.row() | 
					
						
							| 
									
										
										
										
											2013-01-21 10:48:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         if is_vert_mode: | 
					
						
							|  |  |  |             col = row.column() | 
					
						
							| 
									
										
										
										
											2013-01-21 10:48:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             col.label(text="Vertex Context Menu", icon='VERTEXSEL') | 
					
						
							|  |  |  |             col.separator() | 
					
						
							| 
									
										
										
										
											2013-01-21 10:48:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             # Additive Operators | 
					
						
							|  |  |  |             col.operator("mesh.subdivide", text="Subdivide") | 
					
						
							| 
									
										
										
										
											2013-01-21 10:48:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             col.separator() | 
					
						
							| 
									
										
										
										
											2013-01-21 10:48:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 08:07:46 +02:00
										 |  |  |             col.operator("mesh.extrude_vertices_move", text="Extrude Vertices") | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             col.operator("mesh.bevel", text="Bevel Vertices").vertex_only = True | 
					
						
							| 
									
										
										
										
											2013-01-21 10:48:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             if selected_verts_len > 1: | 
					
						
							|  |  |  |                 col.separator() | 
					
						
							|  |  |  |                 col.operator("mesh.edge_face_add", text="New Edge/Face from Vertices") | 
					
						
							|  |  |  |                 col.operator("mesh.vert_connect_path", text="Connect Vertex Path") | 
					
						
							|  |  |  |                 col.operator("mesh.vert_connect", text="Connect Vertex Pairs") | 
					
						
							| 
									
										
										
										
											2013-01-21 10:48:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             col.separator() | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             # Deform Operators | 
					
						
							|  |  |  |             col.operator("transform.push_pull", text="Push/Pull") | 
					
						
							|  |  |  |             col.operator("transform.shrink_fatten", text="Shrink/Fatten") | 
					
						
							|  |  |  |             col.operator("transform.shear", text="Shear") | 
					
						
							|  |  |  |             col.operator("transform.vert_slide", text="Slide Vertices") | 
					
						
							|  |  |  |             col.operator("transform.vertex_random", text="Randomize Vertices") | 
					
						
							|  |  |  |             col.operator("mesh.vertices_smooth", text="Smooth Vertices") | 
					
						
							|  |  |  |             col.operator("mesh.vertices_smooth_laplacian", text="Smooth Laplacian") | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             col.separator() | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-20 10:17:10 +01:00
										 |  |  |             col.menu("VIEW3D_MT_mirror", text="Mirror Vertices") | 
					
						
							| 
									
										
										
										
											2019-03-11 23:33:13 +01:00
										 |  |  |             col.menu("VIEW3D_MT_snap", text="Snap Vertices") | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             col.separator() | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             # Removal Operators | 
					
						
							|  |  |  |             if selected_verts_len > 1: | 
					
						
							|  |  |  |                 col.operator("mesh.merge", text="Merge Vertices...") | 
					
						
							|  |  |  |                 col.operator("mesh.remove_doubles", text="Remove Double Vertices") | 
					
						
							|  |  |  |             col.operator("mesh.dissolve_verts") | 
					
						
							|  |  |  |             col.operator("mesh.delete", text="Delete Vertices").type = 'VERT' | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         if is_edge_mode: | 
					
						
							|  |  |  |             render = context.scene.render | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             col = row.column() | 
					
						
							|  |  |  |             col.label(text="Edge Context Menu", icon='EDGESEL') | 
					
						
							|  |  |  |             col.separator() | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             # Additive Operators | 
					
						
							|  |  |  |             col.operator("mesh.subdivide", text="Subdivide") | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             col.separator() | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 08:07:46 +02:00
										 |  |  |             col.operator("mesh.extrude_edges_move", text="Extrude Edges") | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             col.operator("mesh.bevel", text="Bevel Edges").vertex_only = False | 
					
						
							|  |  |  |             if selected_edges_len >= 2: | 
					
						
							|  |  |  |                 col.operator("mesh.bridge_edge_loops") | 
					
						
							| 
									
										
										
										
											2019-03-12 08:22:38 +11:00
										 |  |  |             if selected_edges_len >= 1: | 
					
						
							| 
									
										
										
										
											2019-03-11 16:48:39 +01:00
										 |  |  |                 col.operator("mesh.edge_face_add", text="New Face from Edges") | 
					
						
							| 
									
										
										
										
											2019-03-12 08:22:38 +11:00
										 |  |  |             if selected_edges_len >= 2: | 
					
						
							| 
									
										
										
										
											2019-03-11 16:48:39 +01:00
										 |  |  |                 col.operator("mesh.fill") | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             col.separator() | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             col.operator("mesh.loopcut_slide") | 
					
						
							|  |  |  |             col.operator("mesh.offset_edge_loops_slide") | 
					
						
							|  |  |  |             col.operator("mesh.knife_tool") | 
					
						
							|  |  |  |             col.operator("mesh.bisect") | 
					
						
							|  |  |  |             col.operator("mesh.bridge_edge_loops", text="Bridge Edge Loops") | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             col.separator() | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             # Deform Operators | 
					
						
							|  |  |  |             col.operator("mesh.edge_rotate", text="Rotate Edge CW").use_ccw = False | 
					
						
							|  |  |  |             col.operator("transform.edge_slide") | 
					
						
							|  |  |  |             col.operator("mesh.edge_split") | 
					
						
							| 
									
										
										
										
											2013-01-21 10:48:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             col.separator() | 
					
						
							| 
									
										
										
										
											2013-01-21 10:48:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             # Edge Flags | 
					
						
							|  |  |  |             col.operator("transform.edge_crease") | 
					
						
							|  |  |  |             col.operator("transform.edge_bevelweight") | 
					
						
							| 
									
										
										
										
											2009-10-12 21:06:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             col.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             col.operator("mesh.mark_seam").clear = False | 
					
						
							|  |  |  |             col.operator("mesh.mark_seam", text="Clear Seam").clear = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             col.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             col.operator("mesh.mark_sharp") | 
					
						
							|  |  |  |             col.operator("mesh.mark_sharp", text="Clear Sharp").clear = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if render.use_freestyle: | 
					
						
							|  |  |  |                 col.separator() | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |                 col.operator("mesh.mark_freestyle_edge").clear = False | 
					
						
							|  |  |  |                 col.operator("mesh.mark_freestyle_edge", text="Clear Freestyle Edge").clear = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             col.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # Removal Operators | 
					
						
							|  |  |  |             col.operator("mesh.unsubdivide") | 
					
						
							|  |  |  |             col.operator("mesh.dissolve_edges") | 
					
						
							|  |  |  |             col.operator("mesh.delete", text="Delete Edges").type = 'EDGE' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if is_face_mode: | 
					
						
							|  |  |  |             col = row.column() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             col.label(text="Face Context Menu", icon='FACESEL') | 
					
						
							|  |  |  |             col.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # Additive Operators | 
					
						
							|  |  |  |             col.operator("mesh.subdivide", text="Subdivide") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             col.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 08:07:46 +02:00
										 |  |  |             col.operator("view3d.edit_mesh_extrude_move_normal", text="Extrude Faces") | 
					
						
							|  |  |  |             col.operator("view3d.edit_mesh_extrude_move_shrink_fatten", text="Extrude Faces Along Normals") | 
					
						
							|  |  |  |             col.operator("mesh.extrude_faces_move", text="Extrude Individual Faces") | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 08:07:46 +02:00
										 |  |  |             col.operator("mesh.inset") | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |             col.operator("mesh.poke") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if selected_faces_len >= 2: | 
					
						
							|  |  |  |                 col.operator("mesh.bridge_edge_loops", text="Bridge Faces") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             col.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # Modify Operators | 
					
						
							| 
									
										
										
										
											2019-03-11 23:33:13 +01:00
										 |  |  |             col.menu("VIEW3D_MT_uv_map", text="UV Unwrap Faces") | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |             col.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             props = col.operator("mesh.quads_convert_to_tris") | 
					
						
							|  |  |  |             props.quad_method = props.ngon_method = 'BEAUTY' | 
					
						
							|  |  |  |             col.operator("mesh.tris_convert_to_quads") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             col.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             col.operator("mesh.faces_shade_smooth") | 
					
						
							|  |  |  |             col.operator("mesh.faces_shade_flat") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             col.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # Removal Operators | 
					
						
							|  |  |  |             col.operator("mesh.unsubdivide") | 
					
						
							|  |  |  |             col.operator("mesh.dissolve_faces") | 
					
						
							|  |  |  |             col.operator("mesh.delete", text="Delete Faces").type = 'FACE' | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_edit_mesh_select_mode(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Mesh Select Mode" | 
					
						
							| 
									
										
										
										
											2009-12-22 16:11:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-12-22 16:11:11 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							| 
									
										
										
										
											2012-11-13 05:44:49 +00:00
										 |  |  |         layout.operator("mesh.select_mode", text="Vertex", icon='VERTEXSEL').type = 'VERT' | 
					
						
							|  |  |  |         layout.operator("mesh.select_mode", text="Edge", icon='EDGESEL').type = 'EDGE' | 
					
						
							|  |  |  |         layout.operator("mesh.select_mode", text="Face", icon='FACESEL').type = 'FACE' | 
					
						
							| 
									
										
										
										
											2009-12-22 16:11:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-12 22:13:47 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_edit_mesh_extrude(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Extrude" | 
					
						
							| 
									
										
										
										
											2010-02-01 18:30:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-08 01:32:34 +00:00
										 |  |  |     _extrude_funcs = { | 
					
						
							| 
									
										
										
										
											2013-10-15 18:30:49 +00:00
										 |  |  |         'VERT': lambda layout: | 
					
						
							| 
									
										
										
										
											2019-04-19 07:51:14 +02:00
										 |  |  |         layout.operator("mesh.extrude_vertices_move", text="Extrude Vertices"), | 
					
						
							| 
									
										
										
										
											2013-10-15 18:30:49 +00:00
										 |  |  |         'EDGE': lambda layout: | 
					
						
							| 
									
										
										
										
											2019-04-19 07:51:14 +02:00
										 |  |  |         layout.operator("mesh.extrude_edges_move", text="Extrude Edges"), | 
					
						
							| 
									
										
										
										
											2013-10-15 18:30:49 +00:00
										 |  |  |         'REGION': lambda layout: | 
					
						
							| 
									
										
										
										
											2019-04-19 07:51:14 +02:00
										 |  |  |         layout.operator("view3d.edit_mesh_extrude_move_normal", text="Extrude Faces"), | 
					
						
							| 
									
										
										
										
											2013-10-15 18:30:49 +00:00
										 |  |  |         'REGION_VERT_NORMAL': lambda layout: | 
					
						
							| 
									
										
										
										
											2019-04-19 07:51:14 +02:00
										 |  |  |         layout.operator("view3d.edit_mesh_extrude_move_shrink_fatten", text="Extrude Faces Along Normals"), | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         'FACE': lambda layout: | 
					
						
							| 
									
										
										
										
											2019-04-19 07:51:14 +02:00
										 |  |  |         layout.operator("mesh.extrude_faces_move", text="Extrude Individual Faces"), | 
					
						
							| 
									
										
										
										
											2010-10-11 02:05:44 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-12 22:13:47 +00:00
										 |  |  |     @staticmethod | 
					
						
							|  |  |  |     def extrude_options(context): | 
					
						
							| 
									
										
										
										
											2018-06-13 14:11:59 +02:00
										 |  |  |         tool_settings = context.tool_settings | 
					
						
							|  |  |  |         select_mode = tool_settings.mesh_select_mode | 
					
						
							| 
									
										
										
										
											2010-02-12 22:13:47 +00:00
										 |  |  |         mesh = context.object.data | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-11 02:05:44 +00:00
										 |  |  |         menu = [] | 
					
						
							|  |  |  |         if mesh.total_face_sel: | 
					
						
							| 
									
										
										
										
											2013-10-15 18:30:49 +00:00
										 |  |  |             menu += ['REGION', 'REGION_VERT_NORMAL', 'FACE'] | 
					
						
							| 
									
										
										
										
											2010-10-11 02:05:44 +00:00
										 |  |  |         if mesh.total_edge_sel and (select_mode[0] or select_mode[1]): | 
					
						
							| 
									
										
										
										
											2011-11-11 03:28:46 +00:00
										 |  |  |             menu += ['EDGE'] | 
					
						
							| 
									
										
										
										
											2010-10-11 02:05:44 +00:00
										 |  |  |         if mesh.total_vert_sel and select_mode[0]: | 
					
						
							| 
									
										
										
										
											2011-11-11 03:28:46 +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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_edit_mesh_vertices(Menu): | 
					
						
							| 
									
										
										
										
											2018-05-23 15:39:39 +02:00
										 |  |  |     bl_label = "Vertex" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  |         layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 08:07:46 +02:00
										 |  |  |         layout.operator("mesh.extrude_vertices_move", text="Extrude Vertices") | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator("mesh.bevel", text="Bevel Vertices").vertex_only = True | 
					
						
							| 
									
										
										
										
											2016-09-05 00:10:13 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.edge_face_add", text="New Edge/Face from Vertices") | 
					
						
							| 
									
										
										
										
											2015-02-06 15:46:38 +11:00
										 |  |  |         layout.operator("mesh.vert_connect_path", text="Connect Vertex Path") | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator("mesh.vert_connect", text="Connect Vertex Pairs") | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         props = layout.operator("mesh.rip_move", text="Rip Vertices") | 
					
						
							|  |  |  |         props.MESH_OT_rip.use_fill = False | 
					
						
							| 
									
										
										
										
											2018-05-24 16:09:20 +02:00
										 |  |  |         props = layout.operator("mesh.rip_move", text="Rip Vertices and Fill") | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         props.MESH_OT_rip.use_fill = True | 
					
						
							| 
									
										
										
										
											2018-05-24 16:09:20 +02:00
										 |  |  |         layout.operator("mesh.rip_edge_move", text="Rip Vertices and Extend") | 
					
						
							| 
									
										
										
										
											2015-06-13 00:30:39 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator("transform.vert_slide", text="Slide Vertices") | 
					
						
							|  |  |  |         layout.operator("mesh.vertices_smooth", text="Smooth Vertices") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-23 00:27:30 +00:00
										 |  |  |         layout.operator("mesh.blend_from_shape") | 
					
						
							| 
									
										
										
										
											2018-05-24 16:09:20 +02:00
										 |  |  |         layout.operator("mesh.shape_propagate_to_all", text="Propagate to Shapes") | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.merge", text="Merge Vertices") | 
					
						
							|  |  |  |         layout.operator("mesh.remove_doubles", text="Remove Double Vertices") | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-12 18:57:40 +01:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("object.vertex_parent_set") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-01 10:16:28 +02:00
										 |  |  | class VIEW3D_MT_edit_mesh_edges_data(Menu): | 
					
						
							|  |  |  |     bl_label = "Edge Data" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2013-07-30 09:00:31 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         render = context.scene.render | 
					
						
							| 
									
										
										
										
											2012-07-29 12:07:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-12 23:07:52 +00:00
										 |  |  |         layout.operator("transform.edge_crease") | 
					
						
							|  |  |  |         layout.operator("transform.edge_bevelweight") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-14 06:30:27 +00:00
										 |  |  |         layout.operator("mesh.mark_seam").clear = False | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18: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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-13 00:30:39 +10:00
										 |  |  |         layout.operator("mesh.mark_sharp") | 
					
						
							|  |  |  |         layout.operator("mesh.mark_sharp", text="Clear Sharp").clear = True | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator("mesh.mark_sharp", text="Mark Sharp from Vertices").use_verts = True | 
					
						
							|  |  |  |         props = layout.operator("mesh.mark_sharp", text="Clear Sharp from Vertices") | 
					
						
							|  |  |  |         props.use_verts = True | 
					
						
							|  |  |  |         props.clear = True | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         if render.use_freestyle: | 
					
						
							| 
									
										
										
										
											2018-07-17 11:59:24 +02:00
										 |  |  |             layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-20 07:57:26 +00:00
										 |  |  |             layout.operator("mesh.mark_freestyle_edge").clear = False | 
					
						
							|  |  |  |             layout.operator("mesh.mark_freestyle_edge", text="Clear Freestyle Edge").clear = True | 
					
						
							| 
									
										
										
										
											2011-10-06 02:04:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-01 10:16:28 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_MT_edit_mesh_edges(Menu): | 
					
						
							| 
									
										
										
										
											2018-05-23 15:39:39 +02:00
										 |  |  |     bl_label = "Edge" | 
					
						
							| 
									
										
										
										
											2018-04-01 10:16:28 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2018-04-01 10:16:28 +02:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-09 17:22:05 +01:00
										 |  |  |         with_freestyle = bpy.app.build_options.freestyle | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-01 10:16:28 +02:00
										 |  |  |         layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 08:07:46 +02:00
										 |  |  |         layout.operator("mesh.extrude_edges_move", text="Extrude Edges") | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator("mesh.bevel", text="Bevel Edges").vertex_only = False | 
					
						
							|  |  |  |         layout.operator("mesh.bridge_edge_loops") | 
					
						
							| 
									
										
										
										
											2018-04-01 10:16:28 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator("mesh.subdivide") | 
					
						
							|  |  |  |         layout.operator("mesh.subdivide_edgering") | 
					
						
							|  |  |  |         layout.operator("mesh.unsubdivide") | 
					
						
							| 
									
										
										
										
											2018-04-01 10:16:28 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-20 05:50:19 +00:00
										 |  |  |         layout.operator("mesh.edge_rotate", text="Rotate Edge CW").use_ccw = False | 
					
						
							|  |  |  |         layout.operator("mesh.edge_rotate", text="Rotate Edge CCW").use_ccw = 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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator("transform.edge_slide") | 
					
						
							| 
									
										
										
										
											2012-03-23 03:10:44 +00:00
										 |  |  |         layout.operator("mesh.edge_split") | 
					
						
							| 
									
										
										
										
											2017-01-03 10:34:05 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-09 17:22:05 +01:00
										 |  |  |         layout.operator("transform.edge_crease") | 
					
						
							|  |  |  |         layout.operator("transform.edge_bevelweight") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.mark_seam").clear = False | 
					
						
							|  |  |  |         layout.operator("mesh.mark_seam", text="Clear Seam").clear = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.mark_sharp") | 
					
						
							|  |  |  |         layout.operator("mesh.mark_sharp", text="Clear Sharp").clear = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.mark_sharp", text="Mark Sharp from Vertices").use_verts = True | 
					
						
							|  |  |  |         props = layout.operator("mesh.mark_sharp", text="Clear Sharp from Vertices") | 
					
						
							|  |  |  |         props.use_verts = True | 
					
						
							|  |  |  |         props.clear = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if with_freestyle: | 
					
						
							|  |  |  |             layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             layout.operator("mesh.mark_freestyle_edge").clear = False | 
					
						
							|  |  |  |             layout.operator("mesh.mark_freestyle_edge", text="Clear Freestyle Edge").clear = True | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_MT_edit_mesh_faces_data(Menu): | 
					
						
							|  |  |  |     bl_label = "Face Data" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 16:09:20 +02:00
										 |  |  |         with_freestyle = bpy.app.build_options.freestyle | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.colors_rotate") | 
					
						
							|  |  |  |         layout.operator("mesh.colors_reverse") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.uvs_rotate") | 
					
						
							|  |  |  |         layout.operator("mesh.uvs_reverse") | 
					
						
							| 
									
										
										
										
											2009-10-12 21:06:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 16:09:20 +02:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if with_freestyle: | 
					
						
							|  |  |  |             layout.operator("mesh.mark_freestyle_face").clear = False | 
					
						
							|  |  |  |             layout.operator("mesh.mark_freestyle_face", text="Clear Freestyle Face").clear = True | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-12 21:06:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_edit_mesh_faces(Menu): | 
					
						
							| 
									
										
										
										
											2018-05-23 15:39:39 +02:00
										 |  |  |     bl_label = "Face" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |     bl_idname = "VIEW3D_MT_edit_mesh_faces" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2013-07-30 09:00:31 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 08:07:46 +02:00
										 |  |  |         layout.operator("view3d.edit_mesh_extrude_move_normal", text="Extrude Faces") | 
					
						
							|  |  |  |         layout.operator("view3d.edit_mesh_extrude_move_shrink_fatten", text="Extrude Faces Along Normals") | 
					
						
							|  |  |  |         layout.operator("mesh.extrude_faces_move", text="Extrude Individual 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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator("mesh.inset") | 
					
						
							| 
									
										
										
										
											2013-04-06 02:45:43 +00:00
										 |  |  |         layout.operator("mesh.poke") | 
					
						
							| 
									
										
										
										
											2015-01-29 17:34:05 +01:00
										 |  |  |         props = layout.operator("mesh.quads_convert_to_tris") | 
					
						
							|  |  |  |         props.quad_method = props.ngon_method = 'BEAUTY' | 
					
						
							| 
									
										
										
										
											2009-11-23 00:27:30 +00:00
										 |  |  |         layout.operator("mesh.tris_convert_to_quads") | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator("mesh.solidify", text="Solidify Faces") | 
					
						
							|  |  |  |         layout.operator("mesh.wireframe") | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator("mesh.fill") | 
					
						
							|  |  |  |         layout.operator("mesh.fill_grid") | 
					
						
							|  |  |  |         layout.operator("mesh.beautify_fill") | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.intersect") | 
					
						
							|  |  |  |         layout.operator("mesh.intersect_boolean") | 
					
						
							| 
									
										
										
										
											2014-10-22 23:25:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-23 00:27:30 +00:00
										 |  |  |         layout.separator() | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator("mesh.face_split_by_edges") | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.operator("mesh.faces_shade_smooth") | 
					
						
							|  |  |  |         layout.operator("mesh.faces_shade_flat") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_edit_mesh_faces_data") | 
					
						
							| 
									
										
										
										
											2009-10-12 21:06:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-17 10:13:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_edit_mesh_normals(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Normals" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2009-08-17 10:13:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-14 06:30:27 +00:00
										 |  |  |         layout.operator("mesh.normals_make_consistent", text="Recalculate Outside").inside = False | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18: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") | 
					
						
							| 
									
										
										
										
											2018-04-24 21:07:05 +02:00
										 |  |  |         layout.operator("mesh.set_normals_from_faces", text="Set From Faces") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-25 22:24:24 +05:30
										 |  |  |         layout.operator("transform.rotate_normal", text="Rotate Normal") | 
					
						
							|  |  |  |         layout.operator("mesh.point_normals", text="Point normals to target") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.merge_normals", text="Merge") | 
					
						
							|  |  |  |         layout.operator("mesh.split_normals", text="Split") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.average_normals", text="Average Normals") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.label(text="Normal Vector") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.normals_tools", text="Copy").mode = 'COPY' | 
					
						
							|  |  |  |         layout.operator("mesh.normals_tools", text="Paste").mode = 'PASTE' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.normals_tools", text="Multiply").mode = 'MULTIPLY' | 
					
						
							|  |  |  |         layout.operator("mesh.normals_tools", text="Add").mode = 'ADD' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.normals_tools", text="Reset").mode = 'RESET' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.smoothen_normals", text="Smoothen") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.label(text="Face Strength") | 
					
						
							| 
									
										
										
										
											2018-08-28 21:00:25 +10:00
										 |  |  |         layout.operator("mesh.mod_weighted_strength", text="Face Select", icon='FACESEL').set = False | 
					
						
							| 
									
										
										
										
											2018-10-01 10:45:50 +02:00
										 |  |  |         layout.operator("mesh.mod_weighted_strength", text="Set Strength", icon='ADD').set = True | 
					
						
							| 
									
										
										
										
											2018-05-25 22:24:24 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-24 21:07:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_MT_edit_mesh_shading(Menu): | 
					
						
							|  |  |  |     bl_label = "Shading" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2018-04-24 21:07:05 +02:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-26 14:29:21 +02:00
										 |  |  |         layout.operator("mesh.faces_shade_smooth", text="Smooth Faces") | 
					
						
							|  |  |  |         layout.operator("mesh.faces_shade_flat", text="Flat Faces") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.mark_sharp", text="Smooth Edges").clear = True | 
					
						
							|  |  |  |         layout.operator("mesh.mark_sharp", text="Sharp Edges") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         props = layout.operator("mesh.mark_sharp", text="Smooth Vertices") | 
					
						
							| 
									
										
										
										
											2018-04-24 21:07:05 +02:00
										 |  |  |         props.use_verts = True | 
					
						
							|  |  |  |         props.clear = True | 
					
						
							| 
									
										
										
										
											2018-06-26 14:29:21 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("mesh.mark_sharp", text="Sharp Vertices").use_verts = True | 
					
						
							| 
									
										
										
										
											2009-08-17 10:13:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-24 16:54:38 +02:00
										 |  |  | class VIEW3D_MT_edit_mesh_weights(Menu): | 
					
						
							|  |  |  |     bl_label = "Weights" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2018-04-24 16:54:38 +02:00
										 |  |  |         VIEW3D_MT_paint_weight.draw_generic(self.layout, is_editmode=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-25 18:43:05 +00:00
										 |  |  | class VIEW3D_MT_edit_mesh_clean(Menu): | 
					
						
							| 
									
										
										
										
											2017-10-30 22:36:51 +11:00
										 |  |  |     bl_label = "Clean Up" | 
					
						
							| 
									
										
										
										
											2013-07-25 18:43:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2013-07-25 18:43:05 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-17 12:08:12 +11:00
										 |  |  |         layout.operator("mesh.delete_loose") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-08 23:35:27 +10:00
										 |  |  |         layout.operator("mesh.decimate") | 
					
						
							| 
									
										
										
										
											2014-02-17 11:32:35 +11:00
										 |  |  |         layout.operator("mesh.dissolve_degenerate") | 
					
						
							|  |  |  |         layout.operator("mesh.dissolve_limited") | 
					
						
							| 
									
										
										
										
											2015-06-11 21:46:51 +10:00
										 |  |  |         layout.operator("mesh.face_make_planar") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-28 19:53:46 +00:00
										 |  |  |         layout.operator("mesh.vert_connect_nonplanar") | 
					
						
							| 
									
										
										
										
											2015-02-02 09:04:31 +11:00
										 |  |  |         layout.operator("mesh.vert_connect_concave") | 
					
						
							| 
									
										
										
										
											2017-02-09 16:25:04 -05:00
										 |  |  |         layout.operator("mesh.remove_doubles") | 
					
						
							| 
									
										
										
										
											2014-02-17 11:32:35 +11:00
										 |  |  |         layout.operator("mesh.fill_holes") | 
					
						
							| 
									
										
										
										
											2013-07-25 18:43:05 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-23 10:30:42 +00:00
										 |  |  | class VIEW3D_MT_edit_mesh_delete(Menu): | 
					
						
							|  |  |  |     bl_label = "Delete" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2012-03-23 10:30:42 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator_enum("mesh.delete", "type") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-15 13:33:28 +00:00
										 |  |  |         layout.operator("mesh.dissolve_verts") | 
					
						
							|  |  |  |         layout.operator("mesh.dissolve_edges") | 
					
						
							|  |  |  |         layout.operator("mesh.dissolve_faces") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							| 
									
										
										
										
											2013-05-08 13:48:57 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-30 05:19:27 +00:00
										 |  |  |         layout.operator("mesh.dissolve_limited") | 
					
						
							| 
									
										
										
										
											2012-03-23 10:30:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-30 05:19:27 +00:00
										 |  |  |         layout.operator("mesh.edge_collapse") | 
					
						
							| 
									
										
										
										
											2014-05-29 15:28:09 +10:00
										 |  |  |         layout.operator("mesh.delete_edgeloop", text="Edge Loops") | 
					
						
							| 
									
										
										
										
											2012-03-23 10:30:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_edit_mesh_showhide(ShowHideMenu, Menu): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |     _operator_name = "mesh" | 
					
						
							| 
									
										
										
										
											2009-08-17 10:13:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-05 14:34:17 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_MT_edit_gpencil_delete(Menu): | 
					
						
							|  |  |  |     bl_label = "Delete" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2015-07-05 14:34:17 +10:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator_enum("gpencil.delete", "type") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         layout.operator_enum("gpencil.dissolve", "type") | 
					
						
							| 
									
										
										
										
											2015-07-05 14:34:17 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-21 18:33:44 +12:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-18 12:58:26 +12:00
										 |  |  |         layout.operator("gpencil.active_frames_delete_all") | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  | def draw_curve(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |     layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-17 12:44:18 +02:00
										 |  |  |     layout.operator("curve.spin") | 
					
						
							| 
									
										
										
										
											2012-05-12 20:50:46 +00:00
										 |  |  |     layout.operator("curve.duplicate_move") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |     layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-29 02:32:51 +00:00
										 |  |  |     layout.operator("curve.split") | 
					
						
							| 
									
										
										
										
											2009-11-23 00:27:30 +00:00
										 |  |  |     layout.operator("curve.separate") | 
					
						
							|  |  |  |     layout.operator("curve.cyclic_toggle") | 
					
						
							| 
									
										
										
										
											2018-11-30 16:40:39 +11:00
										 |  |  |     layout.operator_menu_enum("curve.spline_type_set", "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-11-23 00:27:30 +00:00
										 |  |  |     layout.menu("VIEW3D_MT_edit_curve_showhide") | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |     layout.menu("VIEW3D_MT_edit_curve_clean") | 
					
						
							|  |  |  |     layout.menu("VIEW3D_MT_edit_curve_delete") | 
					
						
							| 
									
										
										
										
											2009-08-17 10:13:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_edit_curve(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Curve" | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_edit_curve_ctrlpoints(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Control Points" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         edit_object = context.edit_object | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-08 15:01:47 +11:00
										 |  |  |         if edit_object.type in {'CURVE', 'SURFACE'}: | 
					
						
							| 
									
										
										
										
											2018-11-30 09:45:13 +11:00
										 |  |  |             layout.operator("curve.extrude_move") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             layout.operator("curve.make_segment") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-07 14:57:54 +01:00
										 |  |  |             if edit_object.type == 'CURVE': | 
					
						
							|  |  |  |                 layout.operator("transform.tilt") | 
					
						
							|  |  |  |                 layout.operator("curve.tilt_clear") | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-07 14:57:54 +01:00
										 |  |  |                 layout.separator() | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-07 14:57:54 +01:00
										 |  |  |                 layout.operator_menu_enum("curve.handle_type_set", "type") | 
					
						
							|  |  |  |                 layout.operator("curve.normals_make_consistent") | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-07 14:57:54 +01:00
										 |  |  |                 layout.separator() | 
					
						
							| 
									
										
										
										
											2009-11-16 13:59:27 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-30 09:45:13 +11:00
										 |  |  |             layout.operator("curve.smooth") | 
					
						
							| 
									
										
										
										
											2018-12-07 14:57:54 +01:00
										 |  |  |             if edit_object.type == 'CURVE': | 
					
						
							|  |  |  |                 layout.operator("curve.smooth_tilt") | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  |                 layout.operator("curve.smooth_radius") | 
					
						
							|  |  |  |                 layout.operator("curve.smooth_weight") | 
					
						
							| 
									
										
										
										
											2018-11-30 09:45:13 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |             layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-15 15:28:59 +00:00
										 |  |  |         layout.menu("VIEW3D_MT_hook") | 
					
						
							| 
									
										
										
										
											2009-11-16 13:59:27 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-12 18:57:40 +01:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("object.vertex_parent_set") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_edit_curve_segments(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Segments" | 
					
						
							| 
									
										
										
										
											2009-08-17 10:13:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-30 22:36:51 +11:00
										 |  |  | class VIEW3D_MT_edit_curve_clean(Menu): | 
					
						
							|  |  |  |     bl_label = "Clean Up" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2017-10-30 22:36:51 +11:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("curve.decimate") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-26 09:36:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 10:59:57 +11:00
										 |  |  | class VIEW3D_MT_edit_curve_context_menu(Menu): | 
					
						
							| 
									
										
										
										
											2018-06-05 09:12:19 +02:00
										 |  |  |     bl_label = "Curve Context Menu" | 
					
						
							| 
									
										
										
										
											2009-08-17 10:13:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2018-11-30 09:45:13 +11:00
										 |  |  |         # TODO(campbell): match mesh vertex menu. | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-24 10:39:30 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         layout.operator_context = 'INVOKE_DEFAULT' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-01 10:55:23 +11:00
										 |  |  |         # Add | 
					
						
							| 
									
										
										
										
											2009-12-24 10:39:30 +00:00
										 |  |  |         layout.operator("curve.subdivide") | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  |         layout.operator("curve.extrude_move") | 
					
						
							|  |  |  |         layout.operator("curve.make_segment") | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         layout.operator("curve.duplicate_move") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-01 10:55:23 +11:00
										 |  |  |         # Transform | 
					
						
							| 
									
										
										
										
											2019-03-04 10:17:45 +01:00
										 |  |  |         layout.operator("transform.transform", text="Radius").mode = 'CURVE_SHRINKFATTEN' | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  |         layout.operator("transform.tilt") | 
					
						
							|  |  |  |         layout.operator("curve.tilt_clear") | 
					
						
							|  |  |  |         layout.operator("curve.smooth") | 
					
						
							|  |  |  |         layout.operator("curve.smooth_tilt") | 
					
						
							|  |  |  |         layout.operator("curve.smooth_radius") | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  |         layout.menu("VIEW3D_MT_mirror") | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_snap") | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-01 10:55:23 +11:00
										 |  |  |         # Modify | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  |         layout.operator_menu_enum("curve.spline_type_set", "type") | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         layout.operator_menu_enum("curve.handle_type_set", "type") | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  |         layout.operator("curve.cyclic_toggle") | 
					
						
							|  |  |  |         layout.operator("curve.switch_direction") | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  |         layout.operator("curve.normals_make_consistent") | 
					
						
							| 
									
										
										
										
											2009-12-24 10:39:30 +00:00
										 |  |  |         layout.operator("curve.spline_weight_set") | 
					
						
							|  |  |  |         layout.operator("curve.radius_set") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-01 10:55:23 +11:00
										 |  |  |         # Remove | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  |         layout.operator("curve.split") | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         layout.operator("curve.decimate") | 
					
						
							|  |  |  |         layout.operator("curve.dissolve_verts") | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  |         layout.operator("curve.delete", text="Delete Segment").type = 'SEGMENT' | 
					
						
							|  |  |  |         layout.operator("curve.delete", text="Delete Point").type = 'VERT' | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-26 09:36:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-02 18:11:09 +10:00
										 |  |  | class VIEW3D_MT_edit_curve_delete(Menu): | 
					
						
							|  |  |  |     bl_label = "Delete" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2016-05-02 18:11:09 +10:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator_enum("curve.delete", "type") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("curve.dissolve_verts") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_edit_curve_showhide(ShowHideMenu, 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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_edit_surface(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_edit_font(Menu): | 
					
						
							| 
									
										
										
										
											2019-03-20 10:51:37 +01:00
										 |  |  |     bl_label = "Font" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         layout.operator("font.style_toggle", text="Toggle Bold").style = 'BOLD' | 
					
						
							|  |  |  |         layout.operator("font.style_toggle", text="Toggle Italic").style = 'ITALIC' | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         layout.operator("font.style_toggle", text="Toggle Underline").style = 'UNDERLINE' | 
					
						
							|  |  |  |         layout.operator("font.style_toggle", text="Toggle Small Caps").style = 'SMALL_CAPS' | 
					
						
							| 
									
										
										
										
											2010-07-13 23:51:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-20 10:51:37 +01:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_edit_text_chars") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_edit_text_chars(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Special Characters" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-17 20:00:14 +10:00
										 |  |  |         layout.operator("font.text_insert", text="Copyright").text = "\u00A9" | 
					
						
							|  |  |  |         layout.operator("font.text_insert", text="Registered Trademark").text = "\u00AE" | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-17 20:00:14 +10:00
										 |  |  |         layout.operator("font.text_insert", text="Degree Sign").text = "\u00B0" | 
					
						
							|  |  |  |         layout.operator("font.text_insert", text="Multiplication Sign").text = "\u00D7" | 
					
						
							|  |  |  |         layout.operator("font.text_insert", text="Circle").text = "\u008A" | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-17 20:00:14 +10:00
										 |  |  |         layout.operator("font.text_insert", text="Superscript 1").text = "\u00B9" | 
					
						
							|  |  |  |         layout.operator("font.text_insert", text="Superscript 2").text = "\u00B2" | 
					
						
							|  |  |  |         layout.operator("font.text_insert", text="Superscript 3").text = "\u00B3" | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-17 20:00:14 +10:00
										 |  |  |         layout.operator("font.text_insert", text="Double >>").text = "\u00BB" | 
					
						
							|  |  |  |         layout.operator("font.text_insert", text="Double <<").text = "\u00AB" | 
					
						
							|  |  |  |         layout.operator("font.text_insert", text="Promillage").text = "\u2030" | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-17 20:00:14 +10:00
										 |  |  |         layout.operator("font.text_insert", text="Dutch Florin").text = "\u00A4" | 
					
						
							|  |  |  |         layout.operator("font.text_insert", text="British Pound").text = "\u00A3" | 
					
						
							|  |  |  |         layout.operator("font.text_insert", text="Japanese Yen").text = "\u00A5" | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-17 20:00:14 +10:00
										 |  |  |         layout.operator("font.text_insert", text="German S").text = "\u00DF" | 
					
						
							|  |  |  |         layout.operator("font.text_insert", text="Spanish Question Mark").text = "\u00BF" | 
					
						
							|  |  |  |         layout.operator("font.text_insert", text="Spanish Exclamation Mark").text = "\u00A1" | 
					
						
							| 
									
										
										
										
											2009-08-17 10:13:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_edit_meta(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Metaball" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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.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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-23 00:27:30 +00:00
										 |  |  |         layout.menu("VIEW3D_MT_edit_meta_showhide") | 
					
						
							| 
									
										
										
										
											2018-10-10 09:41:44 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.operator_context = 'EXEC_DEFAULT' | 
					
						
							|  |  |  |         layout.operator("mball.delete_metaelems", text="Delete") | 
					
						
							| 
									
										
										
										
											2009-08-17 10:13:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_edit_meta_showhide(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Show/Hide" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2009-08-17 10:13:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-19 22:25:25 +01:00
										 |  |  |         layout.operator("mball.reveal_metaelems") | 
					
						
							| 
									
										
										
										
											2012-04-24 17:50:01 +00:00
										 |  |  |         layout.operator("mball.hide_metaelems", text="Hide Selected").unselected = False | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_edit_lattice(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Lattice" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-19 15:38:34 +11: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") | 
					
						
							| 
									
										
										
										
											2012-10-13 10:42:38 +00:00
										 |  |  |         layout.operator_menu_enum("lattice.flip", "axis") | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-12 18:57:40 +01:00
										 |  |  |         layout.operator("object.vertex_parent_set") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_edit_armature(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Armature" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         edit_object = context.edit_object | 
					
						
							|  |  |  |         arm = edit_object.data | 
					
						
							| 
									
										
										
										
											2009-11-28 23:37:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-06 06:37:07 +00:00
										 |  |  |         layout.menu("VIEW3D_MT_transform_armature") | 
					
						
							| 
									
										
										
										
											2009-11-23 00:27:30 +00:00
										 |  |  |         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") | 
					
						
							| 
									
										
										
										
											2013-10-29 00:10:03 +00:00
										 |  |  |         layout.operator("armature.split") | 
					
						
							| 
									
										
										
										
											2009-11-23 00:27:30 +00:00
										 |  |  |         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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         layout.operator("armature.subdivide", text="Subdivide") | 
					
						
							|  |  |  |         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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-14 18:32:04 +11:00
										 |  |  |         layout.operator("armature.symmetrize") | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         layout.menu("VIEW3D_MT_edit_armature_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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         layout.menu("VIEW3D_MT_bone_options_toggle", text="Bone Settings") | 
					
						
							| 
									
										
										
										
											2009-08-17 10:13:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-28 18:53:25 -03:00
										 |  |  |         layout.menu("VIEW3D_MT_edit_armature_delete") | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-21 00:05:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 10:59:57 +11:00
										 |  |  | class VIEW3D_MT_armature_context_menu(Menu): | 
					
						
							| 
									
										
										
										
											2018-06-05 09:12:19 +02:00
										 |  |  |     bl_label = "Armature Context Menu" | 
					
						
							| 
									
										
										
										
											2009-11-20 11:49:47 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2009-11-21 00:05:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         edit_object = context.edit_object | 
					
						
							|  |  |  |         arm = edit_object.data | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-20 11:49:47 +00:00
										 |  |  |         layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							| 
									
										
										
										
											2009-11-21 00:05:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-20 10:17:55 +01:00
										 |  |  |         # Add | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         layout.operator("armature.subdivide", text="Subdivide") | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         layout.operator("armature.duplicate_move", text="Duplicate") | 
					
						
							|  |  |  |         layout.operator("armature.extrude_move") | 
					
						
							|  |  |  |         if arm.use_mirror_x: | 
					
						
							|  |  |  |             layout.operator("armature.extrude_forked") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("armature.fill") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-14 18:32:04 +11:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-20 10:17:10 +01:00
										 |  |  |         # Modify | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_mirror") | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_snap") | 
					
						
							| 
									
										
										
										
											2019-02-14 18:32:04 +11:00
										 |  |  |         layout.operator("armature.symmetrize") | 
					
						
							| 
									
										
										
										
											2019-03-20 10:17:10 +01:00
										 |  |  |         layout.operator("armature.switch_direction", text="Switch Direction") | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         layout.menu("VIEW3D_MT_edit_armature_names") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_edit_armature_parent") | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-20 10:17:55 +01:00
										 |  |  |         # Remove | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         layout.operator("armature.split") | 
					
						
							|  |  |  |         layout.operator("armature.merge") | 
					
						
							|  |  |  |         layout.operator("armature.dissolve") | 
					
						
							|  |  |  |         layout.operator("armature.delete") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_MT_edit_armature_names(Menu): | 
					
						
							|  |  |  |     bl_label = "Names" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-20 11:49:47 +00:00
										 |  |  |         layout.operator_context = 'EXEC_REGION_WIN' | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18: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' | 
					
						
							|  |  |  |         layout.operator("armature.flip_names", text="Flip Names") | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-21 00:05:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_edit_armature_parent(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Parent" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2009-08-17 10:13:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_MT_edit_armature_roll(Menu): | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "Bone Roll" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-21 15:18:38 +00:00
										 |  |  |         layout.operator("transform.transform", text="Set Roll").mode = 'BONE_ROLL' | 
					
						
							| 
									
										
										
										
											2016-03-03 11:45:43 +11:00
										 |  |  |         layout.operator("armature.roll_clear") | 
					
						
							| 
									
										
										
										
											2009-08-17 10:13:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-13 03:20:07 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_MT_edit_armature_delete(Menu): | 
					
						
							|  |  |  |     bl_label = "Delete" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2015-06-13 03:20:07 +10:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2018-10-09 19:39:37 -03:00
										 |  |  |         layout.operator_context = 'EXEC_AREA' | 
					
						
							| 
									
										
										
										
											2015-06-13 03:20:07 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-28 18:53:25 -03:00
										 |  |  |         layout.operator("armature.delete", text="Bones") | 
					
						
							| 
									
										
										
										
											2015-06-13 03:20:07 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-28 18:53:25 -03:00
										 |  |  |         layout.operator("armature.dissolve", text="Dissolve Bones") | 
					
						
							| 
									
										
										
										
											2015-06-13 03:20:07 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | # ********** Grease Pencil Stroke menus ********** | 
					
						
							| 
									
										
										
										
											2018-08-30 12:22:55 +02:00
										 |  |  | class VIEW3D_MT_gpencil_autoweights(Menu): | 
					
						
							|  |  |  |     bl_label = "Generate Weights" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2018-08-30 12:22:55 +02:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  |         layout.operator("gpencil.generate_weights", text="With Empty Groups").mode = 'NAME' | 
					
						
							|  |  |  |         layout.operator("gpencil.generate_weights", text="With Automatic Weights").mode = 'AUTO' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | class VIEW3D_MT_gpencil_simplify(Menu): | 
					
						
							|  |  |  |     bl_label = "Simplify" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  |         layout.operator("gpencil.stroke_simplify_fixed", text="Fixed") | 
					
						
							| 
									
										
										
										
											2018-12-24 12:31:39 +01:00
										 |  |  |         layout.operator("gpencil.stroke_simplify", text="Adaptive") | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_MT_paint_gpencil(Menu): | 
					
						
							|  |  |  |     bl_label = "Strokes" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_gpencil_animation") | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_edit_gpencil_interpolate") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("gpencil.delete", text="Delete Frame").type = 'FRAME' | 
					
						
							|  |  |  |         layout.operator("gpencil.active_frames_delete_all") | 
					
						
							| 
									
										
										
										
											2015-12-13 21:03:13 +13:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-02 19:35:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-02 19:21:12 +02:00
										 |  |  | class VIEW3D_MT_assign_material(Menu): | 
					
						
							|  |  |  |     bl_label = "Assign Material" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2018-08-08 16:56:56 +02:00
										 |  |  |         ob = context.active_object | 
					
						
							| 
									
										
										
										
											2018-08-02 19:21:12 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-08 16:56:56 +02:00
										 |  |  |         for slot in ob.material_slots: | 
					
						
							|  |  |  |             mat = slot.material | 
					
						
							| 
									
										
										
										
											2019-01-15 18:17:53 +01:00
										 |  |  |             if mat: | 
					
						
							|  |  |  |                 layout.operator("gpencil.stroke_change_color", text=mat.name).material = mat.name | 
					
						
							| 
									
										
										
										
											2015-12-13 21:03:13 +13:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-02 19:35:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-27 16:29:19 +02:00
										 |  |  | class VIEW3D_MT_gpencil_copy_layer(Menu): | 
					
						
							|  |  |  |     bl_label = "Copy Layer to Object" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         view_layer = context.view_layer | 
					
						
							|  |  |  |         obact = context.active_object | 
					
						
							|  |  |  |         gpl = context.active_gpencil_layer | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         done = False | 
					
						
							|  |  |  |         if gpl is not None: | 
					
						
							|  |  |  |             for ob in view_layer.objects: | 
					
						
							|  |  |  |                 if ob.type == 'GPENCIL' and ob != obact: | 
					
						
							|  |  |  |                     layout.operator("gpencil.layer_duplicate_object", text=ob.name).object = ob.name | 
					
						
							|  |  |  |                     done = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if done is False: | 
					
						
							| 
									
										
										
										
											2018-09-03 14:15:18 +10:00
										 |  |  |                 layout.label(text="No destination object", icon='ERROR') | 
					
						
							| 
									
										
										
										
											2018-08-27 16:29:19 +02:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2018-09-03 14:15:18 +10:00
										 |  |  |             layout.label(text="No layer to copy", icon='ERROR') | 
					
						
							| 
									
										
										
										
											2018-08-27 16:29:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-13 21:03:13 +13:00
										 |  |  | class VIEW3D_MT_edit_gpencil(Menu): | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |     bl_label = "Strokes" | 
					
						
							| 
									
										
										
										
											2016-02-01 00:47:10 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2015-12-13 21:03:13 +13:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_edit_gpencil_transform") | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							| 
									
										
										
										
											2015-12-13 21:03:13 +13:00
										 |  |  |         layout.menu("GPENCIL_MT_snap") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         layout.menu("VIEW3D_MT_gpencil_animation") | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  |         layout.menu("VIEW3D_MT_edit_gpencil_interpolate") | 
					
						
							| 
									
										
										
										
											2017-10-19 15:10:41 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-01 10:55:23 +11:00
										 |  |  |         # Cut, Copy, Paste | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  |         layout.operator("gpencil.duplicate_move", text="Duplicate") | 
					
						
							|  |  |  |         layout.operator("gpencil.copy", text="Copy", icon='COPYDOWN') | 
					
						
							|  |  |  |         layout.operator("gpencil.paste", text="Paste", icon='PASTEDOWN').type = 'COPY' | 
					
						
							|  |  |  |         layout.operator("gpencil.paste", text="Paste & Merge").type = 'MERGE' | 
					
						
							| 
									
										
										
										
											2015-12-13 21:03:13 +13:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-13 19:49:13 +01:00
										 |  |  |         layout.operator("gpencil.stroke_smooth", text="Smooth") | 
					
						
							| 
									
										
										
										
											2016-12-02 02:19:59 +13:00
										 |  |  |         layout.operator("gpencil.stroke_subdivide", text="Subdivide") | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         layout.menu("VIEW3D_MT_gpencil_simplify") | 
					
						
							| 
									
										
										
										
											2019-02-26 16:04:27 +00:00
										 |  |  |         layout.operator("gpencil.stroke_trim", text="Trim") | 
					
						
							| 
									
										
										
										
											2016-12-02 02:19:59 +13:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         layout.operator_menu_enum("gpencil.stroke_separate", "mode", text="Separate...") | 
					
						
							|  |  |  |         layout.operator("gpencil.stroke_split", text="Split") | 
					
						
							| 
									
										
										
										
											2018-12-30 13:08:04 +01:00
										 |  |  |         layout.operator("gpencil.stroke_merge", text="Merge") | 
					
						
							| 
									
										
										
										
											2016-12-02 02:19:59 +13:00
										 |  |  |         layout.operator_menu_enum("gpencil.stroke_join", "type", text="Join...") | 
					
						
							|  |  |  |         layout.operator("gpencil.stroke_flip", text="Flip Direction") | 
					
						
							| 
									
										
										
										
											2015-12-13 21:03:13 +13:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         layout.operator_menu_enum("gpencil.move_to_layer", "layer", text="Move to Layer") | 
					
						
							| 
									
										
										
										
											2018-08-02 19:21:12 +02:00
										 |  |  |         layout.menu("VIEW3D_MT_assign_material") | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         layout.operator_menu_enum("gpencil.stroke_arrange", "direction", text="Arrange Strokes...") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-01 10:55:23 +11:00
										 |  |  |         # Convert | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         layout.operator("gpencil.stroke_cyclical_set", text="Toggle Cyclic").type = 'TOGGLE' | 
					
						
							| 
									
										
										
										
											2019-01-11 19:15:23 +01:00
										 |  |  |         layout.operator_menu_enum("gpencil.stroke_caps_set", text="Toggle Caps...", property="type") | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-01 10:55:23 +11:00
										 |  |  |         # Remove | 
					
						
							| 
									
										
										
										
											2018-08-15 17:01:27 +02:00
										 |  |  |         layout.menu("GPENCIL_MT_cleanup") | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  |         layout.menu("VIEW3D_MT_edit_gpencil_delete") | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_MT_weight_gpencil(Menu): | 
					
						
							|  |  |  |     bl_label = "Weights" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-16 12:12:35 +02:00
										 |  |  |         layout.operator("gpencil.vertex_group_normalize_all", text="Normalize All") | 
					
						
							| 
									
										
										
										
											2019-04-16 10:47:30 +02:00
										 |  |  |         layout.operator("gpencil.vertex_group_normalize", text="Normalize") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         layout.operator("gpencil.vertex_group_invert", text="Invert") | 
					
						
							|  |  |  |         layout.operator("gpencil.vertex_group_smooth", text="Smooth") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-30 12:22:55 +02:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_gpencil_autoweights") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_MT_gpencil_animation(Menu): | 
					
						
							|  |  |  |     bl_label = "Animation" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def poll(cls, context): | 
					
						
							|  |  |  |         ob = context.active_object | 
					
						
							|  |  |  |         return ob and ob.type == 'GPENCIL' and ob.mode != 'OBJECT' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("gpencil.blank_frame_add") | 
					
						
							|  |  |  |         layout.operator("gpencil.active_frames_delete_all", text="Delete Frame(s)") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  |         layout.operator("gpencil.frame_duplicate", text="Duplicate Active Frame") | 
					
						
							|  |  |  |         layout.operator("gpencil.frame_duplicate", text="Duplicate All Layers").mode = 'ALL' | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-13 21:03:13 +13:00
										 |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_MT_edit_gpencil_transform(Menu): | 
					
						
							|  |  |  |     bl_label = "Transform" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2015-12-13 21:03:13 +13:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("transform.translate") | 
					
						
							|  |  |  |         layout.operator("transform.rotate") | 
					
						
							|  |  |  |         layout.operator("transform.resize", text="Scale") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("transform.bend", text="Bend") | 
					
						
							|  |  |  |         layout.operator("transform.shear", text="Shear") | 
					
						
							|  |  |  |         layout.operator("transform.tosphere", text="To Sphere") | 
					
						
							|  |  |  |         layout.operator("transform.transform", text="Shrink Fatten").mode = 'GPENCIL_SHRINKFATTEN' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-02 02:19:59 +13:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("gpencil.reproject") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_MT_edit_gpencil_interpolate(Menu): | 
					
						
							|  |  |  |     bl_label = "Interpolate" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2016-12-02 02:19:59 +13:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("gpencil.interpolate", text="Interpolate") | 
					
						
							|  |  |  |         layout.operator("gpencil.interpolate_sequence", text="Sequence") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-13 21:03:13 +13:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-20 16:32:31 +02:00
										 |  |  | class VIEW3D_MT_object_mode_pie(Menu): | 
					
						
							| 
									
										
										
										
											2018-06-07 20:46:12 +02:00
										 |  |  |     bl_label = "Mode" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2018-06-07 20:46:12 +02:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         pie = layout.menu_pie() | 
					
						
							| 
									
										
										
										
											2018-12-18 15:01:03 +11:00
										 |  |  |         pie.operator_enum("object.mode_set", "mode") | 
					
						
							| 
									
										
										
										
											2018-06-07 20:46:12 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-20 16:32:31 +02:00
										 |  |  | class VIEW3D_MT_view_pie(Menu): | 
					
						
							| 
									
										
										
										
											2018-06-07 20:46:12 +02:00
										 |  |  |     bl_label = "View" | 
					
						
							| 
									
										
										
										
											2018-06-20 16:32:31 +02:00
										 |  |  |     bl_idname = "VIEW3D_MT_view_pie" | 
					
						
							| 
									
										
										
										
											2018-06-07 20:46:12 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2018-06-07 20:46:12 +02:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         pie = layout.menu_pie() | 
					
						
							| 
									
										
										
										
											2018-12-18 15:01:03 +11:00
										 |  |  |         pie.operator_enum("view3d.view_axis", "type") | 
					
						
							| 
									
										
										
										
											2018-07-06 11:17:50 +02:00
										 |  |  |         pie.operator("view3d.view_camera", text="View Camera", icon='CAMERA_DATA') | 
					
						
							| 
									
										
										
										
											2018-06-07 20:46:12 +02:00
										 |  |  |         pie.operator("view3d.view_selected", text="View Selected", icon='ZOOM_SELECTED') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-21 15:46:49 +02:00
										 |  |  | class VIEW3D_MT_shading_pie(Menu): | 
					
						
							|  |  |  |     bl_label = "Shading" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2018-09-21 17:01:10 +02:00
										 |  |  |         pie = layout.menu_pie() | 
					
						
							| 
									
										
										
										
											2018-09-21 15:46:49 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-08 17:17:52 +11:00
										 |  |  |         pie.prop(view.shading, "type", expand=True) | 
					
						
							| 
									
										
										
										
											2018-09-21 15:46:49 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-24 11:24:34 +11:00
										 |  |  | class VIEW3D_MT_shading_ex_pie(Menu): | 
					
						
							|  |  |  |     bl_label = "Shading" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         pie = layout.menu_pie() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         pie.prop_enum(view.shading, "type", value='WIREFRAME') | 
					
						
							| 
									
										
										
										
											2018-11-26 01:00:05 +01:00
										 |  |  |         pie.prop_enum(view.shading, "type", value='SOLID') | 
					
						
							| 
									
										
										
										
											2018-11-24 11:24:34 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 15:01:03 +11:00
										 |  |  |         # Note this duplicates "view3d.toggle_xray" logic, so we can see the active item: T58661. | 
					
						
							| 
									
										
										
										
											2019-03-12 10:21:55 +11:00
										 |  |  |         if context.pose_object: | 
					
						
							| 
									
										
										
										
											2018-12-05 15:19:52 +01:00
										 |  |  |             pie.prop(view.overlay, "show_xray_bone", icon='XRAY') | 
					
						
							| 
									
										
										
										
											2018-12-05 11:50:35 +11:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2018-12-05 15:19:52 +01:00
										 |  |  |             xray_active = ( | 
					
						
							|  |  |  |                 (context.mode == 'EDIT_MESH') or | 
					
						
							|  |  |  |                 (view.shading.type in {'SOLID', 'WIREFRAME'}) | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |             if xray_active: | 
					
						
							|  |  |  |                 sub = pie | 
					
						
							| 
									
										
										
										
											2018-12-05 11:50:35 +11:00
										 |  |  |             else: | 
					
						
							| 
									
										
										
										
											2018-12-05 15:19:52 +01:00
										 |  |  |                 sub = pie.row() | 
					
						
							|  |  |  |                 sub.active = False | 
					
						
							|  |  |  |             sub.prop( | 
					
						
							|  |  |  |                 view.shading, | 
					
						
							|  |  |  |                 "show_xray_wireframe" if (view.shading.type == 'WIREFRAME') else "show_xray", | 
					
						
							|  |  |  |                 text="Toggle X-Ray", | 
					
						
							|  |  |  |                 icon='XRAY', | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2018-11-24 11:24:34 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         pie.prop(view.overlay, "show_overlays", text="Toggle Overlays", icon='OVERLAY') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         pie.prop_enum(view.shading, "type", value='MATERIAL') | 
					
						
							|  |  |  |         pie.prop_enum(view.shading, "type", value='RENDERED') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-26 17:32:11 +02:00
										 |  |  | class VIEW3D_MT_pivot_pie(Menu): | 
					
						
							|  |  |  |     bl_label = "Pivot Point" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         pie = layout.menu_pie() | 
					
						
							|  |  |  |         obj = context.active_object | 
					
						
							|  |  |  |         mode = context.mode | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         pie.prop_enum(context.scene.tool_settings, "transform_pivot_point", value='BOUNDING_BOX_CENTER') | 
					
						
							|  |  |  |         pie.prop_enum(context.scene.tool_settings, "transform_pivot_point", value='CURSOR') | 
					
						
							|  |  |  |         pie.prop_enum(context.scene.tool_settings, "transform_pivot_point", value='INDIVIDUAL_ORIGINS') | 
					
						
							|  |  |  |         pie.prop_enum(context.scene.tool_settings, "transform_pivot_point", value='MEDIAN_POINT') | 
					
						
							|  |  |  |         pie.prop_enum(context.scene.tool_settings, "transform_pivot_point", value='ACTIVE_ELEMENT') | 
					
						
							|  |  |  |         if (obj is None) or (mode in {'OBJECT', 'POSE', 'WEIGHT_PAINT'}): | 
					
						
							| 
									
										
										
										
											2019-03-18 13:28:00 +11:00
										 |  |  |             pie.prop(context.scene.tool_settings, "use_transform_pivot_point_align") | 
					
						
							| 
									
										
										
										
											2018-09-26 17:32:11 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_MT_orientations_pie(Menu): | 
					
						
							|  |  |  |     bl_label = "Orientation" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         pie = layout.menu_pie() | 
					
						
							|  |  |  |         scene = context.scene | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-21 21:29:04 +11:00
										 |  |  |         pie.prop(scene.transform_orientation_slots[0], "type", expand=True) | 
					
						
							| 
									
										
										
										
											2018-09-26 17:32:11 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_MT_snap_pie(Menu): | 
					
						
							|  |  |  |     bl_label = "Snap" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2018-09-26 17:32:11 +02:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  |         pie = layout.menu_pie() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-01 10:45:50 +02:00
										 |  |  |         pie.operator("view3d.snap_cursor_to_grid", text="Cursor to Grid", icon='PIVOT_CURSOR') | 
					
						
							| 
									
										
										
										
											2018-09-26 17:32:11 +02:00
										 |  |  |         pie.operator("view3d.snap_selected_to_grid", text="Selection to Grid", icon='RESTRICT_SELECT_OFF') | 
					
						
							| 
									
										
										
										
											2018-10-01 10:45:50 +02:00
										 |  |  |         pie.operator("view3d.snap_cursor_to_selected", text="Cursor to Selected", icon='PIVOT_CURSOR') | 
					
						
							| 
									
										
										
										
											2018-09-26 17:32:11 +02:00
										 |  |  |         pie.operator("view3d.snap_selected_to_cursor", text="Selection to Cursor", icon='RESTRICT_SELECT_OFF').use_offset = False | 
					
						
							|  |  |  |         pie.operator("view3d.snap_selected_to_cursor", text="Selection to Cursor (Keep Offset)", icon='RESTRICT_SELECT_OFF').use_offset = True | 
					
						
							|  |  |  |         pie.operator("view3d.snap_selected_to_active", text="Selection to Active", icon='RESTRICT_SELECT_OFF') | 
					
						
							| 
									
										
										
										
											2018-11-01 16:12:38 +01:00
										 |  |  |         pie.operator("view3d.snap_cursor_to_center", text="Cursor to World Origin", icon='PIVOT_CURSOR') | 
					
						
							| 
									
										
										
										
											2018-10-01 10:45:50 +02:00
										 |  |  |         pie.operator("view3d.snap_cursor_to_active", text="Cursor to Active", icon='PIVOT_CURSOR') | 
					
						
							| 
									
										
										
										
											2018-09-26 17:32:11 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-27 09:41:18 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-26 17:32:11 +02:00
										 |  |  | class VIEW3D_MT_proportional_editing_falloff_pie(Menu): | 
					
						
							|  |  |  |     bl_label = "Proportional Editing Falloff" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         pie = layout.menu_pie() | 
					
						
							|  |  |  |         tool_settings = context.scene.tool_settings | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         pie.prop(tool_settings, "proportional_edit_falloff", expand=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-15 20:21:49 +00:00
										 |  |  | # ********** Panel ********** | 
					
						
							| 
									
										
										
										
											2009-07-11 13:32:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-29 15:35:06 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_PT_view3d_properties(Panel): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'UI' | 
					
						
							| 
									
										
										
										
											2018-09-27 16:22:50 +10:00
										 |  |  |     bl_category = "View" | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +00:00
										 |  |  |     bl_label = "View" | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-06 18:22:55 +02:00
										 |  |  |         layout.use_property_split = True | 
					
						
							|  |  |  |         layout.use_property_decorate = False  # No animation. | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-06 18:22:55 +02:00
										 |  |  |         flow = layout.grid_flow(row_major=True, columns=0, even_columns=False, even_rows=False, align=True) | 
					
						
							|  |  |  |         col = flow.column() | 
					
						
							| 
									
										
										
										
											2011-05-14 17:50:33 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-06 18:22:55 +02:00
										 |  |  |         subcol = col.column() | 
					
						
							|  |  |  |         subcol.active = bool(view.region_3d.view_perspective != 'CAMERA' or view.region_quadviews) | 
					
						
							|  |  |  |         subcol.prop(view, "lens", text="Focal Length") | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-23 20:41:21 +00:00
										 |  |  |         subcol = col.column(align=True) | 
					
						
							| 
									
										
										
										
											2018-07-06 18:22:55 +02:00
										 |  |  |         subcol.prop(view, "clip_start", text="Clip Start") | 
					
						
							|  |  |  |         subcol.prop(view, "clip_end", text="End") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         subcol.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         col = flow.column() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         subcol = col.column() | 
					
						
							| 
									
										
										
										
											2019-01-24 17:20:04 +01:00
										 |  |  |         subcol.prop(view, "use_local_camera") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         subcol = col.column() | 
					
						
							|  |  |  |         subcol.enabled = view.use_local_camera | 
					
						
							| 
									
										
										
										
											2018-07-06 18:22:55 +02:00
										 |  |  |         subcol.prop(view, "camera", text="Local Camera") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         subcol = col.column(align=True) | 
					
						
							|  |  |  |         subcol.prop(view, "use_render_border") | 
					
						
							|  |  |  |         subcol.active = view.region_3d.view_perspective != 'CAMERA' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-07 12:53:45 +11:00
										 |  |  | class VIEW3D_PT_view3d_lock(Panel): | 
					
						
							| 
									
										
										
										
											2018-07-06 18:22:55 +02:00
										 |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'UI' | 
					
						
							| 
									
										
										
										
											2018-09-27 16:22:50 +10:00
										 |  |  |     bl_category = "View" | 
					
						
							| 
									
										
										
										
											2019-03-07 12:46:17 +11:00
										 |  |  |     bl_label = "View Lock" | 
					
						
							| 
									
										
										
										
											2018-07-06 18:22:55 +02:00
										 |  |  |     bl_parent_id = "VIEW3D_PT_view3d_properties" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.use_property_split = True | 
					
						
							|  |  |  |         layout.use_property_decorate = False  # No animation. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							| 
									
										
										
										
											2010-04-27 06:47:12 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-16 11:57:46 +00:00
										 |  |  |         col = layout.column(align=True) | 
					
						
							| 
									
										
										
										
											2018-07-06 18:22:55 +02:00
										 |  |  |         subcol = col.column() | 
					
						
							|  |  |  |         subcol.active = bool(view.region_3d.view_perspective != 'CAMERA' or view.region_quadviews) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         subcol.prop(view, "lock_object") | 
					
						
							|  |  |  |         lock_object = view.lock_object | 
					
						
							|  |  |  |         if lock_object: | 
					
						
							|  |  |  |             if lock_object.type == 'ARMATURE': | 
					
						
							|  |  |  |                 subcol.prop_search( | 
					
						
							|  |  |  |                     view, "lock_bone", lock_object.data, | 
					
						
							|  |  |  |                     "edit_bones" if lock_object.mode == 'EDIT' | 
					
						
							|  |  |  |                     else "bones", | 
					
						
							| 
									
										
										
										
											2019-04-13 12:44:34 +02:00
										 |  |  |                     text="", | 
					
						
							| 
									
										
										
										
											2018-07-06 18:22:55 +02:00
										 |  |  |                 ) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             subcol.prop(view, "lock_cursor", text="Lock to 3D Cursor") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         col.prop(view, "lock_camera") | 
					
						
							| 
									
										
										
										
											2012-10-16 11:57:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-06 06:19:00 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_PT_view3d_cursor(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'UI' | 
					
						
							| 
									
										
										
										
											2018-09-27 16:22:50 +10:00
										 |  |  |     bl_category = "View" | 
					
						
							| 
									
										
										
										
											2011-11-06 06:19:00 +00:00
										 |  |  |     bl_label = "3D Cursor" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-01 12:35:48 +11:00
										 |  |  |         cursor = context.scene.cursor | 
					
						
							| 
									
										
										
										
											2018-07-06 18:29:57 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-01 12:35:48 +11:00
										 |  |  |         layout.column().prop(cursor, "location", text="Location") | 
					
						
							|  |  |  |         rotation_mode = cursor.rotation_mode | 
					
						
							| 
									
										
										
										
											2019-02-26 00:58:35 +11:00
										 |  |  |         if rotation_mode == 'QUATERNION': | 
					
						
							| 
									
										
										
										
											2019-03-01 12:35:48 +11:00
										 |  |  |             layout.column().prop(cursor, "rotation_quaternion", text="Rotation") | 
					
						
							| 
									
										
										
										
											2019-02-26 00:58:35 +11:00
										 |  |  |         elif rotation_mode == 'AXIS_ANGLE': | 
					
						
							| 
									
										
										
										
											2019-03-01 12:35:48 +11:00
										 |  |  |             layout.column().prop(cursor, "rotation_axis_angle", text="Rotation") | 
					
						
							| 
									
										
										
										
											2019-02-26 00:58:35 +11:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2019-03-01 12:35:48 +11:00
										 |  |  |             layout.column().prop(cursor, "rotation_euler", text="Rotation") | 
					
						
							|  |  |  |         layout.prop(cursor, "rotation_mode", text="") | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-14 13:35:44 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-15 11:35:14 -02:00
										 |  |  | class VIEW3D_PT_collections(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							| 
									
										
										
										
											2019-04-16 14:52:44 +02:00
										 |  |  |     bl_region_type = 'UI' | 
					
						
							|  |  |  |     bl_category = "View" | 
					
						
							| 
									
										
										
										
											2018-11-15 11:35:14 -02:00
										 |  |  |     bl_label = "Collections Visibility" | 
					
						
							| 
									
										
										
										
											2019-04-18 19:14:19 +02:00
										 |  |  |     bl_options = {'DEFAULT_CLOSED'} | 
					
						
							| 
									
										
										
										
											2018-11-15 11:35:14 -02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def _draw_collection(self, layout, view_layer, collection, index): | 
					
						
							|  |  |  |         need_separator = index | 
					
						
							|  |  |  |         for child in collection.children: | 
					
						
							|  |  |  |             index += 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if child.exclude: | 
					
						
							|  |  |  |                 continue | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if child.collection.hide_viewport: | 
					
						
							|  |  |  |                 continue | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if need_separator: | 
					
						
							|  |  |  |                 layout.separator() | 
					
						
							|  |  |  |                 need_separator = False | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             icon = 'BLANK1' | 
					
						
							| 
									
										
										
										
											2019-03-17 21:13:25 +11:00
										 |  |  |             # has_objects = True | 
					
						
							| 
									
										
										
										
											2018-11-15 11:35:14 -02:00
										 |  |  |             if child.has_selected_objects(view_layer): | 
					
						
							|  |  |  |                 icon = 'LAYER_ACTIVE' | 
					
						
							|  |  |  |             elif child.has_objects(): | 
					
						
							|  |  |  |                 icon = 'LAYER_USED' | 
					
						
							| 
									
										
										
										
											2018-11-15 13:32:03 -02:00
										 |  |  |             else: | 
					
						
							| 
									
										
										
										
											2019-03-17 21:13:25 +11:00
										 |  |  |                 # has_objects = False | 
					
						
							|  |  |  |                 pass | 
					
						
							| 
									
										
										
										
											2018-11-15 13:32:03 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-15 11:35:14 -02:00
										 |  |  |             row = layout.row() | 
					
						
							| 
									
										
										
										
											2018-11-15 13:32:03 -02:00
										 |  |  |             sub = row.split(factor=0.98) | 
					
						
							|  |  |  |             subrow = sub.row() | 
					
						
							|  |  |  |             subrow.alignment = 'LEFT' | 
					
						
							| 
									
										
										
										
											2019-01-30 09:03:37 +11:00
										 |  |  |             subrow.operator( | 
					
						
							|  |  |  |                 "object.hide_collection", text=child.name, icon=icon, emboss=False, | 
					
						
							|  |  |  |             ).collection_index = index | 
					
						
							| 
									
										
										
										
											2018-11-15 13:32:03 -02:00
										 |  |  | 
 | 
					
						
							|  |  |  |             sub = row.split() | 
					
						
							|  |  |  |             subrow = sub.row(align=True) | 
					
						
							|  |  |  |             subrow.alignment = 'RIGHT' | 
					
						
							| 
									
										
										
										
											2019-03-01 10:55:23 +11:00
										 |  |  |             subrow.active = collection.is_visible  # Parent collection runtime visibility | 
					
						
							| 
									
										
										
										
											2018-11-28 00:49:36 -02:00
										 |  |  |             subrow.prop(child, "hide_viewport", text="", emboss=False) | 
					
						
							| 
									
										
										
										
											2018-11-15 11:35:14 -02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         for child in collection.children: | 
					
						
							|  |  |  |             index = self._draw_collection(layout, view_layer, child, index) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return index | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2018-11-15 13:32:03 -02:00
										 |  |  |         layout.use_property_split = False | 
					
						
							| 
									
										
										
										
											2018-11-15 11:35:14 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-15 16:46:27 -02:00
										 |  |  |         layout.label(text="Collections Visibility") | 
					
						
							| 
									
										
										
										
											2019-03-17 21:13:25 +11:00
										 |  |  |         layout.column() | 
					
						
							| 
									
										
										
										
											2018-11-15 11:35:14 -02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         view_layer = context.view_layer | 
					
						
							|  |  |  |         # We pass index 0 here beause the index is increased | 
					
						
							|  |  |  |         # so the first real index is 1 | 
					
						
							|  |  |  |         # And we start with index as 1 because we skip the master collection | 
					
						
							|  |  |  |         self._draw_collection(layout, view_layer, view_layer.layer_collection, 0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-09 17:00:09 +02:00
										 |  |  | class VIEW3D_PT_object_type_visibility(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							| 
									
										
										
										
											2018-07-11 13:24:04 +02:00
										 |  |  |     bl_region_type = 'HEADER' | 
					
						
							| 
									
										
										
										
											2018-07-09 17:00:09 +02:00
										 |  |  |     bl_label = "View Object Types" | 
					
						
							| 
									
										
										
										
											2018-07-11 13:24:04 +02:00
										 |  |  |     bl_ui_units_x = 6 | 
					
						
							| 
									
										
										
										
											2018-07-09 17:00:09 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2018-07-10 20:25:50 +02:00
										 |  |  |         layout.use_property_split = True | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-09 17:00:09 +02:00
										 |  |  |         view = context.space_data | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-09 02:58:25 +01:00
										 |  |  |         layout.label(text="Object Types Visibility") | 
					
						
							| 
									
										
										
										
											2018-07-09 17:00:09 +02:00
										 |  |  |         col = layout.column() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-09 13:14:16 +11:00
										 |  |  |         attr_object_types = ( | 
					
						
							| 
									
										
										
										
											2018-07-13 08:42:34 +02:00
										 |  |  |             # Geometry | 
					
						
							| 
									
										
										
										
											2018-11-09 13:14:16 +11:00
										 |  |  |             ("mesh", "Mesh"), | 
					
						
							|  |  |  |             ("curve", "Curve"), | 
					
						
							|  |  |  |             ("surf", "Surface"), | 
					
						
							|  |  |  |             ("meta", "Meta"), | 
					
						
							|  |  |  |             ("font", "Font"), | 
					
						
							| 
									
										
										
										
											2019-02-28 20:09:40 +01:00
										 |  |  |             ("grease_pencil", "Grease Pencil"), | 
					
						
							| 
									
										
										
										
											2018-11-09 13:14:16 +11:00
										 |  |  |             (None, None), | 
					
						
							| 
									
										
										
										
											2018-07-13 08:42:34 +02:00
										 |  |  |             # Other | 
					
						
							| 
									
										
										
										
											2018-11-09 13:14:16 +11:00
										 |  |  |             ("armature", "Armature"), | 
					
						
							|  |  |  |             ("lattice", "Lattice"), | 
					
						
							|  |  |  |             ("empty", "Empty"), | 
					
						
							|  |  |  |             ("light", "Light"), | 
					
						
							|  |  |  |             ("light_probe", "Light Probe"), | 
					
						
							| 
									
										
										
										
											2019-02-28 20:09:40 +01:00
										 |  |  |             ("camera", "Camera"), | 
					
						
							| 
									
										
										
										
											2018-11-09 13:14:16 +11:00
										 |  |  |             ("speaker", "Speaker"), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         for attr, attr_name in attr_object_types: | 
					
						
							| 
									
										
										
										
											2018-07-12 10:54:30 +02:00
										 |  |  |             if attr is None: | 
					
						
							| 
									
										
										
										
											2018-07-12 10:48:18 +02:00
										 |  |  |                 col.separator() | 
					
						
							| 
									
										
										
										
											2018-07-12 10:54:30 +02:00
										 |  |  |                 continue | 
					
						
							| 
									
										
										
										
											2018-07-09 17:00:09 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-12 10:54:30 +02:00
										 |  |  |             attr_v = "show_object_viewport_" f"{attr:s}" | 
					
						
							|  |  |  |             attr_s = "show_object_select_" f"{attr:s}" | 
					
						
							| 
									
										
										
										
											2018-07-10 20:25:50 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-09 11:20:45 +01:00
										 |  |  |             icon_v = 'HIDE_OFF' if getattr(view, attr_v) else 'HIDE_ON' | 
					
						
							| 
									
										
										
										
											2018-11-08 19:06:42 +01:00
										 |  |  |             icon_s = 'RESTRICT_SELECT_OFF' if getattr(view, attr_s) else 'RESTRICT_SELECT_ON' | 
					
						
							| 
									
										
										
										
											2018-07-12 10:48:18 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-12 10:54:30 +02:00
										 |  |  |             row = col.row(align=True) | 
					
						
							| 
									
										
										
										
											2018-11-09 02:58:25 +01:00
										 |  |  |             row.alignment = 'RIGHT' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             row.label(text=attr_name) | 
					
						
							|  |  |  |             row.prop(view, attr_v, text="", icon=icon_v, emboss=False) | 
					
						
							| 
									
										
										
										
											2018-11-09 13:18:50 +11:00
										 |  |  |             rowsub = row.row(align=True) | 
					
						
							|  |  |  |             rowsub.active = getattr(view, attr_v) | 
					
						
							|  |  |  |             rowsub.prop(view, attr_s, text="", icon=icon_s, emboss=False) | 
					
						
							| 
									
										
										
										
											2018-07-09 17:00:09 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-29 08:47:14 +02:00
										 |  |  | class VIEW3D_PT_shading(Panel): | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							| 
									
										
										
										
											2018-05-02 12:05:40 +02:00
										 |  |  |     bl_region_type = 'HEADER' | 
					
						
							| 
									
										
										
										
											2018-04-29 08:47:14 +02:00
										 |  |  |     bl_label = "Shading" | 
					
						
							| 
									
										
										
										
											2018-12-21 11:40:47 +11:00
										 |  |  |     bl_ui_units_x = 12 | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 11:43:56 +02:00
										 |  |  |     @classmethod | 
					
						
							|  |  |  |     def get_shading(cls, context): | 
					
						
							|  |  |  |         # Get settings from 3D viewport or OpenGL render engine | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							|  |  |  |         if view.type == 'VIEW_3D': | 
					
						
							|  |  |  |             return view.shading | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             return context.scene.display.shading | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2019-04-13 12:14:12 +02:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  |         layout.label(text="Viewport Shading") | 
					
						
							| 
									
										
										
										
											2018-06-18 08:15:29 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_PT_shading_lighting(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_label = "Lighting" | 
					
						
							|  |  |  |     bl_parent_id = 'VIEW3D_PT_shading' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-21 14:10:06 +02:00
										 |  |  |     @classmethod | 
					
						
							|  |  |  |     def poll(cls, context): | 
					
						
							|  |  |  |         shading = VIEW3D_PT_shading.get_shading(context) | 
					
						
							|  |  |  |         return shading.type in {'SOLID', 'MATERIAL'} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-29 08:47:14 +02:00
										 |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2018-07-11 11:43:56 +02:00
										 |  |  |         shading = VIEW3D_PT_shading.get_shading(context) | 
					
						
							| 
									
										
										
										
											2018-04-29 08:47:14 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-13 20:11:57 +02:00
										 |  |  |         col = layout.column() | 
					
						
							| 
									
										
										
										
											2018-08-28 12:38:54 +10:00
										 |  |  |         split = col.split(factor=0.9) | 
					
						
							| 
									
										
										
										
											2018-07-13 20:11:57 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-21 14:56:00 +02:00
										 |  |  |         if shading.type == 'SOLID': | 
					
						
							| 
									
										
										
										
											2018-07-13 20:11:57 +02:00
										 |  |  |             split.row().prop(shading, "light", expand=True) | 
					
						
							|  |  |  |             col = split.column() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-28 12:38:54 +10:00
										 |  |  |             split = layout.split(factor=0.9) | 
					
						
							| 
									
										
										
										
											2018-07-13 20:11:57 +02:00
										 |  |  |             col = split.column() | 
					
						
							|  |  |  |             sub = col.row() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-03 15:31:03 +02:00
										 |  |  |             if shading.light == 'STUDIO': | 
					
						
							| 
									
										
										
										
											2018-12-21 12:47:44 +11:00
										 |  |  |                 prefs = context.preferences | 
					
						
							|  |  |  |                 system = prefs.system | 
					
						
							| 
									
										
										
										
											2018-11-29 20:57:09 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-11 17:49:35 +11:00
										 |  |  |                 if not system.use_studio_light_edit: | 
					
						
							| 
									
										
										
										
											2018-11-29 21:33:14 +01:00
										 |  |  |                     sub.scale_y = 0.6  # smaller studiolight preview | 
					
						
							| 
									
										
										
										
											2019-01-02 18:18:54 +11:00
										 |  |  |                     sub.template_icon_view(shading, "studio_light", scale_popup=3.0) | 
					
						
							| 
									
										
										
										
											2018-11-29 21:33:14 +01:00
										 |  |  |                 else: | 
					
						
							| 
									
										
										
										
											2019-02-11 17:49:35 +11:00
										 |  |  |                     sub.prop(system, "use_studio_light_edit", text="Disable Studio Light Edit", icon='NONE', toggle=True) | 
					
						
							| 
									
										
										
										
											2018-07-13 20:11:57 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-29 20:57:09 +01:00
										 |  |  |                 col = split.column() | 
					
						
							| 
									
										
										
										
											2019-03-02 00:21:05 +11:00
										 |  |  |                 col.operator("preferences.studiolight_show", emboss=False, text="", icon='PREFERENCES') | 
					
						
							| 
									
										
										
										
											2018-07-13 20:11:57 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-29 20:57:09 +01:00
										 |  |  |                 split = layout.split(factor=0.9) | 
					
						
							| 
									
										
										
										
											2018-07-13 20:11:57 +02:00
										 |  |  |                 col = split.column() | 
					
						
							| 
									
										
										
										
											2018-11-29 21:33:14 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-29 20:57:09 +01:00
										 |  |  |                 row = col.row() | 
					
						
							| 
									
										
										
										
											2018-12-20 13:01:40 +11:00
										 |  |  |                 row.prop(shading, "use_world_space_lighting", text="", icon='WORLD', toggle=True) | 
					
						
							| 
									
										
										
										
											2018-11-29 20:57:09 +01:00
										 |  |  |                 row = row.row() | 
					
						
							|  |  |  |                 row.active = shading.use_world_space_lighting | 
					
						
							|  |  |  |                 row.prop(shading, "studiolight_rotate_z", text="Rotation") | 
					
						
							|  |  |  |                 col = split.column()  # to align properly with above | 
					
						
							| 
									
										
										
										
											2018-05-04 14:07:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-05 08:15:30 +02:00
										 |  |  |             elif shading.light == 'MATCAP': | 
					
						
							| 
									
										
										
										
											2018-11-29 21:33:14 +01:00
										 |  |  |                 sub.scale_y = 0.6  # smaller matcap preview | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-02 18:18:54 +11:00
										 |  |  |                 sub.template_icon_view(shading, "studio_light", scale_popup=3.0) | 
					
						
							| 
									
										
										
										
											2018-07-13 20:11:57 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |                 col = split.column() | 
					
						
							| 
									
										
										
										
											2019-03-02 00:21:05 +11:00
										 |  |  |                 col.operator("preferences.studiolight_show", emboss=False, text="", icon='PREFERENCES') | 
					
						
							| 
									
										
										
										
											2018-12-18 15:01:03 +11:00
										 |  |  |                 col.operator("view3d.toggle_matcap_flip", emboss=False, text="", icon='ARROW_LEFTRIGHT') | 
					
						
							| 
									
										
										
										
											2018-06-05 08:15:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-21 14:56:00 +02:00
										 |  |  |         elif shading.type == 'MATERIAL': | 
					
						
							| 
									
										
										
										
											2018-07-06 18:53:51 +02:00
										 |  |  |             col.prop(shading, "use_scene_lights") | 
					
						
							|  |  |  |             col.prop(shading, "use_scene_world") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if not shading.use_scene_world: | 
					
						
							| 
									
										
										
										
											2018-07-13 20:11:57 +02:00
										 |  |  |                 col = layout.column() | 
					
						
							| 
									
										
										
										
											2018-08-28 12:38:54 +10:00
										 |  |  |                 split = col.split(factor=0.9) | 
					
						
							| 
									
										
										
										
											2018-07-13 20:11:57 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |                 col = split.column() | 
					
						
							|  |  |  |                 sub = col.row() | 
					
						
							|  |  |  |                 sub.scale_y = 0.6 | 
					
						
							| 
									
										
										
										
											2019-01-02 18:18:54 +11:00
										 |  |  |                 sub.template_icon_view(shading, "studio_light", scale_popup=3) | 
					
						
							| 
									
										
										
										
											2018-07-13 20:11:57 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |                 col = split.column() | 
					
						
							| 
									
										
										
										
											2019-03-02 00:21:05 +11:00
										 |  |  |                 col.operator("preferences.studiolight_show", emboss=False, text="", icon='PREFERENCES') | 
					
						
							| 
									
										
										
										
											2018-07-13 20:11:57 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-29 19:54:23 +01:00
										 |  |  |                 if shading.selected_studio_light.type == 'WORLD': | 
					
						
							| 
									
										
										
										
											2018-08-28 12:38:54 +10:00
										 |  |  |                     split = layout.split(factor=0.9) | 
					
						
							| 
									
										
										
										
											2018-07-13 20:11:57 +02:00
										 |  |  |                     col = split.column() | 
					
						
							|  |  |  |                     col.prop(shading, "studiolight_rotate_z", text="Rotation") | 
					
						
							|  |  |  |                     col.prop(shading, "studiolight_background_alpha") | 
					
						
							| 
									
										
										
										
											2018-07-31 21:06:08 +10:00
										 |  |  |                     col = split.column()  # to align properly with above | 
					
						
							| 
									
										
										
										
											2018-06-18 08:15:29 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_PT_shading_color(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_label = "Color" | 
					
						
							|  |  |  |     bl_parent_id = 'VIEW3D_PT_shading' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def poll(cls, context): | 
					
						
							| 
									
										
										
										
											2018-07-11 11:43:56 +02:00
										 |  |  |         shading = VIEW3D_PT_shading.get_shading(context) | 
					
						
							| 
									
										
										
										
											2018-09-21 14:10:06 +02:00
										 |  |  |         return shading.type in {'WIREFRAME', 'SOLID'} | 
					
						
							| 
									
										
										
										
											2018-06-18 08:15:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-19 20:25:36 +02:00
										 |  |  |     def _draw_color_type(self, context): | 
					
						
							| 
									
										
										
										
											2018-06-18 08:15:29 +02:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2018-07-11 11:43:56 +02:00
										 |  |  |         shading = VIEW3D_PT_shading.get_shading(context) | 
					
						
							| 
									
										
										
										
											2018-06-18 08:15:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-17 15:02:30 +02:00
										 |  |  |         layout.grid_flow(columns=3, align=True).prop(shading, "color_type", expand=True) | 
					
						
							| 
									
										
										
										
											2018-06-18 08:15:29 +02:00
										 |  |  |         if shading.color_type == 'SINGLE': | 
					
						
							| 
									
										
										
										
											2018-12-18 15:01:03 +11:00
										 |  |  |             layout.row().prop(shading, "single_color", text="") | 
					
						
							| 
									
										
										
										
											2018-07-27 15:05:46 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-19 20:25:36 +02:00
										 |  |  |     def _draw_background_color(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         shading = VIEW3D_PT_shading.get_shading(context) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-28 12:34:51 +10:00
										 |  |  |         layout.row().label(text="Background") | 
					
						
							| 
									
										
										
										
											2018-12-18 15:01:03 +11:00
										 |  |  |         layout.row().prop(shading, "background_type", expand=True) | 
					
						
							| 
									
										
										
										
											2018-07-27 15:05:46 +02:00
										 |  |  |         if shading.background_type == 'VIEWPORT': | 
					
						
							|  |  |  |             layout.row().prop(shading, "background_color", text="") | 
					
						
							| 
									
										
										
										
											2018-06-18 08:15:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-19 20:25:36 +02:00
										 |  |  |     def draw(self, context): | 
					
						
							| 
									
										
										
										
											2018-09-21 15:44:04 +02:00
										 |  |  |         shading = VIEW3D_PT_shading.get_shading(context) | 
					
						
							| 
									
										
										
										
											2019-02-22 16:06:13 +01:00
										 |  |  |         if shading.type == 'WIREFRAME': | 
					
						
							|  |  |  |             self.layout.row().prop(shading, "wireframe_color_type", expand=True) | 
					
						
							|  |  |  |         else: | 
					
						
							| 
									
										
										
										
											2018-09-21 15:44:04 +02:00
										 |  |  |             self._draw_color_type(context) | 
					
						
							| 
									
										
										
										
											2018-10-04 14:35:18 +02:00
										 |  |  |             self.layout.separator() | 
					
						
							| 
									
										
										
										
											2018-08-19 20:25:36 +02:00
										 |  |  |         self._draw_background_color(context) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-18 08:15:29 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_PT_shading_options(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_label = "Options" | 
					
						
							|  |  |  |     bl_parent_id = 'VIEW3D_PT_shading' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 11:43:56 +02:00
										 |  |  |         shading = VIEW3D_PT_shading.get_shading(context) | 
					
						
							| 
									
										
										
										
											2018-06-18 08:15:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 16:05:05 +02:00
										 |  |  |         col = layout.column() | 
					
						
							| 
									
										
										
										
											2018-06-18 08:15:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-19 11:23:21 +11:00
										 |  |  |         if shading.type != 'WIREFRAME': | 
					
						
							|  |  |  |             col.prop(shading, "show_backface_culling") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 16:05:05 +02:00
										 |  |  |         row = col.row() | 
					
						
							| 
									
										
										
										
											2018-10-01 18:56:16 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-26 20:31:14 +02:00
										 |  |  |         if shading.type == 'WIREFRAME': | 
					
						
							| 
									
										
										
										
											2018-10-04 14:35:18 +02:00
										 |  |  |             row.prop(shading, "show_xray_wireframe", text="") | 
					
						
							|  |  |  |             sub = row.row() | 
					
						
							|  |  |  |             sub.active = shading.show_xray_wireframe | 
					
						
							|  |  |  |             sub.prop(shading, "xray_alpha_wireframe", text="X-Ray") | 
					
						
							| 
									
										
										
										
											2018-11-08 18:58:00 +01:00
										 |  |  |         elif shading.type == 'SOLID': | 
					
						
							| 
									
										
										
										
											2018-10-04 14:35:18 +02:00
										 |  |  |             row.prop(shading, "show_xray", text="") | 
					
						
							|  |  |  |             sub = row.row() | 
					
						
							|  |  |  |             sub.active = shading.show_xray | 
					
						
							|  |  |  |             sub.prop(shading, "xray_alpha", text="X-Ray") | 
					
						
							| 
									
										
										
										
											2019-04-11 19:43:06 +02:00
										 |  |  |             #X-ray mode is off when alpha is 1.0 | 
					
						
							|  |  |  |             xray_active = shading.show_xray and shading.xray_alpha != 1 | 
					
						
							| 
									
										
										
										
											2018-06-21 14:56:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-21 14:10:06 +02:00
										 |  |  |             row = col.row() | 
					
						
							|  |  |  |             row.prop(shading, "show_shadows", text="") | 
					
						
							| 
									
										
										
										
											2019-04-11 19:43:06 +02:00
										 |  |  |             row.active = not xray_active | 
					
						
							| 
									
										
										
										
											2018-09-21 14:10:06 +02:00
										 |  |  |             sub = row.row(align=True) | 
					
						
							| 
									
										
										
										
											2018-11-08 18:58:00 +01:00
										 |  |  |             sub.active = shading.show_shadows | 
					
						
							| 
									
										
										
										
											2018-09-21 14:10:06 +02:00
										 |  |  |             sub.prop(shading, "shadow_intensity", text="Shadow") | 
					
						
							| 
									
										
										
										
											2018-07-11 16:05:05 +02:00
										 |  |  |             sub.popover( | 
					
						
							| 
									
										
										
										
											2018-09-21 14:10:06 +02:00
										 |  |  |                 panel="VIEW3D_PT_shading_options_shadow", | 
					
						
							| 
									
										
										
										
											2018-10-01 10:45:50 +02:00
										 |  |  |                 icon='PREFERENCES', | 
					
						
							| 
									
										
										
										
											2019-04-13 12:44:34 +02:00
										 |  |  |                 text="", | 
					
						
							| 
									
										
										
										
											2018-07-11 16:05:05 +02:00
										 |  |  |             ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-21 14:10:06 +02:00
										 |  |  |             col = layout.column() | 
					
						
							| 
									
										
										
										
											2018-12-19 10:55:53 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-21 14:10:06 +02:00
										 |  |  |             row = col.row() | 
					
						
							| 
									
										
										
										
											2019-04-11 19:43:06 +02:00
										 |  |  |             row.active = not xray_active | 
					
						
							| 
									
										
										
										
											2018-09-21 14:10:06 +02:00
										 |  |  |             row.prop(shading, "show_cavity") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-11 19:43:06 +02:00
										 |  |  |             if shading.show_cavity and not xray_active: | 
					
						
							| 
									
										
										
										
											2018-11-26 16:49:56 +01:00
										 |  |  |                 row.prop(shading, "cavity_type", text="Type") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 if shading.cavity_type in {'WORLD', 'BOTH'}: | 
					
						
							|  |  |  |                     col.label(text="World Space") | 
					
						
							|  |  |  |                     sub = col.row(align=True) | 
					
						
							|  |  |  |                     sub.prop(shading, "cavity_ridge_factor", text="Ridge") | 
					
						
							|  |  |  |                     sub.prop(shading, "cavity_valley_factor", text="Valley") | 
					
						
							|  |  |  |                     sub.popover( | 
					
						
							|  |  |  |                         panel="VIEW3D_PT_shading_options_ssao", | 
					
						
							|  |  |  |                         icon='PREFERENCES', | 
					
						
							| 
									
										
										
										
											2019-04-13 12:44:34 +02:00
										 |  |  |                         text="", | 
					
						
							| 
									
										
										
										
											2018-11-26 16:49:56 +01:00
										 |  |  |                     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 if shading.cavity_type in {'SCREEN', 'BOTH'}: | 
					
						
							|  |  |  |                     col.label(text="Screen Space") | 
					
						
							|  |  |  |                     sub = col.row(align=True) | 
					
						
							|  |  |  |                     sub.prop(shading, "curvature_ridge_factor", text="Ridge") | 
					
						
							|  |  |  |                     sub.prop(shading, "curvature_valley_factor", text="Valley") | 
					
						
							| 
									
										
										
										
											2018-09-21 14:10:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-25 21:03:50 +01:00
										 |  |  |             row = col.row() | 
					
						
							| 
									
										
										
										
											2019-04-11 19:43:06 +02:00
										 |  |  |             row.active = not xray_active | 
					
						
							| 
									
										
										
										
											2019-01-25 21:03:50 +01:00
										 |  |  |             row.prop(shading, "use_dof", text="Depth Of Field") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-19 11:23:21 +11:00
										 |  |  |         if shading.type in {'WIREFRAME', 'SOLID'}: | 
					
						
							|  |  |  |             row = layout.split() | 
					
						
							|  |  |  |             row.prop(shading, "show_object_outline") | 
					
						
							|  |  |  |             sub = row.row() | 
					
						
							|  |  |  |             sub.active = shading.show_object_outline | 
					
						
							|  |  |  |             sub.prop(shading, "object_outline_color", text="") | 
					
						
							| 
									
										
										
										
											2018-06-21 14:56:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-19 11:23:21 +11:00
										 |  |  |             col = layout.column() | 
					
						
							|  |  |  |             if (shading.light == 'STUDIO') and (shading.type != 'WIREFRAME'): | 
					
						
							|  |  |  |                 col.prop(shading, "show_specular_highlight", text="Specular Lighting") | 
					
						
							| 
									
										
										
										
											2018-07-11 16:05:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_PT_shading_options_shadow(Panel): | 
					
						
							|  |  |  |     bl_label = "Shadow Settings" | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         layout.use_property_split = True | 
					
						
							|  |  |  |         scene = context.scene | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         col = layout.column() | 
					
						
							|  |  |  |         col.prop(scene.display, "light_direction") | 
					
						
							|  |  |  |         col.prop(scene.display, "shadow_shift") | 
					
						
							| 
									
										
										
										
											2018-11-30 13:26:30 +01:00
										 |  |  |         col.prop(scene.display, "shadow_focus") | 
					
						
							| 
									
										
										
										
											2018-07-11 16:05:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_PT_shading_options_ssao(Panel): | 
					
						
							|  |  |  |     bl_label = "SSAO Settings" | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         layout.use_property_split = True | 
					
						
							|  |  |  |         scene = context.scene | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         col = layout.column(align=True) | 
					
						
							|  |  |  |         col.prop(scene.display, "matcap_ssao_samples") | 
					
						
							|  |  |  |         col.prop(scene.display, "matcap_ssao_distance") | 
					
						
							|  |  |  |         col.prop(scene.display, "matcap_ssao_attenuation") | 
					
						
							| 
									
										
										
										
											2018-05-25 08:06:36 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-29 08:47:14 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-13 12:23:07 +02:00
										 |  |  | class VIEW3D_PT_gizmo_display(Panel): | 
					
						
							| 
									
										
										
										
											2018-04-29 08:47:14 +02:00
										 |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							| 
									
										
										
										
											2018-05-02 12:05:40 +02:00
										 |  |  |     bl_region_type = 'HEADER' | 
					
						
							| 
									
										
										
										
											2018-07-14 22:29:35 +02:00
										 |  |  |     bl_label = "Gizmo" | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-13 20:36:53 +02:00
										 |  |  |         scene = context.scene | 
					
						
							| 
									
										
										
										
											2009-10-31 19:31:45 +00:00
										 |  |  |         view = context.space_data | 
					
						
							| 
									
										
										
										
											2009-11-28 23:37:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-03 10:55:28 +02:00
										 |  |  |         col = layout.column() | 
					
						
							| 
									
										
										
										
											2019-04-13 12:23:07 +02:00
										 |  |  |         col.label(text="Viewport Gizmos") | 
					
						
							| 
									
										
										
										
											2018-05-03 10:55:28 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-13 12:23:07 +02:00
										 |  |  |         col.active = view.show_gizmo | 
					
						
							|  |  |  |         colsub = col.column() | 
					
						
							|  |  |  |         colsub.prop(view, "show_gizmo_navigate", text="Navigate") | 
					
						
							|  |  |  |         colsub.prop(view, "show_gizmo_tool", text="Active Tools") | 
					
						
							| 
									
										
										
										
											2019-04-13 20:36:53 +02:00
										 |  |  |         colsub.prop(view, "show_gizmo_context", text="Active Object") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 12:26:11 +02:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         col = layout.column() | 
					
						
							|  |  |  |         col.active = view.show_gizmo_context | 
					
						
							|  |  |  |         col.label(text="Object Gizmos") | 
					
						
							|  |  |  |         col.prop(scene.transform_orientation_slots[1], "type", text="") | 
					
						
							|  |  |  |         col.prop(view, "show_gizmo_object_translate", text="Move") | 
					
						
							|  |  |  |         col.prop(view, "show_gizmo_object_rotate", text="Rotate") | 
					
						
							|  |  |  |         col.prop(view, "show_gizmo_object_scale", text="Scale") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							| 
									
										
										
										
											2019-04-14 13:11:17 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # Match order of object type visibility | 
					
						
							| 
									
										
										
										
											2019-04-19 12:26:11 +02:00
										 |  |  |         col = layout.column() | 
					
						
							|  |  |  |         col.label(text="Empty") | 
					
						
							|  |  |  |         col.prop(view, "show_gizmo_empty_image", text="Image") | 
					
						
							|  |  |  |         col.prop(view, "show_gizmo_empty_force_field", text="Force Field") | 
					
						
							|  |  |  |         col.label(text="Light") | 
					
						
							|  |  |  |         col.prop(view, "show_gizmo_light_size", text="Size") | 
					
						
							|  |  |  |         col.prop(view, "show_gizmo_light_look_at", text="Look At") | 
					
						
							|  |  |  |         col.label(text="Camera") | 
					
						
							|  |  |  |         col.prop(view, "show_gizmo_camera_lens", text="Lens") | 
					
						
							|  |  |  |         col.prop(view, "show_gizmo_camera_dof_distance", text="Focus Distance") | 
					
						
							| 
									
										
										
										
											2019-04-13 12:23:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_PT_overlay(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_label = "Overlays" | 
					
						
							|  |  |  |     bl_ui_units_x = 13 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:32:24 +02:00
										 |  |  |     def draw(self, _context): | 
					
						
							| 
									
										
										
										
											2019-04-13 12:23:07 +02:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  |         layout.label(text="Viewport Overlays") | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  | class VIEW3D_PT_overlay_guides(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_parent_id = 'VIEW3D_PT_overlay' | 
					
						
							|  |  |  |     bl_label = "Guides" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							|  |  |  |         overlay = view.overlay | 
					
						
							|  |  |  |         shading = view.shading | 
					
						
							|  |  |  |         display_all = overlay.show_overlays | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         col = layout.column() | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  |         col.active = display_all | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         split = col.split() | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  |         sub = split.column() | 
					
						
							| 
									
										
										
										
											2019-04-17 11:35:20 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         row = sub.row() | 
					
						
							|  |  |  |         row_el = row.column() | 
					
						
							|  |  |  |         row_el.prop(overlay, "show_ortho_grid", text="Grid") | 
					
						
							|  |  |  |         grid_active = view.region_quadviews or (view.region_3d.is_orthographic_side_view and not view.region_3d.is_perspective) | 
					
						
							|  |  |  |         row_el.active = grid_active | 
					
						
							|  |  |  |         row.prop(overlay, "show_floor", text="Floor") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if overlay.show_floor or overlay.show_ortho_grid: | 
					
						
							|  |  |  |             sub = col.row(align=True) | 
					
						
							|  |  |  |             sub.active = (overlay.show_floor and not view.region_3d.is_orthographic_side_view) or (overlay.show_ortho_grid and grid_active) | 
					
						
							|  |  |  |             sub.prop(overlay, "grid_scale", text="Scale") | 
					
						
							|  |  |  |             sub.prop(overlay, "grid_subdivisions", text="Subdivisions") | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 10:38:01 +02:00
										 |  |  |         sub = split.column() | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  |         row = sub.row() | 
					
						
							|  |  |  |         row.label(text="Axes") | 
					
						
							| 
									
										
										
										
											2018-07-11 10:38:01 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  |         subrow = row.row(align=True) | 
					
						
							|  |  |  |         subrow.prop(overlay, "show_axis_x", text="X", toggle=True) | 
					
						
							|  |  |  |         subrow.prop(overlay, "show_axis_y", text="Y", toggle=True) | 
					
						
							|  |  |  |         subrow.prop(overlay, "show_axis_z", text="Z", toggle=True) | 
					
						
							| 
									
										
										
										
											2018-07-11 10:38:01 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         split = col.split() | 
					
						
							|  |  |  |         sub = split.column() | 
					
						
							| 
									
										
										
										
											2018-07-12 10:07:32 +02:00
										 |  |  |         sub.prop(overlay, "show_text", text="Text Info") | 
					
						
							| 
									
										
										
										
											2018-07-11 18:33:48 +02:00
										 |  |  |         sub = split.column() | 
					
						
							| 
									
										
										
										
											2018-07-12 10:07:32 +02:00
										 |  |  |         sub.prop(overlay, "show_cursor", text="3D Cursor") | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  |         if shading.type == 'MATERIAL': | 
					
						
							| 
									
										
										
										
											2018-07-11 18:33:48 +02:00
										 |  |  |             col.prop(overlay, "show_look_dev") | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         col.prop(overlay, "show_annotation", text="Annotations") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_PT_overlay_object(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_parent_id = 'VIEW3D_PT_overlay' | 
					
						
							|  |  |  |     bl_label = "Objects" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							|  |  |  |         overlay = view.overlay | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  |         display_all = overlay.show_overlays | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         col = layout.column(align=True) | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  |         col.active = display_all | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  |         split = col.split() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         sub = split.column(align=True) | 
					
						
							| 
									
										
										
										
											2018-10-05 09:41:48 +10:00
										 |  |  |         sub.prop(overlay, "show_extras", text="Extras") | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  |         sub.prop(overlay, "show_relationship_lines") | 
					
						
							| 
									
										
										
										
											2018-07-11 13:58:10 +02:00
										 |  |  |         sub.prop(overlay, "show_outline_selected") | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         sub = split.column(align=True) | 
					
						
							|  |  |  |         sub.prop(overlay, "show_bones", text="Bones") | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  |         sub.prop(overlay, "show_motion_paths") | 
					
						
							| 
									
										
										
										
											2018-07-11 19:00:24 +02:00
										 |  |  |         sub.prop(overlay, "show_object_origins", text="Origins") | 
					
						
							| 
									
										
										
										
											2018-07-11 18:51:04 +02:00
										 |  |  |         subsub = sub.column() | 
					
						
							|  |  |  |         subsub.active = overlay.show_object_origins | 
					
						
							| 
									
										
										
										
											2018-07-11 19:00:24 +02:00
										 |  |  |         subsub.prop(overlay, "show_object_origins_all", text="Origins (All)") | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_PT_overlay_geometry(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_parent_id = 'VIEW3D_PT_overlay' | 
					
						
							|  |  |  |     bl_label = "Geometry" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							|  |  |  |         overlay = view.overlay | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  |         display_all = overlay.show_overlays | 
					
						
							| 
									
										
										
										
											2018-09-28 12:05:25 -03:00
										 |  |  |         is_wireframes = view.shading.type == 'WIREFRAME' | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         col = layout.column() | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  |         col.active = display_all | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 16:06:19 +02:00
										 |  |  |         row = col.row() | 
					
						
							| 
									
										
										
										
											2018-09-28 12:05:25 -03:00
										 |  |  |         if not is_wireframes: | 
					
						
							|  |  |  |             row.prop(overlay, "show_wireframes", text="") | 
					
						
							| 
									
										
										
										
											2018-07-11 16:06:19 +02:00
										 |  |  |         sub = row.row() | 
					
						
							| 
									
										
										
										
											2018-09-28 12:05:25 -03:00
										 |  |  |         sub.active = overlay.show_wireframes or is_wireframes | 
					
						
							| 
									
										
										
										
											2018-07-11 13:58:10 +02:00
										 |  |  |         sub.prop(overlay, "wireframe_threshold", text="Wireframe") | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         col = layout.column(align=True) | 
					
						
							| 
									
										
										
										
											2018-07-11 18:46:08 +02:00
										 |  |  |         col.active = display_all | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-19 10:55:53 +11:00
										 |  |  |         col.prop(overlay, "show_face_orientation") | 
					
						
							| 
									
										
										
										
											2018-06-05 19:35:08 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-19 10:55:53 +11:00
										 |  |  |         # sub.prop(overlay, "show_onion_skins") | 
					
						
							| 
									
										
										
										
											2018-07-11 16:06:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-05 19:35:08 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  | class VIEW3D_PT_overlay_motion_tracking(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_parent_id = 'VIEW3D_PT_overlay' | 
					
						
							|  |  |  |     bl_label = "Motion Tracking" | 
					
						
							| 
									
										
										
										
											2018-07-05 15:01:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  |     def draw_header(self, context): | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							|  |  |  |         self.layout.prop(view, "show_reconstruction", text="") | 
					
						
							| 
									
										
										
										
											2010-04-04 14:52:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							| 
									
										
										
										
											2018-07-11 18:46:08 +02:00
										 |  |  |         overlay = view.overlay | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  |         display_all = overlay.show_overlays | 
					
						
							| 
									
										
										
										
											2010-04-04 14:52:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  |         col = layout.column() | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  |         col.active = display_all | 
					
						
							| 
									
										
										
										
											2018-06-05 15:34:37 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  |         if view.show_reconstruction: | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  |             split = col.split() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             sub = split.column(align=True) | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  |             sub.active = view.show_reconstruction | 
					
						
							|  |  |  |             sub.prop(view, "show_camera_path", text="Camera Path") | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |             sub = split.column() | 
					
						
							|  |  |  |             sub.prop(view, "show_bundle_names", text="Marker Names") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             col = layout.column() | 
					
						
							|  |  |  |             col.label(text="Tracks:") | 
					
						
							|  |  |  |             row = col.row(align=True) | 
					
						
							| 
									
										
										
										
											2018-09-03 18:58:41 +02:00
										 |  |  |             row.prop(view, "tracks_display_type", text="") | 
					
						
							|  |  |  |             row.prop(view, "tracks_display_size", text="Size") | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_PT_overlay_edit_mesh(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_parent_id = 'VIEW3D_PT_overlay' | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  |     bl_label = "Mesh Edit Mode" | 
					
						
							| 
									
										
										
										
											2018-05-03 15:09:09 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  |     @classmethod | 
					
						
							|  |  |  |     def poll(cls, context): | 
					
						
							|  |  |  |         return context.mode == 'EDIT_MESH' | 
					
						
							| 
									
										
										
										
											2018-05-03 15:09:09 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							|  |  |  |         overlay = view.overlay | 
					
						
							|  |  |  |         display_all = overlay.show_overlays | 
					
						
							| 
									
										
										
										
											2018-05-06 12:17:53 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  |         col = layout.column() | 
					
						
							|  |  |  |         col.active = display_all | 
					
						
							| 
									
										
										
										
											2018-05-03 15:09:09 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  |         split = col.split() | 
					
						
							| 
									
										
										
										
											2018-05-03 15:09:09 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  |         sub = split.column() | 
					
						
							| 
									
										
										
										
											2018-09-24 23:18:02 +02:00
										 |  |  |         sub.prop(overlay, "show_edges", text="Edges") | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  |         sub = split.column() | 
					
						
							| 
									
										
										
										
											2018-09-24 23:18:02 +02:00
										 |  |  |         sub.prop(overlay, "show_faces", text="Faces") | 
					
						
							| 
									
										
										
										
											2018-08-30 16:21:03 +10:00
										 |  |  |         sub = split.column() | 
					
						
							| 
									
										
										
										
											2018-09-24 23:18:02 +02:00
										 |  |  |         sub.prop(overlay, "show_face_center", text="Center") | 
					
						
							| 
									
										
										
										
											2018-06-05 15:34:37 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  |         row = col.row(align=True) | 
					
						
							| 
									
										
										
										
											2018-09-24 23:18:02 +02:00
										 |  |  |         row.prop(overlay, "show_edge_crease", text="Creases", toggle=True) | 
					
						
							|  |  |  |         row.prop(overlay, "show_edge_sharp", text="Sharp", text_ctxt=i18n_contexts.plural, toggle=True) | 
					
						
							|  |  |  |         row.prop(overlay, "show_edge_bevel_weight", text="Bevel", toggle=True) | 
					
						
							|  |  |  |         row.prop(overlay, "show_edge_seams", text="Seams", toggle=True) | 
					
						
							| 
									
										
										
										
											2018-06-05 15:34:37 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  | class VIEW3D_PT_overlay_edit_mesh_shading(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_parent_id = 'VIEW3D_PT_overlay_edit_mesh' | 
					
						
							|  |  |  |     bl_label = "Shading" | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  |     @classmethod | 
					
						
							|  |  |  |     def poll(cls, context): | 
					
						
							|  |  |  |         return context.mode == 'EDIT_MESH' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							|  |  |  |         overlay = view.overlay | 
					
						
							|  |  |  |         tool_settings = context.tool_settings | 
					
						
							|  |  |  |         display_all = overlay.show_overlays | 
					
						
							|  |  |  |         statvis = tool_settings.statvis | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  |         col = layout.column() | 
					
						
							|  |  |  |         col.active = display_all | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         col.prop(overlay, "show_occlude_wire") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         col.prop(overlay, "show_weight", text="Vertex Group Weights") | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  |         if overlay.show_weight: | 
					
						
							| 
									
										
										
										
											2018-09-27 18:38:07 +03:00
										 |  |  |             row = col.split(factor=0.33) | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  |             row.label(text="Zero Weights") | 
					
						
							| 
									
										
										
										
											2018-09-27 18:38:07 +03:00
										 |  |  |             sub = row.row() | 
					
						
							|  |  |  |             sub.prop(tool_settings, "vertex_group_user", expand=True) | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-24 23:18:02 +02:00
										 |  |  |         col.prop(overlay, "show_statvis", text="Mesh Analysis") | 
					
						
							|  |  |  |         if overlay.show_statvis: | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  |             col = col.column() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             sub = col.split() | 
					
						
							| 
									
										
										
										
											2018-09-24 23:18:02 +02:00
										 |  |  |             sub.active = overlay.show_statvis | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  |             sub.label(text="Type") | 
					
						
							|  |  |  |             sub.prop(statvis, "type", text="") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-05 15:34:37 +02:00
										 |  |  |             statvis_type = statvis.type | 
					
						
							|  |  |  |             if statvis_type == 'OVERHANG': | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  |                 row = col.row(align=True) | 
					
						
							|  |  |  |                 row.prop(statvis, "overhang_min", text="Minimum") | 
					
						
							|  |  |  |                 row.prop(statvis, "overhang_max", text="Maximum") | 
					
						
							|  |  |  |                 col.row().prop(statvis, "overhang_axis", expand=True) | 
					
						
							| 
									
										
										
										
											2018-06-05 15:34:37 +02:00
										 |  |  |             elif statvis_type == 'THICKNESS': | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  |                 row = col.row(align=True) | 
					
						
							|  |  |  |                 row.prop(statvis, "thickness_min", text="Minimum") | 
					
						
							|  |  |  |                 row.prop(statvis, "thickness_max", text="Maximum") | 
					
						
							|  |  |  |                 col.prop(statvis, "thickness_samples") | 
					
						
							| 
									
										
										
										
											2018-06-05 15:34:37 +02:00
										 |  |  |             elif statvis_type == 'INTERSECT': | 
					
						
							|  |  |  |                 pass | 
					
						
							|  |  |  |             elif statvis_type == 'DISTORT': | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  |                 row = col.row(align=True) | 
					
						
							|  |  |  |                 row.prop(statvis, "distort_min", text="Minimum") | 
					
						
							|  |  |  |                 row.prop(statvis, "distort_max", text="Maximum") | 
					
						
							| 
									
										
										
										
											2018-06-05 15:34:37 +02:00
										 |  |  |             elif statvis_type == 'SHARP': | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  |                 row = col.row(align=True) | 
					
						
							|  |  |  |                 row.prop(statvis, "sharp_min", text="Minimum") | 
					
						
							|  |  |  |                 row.prop(statvis, "sharp_max", text="Maximum") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_PT_overlay_edit_mesh_measurement(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_parent_id = 'VIEW3D_PT_overlay_edit_mesh' | 
					
						
							|  |  |  |     bl_label = "Measurement" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def poll(cls, context): | 
					
						
							|  |  |  |         return context.mode == 'EDIT_MESH' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							|  |  |  |         overlay = view.overlay | 
					
						
							|  |  |  |         display_all = overlay.show_overlays | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         col = layout.column() | 
					
						
							|  |  |  |         col.active = display_all | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         split = col.split() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         sub = split.column() | 
					
						
							| 
									
										
										
										
											2018-09-24 23:18:02 +02:00
										 |  |  |         sub.prop(overlay, "show_extra_edge_length", text="Edge Length") | 
					
						
							|  |  |  |         sub.prop(overlay, "show_extra_edge_angle", text="Edge Angle") | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         sub = split.column() | 
					
						
							| 
									
										
										
										
											2018-09-24 23:18:02 +02:00
										 |  |  |         sub.prop(overlay, "show_extra_face_area", text="Face Area") | 
					
						
							|  |  |  |         sub.prop(overlay, "show_extra_face_angle", text="Face Angle") | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_PT_overlay_edit_mesh_normals(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_parent_id = 'VIEW3D_PT_overlay_edit_mesh' | 
					
						
							|  |  |  |     bl_label = "Normals" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def poll(cls, context): | 
					
						
							|  |  |  |         return context.mode == 'EDIT_MESH' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							|  |  |  |         overlay = view.overlay | 
					
						
							|  |  |  |         display_all = overlay.show_overlays | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         col = layout.column() | 
					
						
							|  |  |  |         col.active = display_all | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         row = col.row(align=True) | 
					
						
							| 
									
										
										
										
											2018-10-01 10:45:50 +02:00
										 |  |  |         row.prop(overlay, "show_vertex_normals", text="", icon='NORMALS_VERTEX') | 
					
						
							|  |  |  |         row.prop(overlay, "show_split_normals", text="", icon='NORMALS_VERTEX_FACE') | 
					
						
							|  |  |  |         row.prop(overlay, "show_face_normals", text="", icon='NORMALS_FACE') | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         sub = row.row(align=True) | 
					
						
							|  |  |  |         sub.active = overlay.show_vertex_normals or overlay.show_face_normals or overlay.show_split_normals | 
					
						
							|  |  |  |         sub.prop(overlay, "normals_length", text="Size") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_PT_overlay_edit_mesh_freestyle(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_parent_id = 'VIEW3D_PT_overlay' | 
					
						
							|  |  |  |     bl_label = "Freestyle" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def poll(cls, context): | 
					
						
							|  |  |  |         return context.mode == 'EDIT_MESH' and bpy.app.build_options.freestyle | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							|  |  |  |         overlay = view.overlay | 
					
						
							|  |  |  |         display_all = overlay.show_overlays | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         col = layout.column() | 
					
						
							|  |  |  |         col.active = display_all | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         row = col.row() | 
					
						
							| 
									
										
										
										
											2018-09-24 23:18:02 +02:00
										 |  |  |         row.prop(overlay, "show_freestyle_edge_marks", text="Edge Marks") | 
					
						
							|  |  |  |         row.prop(overlay, "show_freestyle_face_marks", text="Face Marks") | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_PT_overlay_edit_mesh_developer(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_parent_id = 'VIEW3D_PT_overlay_edit_mesh' | 
					
						
							|  |  |  |     bl_label = "Developer" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def poll(cls, context): | 
					
						
							| 
									
										
										
										
											2018-12-21 12:47:44 +11:00
										 |  |  |         return context.mode == 'EDIT_MESH' and context.preferences.view.show_developer_ui | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							|  |  |  |         overlay = view.overlay | 
					
						
							|  |  |  |         display_all = overlay.show_overlays | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         col = layout.column() | 
					
						
							|  |  |  |         col.active = display_all | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-24 23:18:02 +02:00
										 |  |  |         col.prop(overlay, "show_extra_indices", text="Indices") | 
					
						
							| 
									
										
										
										
											2018-06-05 15:34:37 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  | class VIEW3D_PT_overlay_edit_curve(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_parent_id = 'VIEW3D_PT_overlay' | 
					
						
							| 
									
										
										
										
											2018-07-31 12:59:48 +10:00
										 |  |  |     bl_label = "Curve Edit Mode" | 
					
						
							| 
									
										
										
										
											2018-05-07 15:10:11 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  |     @classmethod | 
					
						
							|  |  |  |     def poll(cls, context): | 
					
						
							|  |  |  |         return context.mode == 'EDIT_CURVE' | 
					
						
							| 
									
										
										
										
											2018-05-06 12:17:53 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							|  |  |  |         overlay = view.overlay | 
					
						
							|  |  |  |         display_all = overlay.show_overlays | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         col = layout.column() | 
					
						
							|  |  |  |         col.active = display_all | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         row = col.row() | 
					
						
							| 
									
										
										
										
											2018-09-25 18:50:57 +02:00
										 |  |  |         row.prop(overlay, "show_curve_handles", text="Handles") | 
					
						
							| 
									
										
										
										
											2018-12-14 16:35:51 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         row = col.row() | 
					
						
							|  |  |  |         row.prop(overlay, "show_curve_normals", text="") | 
					
						
							|  |  |  |         sub = row.row() | 
					
						
							|  |  |  |         sub.active = overlay.show_curve_normals | 
					
						
							|  |  |  |         sub.prop(overlay, "normals_length", text="Normals") | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_PT_overlay_sculpt(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_context = ".sculpt_mode" | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_parent_id = 'VIEW3D_PT_overlay' | 
					
						
							|  |  |  |     bl_label = "Sculpt" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def poll(cls, context): | 
					
						
							|  |  |  |         return ( | 
					
						
							|  |  |  |             context.mode == 'SCULPT' and | 
					
						
							|  |  |  |             (context.sculpt_object and context.tool_settings.sculpt) | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2018-06-13 14:11:59 +02:00
										 |  |  |         tool_settings = context.tool_settings | 
					
						
							|  |  |  |         sculpt = tool_settings.sculpt | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-20 11:58:44 +02:00
										 |  |  |         view = context.space_data | 
					
						
							|  |  |  |         overlay = view.overlay | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  |         layout.prop(sculpt, "show_diffuse_color") | 
					
						
							| 
									
										
										
										
											2019-04-20 19:01:03 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         row = layout.row(align=True) | 
					
						
							|  |  |  |         row.prop(sculpt, "show_mask", text="") | 
					
						
							|  |  |  |         sub = row.row() | 
					
						
							|  |  |  |         sub.active = sculpt.show_mask | 
					
						
							|  |  |  |         sub.prop(overlay, "sculpt_mode_mask_opacity", text="Mask") | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_PT_overlay_pose(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_parent_id = 'VIEW3D_PT_overlay' | 
					
						
							|  |  |  |     bl_label = "Pose Mode" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def poll(cls, context): | 
					
						
							| 
									
										
										
										
											2018-11-23 13:17:10 +11:00
										 |  |  |         mode = context.mode | 
					
						
							|  |  |  |         return ( | 
					
						
							|  |  |  |             (mode == 'POSE') or | 
					
						
							| 
									
										
										
										
											2019-03-12 10:21:55 +11:00
										 |  |  |             (mode == 'PAINT_WEIGHT' and context.pose_object) | 
					
						
							| 
									
										
										
										
											2018-11-23 13:17:10 +11:00
										 |  |  |         ) | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							| 
									
										
										
										
											2018-11-23 13:17:10 +11:00
										 |  |  |         mode = context.mode | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  |         overlay = view.overlay | 
					
						
							|  |  |  |         display_all = overlay.show_overlays | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         col = layout.column() | 
					
						
							|  |  |  |         col.active = display_all | 
					
						
							| 
									
										
										
										
											2018-07-11 18:54:42 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-23 13:17:10 +11:00
										 |  |  |         if mode == 'POSE': | 
					
						
							|  |  |  |             row = col.row() | 
					
						
							| 
									
										
										
										
											2018-11-23 13:46:40 +11:00
										 |  |  |             row.prop(overlay, "show_xray_bone", text="") | 
					
						
							| 
									
										
										
										
											2018-11-23 13:17:10 +11:00
										 |  |  |             sub = row.row() | 
					
						
							| 
									
										
										
										
											2018-11-23 13:46:40 +11:00
										 |  |  |             sub.active = display_all and overlay.show_xray_bone | 
					
						
							|  |  |  |             sub.prop(overlay, "xray_alpha_bone", text="Fade Geometry") | 
					
						
							| 
									
										
										
										
											2018-11-23 13:17:10 +11:00
										 |  |  |         else: | 
					
						
							|  |  |  |             row = col.row() | 
					
						
							| 
									
										
										
										
											2018-11-23 13:46:40 +11:00
										 |  |  |             row.prop(overlay, "show_xray_bone") | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_PT_overlay_paint(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_parent_id = 'VIEW3D_PT_overlay' | 
					
						
							| 
									
										
										
										
											2018-06-22 10:37:38 +02:00
										 |  |  |     bl_label = "" | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def poll(cls, context): | 
					
						
							|  |  |  |         return context.mode in {'PAINT_WEIGHT', 'PAINT_VERTEX', 'PAINT_TEXTURE'} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-22 10:37:38 +02:00
										 |  |  |     def draw_header(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         layout.label(text={ | 
					
						
							| 
									
										
										
										
											2018-06-26 08:45:13 +02:00
										 |  |  |             'PAINT_TEXTURE': "Texture Paint", | 
					
						
							|  |  |  |             'PAINT_VERTEX': "Vertex Paint", | 
					
						
							|  |  |  |             'PAINT_WEIGHT': "Weight Paint", | 
					
						
							| 
									
										
										
										
											2018-06-22 10:37:38 +02:00
										 |  |  |         }[context.mode]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							|  |  |  |         overlay = view.overlay | 
					
						
							|  |  |  |         display_all = overlay.show_overlays | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         col = layout.column() | 
					
						
							|  |  |  |         col.active = display_all | 
					
						
							| 
									
										
										
										
											2018-05-03 15:09:09 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-22 10:37:38 +02:00
										 |  |  |         col.prop(overlay, { | 
					
						
							| 
									
										
										
										
											2018-06-26 08:45:13 +02:00
										 |  |  |             'PAINT_TEXTURE': "texture_paint_mode_opacity", | 
					
						
							|  |  |  |             'PAINT_VERTEX': "vertex_paint_mode_opacity", | 
					
						
							|  |  |  |             'PAINT_WEIGHT': "weight_paint_mode_opacity", | 
					
						
							| 
									
										
										
										
											2018-06-22 10:37:38 +02:00
										 |  |  |         }[context.mode], text="Opacity") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-27 18:38:07 +03:00
										 |  |  |         if context.mode == 'PAINT_WEIGHT': | 
					
						
							|  |  |  |             row = col.split(factor=0.33) | 
					
						
							|  |  |  |             row.label(text="Zero Weights") | 
					
						
							|  |  |  |             sub = row.row() | 
					
						
							|  |  |  |             sub.prop(context.tool_settings, "vertex_group_user", expand=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             col.prop(overlay, "show_wpaint_contours") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  |         if context.mode in {'PAINT_WEIGHT', 'PAINT_VERTEX'}: | 
					
						
							|  |  |  |             col.prop(overlay, "show_paint_wire") | 
					
						
							| 
									
										
										
										
											2018-05-03 15:09:09 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-30 03:22:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 14:05:07 +02:00
										 |  |  | class VIEW3D_PT_pivot_point(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_label = "Pivot Point" | 
					
						
							| 
									
										
										
										
											2018-07-04 02:23:52 +02:00
										 |  |  |     bl_ui_units_x = 8 | 
					
						
							| 
									
										
										
										
											2018-07-03 14:05:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							| 
									
										
										
										
											2018-12-17 17:26:47 +11:00
										 |  |  |         tool_settings = context.tool_settings | 
					
						
							| 
									
										
										
										
											2018-07-03 14:05:07 +02:00
										 |  |  |         obj = context.active_object | 
					
						
							|  |  |  |         mode = context.mode | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         col = layout.column() | 
					
						
							| 
									
										
										
										
											2018-08-28 12:34:51 +10:00
										 |  |  |         col.label(text="Pivot Point") | 
					
						
							| 
									
										
										
										
											2018-12-17 17:26:47 +11:00
										 |  |  |         col.prop(tool_settings, "transform_pivot_point", expand=True) | 
					
						
							| 
									
										
										
										
											2018-07-03 14:05:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (obj is None) or (mode in {'OBJECT', 'POSE', 'WEIGHT_PAINT'}): | 
					
						
							| 
									
										
										
										
											2018-07-17 11:59:24 +02:00
										 |  |  |             col.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-18 13:28:00 +11:00
										 |  |  |             col.prop(tool_settings, "use_transform_pivot_point_align") | 
					
						
							| 
									
										
										
										
											2018-07-03 14:05:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_PT_snapping(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_label = "Snapping" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							| 
									
										
										
										
											2018-12-17 17:26:47 +11:00
										 |  |  |         tool_settings = context.tool_settings | 
					
						
							|  |  |  |         snap_elements = tool_settings.snap_elements | 
					
						
							| 
									
										
										
										
											2018-07-03 14:05:07 +02:00
										 |  |  |         obj = context.active_object | 
					
						
							|  |  |  |         object_mode = 'OBJECT' if obj is None else obj.mode | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         col = layout.column() | 
					
						
							| 
									
										
										
										
											2018-08-28 12:34:51 +10:00
										 |  |  |         col.label(text="Snapping") | 
					
						
							| 
									
										
										
										
											2018-12-17 17:26:47 +11:00
										 |  |  |         col.prop(tool_settings, "snap_elements", expand=True) | 
					
						
							| 
									
										
										
										
											2018-07-03 14:05:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         col.separator() | 
					
						
							|  |  |  |         if 'INCREMENT' in snap_elements: | 
					
						
							| 
									
										
										
										
											2018-12-17 17:26:47 +11:00
										 |  |  |             col.prop(tool_settings, "use_snap_grid_absolute") | 
					
						
							| 
									
										
										
										
											2018-07-03 14:05:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if snap_elements != {'INCREMENT'}: | 
					
						
							| 
									
										
										
										
											2018-08-28 12:34:51 +10:00
										 |  |  |             col.label(text="Target") | 
					
						
							| 
									
										
										
										
											2018-07-03 14:05:07 +02:00
										 |  |  |             row = col.row(align=True) | 
					
						
							| 
									
										
										
										
											2018-12-17 17:26:47 +11:00
										 |  |  |             row.prop(tool_settings, "snap_target", expand=True) | 
					
						
							| 
									
										
										
										
											2018-07-03 14:05:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |             if obj: | 
					
						
							|  |  |  |                 if object_mode == 'EDIT': | 
					
						
							| 
									
										
										
										
											2018-12-17 17:26:47 +11:00
										 |  |  |                     col.prop(tool_settings, "use_snap_self") | 
					
						
							| 
									
										
										
										
											2019-03-12 10:35:11 +11:00
										 |  |  |                 if object_mode in {'OBJECT', 'POSE', 'EDIT', 'WEIGHT_PAINT'}: | 
					
						
							| 
									
										
										
										
											2018-12-17 17:26:47 +11:00
										 |  |  |                     col.prop(tool_settings, "use_snap_align_rotation") | 
					
						
							| 
									
										
										
										
											2018-07-03 14:05:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |             if 'FACE' in snap_elements: | 
					
						
							| 
									
										
										
										
											2018-12-17 17:26:47 +11:00
										 |  |  |                 col.prop(tool_settings, "use_snap_project") | 
					
						
							| 
									
										
										
										
											2018-07-03 14:05:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |             if 'VOLUME' in snap_elements: | 
					
						
							| 
									
										
										
										
											2018-12-17 17:26:47 +11:00
										 |  |  |                 col.prop(tool_settings, "use_snap_peel_object") | 
					
						
							| 
									
										
										
										
											2018-07-03 14:05:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 11:54:02 +01:00
										 |  |  |         col.label(text="Affect") | 
					
						
							|  |  |  |         row = col.row(align=True) | 
					
						
							|  |  |  |         row.prop(tool_settings, "use_snap_translate", text="Move", toggle=True) | 
					
						
							|  |  |  |         row.prop(tool_settings, "use_snap_rotate", text="Rotate", toggle=True) | 
					
						
							|  |  |  |         row.prop(tool_settings, "use_snap_scale", text="Scale", toggle=True) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 14:05:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | class VIEW3D_PT_transform_orientations(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_label = "Transform Orientations" | 
					
						
							| 
									
										
										
										
											2018-07-04 02:23:52 +02:00
										 |  |  |     bl_ui_units_x = 8 | 
					
						
							| 
									
										
										
										
											2018-07-03 14:05:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2018-08-28 12:34:51 +10:00
										 |  |  |         layout.label(text="Transform Orientations") | 
					
						
							| 
									
										
										
										
											2018-07-03 14:05:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         scene = context.scene | 
					
						
							| 
									
										
										
										
											2018-12-19 20:51:04 +11:00
										 |  |  |         orient_slot = scene.transform_orientation_slots[0] | 
					
						
							|  |  |  |         orientation = orient_slot.custom_orientation | 
					
						
							| 
									
										
										
										
											2018-07-03 14:05:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 14:23:47 +02:00
										 |  |  |         row = layout.row() | 
					
						
							|  |  |  |         col = row.column() | 
					
						
							| 
									
										
										
										
											2018-12-19 20:51:04 +11:00
										 |  |  |         col.prop(orient_slot, "type", expand=True) | 
					
						
							| 
									
										
										
										
											2018-10-01 10:45:50 +02:00
										 |  |  |         row.operator("transform.create_orientation", text="", icon='ADD', emboss=False).use = True | 
					
						
							| 
									
										
										
										
											2018-07-03 14:05:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if orientation: | 
					
						
							|  |  |  |             row = layout.row(align=False) | 
					
						
							| 
									
										
										
										
											2018-12-20 13:01:40 +11:00
										 |  |  |             row.prop(orientation, "name", text="", icon='OBJECT_ORIGIN') | 
					
						
							| 
									
										
										
										
											2018-07-03 14:05:07 +02:00
										 |  |  |             row.operator("transform.delete_orientation", text="", icon='X', emboss=False) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-20 18:50:07 +02:00
										 |  |  | class VIEW3D_PT_gpencil_origin(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							| 
									
										
										
										
											2018-09-20 22:51:34 +02:00
										 |  |  |     bl_label = "Stroke Placement" | 
					
						
							| 
									
										
										
										
											2018-09-20 18:50:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2018-12-17 17:26:47 +11:00
										 |  |  |         tool_settings = context.tool_settings | 
					
						
							| 
									
										
										
										
											2018-11-01 16:42:34 +01:00
										 |  |  |         gpd = context.gpencil_data | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-20 22:51:34 +02:00
										 |  |  |         layout.label(text="Stroke Placement") | 
					
						
							| 
									
										
										
										
											2018-09-20 18:50:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         row = layout.row() | 
					
						
							|  |  |  |         col = row.column() | 
					
						
							| 
									
										
										
										
											2018-12-17 17:26:47 +11:00
										 |  |  |         col.prop(tool_settings, "gpencil_stroke_placement_view3d", expand=True) | 
					
						
							| 
									
										
										
										
											2018-11-01 16:42:34 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-17 17:26:47 +11:00
										 |  |  |         if tool_settings.gpencil_stroke_placement_view3d == 'SURFACE': | 
					
						
							| 
									
										
										
										
											2018-11-01 16:42:34 +01:00
										 |  |  |             row = layout.row() | 
					
						
							|  |  |  |             row.label(text="Offset") | 
					
						
							|  |  |  |             row = layout.row() | 
					
						
							|  |  |  |             row.prop(gpd, "zdepth_offset", text="") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-17 17:26:47 +11:00
										 |  |  |         if tool_settings.gpencil_stroke_placement_view3d == 'STROKE': | 
					
						
							| 
									
										
										
										
											2018-11-01 16:42:34 +01:00
										 |  |  |             row = layout.row() | 
					
						
							|  |  |  |             row.label(text="Target") | 
					
						
							|  |  |  |             row = layout.row() | 
					
						
							| 
									
										
										
										
											2018-12-17 17:26:47 +11:00
										 |  |  |             row.prop(tool_settings, "gpencil_stroke_snap_mode", expand=True) | 
					
						
							| 
									
										
										
										
											2018-09-20 18:50:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-21 08:51:04 +02:00
										 |  |  | class VIEW3D_PT_gpencil_lock(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							| 
									
										
										
										
											2018-11-05 16:28:37 +01:00
										 |  |  |     bl_label = "Drawing Plane" | 
					
						
							| 
									
										
										
										
											2018-09-21 08:51:04 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2018-11-05 16:28:37 +01:00
										 |  |  |         layout.label(text="Drawing Plane") | 
					
						
							| 
									
										
										
										
											2018-09-21 08:51:04 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         row = layout.row() | 
					
						
							|  |  |  |         col = row.column() | 
					
						
							| 
									
										
										
										
											2018-10-10 11:18:09 +11:00
										 |  |  |         col.prop(context.tool_settings.gpencil_sculpt, "lock_axis", expand=True) | 
					
						
							| 
									
										
										
										
											2018-09-21 08:51:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-21 10:41:39 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-11 19:15:23 +01:00
										 |  |  | class VIEW3D_PT_gpencil_guide(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_label = "Guides" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         settings = context.tool_settings.gpencil_sculpt.guide | 
					
						
							| 
									
										
										
										
											2018-09-21 08:51:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-11 19:15:23 +01:00
										 |  |  |         layout = self.layout | 
					
						
							|  |  |  |         layout.label(text="Guides") | 
					
						
							| 
									
										
										
										
											2019-01-21 10:41:39 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-11 19:15:23 +01:00
										 |  |  |         col = layout.column() | 
					
						
							|  |  |  |         col.active = settings.use_guide | 
					
						
							|  |  |  |         col.prop(settings, "type", expand=True) | 
					
						
							| 
									
										
										
										
											2019-01-21 10:41:39 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-11 19:15:23 +01:00
										 |  |  |         if settings.type in {'PARALLEL'}: | 
					
						
							|  |  |  |             col.prop(settings, "angle") | 
					
						
							|  |  |  |             row = col.row(align=True) | 
					
						
							| 
									
										
										
										
											2019-01-21 10:41:39 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |         col.prop(settings, "use_snapping") | 
					
						
							| 
									
										
										
										
											2019-01-11 19:15:23 +01:00
										 |  |  |         if settings.use_snapping: | 
					
						
							| 
									
										
										
										
											2019-01-21 10:41:39 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-11 19:15:23 +01:00
										 |  |  |             if settings.type in {'RADIAL'}: | 
					
						
							|  |  |  |                 col.prop(settings, "angle_snap") | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 col.prop(settings, "spacing") | 
					
						
							| 
									
										
										
										
											2019-01-21 10:41:39 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-11 19:15:23 +01:00
										 |  |  |         col.label(text="Reference Point") | 
					
						
							|  |  |  |         row = col.row(align=True) | 
					
						
							| 
									
										
										
										
											2019-01-21 10:41:39 +11:00
										 |  |  |         row.prop(settings, "reference_point", expand=True) | 
					
						
							| 
									
										
										
										
											2019-01-11 19:15:23 +01:00
										 |  |  |         if settings.reference_point in {'CUSTOM'}: | 
					
						
							| 
									
										
										
										
											2019-01-21 10:41:39 +11:00
										 |  |  |             col.prop(settings, "location", text="Custom Location") | 
					
						
							| 
									
										
										
										
											2019-01-11 19:15:23 +01:00
										 |  |  |         if settings.reference_point in {'OBJECT'}: | 
					
						
							| 
									
										
										
										
											2019-01-21 10:41:39 +11:00
										 |  |  |             col.prop(settings, "reference_object", text="Object Location") | 
					
						
							| 
									
										
										
										
											2019-01-11 19:15:23 +01:00
										 |  |  |             if not settings.reference_object: | 
					
						
							|  |  |  |                 col.label(text="No object selected, using cursor") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-21 10:41:39 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | class VIEW3D_PT_overlay_gpencil_options(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_parent_id = 'VIEW3D_PT_overlay' | 
					
						
							|  |  |  |     bl_label = "" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def poll(cls, context): | 
					
						
							|  |  |  |         return context.object and context.object.type == 'GPENCIL' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw_header(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         layout.label(text={ | 
					
						
							| 
									
										
										
										
											2018-12-14 16:45:57 +01:00
										 |  |  |             'PAINT_GPENCIL': "Draw Grease Pencil", | 
					
						
							|  |  |  |             'EDIT_GPENCIL': "Edit Grease Pencil", | 
					
						
							|  |  |  |             'SCULPT_GPENCIL': "Sculpt Grease Pencil", | 
					
						
							|  |  |  |             'WEIGHT_GPENCIL': "Weight Grease Pencil", | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |             'OBJECT': "Grease Pencil", | 
					
						
							|  |  |  |         }[context.mode]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							|  |  |  |         overlay = view.overlay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.prop(overlay, "use_gpencil_onion_skin", text="Onion Skin") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         col = layout.column() | 
					
						
							| 
									
										
										
										
											2018-10-30 17:53:30 +01:00
										 |  |  |         row = col.row() | 
					
						
							|  |  |  |         row.prop(overlay, "use_gpencil_grid", text="") | 
					
						
							|  |  |  |         sub = row.row() | 
					
						
							|  |  |  |         sub.active = overlay.use_gpencil_grid | 
					
						
							|  |  |  |         sub.prop(overlay, "gpencil_grid_opacity", text="Canvas", slider=True) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         row = col.row() | 
					
						
							|  |  |  |         row.prop(overlay, "use_gpencil_paper", text="") | 
					
						
							|  |  |  |         sub = row.row() | 
					
						
							|  |  |  |         sub.active = overlay.use_gpencil_paper | 
					
						
							|  |  |  |         sub.prop(overlay, "gpencil_paper_opacity", text="Fade 3D Objects", slider=True) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-14 16:45:57 +01:00
										 |  |  |         if context.object.mode == 'PAINT_GPENCIL': | 
					
						
							| 
									
										
										
										
											2018-10-30 17:53:30 +01:00
										 |  |  |             row = col.row() | 
					
						
							|  |  |  |             row.prop(overlay, "use_gpencil_fade_layers", text="") | 
					
						
							|  |  |  |             sub = row.row() | 
					
						
							|  |  |  |             sub.active = overlay.use_gpencil_fade_layers | 
					
						
							|  |  |  |             sub.prop(overlay, "gpencil_fade_layer", text="Fade Layers", slider=True) | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-14 16:45:57 +01:00
										 |  |  |         if context.object.mode in {'EDIT_GPENCIL', 'SCULPT_GPENCIL', 'WEIGHT_GPENCIL'}: | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |             layout.prop(overlay, "use_gpencil_edit_lines", text="Edit Lines") | 
					
						
							|  |  |  |             layout.prop(overlay, "use_gpencil_multiedit_line_only", text="Show Edit Lines only in multiframe") | 
					
						
							|  |  |  |             layout.prop(overlay, "vertex_opacity", text="Vertex Opacity", slider=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-29 08:47:14 +02:00
										 |  |  | class VIEW3D_PT_quad_view(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'UI' | 
					
						
							| 
									
										
										
										
											2018-11-21 21:41:00 +01:00
										 |  |  |     bl_category = "View" | 
					
						
							| 
									
										
										
										
											2018-04-29 08:47:14 +02:00
										 |  |  |     bl_label = "Quad View" | 
					
						
							|  |  |  |     bl_options = {'DEFAULT_CLOSED'} | 
					
						
							| 
									
										
										
										
											2009-08-22 11:51:26 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-29 08:47:14 +02:00
										 |  |  |     @classmethod | 
					
						
							|  |  |  |     def poll(cls, context): | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							|  |  |  |         return view.region_quadviews | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         view = context.space_data | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         region = view.region_quadviews[2] | 
					
						
							|  |  |  |         col = layout.column() | 
					
						
							|  |  |  |         col.prop(region, "lock_rotation") | 
					
						
							|  |  |  |         row = col.row() | 
					
						
							|  |  |  |         row.enabled = region.lock_rotation | 
					
						
							|  |  |  |         row.prop(region, "show_sync_view") | 
					
						
							|  |  |  |         row = col.row() | 
					
						
							|  |  |  |         row.enabled = region.lock_rotation and region.show_sync_view | 
					
						
							|  |  |  |         row.prop(region, "use_box_clip") | 
					
						
							| 
									
										
										
										
											2009-10-31 23:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-31 14:46:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | # Annotation properties | 
					
						
							| 
									
										
										
										
											2018-08-22 16:59:04 +02:00
										 |  |  | class VIEW3D_PT_grease_pencil(AnnotationDataPanel, Panel): | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'UI' | 
					
						
							| 
									
										
										
										
											2018-09-27 16:22:50 +10:00
										 |  |  |     bl_category = "View" | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # NOTE: this is just a wrapper around the generic GP Panel | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-28 19:19:01 +01:00
										 |  |  | class VIEW3D_PT_annotation_onion(AnnotationOnionSkin, Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'UI' | 
					
						
							|  |  |  |     bl_category = "View" | 
					
						
							|  |  |  |     bl_parent_id = 'VIEW3D_PT_grease_pencil' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # NOTE: this is just a wrapper around the generic GP Panel | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-27 15:23:12 +11:00
										 |  |  | class TOPBAR_PT_annotation_layers(Panel, AnnotationDataPanel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_label = "Layers" | 
					
						
							|  |  |  |     bl_ui_units_x = 14 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-06 10:40:12 -03:00
										 |  |  | class VIEW3D_PT_view3d_stereo(Panel): | 
					
						
							| 
									
										
										
										
											2013-09-12 13:01:36 +00:00
										 |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'UI' | 
					
						
							| 
									
										
										
										
											2018-10-26 20:30:41 +02:00
										 |  |  |     bl_category = "View" | 
					
						
							| 
									
										
										
										
											2015-04-06 10:40:12 -03:00
										 |  |  |     bl_label = "Stereoscopy" | 
					
						
							| 
									
										
										
										
											2013-09-12 13:01:36 +00:00
										 |  |  |     bl_options = {'DEFAULT_CLOSED'} | 
					
						
							| 
									
										
										
										
											2013-09-12 19:51:31 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-12 13:01:36 +00:00
										 |  |  |     @classmethod | 
					
						
							|  |  |  |     def poll(cls, context): | 
					
						
							| 
									
										
										
										
											2015-04-06 10:40:12 -03:00
										 |  |  |         scene = context.scene | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         multiview = scene.render.use_multiview | 
					
						
							| 
									
										
										
										
											2018-07-07 08:53:00 +02:00
										 |  |  |         return multiview | 
					
						
							| 
									
										
										
										
											2015-04-06 10:40:12 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2013-09-12 13:01:36 +00:00
										 |  |  |         view = context.space_data | 
					
						
							| 
									
										
										
										
											2015-04-06 10:40:12 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  |         basic_stereo = context.scene.render.views_format == 'STEREO_3D' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         col = layout.column() | 
					
						
							|  |  |  |         col.row().prop(view, "stereo_3d_camera", expand=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         col.label(text="Display:") | 
					
						
							|  |  |  |         row = col.row() | 
					
						
							|  |  |  |         row.active = basic_stereo | 
					
						
							|  |  |  |         row.prop(view, "show_stereo_3d_cameras") | 
					
						
							|  |  |  |         row = col.row() | 
					
						
							|  |  |  |         row.active = basic_stereo | 
					
						
							|  |  |  |         split = row.split() | 
					
						
							|  |  |  |         split.prop(view, "show_stereo_3d_convergence_plane") | 
					
						
							|  |  |  |         split = row.split() | 
					
						
							|  |  |  |         split.prop(view, "stereo_3d_convergence_plane_alpha", text="Alpha") | 
					
						
							|  |  |  |         split.active = view.show_stereo_3d_convergence_plane | 
					
						
							|  |  |  |         row = col.row() | 
					
						
							|  |  |  |         split = row.split() | 
					
						
							|  |  |  |         split.prop(view, "show_stereo_3d_volume") | 
					
						
							|  |  |  |         split = row.split() | 
					
						
							| 
									
										
										
										
											2019-03-06 13:54:51 -03:00
										 |  |  |         split.active = view.show_stereo_3d_volume | 
					
						
							| 
									
										
										
										
											2015-04-06 10:40:12 -03:00
										 |  |  |         split.prop(view, "stereo_3d_volume_alpha", text="Alpha") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 06:57:00 +00:00
										 |  |  | class VIEW3D_PT_context_properties(Panel): | 
					
						
							| 
									
										
										
										
											2009-11-18 20:01:35 +00:00
										 |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'UI' | 
					
						
							| 
									
										
										
										
											2018-10-26 20:30:41 +02:00
										 |  |  |     bl_category = "View" | 
					
						
							| 
									
										
										
										
											2011-09-15 13:20:18 +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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-19 07:51:14 +02:00
										 |  |  |     @staticmethod | 
					
						
							| 
									
										
										
										
											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: | 
					
						
							| 
									
										
										
										
											2018-06-19 09:25:05 +02:00
										 |  |  |             object_mode = obj.mode | 
					
						
							|  |  |  |             if object_mode == 'POSE': | 
					
						
							| 
									
										
										
										
											2009-11-24 17:12:32 +00:00
										 |  |  |                 return "active_pose_bone" | 
					
						
							| 
									
										
										
										
											2018-06-19 09:25:05 +02:00
										 |  |  |             elif object_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): | 
					
						
							| 
									
										
										
										
											2014-06-06 14:38:07 +02:00
										 |  |  |         import rna_prop_ui | 
					
						
							| 
									
										
										
										
											2010-08-09 01:37:09 +00:00
										 |  |  |         member = cls._active_context_member(context) | 
					
						
							| 
									
										
										
										
											2014-06-06 14:38:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-23 13:06:26 +00:00
										 |  |  |         if member: | 
					
						
							| 
									
										
										
										
											2014-06-06 14:38:07 +02:00
										 |  |  |             context_member, member = rna_prop_ui.rna_idprop_context_value(context, member, object) | 
					
						
							|  |  |  |             return context_member and rna_prop_ui.rna_idprop_has_properties(context_member) | 
					
						
							| 
									
										
										
										
											2009-11-23 13:06:26 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return False | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         import rna_prop_ui | 
					
						
							| 
									
										
										
										
											2011-07-11 05:50:49 +00:00
										 |  |  |         member = VIEW3D_PT_context_properties._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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-19 11:24:01 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | # Grease Pencil Object - Multiframe falloff tools | 
					
						
							|  |  |  | class VIEW3D_PT_gpencil_multi_frame(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_label = "Multi Frame" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         gpd = context.gpencil_data | 
					
						
							|  |  |  |         settings = context.tool_settings.gpencil_sculpt | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         col = layout.column(align=True) | 
					
						
							|  |  |  |         col.prop(settings, "use_multiframe_falloff") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Falloff curve | 
					
						
							|  |  |  |         if gpd.use_multiedit and settings.use_multiframe_falloff: | 
					
						
							|  |  |  |             layout.template_curve_mapping(settings, "multiframe_falloff_curve", brush=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 10:59:57 +11:00
										 |  |  | class VIEW3D_MT_gpencil_edit_context_menu(Menu): | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  |     bl_label = "Edit Context Menu" | 
					
						
							| 
									
										
										
										
											2018-08-02 19:35:29 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         is_3d_view = context.space_data.type == 'VIEW_3D' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-01 10:55:23 +11:00
										 |  |  |         # Add | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  |         layout.operator("gpencil.stroke_subdivide", text="Subdivide") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-02 19:35:29 +02:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-01 10:55:23 +11:00
										 |  |  |         # Transform | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  |         layout.operator("transform.transform", text="Shrink/Fatten").mode = 'GPENCIL_SHRINKFATTEN' | 
					
						
							| 
									
										
										
										
											2018-12-13 19:49:13 +01:00
										 |  |  |         layout.operator("gpencil.stroke_smooth", text="Smooth") | 
					
						
							| 
									
										
										
										
											2019-02-26 16:04:27 +00:00
										 |  |  |         layout.operator("gpencil.stroke_trim", text="Trim") | 
					
						
							| 
									
										
										
										
											2018-08-02 19:35:29 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-01 10:55:23 +11:00
										 |  |  |         # Modify | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  |         layout.menu("VIEW3D_MT_assign_material") | 
					
						
							| 
									
										
										
										
											2018-08-24 15:47:25 +02:00
										 |  |  |         layout.operator_menu_enum("gpencil.stroke_arrange", "direction", text="Arrange Strokes") | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  |         layout.operator("gpencil.stroke_flip", text="Flip Direction") | 
					
						
							|  |  |  |         layout.operator_menu_enum("gpencil.stroke_caps_set", text="Toggle Caps", property="type") | 
					
						
							| 
									
										
										
										
											2018-08-24 15:47:25 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-27 16:29:19 +02:00
										 |  |  |         layout.separator() | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("gpencil.duplicate_move", text="Duplicate") | 
					
						
							|  |  |  |         layout.operator("gpencil.copy", text="Copy", icon='COPYDOWN') | 
					
						
							|  |  |  |         layout.operator("gpencil.paste", text="Paste", icon='PASTEDOWN').type = 'COPY' | 
					
						
							|  |  |  |         layout.operator("gpencil.paste", text="Paste & Merge").type = 'MERGE' | 
					
						
							| 
									
										
										
										
											2018-08-27 16:29:19 +02:00
										 |  |  |         layout.menu("VIEW3D_MT_gpencil_copy_layer") | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  |         layout.operator("gpencil.frame_duplicate", text="Duplicate Active Frame") | 
					
						
							|  |  |  |         layout.operator("gpencil.frame_duplicate", text="Duplicate Active Frame All Layers").mode = 'ALL' | 
					
						
							| 
									
										
										
										
											2018-08-27 16:29:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-02 19:35:29 +02:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("gpencil.stroke_join", text="Join").type = 'JOIN' | 
					
						
							|  |  |  |         layout.operator("gpencil.stroke_join", text="Join & Copy").type = 'JOINCOPY' | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  |         layout.menu("GPENCIL_MT_separate", text="Separate") | 
					
						
							|  |  |  |         layout.operator("gpencil.stroke_split", text="Split") | 
					
						
							| 
									
										
										
										
											2018-08-02 19:35:29 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-20 10:17:10 +01:00
										 |  |  |         layout.menu("VIEW3D_MT_mirror") | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_snap") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-01 10:55:23 +11:00
										 |  |  |         # Remove | 
					
						
							| 
									
										
										
										
											2018-08-02 19:35:29 +02:00
										 |  |  |         if is_3d_view: | 
					
						
							| 
									
										
										
										
											2018-08-15 17:01:27 +02:00
										 |  |  |             layout.menu("GPENCIL_MT_cleanup") | 
					
						
							| 
									
										
										
										
											2018-08-02 19:35:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  |         layout.operator("gpencil.stroke_simplify_fixed", text="Simplify") | 
					
						
							|  |  |  |         layout.operator("gpencil.stroke_simplify", text="Simplify Adaptive") | 
					
						
							|  |  |  |         layout.operator("gpencil.stroke_merge", text="Merge") | 
					
						
							|  |  |  |         layout.menu("VIEW3D_MT_edit_gpencil_delete") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-02 19:35:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 10:59:57 +11:00
										 |  |  | class VIEW3D_PT_gpencil_sculpt_context_menu(Panel): | 
					
						
							| 
									
										
										
										
											2019-03-11 15:51:54 +01:00
										 |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'WINDOW' | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  |     bl_label = "Sculpt Context Menu" | 
					
						
							| 
									
										
										
										
											2018-08-02 19:35:29 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							| 
									
										
										
										
											2019-03-11 15:51:54 +01:00
										 |  |  |         brush = context.tool_settings.gpencil_sculpt.brush | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-11 15:51:54 +01:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-11 15:51:54 +01:00
										 |  |  |         if context.mode == 'WEIGHT_GPENCIL': | 
					
						
							|  |  |  |             layout.prop(brush, "weight") | 
					
						
							|  |  |  |         layout.prop(brush, "size", slider=True) | 
					
						
							|  |  |  |         layout.prop(brush, "strength") | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-11 17:25:10 +01:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 08:16:55 +11:00
										 |  |  |         # Frames | 
					
						
							| 
									
										
										
										
											2019-03-11 17:25:10 +01:00
										 |  |  |         layout.label(text="Frames:") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("gpencil.blank_frame_add", text="Insert Blank", icon='ADD') | 
					
						
							|  |  |  |         layout.operator("gpencil.frame_duplicate", text="Duplicate Active", icon='DUPLICATE') | 
					
						
							|  |  |  |         layout.operator("gpencil.frame_duplicate", text="Duplicate for All Layers", icon='DUPLICATE').mode = 'ALL' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("gpencil.delete", text="Delete Active", icon='REMOVE').type = 'FRAME' | 
					
						
							|  |  |  |         layout.operator("gpencil.active_frames_delete_all", text="Delete All Active Layers", icon='REMOVE') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-02 19:35:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 10:59:57 +11:00
										 |  |  | class VIEW3D_PT_gpencil_draw_context_menu(Panel): | 
					
						
							| 
									
										
										
										
											2019-03-11 15:51:54 +01:00
										 |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'WINDOW' | 
					
						
							|  |  |  |     bl_label = "Draw Context Menu" | 
					
						
							| 
									
										
										
										
											2018-08-02 19:35:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-11 15:51:54 +01:00
										 |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         brush = context.tool_settings.gpencil_paint.brush | 
					
						
							|  |  |  |         gp_settings = brush.gpencil_settings | 
					
						
							| 
									
										
										
										
											2019-02-28 18:09:32 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-11 15:51:54 +01:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2018-08-02 19:35:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-11 15:51:54 +01:00
										 |  |  |         if brush.gpencil_tool not in {'FILL', 'CUTTER'}: | 
					
						
							|  |  |  |             layout.prop(brush, "size", slider=True) | 
					
						
							|  |  |  |         if brush.gpencil_tool not in {'ERASE', 'FILL', 'CUTTER'}: | 
					
						
							|  |  |  |             layout.prop(gp_settings, "pen_strength") | 
					
						
							| 
									
										
										
										
											2018-08-02 19:35:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-11 17:25:10 +01:00
										 |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 08:16:55 +11:00
										 |  |  |         # Frames | 
					
						
							| 
									
										
										
										
											2019-03-11 17:25:10 +01:00
										 |  |  |         layout.label(text="Frames:") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator_context = 'INVOKE_REGION_WIN' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("gpencil.blank_frame_add", text="Insert Blank", icon='ADD') | 
					
						
							|  |  |  |         layout.operator("gpencil.frame_duplicate", text="Duplicate Active", icon='DUPLICATE') | 
					
						
							|  |  |  |         layout.operator("gpencil.frame_duplicate", text="Duplicate for All Layers", icon='DUPLICATE').mode = 'ALL' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator("gpencil.delete", text="Delete Active", icon='REMOVE').type = 'FRAME' | 
					
						
							|  |  |  |         layout.operator("gpencil.active_frames_delete_all", text="Delete All Active Layers", icon='REMOVE') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 08:50:00 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 10:59:57 +11:00
										 |  |  | class VIEW3D_PT_paint_vertex_context_menu(Panel): | 
					
						
							| 
									
										
										
										
											2019-03-04 20:10:11 +11:00
										 |  |  |     # Only for popover, these are dummy values. | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'WINDOW' | 
					
						
							|  |  |  |     bl_label = "Vertex Paint Context Menu" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 15:29:18 +11:00
										 |  |  |         brush = context.tool_settings.vertex_paint.brush | 
					
						
							| 
									
										
										
										
											2019-03-12 16:19:37 +11:00
										 |  |  |         UnifiedPaintPanel.prop_unified_size(layout, context, brush, "size", slider=True) | 
					
						
							|  |  |  |         UnifiedPaintPanel.prop_unified_strength(layout, context, brush, "strength") | 
					
						
							| 
									
										
										
										
											2019-03-04 20:10:11 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 10:59:57 +11:00
										 |  |  | class VIEW3D_PT_paint_texture_context_menu(Panel): | 
					
						
							| 
									
										
										
										
											2019-03-04 20:10:11 +11:00
										 |  |  |     # Only for popover, these are dummy values. | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'WINDOW' | 
					
						
							|  |  |  |     bl_label = "Texture Paint Context Menu" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2019-03-12 15:29:18 +11:00
										 |  |  |         brush = context.tool_settings.image_paint.brush | 
					
						
							| 
									
										
										
										
											2019-03-20 17:04:57 +01:00
										 |  |  |         capabilities = brush.image_paint_capabilities | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if capabilities.has_radius: | 
					
						
							|  |  |  |             UnifiedPaintPanel.prop_unified_size(layout, context, brush, "size", slider=True) | 
					
						
							| 
									
										
										
										
											2019-03-12 16:19:37 +11:00
										 |  |  |         UnifiedPaintPanel.prop_unified_strength(layout, context, brush, "strength") | 
					
						
							| 
									
										
										
										
											2019-03-04 20:10:11 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 10:59:57 +11:00
										 |  |  | class VIEW3D_PT_paint_weight_context_menu(Panel): | 
					
						
							| 
									
										
										
										
											2019-03-04 20:10:11 +11:00
										 |  |  |     # Only for popover, these are dummy values. | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'WINDOW' | 
					
						
							|  |  |  |     bl_label = "Weights Context Menu" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							| 
									
										
										
										
											2019-03-11 14:34:07 +01:00
										 |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2019-03-11 15:01:07 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 15:29:18 +11:00
										 |  |  |         brush = context.tool_settings.weight_paint.brush | 
					
						
							| 
									
										
										
										
											2019-03-12 16:19:37 +11:00
										 |  |  |         UnifiedPaintPanel.prop_unified_weight(layout, context, brush, "weight", slider=True) | 
					
						
							|  |  |  |         UnifiedPaintPanel.prop_unified_size(layout, context, brush, "size", slider=True) | 
					
						
							|  |  |  |         UnifiedPaintPanel.prop_unified_strength(layout, context, brush, "strength") | 
					
						
							| 
									
										
										
										
											2019-03-04 20:10:11 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 10:59:57 +11:00
										 |  |  | class VIEW3D_PT_sculpt_context_menu(Panel): | 
					
						
							| 
									
										
										
										
											2019-03-04 20:10:11 +11:00
										 |  |  |     # Only for popover, these are dummy values. | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'WINDOW' | 
					
						
							|  |  |  |     bl_label = "Sculpt Context Menu" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							| 
									
										
										
										
											2019-03-11 15:01:07 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 15:29:18 +11:00
										 |  |  |         brush = context.tool_settings.sculpt.brush | 
					
						
							| 
									
										
										
										
											2019-03-20 17:04:57 +01:00
										 |  |  |         capabilities = brush.sculpt_capabilities | 
					
						
							| 
									
										
										
										
											2019-03-11 15:01:07 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 16:19:37 +11:00
										 |  |  |         UnifiedPaintPanel.prop_unified_size(layout, context, brush, "size", slider=True) | 
					
						
							|  |  |  |         UnifiedPaintPanel.prop_unified_strength(layout, context, brush, "strength") | 
					
						
							| 
									
										
										
										
											2019-03-04 20:10:11 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-20 17:04:57 +01:00
										 |  |  |         if capabilities.has_auto_smooth: | 
					
						
							|  |  |  |             layout.prop(brush, "auto_smooth_factor", slider=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if capabilities.has_normal_weight: | 
					
						
							|  |  |  |             layout.prop(brush, "normal_weight", slider=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if capabilities.has_pinch_factor: | 
					
						
							|  |  |  |             layout.prop(brush, "crease_pinch_factor", slider=True, text="Pinch") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if capabilities.has_rake_factor: | 
					
						
							|  |  |  |             layout.prop(brush, "rake_factor", slider=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if capabilities.has_plane_offset: | 
					
						
							|  |  |  |             layout.prop(brush, "plane_offset", slider=True) | 
					
						
							|  |  |  |             layout.prop(brush, "plane_trim", slider=True, text="Distance") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if capabilities.has_height: | 
					
						
							|  |  |  |             layout.prop(brush, "height", slider=True, text="Height") | 
					
						
							| 
									
										
										
										
											2019-03-04 20:10:11 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-09 23:16:11 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-02 13:26:10 +11:00
										 |  |  | class TOPBAR_PT_gpencil_materials(GreasePencilMaterialsPanel, Panel): | 
					
						
							| 
									
										
										
										
											2018-11-27 15:23:12 +11:00
										 |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_label = "Materials" | 
					
						
							|  |  |  |     bl_ui_units_x = 14 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-08 15:30:22 -03:00
										 |  |  |     @classmethod | 
					
						
							|  |  |  |     def poll(cls, context): | 
					
						
							|  |  |  |         ob = context.object | 
					
						
							|  |  |  |         return ob and ob.type == 'GPENCIL' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-27 15:23:12 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-18 20:03:24 +11:00
										 |  |  | classes = ( | 
					
						
							|  |  |  |     VIEW3D_HT_header, | 
					
						
							| 
									
										
										
										
											2019-04-18 21:13:22 +02:00
										 |  |  |     VIEW3D_HT_tool_header, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_editor_menus, | 
					
						
							|  |  |  |     VIEW3D_MT_transform, | 
					
						
							|  |  |  |     VIEW3D_MT_transform_base, | 
					
						
							|  |  |  |     VIEW3D_MT_transform_object, | 
					
						
							|  |  |  |     VIEW3D_MT_transform_armature, | 
					
						
							|  |  |  |     VIEW3D_MT_mirror, | 
					
						
							|  |  |  |     VIEW3D_MT_snap, | 
					
						
							|  |  |  |     VIEW3D_MT_uv_map, | 
					
						
							|  |  |  |     VIEW3D_MT_view, | 
					
						
							| 
									
										
										
										
											2018-11-29 23:44:37 -02:00
										 |  |  |     VIEW3D_MT_view_local, | 
					
						
							| 
									
										
										
										
											2017-10-19 12:35:58 +11:00
										 |  |  |     VIEW3D_MT_view_cameras, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_view_navigation, | 
					
						
							|  |  |  |     VIEW3D_MT_view_align, | 
					
						
							|  |  |  |     VIEW3D_MT_view_align_selected, | 
					
						
							| 
									
										
										
										
											2017-10-19 12:35:58 +11:00
										 |  |  |     VIEW3D_MT_view_viewpoint, | 
					
						
							| 
									
										
										
										
											2019-03-06 16:43:37 +01:00
										 |  |  |     VIEW3D_MT_view_regions, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_select_object, | 
					
						
							|  |  |  |     VIEW3D_MT_select_object_more_less, | 
					
						
							|  |  |  |     VIEW3D_MT_select_pose, | 
					
						
							|  |  |  |     VIEW3D_MT_select_pose_more_less, | 
					
						
							|  |  |  |     VIEW3D_MT_select_particle, | 
					
						
							| 
									
										
										
										
											2017-03-18 20:03:24 +11:00
										 |  |  |     VIEW3D_MT_edit_mesh, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_edit_mesh_select_similar, | 
					
						
							| 
									
										
										
										
											2017-03-18 20:03:24 +11:00
										 |  |  |     VIEW3D_MT_edit_mesh_select_by_trait, | 
					
						
							|  |  |  |     VIEW3D_MT_edit_mesh_select_more_less, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_select_edit_mesh, | 
					
						
							|  |  |  |     VIEW3D_MT_select_edit_curve, | 
					
						
							|  |  |  |     VIEW3D_MT_select_edit_surface, | 
					
						
							| 
									
										
										
										
											2019-03-20 10:51:37 +01:00
										 |  |  |     VIEW3D_MT_edit_text_context_menu, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_select_edit_text, | 
					
						
							|  |  |  |     VIEW3D_MT_select_edit_metaball, | 
					
						
							| 
									
										
										
										
											2019-03-20 10:51:37 +01:00
										 |  |  |     VIEW3D_MT_edit_lattice_context_menu, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_select_edit_lattice, | 
					
						
							|  |  |  |     VIEW3D_MT_select_edit_armature, | 
					
						
							|  |  |  |     VIEW3D_MT_select_gpencil, | 
					
						
							|  |  |  |     VIEW3D_MT_select_paint_mask, | 
					
						
							|  |  |  |     VIEW3D_MT_select_paint_mask_vertex, | 
					
						
							|  |  |  |     VIEW3D_MT_angle_control, | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  |     VIEW3D_MT_mesh_add, | 
					
						
							|  |  |  |     VIEW3D_MT_curve_add, | 
					
						
							|  |  |  |     VIEW3D_MT_surface_add, | 
					
						
							| 
									
										
										
										
											2019-03-20 10:51:37 +01:00
										 |  |  |     VIEW3D_MT_edit_metaball_context_menu, | 
					
						
							| 
									
										
										
										
											2018-08-29 15:02:21 +02:00
										 |  |  |     VIEW3D_MT_metaball_add, | 
					
						
							|  |  |  |     TOPBAR_MT_edit_curve_add, | 
					
						
							|  |  |  |     TOPBAR_MT_edit_armature_add, | 
					
						
							|  |  |  |     VIEW3D_MT_armature_add, | 
					
						
							|  |  |  |     VIEW3D_MT_light_add, | 
					
						
							|  |  |  |     VIEW3D_MT_lightprobe_add, | 
					
						
							|  |  |  |     VIEW3D_MT_camera_add, | 
					
						
							|  |  |  |     VIEW3D_MT_add, | 
					
						
							| 
									
										
										
										
											2018-11-27 15:23:12 +11:00
										 |  |  |     VIEW3D_MT_image_add, | 
					
						
							| 
									
										
										
										
											2017-03-18 20:03:24 +11:00
										 |  |  |     VIEW3D_MT_object, | 
					
						
							|  |  |  |     VIEW3D_MT_object_animation, | 
					
						
							| 
									
										
										
										
											2018-04-24 20:46:18 +02:00
										 |  |  |     VIEW3D_MT_object_rigid_body, | 
					
						
							| 
									
										
										
										
											2017-03-18 20:03:24 +11:00
										 |  |  |     VIEW3D_MT_object_clear, | 
					
						
							| 
									
										
										
										
											2019-03-12 10:59:57 +11:00
										 |  |  |     VIEW3D_MT_object_context_menu, | 
					
						
							| 
									
										
										
										
											2018-04-25 07:25:08 +02:00
										 |  |  |     VIEW3D_MT_object_shading, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_object_apply, | 
					
						
							| 
									
										
										
										
											2018-05-25 08:07:43 +02:00
										 |  |  |     VIEW3D_MT_object_relations, | 
					
						
							| 
									
										
										
										
											2017-03-18 20:03:24 +11:00
										 |  |  |     VIEW3D_MT_object_parent, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_object_track, | 
					
						
							| 
									
										
											  
											
												Collections and groups unification
OVERVIEW
* In 2.7 terminology, all layers and groups are now collection datablocks.
* These collections are nestable, linkable, instanceable, overrideable, ..
  which opens up new ways to set up scenes and link + override data.
* Viewport/render visibility and selectability are now a part of the collection
  and shared across all view layers and linkable.
* View layers define which subset of the scene collection hierarchy is excluded
  for each. For many workflows one view layer can be used, these are more of an
  advanced feature now.
OUTLINER
* The outliner now has a "View Layer" display mode instead of "Collections",
  which can display the collections and/or objects in the view layer.
* In this display mode, collections can be excluded with the right click menu.
  These will then be greyed out and their objects will be excluded.
* To view collections not linked to any scene, the "Blender File" display mode
  can be used, with the new filtering option to just see Colleciton datablocks.
* The outliner right click menus for collections and objects were reorganized.
* Drag and drop still needs to be improved. Like before, dragging the icon or
  text gives different results, we'll unify this later.
LINKING AND OVERRIDES
* Collections can now be linked into the scene without creating an instance,
  with the link/append operator or from the collections view in the outliner.
* Collections can get static overrides with the right click menu in the outliner,
  but this is rather unreliable and not clearly communicated at the moment.
* We still need to improve the make override operator to turn collection instances
  into collections with overrides directly in the scene.
PERFORMANCE
* We tried to make performance not worse than before and improve it in some
  cases. The main thing that's still a bit slower is multiple scenes, we have to
  change the layer syncing to only updated affected scenes.
* Collections keep a list of their parent collections for faster incremental
  updates in syncing and caching.
* View layer bases are now in a object -> base hash to avoid quadratic time
  lookups internally and in API functions like visible_get().
VERSIONING
* Compatibility with 2.7 files should be improved due to the new visibility
  controls. Of course users may not want to set up their scenes differently
  now to avoid having separate layers and groups.
* Compatibility with 2.8 is mostly there, and was tested on Eevee demo and Hero
  files. There's a few things which are know to be not quite compatible, like
  nested layer collections inside groups.
* The versioning code for 2.8 files is quite complicated, and isolated behind
  #ifdef so it can be removed at the end of the release cycle.
KNOWN ISSUES
* The G-key group operators in the 3D viewport were left mostly as is, they
  need to be modified still to fit better.
* Same for the groups panel in the object properties. This needs to be updated
  still, or perhaps replaced by something better.
* Collections must all have a unique name. Less restrictive namespacing is to
  be done later, we'll have to see how important this is as all objects within
  the collections must also have a unique name anyway.
* Full scene copy and delete scene are exactly doing the right thing yet.
Differential Revision: https://developer.blender.org/D3383
https://code.blender.org/2018/05/collections-and-groups/
											
										 
											2018-04-30 15:57:22 +02:00
										 |  |  |     VIEW3D_MT_object_collection, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_object_constraints, | 
					
						
							| 
									
										
										
										
											2017-03-18 20:03:24 +11:00
										 |  |  |     VIEW3D_MT_object_quick_effects, | 
					
						
							| 
									
										
											  
											
												Objects: restore H key per object hiding.
H hides selected objects, Shift+H hides unselected objects, and Alt+H
reveals hidden objects.
This hiding state is distinct from restrict viewport and render, and
meant for temporarily hiding objects without affecting more persistent
collection hiding.
Object hiding is per view-layer, same as selection. It affects the
viewport and any preview renders in there, but not final renders.
In the outliner, different icons are now used for temporary hiding, and
restrict viewport and render. Hidden objects are greyed out.
Remaining design issues:
* For lamps we probably still want to keep their effect on the scene,
  currently they are fully disabled by hiding. Arguably mesh lights or
  even objects being reflected or casting shadows are not that different
  but perhaps the special lamp exception from local view should remain.
* We need a feature still to disabled this hiding for specific viewports,
  for render or animation preview where you want to see the entire scene
  while working in another view.
* We need a new icon for restrict viewport, for now it uses a grid similar
  to the 2.4 icon.
* Hiding objects does not preserve selection state as it did in 2.7,
  it's probably convenient to support this again?
											
										 
											2018-05-14 23:36:56 +02:00
										 |  |  |     VIEW3D_MT_object_showhide, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_make_single_user, | 
					
						
							|  |  |  |     VIEW3D_MT_make_links, | 
					
						
							|  |  |  |     VIEW3D_MT_brush, | 
					
						
							|  |  |  |     VIEW3D_MT_brush_paint_modes, | 
					
						
							| 
									
										
										
										
											2017-03-18 20:03:24 +11:00
										 |  |  |     VIEW3D_MT_paint_vertex, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_hook, | 
					
						
							|  |  |  |     VIEW3D_MT_vertex_group, | 
					
						
							| 
									
										
										
										
											2017-03-18 20:03:24 +11:00
										 |  |  |     VIEW3D_MT_paint_weight, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_sculpt, | 
					
						
							|  |  |  |     VIEW3D_MT_hide_mask, | 
					
						
							| 
									
										
										
										
											2017-03-18 20:03:24 +11:00
										 |  |  |     VIEW3D_MT_particle, | 
					
						
							| 
									
										
										
										
											2019-03-12 10:59:57 +11:00
										 |  |  |     VIEW3D_MT_particle_context_menu, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_particle_showhide, | 
					
						
							| 
									
										
										
										
											2017-03-18 20:03:24 +11:00
										 |  |  |     VIEW3D_MT_pose, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_pose_transform, | 
					
						
							|  |  |  |     VIEW3D_MT_pose_slide, | 
					
						
							|  |  |  |     VIEW3D_MT_pose_propagate, | 
					
						
							| 
									
										
										
										
											2017-03-18 20:03:24 +11:00
										 |  |  |     VIEW3D_MT_pose_library, | 
					
						
							|  |  |  |     VIEW3D_MT_pose_motion, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_pose_group, | 
					
						
							|  |  |  |     VIEW3D_MT_pose_ik, | 
					
						
							|  |  |  |     VIEW3D_MT_pose_constraints, | 
					
						
							| 
									
										
										
										
											2017-03-18 20:03:24 +11:00
										 |  |  |     VIEW3D_MT_pose_showhide, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_pose_apply, | 
					
						
							| 
									
										
										
										
											2019-03-12 10:59:57 +11:00
										 |  |  |     VIEW3D_MT_pose_context_menu, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_bone_options_toggle, | 
					
						
							|  |  |  |     VIEW3D_MT_bone_options_enable, | 
					
						
							|  |  |  |     VIEW3D_MT_bone_options_disable, | 
					
						
							| 
									
										
										
										
											2019-03-12 10:59:57 +11:00
										 |  |  |     VIEW3D_MT_edit_mesh_context_menu, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_edit_mesh_select_mode, | 
					
						
							| 
									
										
										
										
											2017-10-19 14:45:56 +11:00
										 |  |  |     VIEW3D_MT_edit_mesh_select_linked, | 
					
						
							|  |  |  |     VIEW3D_MT_edit_mesh_select_loops, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_edit_mesh_extrude, | 
					
						
							|  |  |  |     VIEW3D_MT_edit_mesh_vertices, | 
					
						
							|  |  |  |     VIEW3D_MT_edit_mesh_edges, | 
					
						
							| 
									
										
										
										
											2018-04-01 10:16:28 +02:00
										 |  |  |     VIEW3D_MT_edit_mesh_edges_data, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_edit_mesh_faces, | 
					
						
							| 
									
										
										
										
											2018-05-24 15:37:52 +02:00
										 |  |  |     VIEW3D_MT_edit_mesh_faces_data, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_edit_mesh_normals, | 
					
						
							| 
									
										
										
										
											2018-04-24 21:07:05 +02:00
										 |  |  |     VIEW3D_MT_edit_mesh_shading, | 
					
						
							| 
									
										
										
										
											2018-04-24 16:54:38 +02:00
										 |  |  |     VIEW3D_MT_edit_mesh_weights, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_edit_mesh_clean, | 
					
						
							|  |  |  |     VIEW3D_MT_edit_mesh_delete, | 
					
						
							|  |  |  |     VIEW3D_MT_edit_mesh_showhide, | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |     VIEW3D_MT_paint_gpencil, | 
					
						
							| 
									
										
										
										
											2018-08-02 19:21:12 +02:00
										 |  |  |     VIEW3D_MT_assign_material, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_edit_gpencil, | 
					
						
							|  |  |  |     VIEW3D_MT_edit_gpencil_delete, | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |     VIEW3D_MT_weight_gpencil, | 
					
						
							|  |  |  |     VIEW3D_MT_gpencil_animation, | 
					
						
							|  |  |  |     VIEW3D_MT_gpencil_simplify, | 
					
						
							| 
									
										
										
										
											2018-08-27 16:29:19 +02:00
										 |  |  |     VIEW3D_MT_gpencil_copy_layer, | 
					
						
							| 
									
										
										
										
											2019-03-04 20:10:11 +11:00
										 |  |  |     VIEW3D_MT_gpencil_autoweights, | 
					
						
							| 
									
										
										
										
											2019-03-12 10:59:57 +11:00
										 |  |  |     VIEW3D_MT_gpencil_edit_context_menu, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_edit_curve, | 
					
						
							|  |  |  |     VIEW3D_MT_edit_curve_ctrlpoints, | 
					
						
							|  |  |  |     VIEW3D_MT_edit_curve_segments, | 
					
						
							| 
									
										
										
										
											2017-10-30 22:36:51 +11:00
										 |  |  |     VIEW3D_MT_edit_curve_clean, | 
					
						
							| 
									
										
										
										
											2019-03-12 10:59:57 +11:00
										 |  |  |     VIEW3D_MT_edit_curve_context_menu, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_edit_curve_delete, | 
					
						
							|  |  |  |     VIEW3D_MT_edit_curve_showhide, | 
					
						
							|  |  |  |     VIEW3D_MT_edit_surface, | 
					
						
							|  |  |  |     VIEW3D_MT_edit_font, | 
					
						
							|  |  |  |     VIEW3D_MT_edit_text_chars, | 
					
						
							|  |  |  |     VIEW3D_MT_edit_meta, | 
					
						
							|  |  |  |     VIEW3D_MT_edit_meta_showhide, | 
					
						
							|  |  |  |     VIEW3D_MT_edit_lattice, | 
					
						
							|  |  |  |     VIEW3D_MT_edit_armature, | 
					
						
							| 
									
										
										
										
											2019-03-12 10:59:57 +11:00
										 |  |  |     VIEW3D_MT_armature_context_menu, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_edit_armature_parent, | 
					
						
							|  |  |  |     VIEW3D_MT_edit_armature_roll, | 
					
						
							| 
									
										
										
										
											2018-12-18 07:54:32 +11:00
										 |  |  |     VIEW3D_MT_edit_armature_names, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_MT_edit_armature_delete, | 
					
						
							|  |  |  |     VIEW3D_MT_edit_gpencil_transform, | 
					
						
							|  |  |  |     VIEW3D_MT_edit_gpencil_interpolate, | 
					
						
							| 
									
										
										
										
											2018-06-20 16:32:31 +02:00
										 |  |  |     VIEW3D_MT_object_mode_pie, | 
					
						
							|  |  |  |     VIEW3D_MT_view_pie, | 
					
						
							| 
									
										
										
										
											2018-09-21 15:46:49 +02:00
										 |  |  |     VIEW3D_MT_shading_pie, | 
					
						
							| 
									
										
										
										
											2018-11-24 11:24:34 +11:00
										 |  |  |     VIEW3D_MT_shading_ex_pie, | 
					
						
							| 
									
										
										
										
											2018-09-26 17:32:11 +02:00
										 |  |  |     VIEW3D_MT_pivot_pie, | 
					
						
							|  |  |  |     VIEW3D_MT_snap_pie, | 
					
						
							|  |  |  |     VIEW3D_MT_orientations_pie, | 
					
						
							|  |  |  |     VIEW3D_MT_proportional_editing_falloff_pie, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_PT_view3d_properties, | 
					
						
							| 
									
										
										
										
											2019-03-07 12:53:45 +11:00
										 |  |  |     VIEW3D_PT_view3d_lock, | 
					
						
							| 
									
										
										
										
											2017-03-18 20:03:24 +11:00
										 |  |  |     VIEW3D_PT_view3d_cursor, | 
					
						
							| 
									
										
										
										
											2018-11-15 11:35:14 -02:00
										 |  |  |     VIEW3D_PT_collections, | 
					
						
							| 
									
										
										
										
											2018-07-09 17:00:09 +02:00
										 |  |  |     VIEW3D_PT_object_type_visibility, | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |     VIEW3D_PT_grease_pencil, | 
					
						
							| 
									
										
										
										
											2018-11-28 19:19:01 +01:00
										 |  |  |     VIEW3D_PT_annotation_onion, | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |     VIEW3D_PT_gpencil_multi_frame, | 
					
						
							| 
									
										
										
										
											2018-04-29 08:47:14 +02:00
										 |  |  |     VIEW3D_PT_quad_view, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_PT_view3d_stereo, | 
					
						
							| 
									
										
										
										
											2018-04-29 08:47:14 +02:00
										 |  |  |     VIEW3D_PT_shading, | 
					
						
							| 
									
										
										
										
											2018-06-18 08:15:29 +02:00
										 |  |  |     VIEW3D_PT_shading_lighting, | 
					
						
							|  |  |  |     VIEW3D_PT_shading_color, | 
					
						
							|  |  |  |     VIEW3D_PT_shading_options, | 
					
						
							| 
									
										
										
										
											2018-07-11 16:05:05 +02:00
										 |  |  |     VIEW3D_PT_shading_options_shadow, | 
					
						
							|  |  |  |     VIEW3D_PT_shading_options_ssao, | 
					
						
							| 
									
										
										
										
											2019-04-13 12:23:07 +02:00
										 |  |  |     VIEW3D_PT_gizmo_display, | 
					
						
							| 
									
										
										
										
											2018-04-29 09:44:57 +02:00
										 |  |  |     VIEW3D_PT_overlay, | 
					
						
							| 
									
										
										
										
											2018-07-11 13:00:05 +02:00
										 |  |  |     VIEW3D_PT_overlay_guides, | 
					
						
							|  |  |  |     VIEW3D_PT_overlay_object, | 
					
						
							|  |  |  |     VIEW3D_PT_overlay_geometry, | 
					
						
							|  |  |  |     VIEW3D_PT_overlay_motion_tracking, | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  |     VIEW3D_PT_overlay_edit_mesh, | 
					
						
							| 
									
										
										
										
											2018-07-11 18:38:39 +02:00
										 |  |  |     VIEW3D_PT_overlay_edit_mesh_shading, | 
					
						
							|  |  |  |     VIEW3D_PT_overlay_edit_mesh_measurement, | 
					
						
							|  |  |  |     VIEW3D_PT_overlay_edit_mesh_normals, | 
					
						
							|  |  |  |     VIEW3D_PT_overlay_edit_mesh_freestyle, | 
					
						
							|  |  |  |     VIEW3D_PT_overlay_edit_mesh_developer, | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  |     VIEW3D_PT_overlay_edit_curve, | 
					
						
							|  |  |  |     VIEW3D_PT_overlay_paint, | 
					
						
							| 
									
										
										
										
											2018-11-23 13:17:10 +11:00
										 |  |  |     VIEW3D_PT_overlay_pose, | 
					
						
							| 
									
										
										
										
											2018-06-10 15:22:47 +02:00
										 |  |  |     VIEW3D_PT_overlay_sculpt, | 
					
						
							| 
									
										
										
										
											2018-07-03 14:05:07 +02:00
										 |  |  |     VIEW3D_PT_pivot_point, | 
					
						
							|  |  |  |     VIEW3D_PT_snapping, | 
					
						
							| 
									
										
										
										
											2018-09-20 18:50:07 +02:00
										 |  |  |     VIEW3D_PT_gpencil_origin, | 
					
						
							| 
									
										
										
										
											2018-09-21 08:51:04 +02:00
										 |  |  |     VIEW3D_PT_gpencil_lock, | 
					
						
							| 
									
										
										
										
											2019-01-11 19:15:23 +01:00
										 |  |  |     VIEW3D_PT_gpencil_guide, | 
					
						
							| 
									
										
										
										
											2018-07-03 14:05:07 +02:00
										 |  |  |     VIEW3D_PT_transform_orientations, | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |     VIEW3D_PT_overlay_gpencil_options, | 
					
						
							| 
									
										
										
										
											2017-03-20 02:34:32 +11:00
										 |  |  |     VIEW3D_PT_context_properties, | 
					
						
							| 
									
										
										
										
											2019-03-12 10:59:57 +11:00
										 |  |  |     VIEW3D_PT_paint_vertex_context_menu, | 
					
						
							|  |  |  |     VIEW3D_PT_paint_texture_context_menu, | 
					
						
							|  |  |  |     VIEW3D_PT_paint_weight_context_menu, | 
					
						
							|  |  |  |     VIEW3D_PT_gpencil_sculpt_context_menu, | 
					
						
							|  |  |  |     VIEW3D_PT_gpencil_draw_context_menu, | 
					
						
							|  |  |  |     VIEW3D_PT_sculpt_context_menu, | 
					
						
							| 
									
										
										
										
											2018-11-27 15:23:12 +11:00
										 |  |  |     TOPBAR_PT_gpencil_materials, | 
					
						
							|  |  |  |     TOPBAR_PT_annotation_layers, | 
					
						
							| 
									
										
										
										
											2017-03-18 20:03:24 +11:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__":  # only for live edit. | 
					
						
							|  |  |  |     from bpy.utils import register_class | 
					
						
							|  |  |  |     for cls in classes: | 
					
						
							|  |  |  |         register_class(cls) |