| 
									
										
										
										
											2017-10-21 16:19:48 +11: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. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #  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. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #  You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  | #  along with this program; if not, write to the Free Software Foundation, | 
					
						
							|  |  |  | #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # ##### END GPL LICENSE BLOCK ##### | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # <pep8 compliant> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # For now group all tools together | 
					
						
							|  |  |  | # we may want to move these into per space-type files. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # For now keep this in a single file since it's an area that may change, | 
					
						
							|  |  |  | # so avoid making changes all over the place. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | import bpy | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  | from bpy.types import Panel | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from .space_toolsystem_common import ( | 
					
						
							|  |  |  |     ToolSelectPanelHelper, | 
					
						
							| 
									
										
										
										
											2018-04-27 13:23:29 +02:00
										 |  |  |     ToolDef, | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2018-09-27 20:50:05 +02:00
										 |  |  | from .properties_material_gpencil import ( | 
					
						
							|  |  |  |     GPENCIL_UL_matslots, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-07 21:38:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 15:21:04 +02:00
										 |  |  | def generate_from_brushes_ex( | 
					
						
							|  |  |  |         context, *, | 
					
						
							|  |  |  |         icon_prefix, | 
					
						
							|  |  |  |         brush_test_attr, | 
					
						
							|  |  |  |         brush_category_attr, | 
					
						
							|  |  |  |         brush_category_layout, | 
					
						
							|  |  |  | ): | 
					
						
							|  |  |  |     # Categories | 
					
						
							|  |  |  |     brush_categories = {} | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |     if context.mode != 'GPENCIL_PAINT': | 
					
						
							|  |  |  |         for brush in context.blend_data.brushes: | 
					
						
							|  |  |  |             if getattr(brush, brush_test_attr) and brush.gpencil_settings is None: | 
					
						
							|  |  |  |                 category = getattr(brush, brush_category_attr) | 
					
						
							|  |  |  |                 name = brush.name | 
					
						
							|  |  |  |                 brush_categories.setdefault(category, []).append( | 
					
						
							|  |  |  |                     ToolDef.from_dict( | 
					
						
							|  |  |  |                         dict( | 
					
						
							|  |  |  |                             text=name, | 
					
						
							|  |  |  |                             icon=icon_prefix + category.lower(), | 
					
						
							|  |  |  |                             data_block=name, | 
					
						
							|  |  |  |                         ) | 
					
						
							| 
									
										
										
										
											2018-04-30 15:21:04 +02:00
										 |  |  |                     ) | 
					
						
							|  |  |  |                 ) | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |     else: | 
					
						
							| 
									
										
										
										
											2018-08-02 17:41:11 +10:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             _defs_gpencil_paint.draw_settings_common(context, layout, tool) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         for brush_type in brush_category_layout: | 
					
						
							|  |  |  |             for brush in context.blend_data.brushes: | 
					
						
							| 
									
										
										
										
											2018-10-08 10:32:41 +02:00
										 |  |  |                 if brush.gpencil_settings and getattr(brush, brush_test_attr) and brush.gpencil_settings.gp_icon == brush_type[0]: | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |                     category = brush_type[0] | 
					
						
							|  |  |  |                     name = brush.name | 
					
						
							| 
									
										
										
										
											2018-08-02 22:28:48 +10:00
										 |  |  |                     text = name | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-02 22:28:48 +10:00
										 |  |  |                     # Define icon. | 
					
						
							|  |  |  |                     icon_name = { | 
					
						
							|  |  |  |                         'PENCIL': 'draw_pencil', | 
					
						
							|  |  |  |                         'PEN': 'draw_pen', | 
					
						
							|  |  |  |                         'INK': 'draw_ink', | 
					
						
							|  |  |  |                         'INKNOISE': 'draw_noise', | 
					
						
							|  |  |  |                         'BLOCK': 'draw_block', | 
					
						
							|  |  |  |                         'MARKER': 'draw_marker', | 
					
						
							|  |  |  |                         'FILL': 'draw_fill', | 
					
						
							|  |  |  |                         'SOFT': 'draw.eraser_soft', | 
					
						
							|  |  |  |                         'HARD': 'draw.eraser_hard', | 
					
						
							|  |  |  |                         'STROKE': 'draw.eraser_stroke', | 
					
						
							|  |  |  |                     }[category] | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |                     brush_categories.setdefault(category, []).append( | 
					
						
							|  |  |  |                         ToolDef.from_dict( | 
					
						
							|  |  |  |                             dict( | 
					
						
							|  |  |  |                                 text=text, | 
					
						
							|  |  |  |                                 icon=icon_prefix + icon_name, | 
					
						
							|  |  |  |                                 data_block=name, | 
					
						
							|  |  |  |                                 widget=None, | 
					
						
							|  |  |  |                                 operator="gpencil.draw", | 
					
						
							|  |  |  |                                 draw_settings=draw_settings, | 
					
						
							|  |  |  |                             ) | 
					
						
							|  |  |  |                         ) | 
					
						
							|  |  |  |                     ) | 
					
						
							| 
									
										
										
										
											2018-04-30 15:21:04 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def tools_from_brush_group(groups): | 
					
						
							|  |  |  |         assert(type(groups) is tuple) | 
					
						
							|  |  |  |         if len(groups) == 1: | 
					
						
							|  |  |  |             tool_defs = tuple(brush_categories.pop(groups[0], ())) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             tool_defs = tuple(item for g in groups for item in brush_categories.pop(g, ())) | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 15:21:04 +02:00
										 |  |  |         if len(tool_defs) > 1: | 
					
						
							|  |  |  |             return (tool_defs,) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             return tool_defs | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Each item below is a single toolbar entry: | 
					
						
							|  |  |  |     # Grouped for multiple or none if no brushes are found. | 
					
						
							|  |  |  |     tool_defs = tuple( | 
					
						
							|  |  |  |         tool_def | 
					
						
							|  |  |  |         for category in brush_category_layout | 
					
						
							|  |  |  |         for tool_def in tools_from_brush_group(category) | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     # Ensure we use all types. | 
					
						
							| 
									
										
										
										
											2018-04-30 21:57:51 +02:00
										 |  |  |     if brush_categories: | 
					
						
							|  |  |  |         print(brush_categories) | 
					
						
							| 
									
										
										
										
											2018-04-30 15:21:04 +02:00
										 |  |  |     assert(len(brush_categories) == 0) | 
					
						
							|  |  |  |     return tool_defs | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-02 17:41:11 +10:00
										 |  |  | def generate_from_enum_ex( | 
					
						
							|  |  |  |         context, *, | 
					
						
							|  |  |  |         icon_prefix, | 
					
						
							|  |  |  |         data, | 
					
						
							|  |  |  |         attr, | 
					
						
							|  |  |  | ): | 
					
						
							|  |  |  |     tool_defs = [] | 
					
						
							|  |  |  |     for enum in data.rna_type.properties[attr].enum_items_static: | 
					
						
							|  |  |  |         name = enum.name | 
					
						
							|  |  |  |         identifier = enum.identifier | 
					
						
							|  |  |  |         tool_defs.append( | 
					
						
							|  |  |  |             ToolDef.from_dict( | 
					
						
							|  |  |  |                 dict( | 
					
						
							|  |  |  |                     text=name, | 
					
						
							|  |  |  |                     icon=icon_prefix + identifier.lower(), | 
					
						
							|  |  |  |                     data_block=identifier, | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     return tuple(tool_defs) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-27 13:23:29 +02:00
										 |  |  | class _defs_view3d_generic: | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def cursor(): | 
					
						
							| 
									
										
										
										
											2018-06-22 15:07:11 +02:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             props = tool.operator_properties("view3d.cursor3d") | 
					
						
							|  |  |  |             layout.prop(props, "use_depth") | 
					
						
							|  |  |  |             layout.prop(props, "orientation") | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							| 
									
										
										
										
											2018-05-07 21:38:43 +02:00
										 |  |  |             text="Cursor", | 
					
						
							| 
									
										
										
										
											2018-08-31 14:37:10 +10:00
										 |  |  |             description=( | 
					
						
							| 
									
										
										
										
											2018-10-04 12:04:36 +10:00
										 |  |  |                 "Set the cursor location, drag to transform" | 
					
						
							| 
									
										
										
										
											2018-08-31 14:37:10 +10:00
										 |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-05-07 21:38:43 +02:00
										 |  |  |             icon="ops.generic.cursor", | 
					
						
							|  |  |  |             keymap=( | 
					
						
							| 
									
										
										
										
											2018-05-25 12:45:18 +02:00
										 |  |  |                 ("view3d.cursor3d", dict(), dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							| 
									
										
										
										
											2018-05-25 19:43:23 +02:00
										 |  |  |                 ("transform.translate", | 
					
						
							|  |  |  |                  dict(release_confirm=True, cursor_transform=True), | 
					
						
							|  |  |  |                  dict(type='EVT_TWEAK_A', value='ANY'), | 
					
						
							| 
									
										
										
										
											2018-06-05 16:35:20 +02:00
										 |  |  |                  ), | 
					
						
							| 
									
										
										
										
											2018-05-07 21:38:43 +02:00
										 |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-06-22 15:07:11 +02:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-05-07 21:38:43 +02:00
										 |  |  |         ) | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-28 18:05:21 +02:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def cursor_click(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							| 
									
										
										
										
											2018-06-15 12:28:19 +02:00
										 |  |  |             text="None", | 
					
						
							| 
									
										
										
										
											2018-05-28 18:05:21 +02:00
										 |  |  |             icon="ops.generic.cursor", | 
					
						
							|  |  |  |             keymap=( | 
					
						
							| 
									
										
										
										
											2018-06-15 12:28:19 +02:00
										 |  |  |                 # This is a dummy keymap entry, until particle system is properly working with toolsystem. | 
					
						
							|  |  |  |                 ("view3d.cursor3d", dict(), dict(type='ACTIONMOUSE', value='CLICK', ctrl=True, alt=True, shift=True)), | 
					
						
							| 
									
										
										
										
											2018-05-28 18:05:21 +02:00
										 |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def ruler(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							| 
									
										
										
										
											2018-08-23 16:50:43 +10:00
										 |  |  |             text="Measure", | 
					
						
							| 
									
										
										
										
											2018-09-07 11:48:03 +10:00
										 |  |  |             description=( | 
					
						
							|  |  |  |                 "Measure distance and angles.\n" | 
					
						
							|  |  |  |                 "\u2022 Drag anywhere for new measurement.\n" | 
					
						
							|  |  |  |                 "\u2022 Drag ruler segment to measure an angle.\n" | 
					
						
							|  |  |  |                 "\u2022 Drag ruler outside the view to remove.\n" | 
					
						
							|  |  |  |                 "\u2022 Ctrl to snap.\n" | 
					
						
							|  |  |  |                 "\u2022 Shift to measure surface thickness" | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-05-07 21:38:43 +02:00
										 |  |  |             icon="ops.view3d.ruler", | 
					
						
							| 
									
										
										
										
											2018-07-15 14:24:10 +02:00
										 |  |  |             widget="VIEW3D_GGT_ruler", | 
					
						
							| 
									
										
										
										
											2018-05-07 21:38:43 +02:00
										 |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("view3d.ruler_add", dict(), dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-28 21:00:25 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-23 20:25:25 +10:00
										 |  |  | def _defs_annotate_factory(): | 
					
						
							| 
									
										
										
										
											2018-04-27 13:23:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-23 20:25:25 +10:00
										 |  |  |     class _defs_annotate: | 
					
						
							|  |  |  |         @staticmethod | 
					
						
							|  |  |  |         def draw_settings_common(context, layout, tool): | 
					
						
							| 
									
										
										
										
											2018-10-10 11:10:13 +11:00
										 |  |  |             if type(context.gpencil_data_owner) is bpy.types.Object: | 
					
						
							|  |  |  |                 gpd = context.scene.grease_pencil | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 gpd = context.gpencil_data | 
					
						
							|  |  |  |             if gpd is not None: | 
					
						
							|  |  |  |                 layout.prop(gpd.layers, "active_note", text="") | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-10 11:12:41 +11:00
										 |  |  |             tool_settings = context.tool_settings | 
					
						
							| 
									
										
										
										
											2018-08-23 20:25:25 +10:00
										 |  |  |             space_type = tool.space_type | 
					
						
							|  |  |  |             if space_type == 'VIEW_3D': | 
					
						
							|  |  |  |                 layout.separator() | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-23 20:25:25 +10:00
										 |  |  |                 row = layout.row(align=True) | 
					
						
							| 
									
										
										
										
											2018-10-10 11:12:41 +11:00
										 |  |  |                 row.prop(tool_settings, "annotation_stroke_placement_view3d", text="Placement") | 
					
						
							|  |  |  |                 if tool_settings.gpencil_stroke_placement_view3d == 'CURSOR': | 
					
						
							|  |  |  |                     row.prop(tool_settings.gpencil_sculpt, "lockaxis") | 
					
						
							|  |  |  |                 elif tool_settings.gpencil_stroke_placement_view3d in {'SURFACE', 'STROKE'}: | 
					
						
							|  |  |  |                     row.prop(tool_settings, "use_gpencil_stroke_endpoints") | 
					
						
							| 
									
										
										
										
											2018-08-23 20:25:25 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |         @ToolDef.from_fn | 
					
						
							|  |  |  |         def scribble(): | 
					
						
							|  |  |  |             def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |                 _defs_annotate.draw_settings_common(context, layout, tool) | 
					
						
							|  |  |  |             return dict( | 
					
						
							|  |  |  |                 text="Annotate", | 
					
						
							|  |  |  |                 icon="ops.gpencil.draw", | 
					
						
							|  |  |  |                 cursor='PAINT_BRUSH', | 
					
						
							|  |  |  |                 keymap=( | 
					
						
							|  |  |  |                     ("gpencil.annotate", | 
					
						
							|  |  |  |                      dict(mode='DRAW', wait_for_input=False), | 
					
						
							| 
									
										
										
										
											2018-09-07 21:16:03 +10:00
										 |  |  |                      dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							| 
									
										
										
										
											2018-08-23 20:25:25 +10:00
										 |  |  |                 ), | 
					
						
							|  |  |  |                 draw_settings=draw_settings, | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-23 20:25:25 +10:00
										 |  |  |         @ToolDef.from_fn | 
					
						
							|  |  |  |         def line(): | 
					
						
							|  |  |  |             def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |                 _defs_annotate.draw_settings_common(context, layout, tool) | 
					
						
							|  |  |  |             return dict( | 
					
						
							| 
									
										
										
										
											2018-08-28 20:43:34 +10:00
										 |  |  |                 text="Annotate Line", | 
					
						
							| 
									
										
										
										
											2018-08-23 20:25:25 +10:00
										 |  |  |                 icon="ops.gpencil.draw.line", | 
					
						
							|  |  |  |                 cursor='CROSSHAIR', | 
					
						
							|  |  |  |                 keymap=( | 
					
						
							|  |  |  |                     ("gpencil.annotate", | 
					
						
							|  |  |  |                      dict(mode='DRAW_STRAIGHT', wait_for_input=False), | 
					
						
							|  |  |  |                      dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |                 ), | 
					
						
							|  |  |  |                 draw_settings=draw_settings, | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-23 20:25:25 +10:00
										 |  |  |         @ToolDef.from_fn | 
					
						
							|  |  |  |         def poly(): | 
					
						
							|  |  |  |             def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |                 _defs_annotate.draw_settings_common(context, layout, tool) | 
					
						
							|  |  |  |             return dict( | 
					
						
							| 
									
										
										
										
											2018-08-28 20:43:34 +10:00
										 |  |  |                 text="Annotate Polygon", | 
					
						
							| 
									
										
										
										
											2018-08-23 20:25:25 +10:00
										 |  |  |                 icon="ops.gpencil.draw.poly", | 
					
						
							|  |  |  |                 cursor='CROSSHAIR', | 
					
						
							|  |  |  |                 keymap=( | 
					
						
							|  |  |  |                     ("gpencil.annotate", | 
					
						
							|  |  |  |                      dict(mode='DRAW_POLY', wait_for_input=False), | 
					
						
							|  |  |  |                      dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |                 ), | 
					
						
							|  |  |  |                 draw_settings=draw_settings, | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-23 20:25:25 +10:00
										 |  |  |         @ToolDef.from_fn | 
					
						
							|  |  |  |         def eraser(): | 
					
						
							|  |  |  |             def draw_settings(context, layout, tool): | 
					
						
							| 
									
										
										
										
											2018-10-10 11:12:41 +11:00
										 |  |  |                 # TODO: Move this setting to tool_settings | 
					
						
							| 
									
										
										
										
											2018-08-23 20:25:25 +10:00
										 |  |  |                 user_prefs = context.user_preferences | 
					
						
							|  |  |  |                 layout.prop(user_prefs.edit, "grease_pencil_eraser_radius", text="Radius") | 
					
						
							|  |  |  |             return dict( | 
					
						
							| 
									
										
										
										
											2018-08-28 20:43:34 +10:00
										 |  |  |                 text="Annotate Eraser", | 
					
						
							| 
									
										
										
										
											2018-08-23 20:25:25 +10:00
										 |  |  |                 icon="ops.gpencil.draw.eraser", | 
					
						
							|  |  |  |                 cursor='CROSSHAIR',  # XXX: Always show brush circle when enabled | 
					
						
							|  |  |  |                 keymap=( | 
					
						
							|  |  |  |                     ("gpencil.annotate", | 
					
						
							|  |  |  |                      dict(mode='ERASER', wait_for_input=False), | 
					
						
							|  |  |  |                      dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |                 ), | 
					
						
							|  |  |  |                 draw_settings=draw_settings, | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |     return _defs_annotate | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-28 21:00:25 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-23 20:25:25 +10:00
										 |  |  | # Needed so annotation gets a keymap per space type. | 
					
						
							|  |  |  | _defs_annotate_image = _defs_annotate_factory() | 
					
						
							|  |  |  | _defs_annotate_view3d = _defs_annotate_factory() | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-27 13:23:29 +02:00
										 |  |  | class _defs_transform: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def translate(): | 
					
						
							| 
									
										
										
										
											2018-08-10 21:04:06 +10:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             tool_settings = context.tool_settings | 
					
						
							|  |  |  |             layout.prop(tool_settings, "use_gizmo_apron") | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							| 
									
										
										
										
											2018-09-06 12:13:01 +02:00
										 |  |  |             text="Move", | 
					
						
							| 
									
										
										
										
											2018-06-28 10:34:41 +02:00
										 |  |  |             # cursor='SCROLL_XY', | 
					
						
							| 
									
										
										
										
											2018-05-07 21:38:43 +02:00
										 |  |  |             icon="ops.transform.translate", | 
					
						
							| 
									
										
										
										
											2018-07-15 14:24:10 +02:00
										 |  |  |             widget="TRANSFORM_GGT_gizmo", | 
					
						
							| 
									
										
										
										
											2018-07-03 18:33:52 +02:00
										 |  |  |             operator="transform.translate", | 
					
						
							| 
									
										
										
										
											2018-07-14 23:58:07 +02:00
										 |  |  |             # TODO, implement as optional fallback gizmo | 
					
						
							| 
									
										
										
										
											2018-06-28 10:34:41 +02:00
										 |  |  |             # keymap=( | 
					
						
							|  |  |  |             #     ("transform.translate", dict(release_confirm=True), dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             # ), | 
					
						
							| 
									
										
										
										
											2018-08-10 21:04:06 +10:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-05-07 21:38:43 +02:00
										 |  |  |         ) | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def rotate(): | 
					
						
							| 
									
										
										
										
											2018-08-10 21:04:06 +10:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             tool_settings = context.tool_settings | 
					
						
							|  |  |  |             layout.prop(tool_settings, "use_gizmo_apron") | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							|  |  |  |             text="Rotate", | 
					
						
							| 
									
										
										
										
											2018-06-28 10:34:41 +02:00
										 |  |  |             # cursor='SCROLL_XY', | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             icon="ops.transform.rotate", | 
					
						
							| 
									
										
										
										
											2018-07-15 14:24:10 +02:00
										 |  |  |             widget="TRANSFORM_GGT_gizmo", | 
					
						
							| 
									
										
										
										
											2018-07-03 18:33:52 +02:00
										 |  |  |             operator="transform.rotate", | 
					
						
							| 
									
										
										
										
											2018-07-14 23:58:07 +02:00
										 |  |  |             # TODO, implement as optional fallback gizmo | 
					
						
							| 
									
										
										
										
											2018-06-28 10:34:41 +02:00
										 |  |  |             # keymap=( | 
					
						
							|  |  |  |             #     ("transform.rotate", dict(release_confirm=True), dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             # ), | 
					
						
							| 
									
										
										
										
											2018-08-10 21:04:06 +10:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def scale(): | 
					
						
							| 
									
										
										
										
											2018-08-10 21:04:06 +10:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             tool_settings = context.tool_settings | 
					
						
							|  |  |  |             layout.prop(tool_settings, "use_gizmo_apron") | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							|  |  |  |             text="Scale", | 
					
						
							| 
									
										
										
										
											2018-06-28 10:34:41 +02:00
										 |  |  |             # cursor='SCROLL_XY', | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             icon="ops.transform.resize", | 
					
						
							| 
									
										
										
										
											2018-07-15 14:24:10 +02:00
										 |  |  |             widget="TRANSFORM_GGT_gizmo", | 
					
						
							| 
									
										
										
										
											2018-07-03 18:33:52 +02:00
										 |  |  |             operator="transform.resize", | 
					
						
							| 
									
										
										
										
											2018-07-14 23:58:07 +02:00
										 |  |  |             # TODO, implement as optional fallback gizmo | 
					
						
							| 
									
										
										
										
											2018-06-28 10:34:41 +02:00
										 |  |  |             # keymap=( | 
					
						
							|  |  |  |             #     ("transform.resize", dict(release_confirm=True), dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             # ), | 
					
						
							| 
									
										
										
										
											2018-08-10 21:04:06 +10:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def scale_cage(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Scale Cage", | 
					
						
							|  |  |  |             icon="ops.transform.resize.cage", | 
					
						
							| 
									
										
										
										
											2018-07-15 14:24:10 +02:00
										 |  |  |             widget="VIEW3D_GGT_xform_cage", | 
					
						
							| 
									
										
										
										
											2018-07-03 18:33:52 +02:00
										 |  |  |             operator="transform.resize", | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def transform(): | 
					
						
							| 
									
										
										
										
											2018-06-22 19:22:49 +02:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             tool_settings = context.tool_settings | 
					
						
							| 
									
										
										
										
											2018-08-10 21:04:06 +10:00
										 |  |  |             layout.prop(tool_settings, "use_gizmo_apron") | 
					
						
							| 
									
										
										
										
											2018-07-29 11:54:12 +10:00
										 |  |  |             layout.prop(tool_settings, "use_gizmo_mode") | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							|  |  |  |             text="Transform", | 
					
						
							| 
									
										
										
										
											2018-08-31 14:37:10 +10:00
										 |  |  |             description=( | 
					
						
							|  |  |  |                 "Supports any combination of grab, rotate & scale at once" | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             icon="ops.transform.transform", | 
					
						
							| 
									
										
										
										
											2018-07-15 14:24:10 +02:00
										 |  |  |             widget="TRANSFORM_GGT_gizmo", | 
					
						
							| 
									
										
										
										
											2018-07-14 23:58:07 +02:00
										 |  |  |             # No keymap default action, only for gizmo! | 
					
						
							| 
									
										
										
										
											2018-06-22 19:22:49 +02:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-05-07 21:38:43 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-27 13:23:29 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | class _defs_view3d_select: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def border(): | 
					
						
							| 
									
										
										
										
											2018-08-14 10:28:41 +10:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |             props = tool.operator_properties("view3d.select_box") | 
					
						
							| 
									
										
										
										
											2018-08-14 10:28:41 +10:00
										 |  |  |             layout.prop(props, "mode", expand=True) | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |             text="Select Box", | 
					
						
							|  |  |  |             icon="ops.generic.select_box", | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |                 ("view3d.select_box", | 
					
						
							| 
									
										
										
										
											2018-08-14 10:28:41 +10:00
										 |  |  |                  dict(mode='ADD'), | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |                 ("view3d.select_box", | 
					
						
							| 
									
										
										
										
											2018-08-14 10:28:41 +10:00
										 |  |  |                  dict(mode='SUB'), | 
					
						
							| 
									
										
										
										
											2018-09-27 21:18:02 +10:00
										 |  |  |                  dict(type='EVT_TWEAK_A', value='ANY', ctrl=True)), | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-08-14 10:28:41 +10:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def circle(): | 
					
						
							| 
									
										
										
										
											2018-08-29 15:03:50 +10:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             props = tool.operator_properties("view3d.select_circle") | 
					
						
							|  |  |  |             layout.prop(props, "radius") | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							|  |  |  |             text="Select Circle", | 
					
						
							|  |  |  |             icon="ops.generic.select_circle", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("view3d.select_circle", | 
					
						
							|  |  |  |                  dict(deselect=False), | 
					
						
							|  |  |  |                  dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |                 ("view3d.select_circle", | 
					
						
							|  |  |  |                  dict(deselect=True), | 
					
						
							| 
									
										
										
										
											2018-09-27 21:18:02 +10:00
										 |  |  |                  dict(type='ACTIONMOUSE', value='PRESS', ctrl=True)), | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-08-29 15:03:50 +10:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def lasso(): | 
					
						
							| 
									
										
										
										
											2018-08-14 10:28:41 +10:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             props = tool.operator_properties("view3d.select_lasso") | 
					
						
							|  |  |  |             layout.prop(props, "mode", expand=True) | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							|  |  |  |             text="Select Lasso", | 
					
						
							|  |  |  |             icon="ops.generic.select_lasso", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("view3d.select_lasso", | 
					
						
							| 
									
										
										
										
											2018-08-14 10:28:41 +10:00
										 |  |  |                  dict(mode='ADD'), | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |                 ("view3d.select_lasso", | 
					
						
							| 
									
										
										
										
											2018-08-14 10:28:41 +10:00
										 |  |  |                  dict(mode='SUB'), | 
					
						
							| 
									
										
										
										
											2018-09-27 21:18:02 +10:00
										 |  |  |                  dict(type='EVT_TWEAK_A', value='ANY', ctrl=True)), | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-08-14 10:28:41 +10:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-04-27 13:23:29 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | # ----------------------------------------------------------------------------- | 
					
						
							|  |  |  | # Object Modes (named based on context.mode) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-07 21:38:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-27 13:23:29 +02:00
										 |  |  | class _defs_edit_armature: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def roll(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Roll", | 
					
						
							|  |  |  |             icon="ops.armature.bone.roll", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("transform.transform", | 
					
						
							|  |  |  |                  dict(release_confirm=True, mode='BONE_ROLL'), | 
					
						
							|  |  |  |                  dict(type='EVT_TWEAK_A', value='ANY'),), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-15 10:24:26 +02:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def bone_envelope(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Bone Envelope", | 
					
						
							| 
									
										
										
										
											2018-05-15 13:49:44 +02:00
										 |  |  |             icon="ops.transform.bone_envelope", | 
					
						
							| 
									
										
										
										
											2018-05-15 10:24:26 +02:00
										 |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("transform.transform", | 
					
						
							|  |  |  |                  dict(release_confirm=True, mode='BONE_ENVELOPE'), | 
					
						
							|  |  |  |                  dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def bone_size(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Bone Size", | 
					
						
							| 
									
										
										
										
											2018-05-15 13:49:44 +02:00
										 |  |  |             icon="ops.transform.bone_size", | 
					
						
							| 
									
										
										
										
											2018-05-15 10:24:26 +02:00
										 |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("transform.transform", | 
					
						
							|  |  |  |                  dict(release_confirm=True, mode='BONE_SIZE'), | 
					
						
							|  |  |  |                  dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def extrude(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Extrude", | 
					
						
							|  |  |  |             icon="ops.armature.extrude_move", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							| 
									
										
										
										
											2018-08-29 11:11:11 +10:00
										 |  |  |                 ("armature.extrude_move", | 
					
						
							|  |  |  |                  dict(TRANSFORM_OT_translate=dict(release_confirm=True)), | 
					
						
							|  |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def extrude_cursor(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Extrude to Cursor", | 
					
						
							|  |  |  |             icon="ops.armature.extrude_cursor", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("armature.click_extrude", dict(), dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-04-27 13:23:29 +02:00
										 |  |  |         ) | 
					
						
							| 
									
										
										
										
											2018-05-07 21:38:43 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-27 13:23:29 +02:00
										 |  |  | class _defs_edit_mesh: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-10 20:16:22 +02:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def cube_add(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Add Cube", | 
					
						
							| 
									
										
										
										
											2018-08-29 18:40:32 +10:00
										 |  |  |             icon="ops.mesh.primitive_cube_add_gizmo", | 
					
						
							| 
									
										
										
										
											2018-05-10 20:16:22 +02:00
										 |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("view3d.cursor3d", dict(), dict(type='ACTIONMOUSE', value='CLICK')), | 
					
						
							| 
									
										
										
										
											2018-07-14 23:58:07 +02:00
										 |  |  |                 ("mesh.primitive_cube_add_gizmo", dict(), dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							| 
									
										
										
										
											2018-05-10 20:16:22 +02:00
										 |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def rip_region(): | 
					
						
							| 
									
										
										
										
											2018-05-22 14:00:44 +02:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             props = tool.operator_properties("mesh.rip_move") | 
					
						
							| 
									
										
										
										
											2018-05-11 20:22:04 +02:00
										 |  |  |             props_macro = props.MESH_OT_rip | 
					
						
							|  |  |  |             layout.prop(props_macro, "use_fill") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							|  |  |  |             text="Rip Region", | 
					
						
							|  |  |  |             icon="ops.mesh.rip", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							| 
									
										
										
										
											2018-05-11 20:22:04 +02:00
										 |  |  |                 ("mesh.rip_move", | 
					
						
							|  |  |  |                  dict(TRANSFORM_OT_translate=dict(release_confirm=True)), | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |                  dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-05-11 20:22:04 +02:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def rip_edge(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Rip Edge", | 
					
						
							|  |  |  |             icon="ops.mesh.rip_edge", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							| 
									
										
										
										
											2018-09-05 08:45:46 +10:00
										 |  |  |                 ("mesh.rip_edge_move", | 
					
						
							|  |  |  |                  dict(TRANSFORM_OT_translate=dict(release_confirm=True)), | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |                  dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def poly_build(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Poly Build", | 
					
						
							|  |  |  |             icon="ops.mesh.polybuild_hover", | 
					
						
							| 
									
										
										
										
											2018-09-09 16:11:02 +10:00
										 |  |  |             widget="VIEW3D_GGT_mesh_preselect_elem", | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("mesh.polybuild_face_at_cursor_move", | 
					
						
							|  |  |  |                  dict(TRANSFORM_OT_translate=dict(release_confirm=True)), | 
					
						
							|  |  |  |                  dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |                 ("mesh.polybuild_split_at_cursor_move", | 
					
						
							|  |  |  |                  dict(TRANSFORM_OT_translate=dict(release_confirm=True)), | 
					
						
							|  |  |  |                  dict(type='ACTIONMOUSE', value='PRESS', ctrl=True)), | 
					
						
							|  |  |  |                 ("mesh.polybuild_dissolve_at_cursor", dict(), dict(type='ACTIONMOUSE', value='CLICK', alt=True)), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def edge_slide(): | 
					
						
							| 
									
										
										
										
											2018-08-22 17:53:03 +10:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             props = tool.operator_properties("transform.edge_slide") | 
					
						
							|  |  |  |             layout.prop(props, "correct_uv") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							|  |  |  |             text="Edge Slide", | 
					
						
							|  |  |  |             icon="ops.transform.edge_slide", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("transform.edge_slide", dict(release_confirm=True), | 
					
						
							|  |  |  |                  dict(type='ACTIONMOUSE', value='PRESS') | 
					
						
							| 
									
										
										
										
											2018-05-07 21:38:43 +02:00
										 |  |  |                  ), | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-08-22 17:53:03 +10:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def vert_slide(): | 
					
						
							| 
									
										
										
										
											2018-08-22 17:53:03 +10:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             props = tool.operator_properties("transform.vert_slide") | 
					
						
							|  |  |  |             layout.prop(props, "correct_uv") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							|  |  |  |             text="Vertex Slide", | 
					
						
							|  |  |  |             icon="ops.transform.vert_slide", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("transform.vert_slide", dict(release_confirm=True), | 
					
						
							|  |  |  |                  dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-08-22 17:53:03 +10:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def spin(): | 
					
						
							| 
									
										
										
										
											2018-09-17 14:52:54 +10:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             props = tool.operator_properties("mesh.spin") | 
					
						
							|  |  |  |             layout.prop(props, "steps") | 
					
						
							| 
									
										
										
										
											2018-10-02 17:05:13 +10:00
										 |  |  |             props = tool.gizmo_group_properties("MESH_GGT_spin") | 
					
						
							|  |  |  |             layout.prop(props, "axis") | 
					
						
							| 
									
										
										
										
											2018-09-17 14:52:54 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							|  |  |  |             text="Spin", | 
					
						
							|  |  |  |             icon="ops.mesh.spin", | 
					
						
							| 
									
										
										
										
											2018-09-18 13:24:35 +10:00
										 |  |  |             widget="MESH_GGT_spin", | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("mesh.spin", dict(), | 
					
						
							| 
									
										
										
										
											2018-09-17 14:34:51 +10:00
										 |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-09-17 14:52:54 +10:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def spin_duplicate(): | 
					
						
							| 
									
										
										
										
											2018-09-17 14:52:54 +10:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             props = tool.operator_properties("mesh.spin") | 
					
						
							|  |  |  |             layout.prop(props, "steps") | 
					
						
							| 
									
										
										
										
											2018-10-02 17:05:13 +10:00
										 |  |  |             props = tool.gizmo_group_properties("MESH_GGT_spin") | 
					
						
							|  |  |  |             layout.prop(props, "axis") | 
					
						
							| 
									
										
										
										
											2018-09-17 14:52:54 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							|  |  |  |             text="Spin (Duplicate)", | 
					
						
							|  |  |  |             icon="ops.mesh.spin.duplicate", | 
					
						
							| 
									
										
										
										
											2018-09-18 13:24:35 +10:00
										 |  |  |             widget="MESH_GGT_spin", | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("mesh.spin", dict(dupli=True), | 
					
						
							| 
									
										
										
										
											2018-09-17 14:52:54 +10:00
										 |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-09-17 14:52:54 +10:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def inset(): | 
					
						
							| 
									
										
										
										
											2018-05-22 14:00:44 +02:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             props = tool.operator_properties("mesh.inset") | 
					
						
							| 
									
										
										
										
											2018-05-11 20:23:29 +02:00
										 |  |  |             layout.prop(props, "use_outset") | 
					
						
							|  |  |  |             layout.prop(props, "use_individual") | 
					
						
							|  |  |  |             layout.prop(props, "use_even_offset") | 
					
						
							|  |  |  |             layout.prop(props, "use_relative_offset") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							|  |  |  |             text="Inset Faces", | 
					
						
							|  |  |  |             icon="ops.mesh.inset", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("mesh.inset", dict(release_confirm=True), | 
					
						
							|  |  |  |                  dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-05-11 20:23:29 +02:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def bevel(): | 
					
						
							| 
									
										
										
										
											2018-08-22 17:37:07 +10:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             props = tool.operator_properties("mesh.bevel") | 
					
						
							|  |  |  |             layout.prop(props, "offset_type") | 
					
						
							|  |  |  |             layout.prop(props, "segments") | 
					
						
							|  |  |  |             layout.prop(props, "profile", slider=True) | 
					
						
							|  |  |  |             layout.prop(props, "vertex_only") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							|  |  |  |             text="Bevel", | 
					
						
							|  |  |  |             icon="ops.mesh.bevel", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							| 
									
										
										
										
											2018-08-22 17:43:49 +10:00
										 |  |  |                 ("mesh.bevel", dict(release_confirm=True), | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |                  dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-08-22 17:37:07 +10:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def extrude(): | 
					
						
							| 
									
										
										
										
											2018-10-02 18:16:00 +10:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             props = tool.gizmo_group_properties("MESH_GGT_extrude") | 
					
						
							|  |  |  |             layout.prop(props, "axis_type", expand=True) | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							|  |  |  |             text="Extrude Region", | 
					
						
							| 
									
										
										
										
											2018-10-02 18:48:28 +10:00
										 |  |  |             # The operator description isn't useful in this case, give our own. | 
					
						
							|  |  |  |             description=( | 
					
						
							|  |  |  |                 "Extrude freely or along an axis" | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             icon="ops.mesh.extrude_region_move", | 
					
						
							| 
									
										
										
										
											2018-07-15 14:24:10 +02:00
										 |  |  |             widget="MESH_GGT_extrude", | 
					
						
							| 
									
										
										
										
											2018-10-02 18:48:28 +10:00
										 |  |  |             # Important to use same operator as 'E' key. | 
					
						
							|  |  |  |             operator="view3d.edit_mesh_extrude_move_normal", | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             keymap=( | 
					
						
							| 
									
										
										
										
											2018-08-29 11:11:11 +10:00
										 |  |  |                 ("mesh.extrude_context_move", | 
					
						
							|  |  |  |                  dict(TRANSFORM_OT_translate=dict(release_confirm=True)), | 
					
						
							| 
									
										
										
										
											2018-05-13 21:19:22 +02:00
										 |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-10-02 18:16:00 +10:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-29 22:59:49 +10:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def extrude_normals(): | 
					
						
							|  |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             props = tool.operator_properties("mesh.extrude_region_shrink_fatten") | 
					
						
							|  |  |  |             props_macro = props.TRANSFORM_OT_shrink_fatten | 
					
						
							|  |  |  |             layout.prop(props_macro, "use_even_offset") | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Extrude Along Normals", | 
					
						
							|  |  |  |             icon="ops.mesh.extrude_region_shrink_fatten", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							| 
									
										
										
										
											2018-10-02 15:17:00 +10:00
										 |  |  |             operator="mesh.extrude_region_shrink_fatten", | 
					
						
							| 
									
										
										
										
											2018-08-29 22:59:49 +10:00
										 |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("mesh.extrude_region_shrink_fatten", | 
					
						
							|  |  |  |                  dict(TRANSFORM_OT_shrink_fatten=dict(release_confirm=True)), | 
					
						
							|  |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             draw_settings=draw_settings, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def extrude_individual(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Extrude Individual", | 
					
						
							|  |  |  |             icon="ops.mesh.extrude_faces_move", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("mesh.extrude_faces_move", dict(TRANSFORM_OT_shrink_fatten=dict(release_confirm=True)), | 
					
						
							| 
									
										
										
										
											2018-05-13 21:19:22 +02:00
										 |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def extrude_cursor(): | 
					
						
							| 
									
										
										
										
											2018-09-27 12:23:01 +10:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             props = tool.operator_properties("mesh.dupli_extrude_cursor") | 
					
						
							|  |  |  |             layout.prop(props, "rotate_source") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							|  |  |  |             text="Extrude to Cursor", | 
					
						
							|  |  |  |             icon="ops.mesh.dupli_extrude_cursor", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("mesh.dupli_extrude_cursor", dict(), dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-09-27 12:23:01 +10:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def loopcut_slide(): | 
					
						
							| 
									
										
										
										
											2018-08-22 14:04:37 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             props = tool.operator_properties("mesh.loopcut_slide") | 
					
						
							|  |  |  |             props_macro = props.MESH_OT_loopcut | 
					
						
							|  |  |  |             layout.prop(props_macro, "number_cuts") | 
					
						
							|  |  |  |             props_macro = props.TRANSFORM_OT_edge_slide | 
					
						
							|  |  |  |             layout.prop(props_macro, "correct_uv") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							|  |  |  |             text="Loop Cut", | 
					
						
							|  |  |  |             icon="ops.mesh.loopcut_slide", | 
					
						
							| 
									
										
										
										
											2018-08-21 19:02:28 +10:00
										 |  |  |             widget="VIEW3D_GGT_mesh_preselect_edgering", | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             keymap=( | 
					
						
							| 
									
										
										
										
											2018-08-22 17:53:03 +10:00
										 |  |  |                 ("mesh.loopcut_slide", | 
					
						
							|  |  |  |                  dict(TRANSFORM_OT_edge_slide=dict(release_confirm=True)), | 
					
						
							|  |  |  |                  dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-08-22 14:04:37 +10:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def offset_edge_loops_slide(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Offset Edge Loop Cut", | 
					
						
							|  |  |  |             icon="ops.mesh.offset_edge_loops_slide", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("mesh.offset_edge_loops_slide", dict(), dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def vertex_smooth(): | 
					
						
							| 
									
										
										
										
											2018-09-13 09:23:24 +10:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             props = tool.operator_properties("mesh.vertices_smooth") | 
					
						
							|  |  |  |             layout.prop(props, "repeat") | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							|  |  |  |             text="Smooth", | 
					
						
							|  |  |  |             icon="ops.mesh.vertices_smooth", | 
					
						
							| 
									
										
										
										
											2018-09-13 09:19:30 +10:00
										 |  |  |             widget="WM_GGT_value_operator_redo", | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             keymap=( | 
					
						
							| 
									
										
										
										
											2018-09-13 09:19:30 +10:00
										 |  |  |                 # Use 0.0, so dragging increases from nothing. | 
					
						
							|  |  |  |                 ("mesh.vertices_smooth", dict(factor=0.0), | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |                  dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-09-13 09:23:24 +10:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def vertex_randomize(): | 
					
						
							| 
									
										
										
										
											2018-09-13 09:23:24 +10:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             props = tool.operator_properties("transform.vertex_random") | 
					
						
							|  |  |  |             layout.prop(props, "uniform") | 
					
						
							|  |  |  |             layout.prop(props, "normal") | 
					
						
							|  |  |  |             layout.prop(props, "seed") | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							|  |  |  |             text="Randomize", | 
					
						
							|  |  |  |             icon="ops.transform.vertex_random", | 
					
						
							| 
									
										
										
										
											2018-09-13 09:19:30 +10:00
										 |  |  |             widget="WM_GGT_value_operator_redo", | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             keymap=( | 
					
						
							| 
									
										
										
										
											2018-09-13 09:19:30 +10:00
										 |  |  |                 # Use 0.0, so dragging increases from nothing. | 
					
						
							|  |  |  |                 ("transform.vertex_random", dict(offset=0.0), | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |                  dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-09-13 09:23:24 +10:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-28 20:41:48 +10:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def shear(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Shear", | 
					
						
							|  |  |  |             icon="ops.transform.shear", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("transform.shear", dict(release_confirm=True), | 
					
						
							|  |  |  |                  dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def tosphere(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="To Sphere", | 
					
						
							|  |  |  |             icon="ops.transform.tosphere", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("transform.tosphere", dict(release_confirm=True), | 
					
						
							|  |  |  |                  dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def shrink_fatten(): | 
					
						
							| 
									
										
										
										
											2018-05-22 14:00:44 +02:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             props = tool.operator_properties("transform.shrink_fatten") | 
					
						
							| 
									
										
										
										
											2018-05-11 20:23:29 +02:00
										 |  |  |             layout.prop(props, "use_even_offset") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							|  |  |  |             text="Shrink/Fatten", | 
					
						
							|  |  |  |             icon="ops.transform.shrink_fatten", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("transform.shrink_fatten", dict(release_confirm=True), | 
					
						
							|  |  |  |                  dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-05-11 20:23:29 +02:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def push_pull(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Push/Pull", | 
					
						
							|  |  |  |             icon="ops.transform.push_pull", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("transform.push_pull", dict(release_confirm=True), | 
					
						
							|  |  |  |                  dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def knife(): | 
					
						
							| 
									
										
										
										
											2018-05-22 14:00:44 +02:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             props = tool.operator_properties("mesh.knife_tool") | 
					
						
							| 
									
										
										
										
											2018-04-27 14:13:16 +02:00
										 |  |  |             layout.prop(props, "use_occlude_geometry") | 
					
						
							|  |  |  |             layout.prop(props, "only_selected") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							|  |  |  |             text="Knife", | 
					
						
							|  |  |  |             icon="ops.mesh.knife_tool", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("mesh.knife_tool", | 
					
						
							|  |  |  |                  dict(wait_for_input=False), | 
					
						
							|  |  |  |                  dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             draw_settings=draw_settings, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def bisect(): | 
					
						
							| 
									
										
										
										
											2018-09-12 06:24:15 +10:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             props = tool.operator_properties("mesh.bisect") | 
					
						
							|  |  |  |             layout.prop(props, "use_fill") | 
					
						
							|  |  |  |             layout.prop(props, "clear_inner") | 
					
						
							|  |  |  |             layout.prop(props, "clear_outer") | 
					
						
							|  |  |  |             layout.prop(props, "threshold") | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							|  |  |  |             text="Bisect", | 
					
						
							|  |  |  |             icon="ops.mesh.bisect", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("mesh.bisect", | 
					
						
							|  |  |  |                  dict(), | 
					
						
							|  |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-09-12 06:24:15 +10:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-04-27 13:23:29 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-07 21:38:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-27 13:23:29 +02:00
										 |  |  | class _defs_edit_curve: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def draw(): | 
					
						
							| 
									
										
										
										
											2018-05-22 14:00:44 +02:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							| 
									
										
										
										
											2018-05-11 20:25:01 +02:00
										 |  |  |             # Tool settings initialize operator options. | 
					
						
							|  |  |  |             tool_settings = context.tool_settings | 
					
						
							|  |  |  |             cps = tool_settings.curve_paint_settings | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             col = layout.row() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             col.prop(cps, "curve_type") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if cps.curve_type == 'BEZIER': | 
					
						
							|  |  |  |                 col.prop(cps, "error_threshold") | 
					
						
							|  |  |  |                 col.prop(cps, "fit_method") | 
					
						
							|  |  |  |                 col.prop(cps, "use_corners_detect") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 col = layout.row() | 
					
						
							|  |  |  |                 col.active = cps.use_corners_detect | 
					
						
							|  |  |  |                 col.prop(cps, "corner_angle") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |         return dict( | 
					
						
							|  |  |  |             text="Draw", | 
					
						
							| 
									
										
										
										
											2018-05-18 11:57:40 +02:00
										 |  |  |             cursor='PAINT_BRUSH', | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |             icon=None, | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("curve.draw", dict(wait_for_input=False), dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-05-11 20:25:01 +02:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-04-27 13:23:29 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-29 15:14:41 +10:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def extrude(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Extrude", | 
					
						
							|  |  |  |             icon=None, | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("curve.extrude_move", | 
					
						
							|  |  |  |                  dict(TRANSFORM_OT_translate=dict(release_confirm=True)), | 
					
						
							|  |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 12:14:46 +02:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def extrude_cursor(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Extrude Cursor", | 
					
						
							|  |  |  |             icon=None, | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("curve.vertex_add", dict(), dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-04-27 13:23:29 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-07 21:38:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-15 12:40:50 +02:00
										 |  |  | class _defs_pose: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def breakdown(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Breakdowner", | 
					
						
							| 
									
										
										
										
											2018-05-15 13:49:44 +02:00
										 |  |  |             icon="ops.pose.breakdowner", | 
					
						
							| 
									
										
										
										
											2018-05-15 12:40:50 +02:00
										 |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("pose.breakdown", dict(), dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def push(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Push", | 
					
						
							| 
									
										
										
										
											2018-05-15 13:49:44 +02:00
										 |  |  |             icon="ops.pose.push", | 
					
						
							| 
									
										
										
										
											2018-05-15 12:40:50 +02:00
										 |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("pose.push", dict(), dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def relax(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Relax", | 
					
						
							| 
									
										
										
										
											2018-05-15 13:49:44 +02:00
										 |  |  |             icon="ops.pose.relax", | 
					
						
							| 
									
										
										
										
											2018-05-15 12:40:50 +02:00
										 |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("pose.relax", dict(), dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-02 17:41:11 +10:00
										 |  |  | class _defs_particle: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def generate_from_brushes(context): | 
					
						
							|  |  |  |         return generate_from_enum_ex( | 
					
						
							|  |  |  |             context, | 
					
						
							|  |  |  |             icon_prefix="brush.particle.", | 
					
						
							|  |  |  |             data=context.tool_settings.particle_edit, | 
					
						
							|  |  |  |             attr="tool", | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-29 14:31:00 +02:00
										 |  |  | class _defs_sculpt: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def generate_from_brushes(context): | 
					
						
							| 
									
										
										
										
											2018-04-30 15:21:04 +02:00
										 |  |  |         return generate_from_brushes_ex( | 
					
						
							|  |  |  |             context, | 
					
						
							|  |  |  |             icon_prefix="brush.sculpt.", | 
					
						
							|  |  |  |             brush_test_attr="use_paint_sculpt", | 
					
						
							|  |  |  |             brush_category_attr="sculpt_tool", | 
					
						
							|  |  |  |             brush_category_layout=( | 
					
						
							|  |  |  |                 ('DRAW',), | 
					
						
							|  |  |  |                 ('GRAB', 'THUMB'), | 
					
						
							|  |  |  |                 ('SNAKE_HOOK',), | 
					
						
							|  |  |  |                 ('BLOB', 'INFLATE'), | 
					
						
							| 
									
										
										
										
											2018-05-07 21:38:43 +02:00
										 |  |  |                 ('SMOOTH', 'SCRAPE', 'FLATTEN'), | 
					
						
							| 
									
										
										
										
											2018-04-30 15:21:04 +02:00
										 |  |  |                 ('CREASE', 'PINCH'), | 
					
						
							|  |  |  |                 ('CLAY', 'CLAY_STRIPS'), | 
					
						
							|  |  |  |                 ('LAYER',), | 
					
						
							|  |  |  |                 ('NUDGE', 'ROTATE'), | 
					
						
							|  |  |  |                 ('FILL',), | 
					
						
							|  |  |  |                 ('SIMPLIFY',), | 
					
						
							|  |  |  |                 ('MASK',), | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2018-04-29 16:36:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-23 12:56:02 +10:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def hide_border(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |             text="Box Hide", | 
					
						
							| 
									
										
										
										
											2018-08-23 22:46:04 +10:00
										 |  |  |             icon="ops.sculpt.border_hide", | 
					
						
							| 
									
										
										
										
											2018-08-23 12:56:02 +10:00
										 |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("paint.hide_show", dict(action='HIDE'), dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |                 ("paint.hide_show", dict(action='SHOW'), dict(type='EVT_TWEAK_A', value='ANY', ctrl=True)), | 
					
						
							|  |  |  |                 ("paint.hide_show", dict(action='SHOW', area='ALL'), dict(type='SELECTMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def mask_border(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |             text="Box Mask", | 
					
						
							| 
									
										
										
										
											2018-08-23 22:46:04 +10:00
										 |  |  |             icon="ops.sculpt.border_mask", | 
					
						
							| 
									
										
										
										
											2018-08-23 12:56:02 +10:00
										 |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |                 ("view3d.select_box", dict(mode='ADD'), dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |                 ("view3d.select_box", dict(mode='SUB'), dict(type='EVT_TWEAK_A', value='ANY', ctrl=True)), | 
					
						
							| 
									
										
										
										
											2018-08-23 12:56:02 +10:00
										 |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2018-04-30 16:06:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-28 21:00:25 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 16:06:51 +02:00
										 |  |  | class _defs_vertex_paint: | 
					
						
							| 
									
										
										
										
											2018-04-30 15:21:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-29 16:21:48 +10:00
										 |  |  |     @staticmethod | 
					
						
							|  |  |  |     def poll_select_mask(context): | 
					
						
							| 
									
										
										
										
											2018-09-21 19:24:29 +02:00
										 |  |  |         ob = context.active_object | 
					
						
							|  |  |  |         return ob.type == 'MESH' and ob.data.use_paint_mask | 
					
						
							| 
									
										
										
										
											2018-08-29 16:21:48 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 15:21:04 +02:00
										 |  |  |     @staticmethod | 
					
						
							|  |  |  |     def generate_from_brushes(context): | 
					
						
							|  |  |  |         return generate_from_brushes_ex( | 
					
						
							|  |  |  |             context, | 
					
						
							| 
									
										
										
										
											2018-04-30 16:06:51 +02:00
										 |  |  |             icon_prefix="brush.paint_vertex.", | 
					
						
							| 
									
										
										
										
											2018-04-30 15:21:04 +02:00
										 |  |  |             brush_test_attr="use_paint_vertex", | 
					
						
							|  |  |  |             brush_category_attr="vertex_tool", | 
					
						
							|  |  |  |             brush_category_layout=( | 
					
						
							|  |  |  |                 ('MIX',), | 
					
						
							|  |  |  |                 ('BLUR', 'AVERAGE'), | 
					
						
							|  |  |  |                 ('SMEAR',), | 
					
						
							|  |  |  |                 ( | 
					
						
							|  |  |  |                     'ADD', 'SUB', 'MUL', 'LIGHTEN', 'DARKEN', | 
					
						
							|  |  |  |                     'COLORDODGE', 'DIFFERENCE', 'SCREEN', 'HARDLIGHT', | 
					
						
							|  |  |  |                     'OVERLAY', 'SOFTLIGHT', 'EXCLUSION', 'LUMINOCITY', | 
					
						
							| 
									
										
										
										
											2018-04-30 21:57:51 +02:00
										 |  |  |                     'SATURATION', 'HUE', 'ERASE_ALPHA', 'ADD_ALPHA', | 
					
						
							| 
									
										
										
										
											2018-04-30 15:21:04 +02:00
										 |  |  |                 ), | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2018-04-29 14:31:00 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 16:43:13 +02:00
										 |  |  | class _defs_texture_paint: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def generate_from_brushes(context): | 
					
						
							|  |  |  |         return generate_from_brushes_ex( | 
					
						
							|  |  |  |             context, | 
					
						
							|  |  |  |             icon_prefix="brush.paint_texture.", | 
					
						
							|  |  |  |             brush_test_attr="use_paint_image", | 
					
						
							|  |  |  |             brush_category_attr="image_tool", | 
					
						
							|  |  |  |             brush_category_layout=( | 
					
						
							|  |  |  |                 ('DRAW',), | 
					
						
							|  |  |  |                 ('SOFTEN',), | 
					
						
							|  |  |  |                 ('SMEAR',), | 
					
						
							|  |  |  |                 ('CLONE',), | 
					
						
							|  |  |  |                 ('FILL',), | 
					
						
							|  |  |  |                 ('MASK',), | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 16:06:51 +02:00
										 |  |  | class _defs_weight_paint: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-29 16:21:48 +10:00
										 |  |  |     @staticmethod | 
					
						
							|  |  |  |     def poll_select_mask(context): | 
					
						
							| 
									
										
										
										
											2018-09-21 19:24:29 +02:00
										 |  |  |         ob = context.active_object | 
					
						
							|  |  |  |         return (ob.type == 'MESH' and | 
					
						
							|  |  |  |                 (ob.data.use_paint_mask or | 
					
						
							|  |  |  |                  ob.data.use_paint_mask_vertex)) | 
					
						
							| 
									
										
										
										
											2018-08-29 16:21:48 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 16:06:51 +02:00
										 |  |  |     @staticmethod | 
					
						
							|  |  |  |     def generate_from_brushes(context): | 
					
						
							|  |  |  |         return generate_from_brushes_ex( | 
					
						
							|  |  |  |             context, | 
					
						
							|  |  |  |             icon_prefix="brush.paint_weight.", | 
					
						
							|  |  |  |             brush_test_attr="use_paint_weight", | 
					
						
							|  |  |  |             brush_category_attr="vertex_tool", | 
					
						
							|  |  |  |             brush_category_layout=( | 
					
						
							|  |  |  |                 ('MIX',), | 
					
						
							|  |  |  |                 ('BLUR', 'AVERAGE'), | 
					
						
							|  |  |  |                 ('SMEAR',), | 
					
						
							|  |  |  |                 ( | 
					
						
							|  |  |  |                     'ADD', 'SUB', 'MUL', 'LIGHTEN', 'DARKEN', | 
					
						
							|  |  |  |                     'COLORDODGE', 'DIFFERENCE', 'SCREEN', 'HARDLIGHT', | 
					
						
							|  |  |  |                     'OVERLAY', 'SOFTLIGHT', 'EXCLUSION', 'LUMINOCITY', | 
					
						
							|  |  |  |                     'SATURATION', 'HUE', | 
					
						
							|  |  |  |                 ), | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-01 12:20:53 +02:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def sample_weight(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Sample Weight", | 
					
						
							|  |  |  |             icon="ops.paint.weight_sample", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("paint.weight_sample", dict(), dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def sample_weight_group(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Sample Vertex Group", | 
					
						
							|  |  |  |             icon="ops.paint.weight_sample_group", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("paint.weight_sample_group", dict(), dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 16:06:51 +02:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							| 
									
										
										
										
											2018-05-01 12:46:25 +02:00
										 |  |  |     def gradient(): | 
					
						
							| 
									
										
										
										
											2018-05-22 14:00:44 +02:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							| 
									
										
										
										
											2018-09-05 16:01:53 +10:00
										 |  |  |             brush = context.tool_settings.weight_paint.brush | 
					
						
							|  |  |  |             if brush is not None: | 
					
						
							|  |  |  |                 from .properties_paint_common import UnifiedPaintPanel | 
					
						
							|  |  |  |                 UnifiedPaintPanel.prop_unified_weight(layout, context, brush, "weight", slider=True, text="Weight") | 
					
						
							| 
									
										
										
										
											2018-09-05 16:05:00 +10:00
										 |  |  |             props = tool.operator_properties("paint.weight_gradient") | 
					
						
							|  |  |  |             layout.prop(props, "type") | 
					
						
							| 
									
										
										
										
											2018-04-30 16:06:51 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return dict( | 
					
						
							| 
									
										
										
										
											2018-05-01 12:46:25 +02:00
										 |  |  |             text="Gradient", | 
					
						
							|  |  |  |             icon="ops.paint.weight_gradient", | 
					
						
							| 
									
										
										
										
											2018-04-30 16:06:51 +02:00
										 |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							| 
									
										
										
										
											2018-05-01 12:46:25 +02:00
										 |  |  |                 ("paint.weight_gradient", dict(), dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							| 
									
										
										
										
											2018-04-30 16:06:51 +02:00
										 |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-05-01 12:46:25 +02:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-04-30 16:06:51 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-04 12:04:36 +10:00
										 |  |  | class _defs_image_generic: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-05 13:07:01 +10:00
										 |  |  |     @staticmethod | 
					
						
							|  |  |  |     def poll_uvedit(context): | 
					
						
							|  |  |  |         ob = context.edit_object | 
					
						
							|  |  |  |         if ob is not None: | 
					
						
							|  |  |  |             data = ob.data | 
					
						
							|  |  |  |             if data is not None: | 
					
						
							|  |  |  |                 return bool(getattr(data, "uv_layers", False)) | 
					
						
							|  |  |  |         return False | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-04 12:04:36 +10:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def cursor(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Cursor", | 
					
						
							|  |  |  |             description=( | 
					
						
							|  |  |  |                 "Set the cursor location, drag to transform" | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             icon="ops.generic.cursor", | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("uv.cursor_set", dict(), dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							|  |  |  |                 ("transform.translate", | 
					
						
							|  |  |  |                  dict(release_confirm=True, cursor_transform=True), | 
					
						
							|  |  |  |                  dict(type='EVT_TWEAK_A', value='ANY'), | 
					
						
							|  |  |  |                  ), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class _defs_image_uv_transform: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def transform(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Transform", | 
					
						
							|  |  |  |             description=( | 
					
						
							|  |  |  |                 "Supports any combination of grab, rotate & scale at once" | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             icon="ops.transform.transform", | 
					
						
							|  |  |  |             widget="IMAGE_GGT_gizmo2d", | 
					
						
							|  |  |  |             # No keymap default action, only for gizmo! | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class _defs_image_uv_select: | 
					
						
							| 
									
										
										
										
											2018-05-16 18:41:11 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def border(): | 
					
						
							| 
									
										
										
										
											2018-10-04 15:12:28 +10:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |             props = tool.operator_properties("uv.select_box") | 
					
						
							| 
									
										
										
										
											2018-10-04 15:12:28 +10:00
										 |  |  |             layout.prop(props, "deselect") | 
					
						
							| 
									
										
										
										
											2018-05-16 18:41:11 +02:00
										 |  |  |         return dict( | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |             text="Select Box", | 
					
						
							|  |  |  |             icon="ops.generic.select_box", | 
					
						
							| 
									
										
										
										
											2018-05-16 18:41:11 +02:00
										 |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |                 ("uv.select_box", | 
					
						
							| 
									
										
										
										
											2018-10-04 15:12:28 +10:00
										 |  |  |                  dict(), | 
					
						
							| 
									
										
										
										
											2018-05-16 18:41:11 +02:00
										 |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |                 ("uv.select_box", | 
					
						
							| 
									
										
										
										
											2018-10-04 15:12:28 +10:00
										 |  |  |                  dict(deselect=True), | 
					
						
							|  |  |  |                  dict(type='EVT_TWEAK_A', value='ANY', ctrl=True)), | 
					
						
							| 
									
										
										
										
											2018-05-16 18:41:11 +02:00
										 |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-10-04 15:12:28 +10:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-05-16 18:41:11 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def circle(): | 
					
						
							| 
									
										
										
										
											2018-10-04 15:12:28 +10:00
										 |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             props = tool.operator_properties("uv.select_circle") | 
					
						
							|  |  |  |             layout.prop(props, "radius") | 
					
						
							| 
									
										
										
										
											2018-05-16 18:41:11 +02:00
										 |  |  |         return dict( | 
					
						
							|  |  |  |             text="Select Circle", | 
					
						
							|  |  |  |             icon="ops.generic.select_circle", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("uv.select_circle", | 
					
						
							| 
									
										
										
										
											2018-10-04 13:21:25 +10:00
										 |  |  |                  dict(deselect=False), | 
					
						
							| 
									
										
										
										
											2018-05-16 18:41:11 +02:00
										 |  |  |                  dict(type='ACTIONMOUSE', value='PRESS')), | 
					
						
							| 
									
										
										
										
											2018-10-04 13:21:25 +10:00
										 |  |  |                 ("uv.select_circle", | 
					
						
							|  |  |  |                  dict(deselect=True), | 
					
						
							|  |  |  |                  dict(type='ACTIONMOUSE', value='PRESS', ctrl=True)), | 
					
						
							| 
									
										
										
										
											2018-05-16 18:41:11 +02:00
										 |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-10-04 15:12:28 +10:00
										 |  |  |             draw_settings=draw_settings, | 
					
						
							| 
									
										
										
										
											2018-05-16 18:41:11 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def lasso(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Select Lasso", | 
					
						
							|  |  |  |             icon="ops.generic.select_lasso", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("uv.select_lasso", | 
					
						
							|  |  |  |                  dict(deselect=False), | 
					
						
							|  |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |                 # ("uv.select_lasso", | 
					
						
							|  |  |  |                 #  dict(deselect=True), | 
					
						
							| 
									
										
										
										
											2018-09-27 21:18:02 +10:00
										 |  |  |                 #  dict(type='EVT_TWEAK_A', value='ANY', ctrl=True)), | 
					
						
							| 
									
										
										
										
											2018-05-16 18:41:11 +02:00
										 |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 21:06:08 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-05 13:07:01 +10:00
										 |  |  | class _defs_image_uv_sculpt: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def generate_from_brushes(context): | 
					
						
							|  |  |  |         return generate_from_enum_ex( | 
					
						
							|  |  |  |             context, | 
					
						
							|  |  |  |             icon_prefix="brush.uv_sculpt.", | 
					
						
							|  |  |  |             data=context.tool_settings, | 
					
						
							|  |  |  |             attr="uv_sculpt_tool", | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  | class _defs_gpencil_paint: | 
					
						
							| 
									
										
										
										
											2018-08-23 20:16:50 +10:00
										 |  |  |     @staticmethod | 
					
						
							|  |  |  |     def draw_color_selector(context, layout): | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         brush = context.active_gpencil_brush | 
					
						
							|  |  |  |         gp_settings = brush.gpencil_settings | 
					
						
							| 
									
										
										
										
											2018-09-27 20:50:05 +02:00
										 |  |  |         ma = gp_settings.material | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         row = layout.row(align=True) | 
					
						
							| 
									
										
										
										
											2018-09-27 20:50:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         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:] | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2018-09-27 20:50:05 +02:00
										 |  |  |             txt_ma = "" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         row.label(text="Material:") | 
					
						
							|  |  |  |         sub = row.row() | 
					
						
							|  |  |  |         sub.ui_units_x = 8 | 
					
						
							|  |  |  |         sub.popover( | 
					
						
							|  |  |  |             panel="TOPBAR_PT_gpencil_materials", | 
					
						
							|  |  |  |             text=txt_ma, | 
					
						
							|  |  |  |             icon_value=icon_id, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-24 23:59:56 +02:00
										 |  |  |         row.prop(gp_settings, "pin_material", text="") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-23 20:16:50 +10:00
										 |  |  |     @staticmethod | 
					
						
							|  |  |  |     def draw_settings_common(context, layout, tool): | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         ob = context.active_object | 
					
						
							|  |  |  |         if ob and ob.mode == 'GPENCIL_PAINT': | 
					
						
							|  |  |  |             brush = context.active_gpencil_brush | 
					
						
							|  |  |  |             gp_settings = brush.gpencil_settings | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if gp_settings.gpencil_brush_type == 'ERASE': | 
					
						
							| 
									
										
										
										
											2018-09-14 22:52:01 +02:00
										 |  |  |                 row = layout.row(align=True) | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |                 row.prop(brush, "size", text="Radius") | 
					
						
							| 
									
										
										
										
											2018-09-14 22:52:01 +02:00
										 |  |  |                 row.prop(gp_settings, "use_pressure", text="", icon='STYLUS_PRESSURE') | 
					
						
							|  |  |  |                 if gp_settings.eraser_mode == 'SOFT': | 
					
						
							|  |  |  |                     row = layout.row(align=True) | 
					
						
							|  |  |  |                     row.prop(gp_settings, "pen_strength", slider=True) | 
					
						
							|  |  |  |                     row.prop(gp_settings, "use_strength_pressure", text="", icon='STYLUS_PRESSURE') | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |             elif gp_settings.gpencil_brush_type == 'FILL': | 
					
						
							|  |  |  |                 row = layout.row() | 
					
						
							|  |  |  |                 row.prop(gp_settings, "gpencil_fill_leak", text="Leak Size") | 
					
						
							|  |  |  |                 row.prop(brush, "size", text="Thickness") | 
					
						
							|  |  |  |                 row.prop(gp_settings, "gpencil_fill_simplyfy_level", text="Simplify") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 _defs_gpencil_paint.draw_color_selector(context, layout) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 row = layout.row(align=True) | 
					
						
							|  |  |  |                 row.prop(gp_settings, "gpencil_fill_draw_mode", text="") | 
					
						
							|  |  |  |                 row.prop(gp_settings, "gpencil_fill_show_boundary", text="", icon='GRID') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             else:  # bgpsettings.gpencil_brush_type == 'DRAW': | 
					
						
							|  |  |  |                 row = layout.row(align=True) | 
					
						
							|  |  |  |                 row.prop(brush, "size", text="Radius") | 
					
						
							|  |  |  |                 row.prop(gp_settings, "use_pressure", text="", icon='STYLUS_PRESSURE') | 
					
						
							|  |  |  |                 row = layout.row(align=True) | 
					
						
							|  |  |  |                 row.prop(gp_settings, "pen_strength", slider=True) | 
					
						
							|  |  |  |                 row.prop(gp_settings, "use_strength_pressure", text="", icon='STYLUS_PRESSURE') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 _defs_gpencil_paint.draw_color_selector(context, layout) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def generate_from_brushes(context): | 
					
						
							|  |  |  |         return generate_from_brushes_ex( | 
					
						
							|  |  |  |             context, | 
					
						
							|  |  |  |             icon_prefix="brush.gpencil.", | 
					
						
							|  |  |  |             brush_test_attr="use_paint_grease_pencil", | 
					
						
							|  |  |  |             brush_category_attr="grease_pencil_tool", | 
					
						
							|  |  |  |             brush_category_layout=( | 
					
						
							|  |  |  |                 ('PENCIL',), | 
					
						
							|  |  |  |                 ('PEN',), | 
					
						
							|  |  |  |                 ('INK',), | 
					
						
							|  |  |  |                 ('INKNOISE',), | 
					
						
							|  |  |  |                 ('BLOCK',), | 
					
						
							|  |  |  |                 ('MARKER',), | 
					
						
							|  |  |  |                 ('FILL',), | 
					
						
							|  |  |  |                 ('SOFT',), | 
					
						
							|  |  |  |                 ('HARD',), | 
					
						
							|  |  |  |                 ('STROKE',), | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class _defs_gpencil_edit: | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def bend(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Bend", | 
					
						
							|  |  |  |             icon="ops.gpencil.edit_bend", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("transform.bend", | 
					
						
							| 
									
										
										
										
											2018-08-28 20:43:34 +10:00
										 |  |  |                  dict(release_confirm=True), | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-21 10:28:51 +02:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |     def box_select(): | 
					
						
							| 
									
										
										
										
											2018-09-21 10:28:51 +02:00
										 |  |  |         return dict( | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |             text="Select Box", | 
					
						
							|  |  |  |             icon="ops.generic.select_box", | 
					
						
							| 
									
										
										
										
											2018-09-21 10:28:51 +02:00
										 |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |                 ("gpencil.select_box", | 
					
						
							| 
									
										
										
										
											2018-09-21 10:28:51 +02:00
										 |  |  |                  dict(), | 
					
						
							|  |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def circle_select(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Select Circle", | 
					
						
							|  |  |  |             icon="ops.generic.select_circle", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("gpencil.select_circle", | 
					
						
							|  |  |  |                  dict(), | 
					
						
							|  |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def lasso_select(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Select Lasso", | 
					
						
							|  |  |  |             icon="ops.generic.select_lasso", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("gpencil.select_lasso", | 
					
						
							|  |  |  |                  dict(), | 
					
						
							|  |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def mirror(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Mirror", | 
					
						
							|  |  |  |             icon="ops.gpencil.edit_mirror", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("transform.mirror", | 
					
						
							| 
									
										
										
										
											2018-08-28 20:43:34 +10:00
										 |  |  |                  dict(release_confirm=True), | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def shear(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Shear", | 
					
						
							|  |  |  |             icon="ops.gpencil.edit_shear", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("transform.shear", | 
					
						
							| 
									
										
										
										
											2018-08-28 20:43:34 +10:00
										 |  |  |                  dict(release_confirm=True), | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def tosphere(): | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="To Sphere", | 
					
						
							|  |  |  |             icon="ops.gpencil.edit_to_sphere", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("transform.tosphere", | 
					
						
							| 
									
										
										
										
											2018-08-28 20:43:34 +10:00
										 |  |  |                  dict(release_confirm=True), | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class _defs_gpencil_sculpt: | 
					
						
							| 
									
										
										
										
											2018-08-23 20:16:50 +10:00
										 |  |  |     @staticmethod | 
					
						
							|  |  |  |     def draw_settings_common(context, layout, tool): | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         ob = context.active_object | 
					
						
							|  |  |  |         if ob and ob.mode == 'GPENCIL_SCULPT': | 
					
						
							| 
									
										
										
										
											2018-10-10 11:12:41 +11:00
										 |  |  |             tool_settings = context.tool_settings | 
					
						
							|  |  |  |             settings = tool_settings.gpencil_sculpt | 
					
						
							| 
									
										
										
										
											2018-09-21 22:50:02 +02:00
										 |  |  |             tool = settings.tool | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |             brush = settings.brush | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             layout.prop(brush, "size", slider=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             row = layout.row(align=True) | 
					
						
							|  |  |  |             row.prop(brush, "strength", slider=True) | 
					
						
							|  |  |  |             row.prop(brush, "use_pressure_strength", text="") | 
					
						
							| 
									
										
										
										
											2018-09-21 22:50:02 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-21 23:11:30 +02:00
										 |  |  |             if tool in {'THICKNESS', 'STRENGTH', 'PINCH', 'TWIST'}: | 
					
						
							| 
									
										
										
										
											2018-09-21 22:50:02 +02:00
										 |  |  |                 row.separator() | 
					
						
							|  |  |  |                 row.prop(brush, "direction", expand=True, text="") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def smooth(): | 
					
						
							|  |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             _defs_gpencil_sculpt.draw_settings_common(context, layout, tool) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Smooth", | 
					
						
							|  |  |  |             icon="ops.gpencil.sculpt_smooth", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("gpencil.brush_paint", | 
					
						
							|  |  |  |                  dict(mode='SMOOTH', wait_for_input=False), | 
					
						
							|  |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             draw_settings=draw_settings, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def thickness(): | 
					
						
							|  |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             _defs_gpencil_sculpt.draw_settings_common(context, layout, tool) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Thickness", | 
					
						
							|  |  |  |             icon="ops.gpencil.sculpt_thickness", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("gpencil.brush_paint", | 
					
						
							|  |  |  |                  dict(mode='THICKNESS', wait_for_input=False), | 
					
						
							|  |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             draw_settings=draw_settings, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def strength(): | 
					
						
							|  |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             _defs_gpencil_sculpt.draw_settings_common(context, layout, tool) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Strength", | 
					
						
							|  |  |  |             icon="ops.gpencil.sculpt_strength", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("gpencil.brush_paint", | 
					
						
							|  |  |  |                  dict(mode='STRENGTH', wait_for_input=False), | 
					
						
							|  |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             draw_settings=draw_settings, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def grab(): | 
					
						
							|  |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             _defs_gpencil_sculpt.draw_settings_common(context, layout, tool) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Grab", | 
					
						
							|  |  |  |             icon="ops.gpencil.sculpt_grab", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("gpencil.brush_paint", | 
					
						
							|  |  |  |                  dict(mode='GRAB', wait_for_input=False), | 
					
						
							|  |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             draw_settings=draw_settings, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def push(): | 
					
						
							|  |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             _defs_gpencil_sculpt.draw_settings_common(context, layout, tool) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Push", | 
					
						
							|  |  |  |             icon="ops.gpencil.sculpt_push", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("gpencil.brush_paint", | 
					
						
							|  |  |  |                  dict(mode='PUSH', wait_for_input=False), | 
					
						
							|  |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             draw_settings=draw_settings, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def twist(): | 
					
						
							|  |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             _defs_gpencil_sculpt.draw_settings_common(context, layout, tool) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Twist", | 
					
						
							|  |  |  |             icon="ops.gpencil.sculpt_twist", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("gpencil.brush_paint", | 
					
						
							|  |  |  |                  dict(mode='TWIST', wait_for_input=False), | 
					
						
							|  |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             draw_settings=draw_settings, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def pinch(): | 
					
						
							|  |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             _defs_gpencil_sculpt.draw_settings_common(context, layout, tool) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Pinch", | 
					
						
							|  |  |  |             icon="ops.gpencil.sculpt_pinch", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("gpencil.brush_paint", | 
					
						
							|  |  |  |                  dict(mode='PINCH', wait_for_input=False), | 
					
						
							|  |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             draw_settings=draw_settings, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def randomize(): | 
					
						
							|  |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             _defs_gpencil_sculpt.draw_settings_common(context, layout, tool) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Randomize", | 
					
						
							|  |  |  |             icon="ops.gpencil.sculpt_randomize", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("gpencil.brush_paint", | 
					
						
							|  |  |  |                  dict(mode='RANDOMIZE', wait_for_input=False), | 
					
						
							|  |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             draw_settings=draw_settings, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def clone(): | 
					
						
							|  |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             _defs_gpencil_sculpt.draw_settings_common(context, layout, tool) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Clone", | 
					
						
							|  |  |  |             icon="ops.gpencil.sculpt_clone", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("gpencil.brush_paint", | 
					
						
							|  |  |  |                  dict(mode='CLONE', wait_for_input=False), | 
					
						
							|  |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             draw_settings=draw_settings, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class _defs_gpencil_weight: | 
					
						
							| 
									
										
										
										
											2018-08-23 20:16:50 +10:00
										 |  |  |     @staticmethod | 
					
						
							|  |  |  |     def draw_settings_common(context, layout, tool): | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         ob = context.active_object | 
					
						
							|  |  |  |         if ob and ob.mode == 'GPENCIL_WEIGHT': | 
					
						
							|  |  |  |             settings = context.tool_settings.gpencil_sculpt | 
					
						
							|  |  |  |             brush = settings.brush | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             layout.prop(brush, "size", slider=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             row = layout.row(align=True) | 
					
						
							|  |  |  |             row.prop(brush, "strength", slider=True) | 
					
						
							|  |  |  |             row.prop(brush, "use_pressure_strength", text="") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @ToolDef.from_fn | 
					
						
							|  |  |  |     def paint(): | 
					
						
							|  |  |  |         def draw_settings(context, layout, tool): | 
					
						
							|  |  |  |             _defs_gpencil_weight.draw_settings_common(context, layout, tool) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return dict( | 
					
						
							|  |  |  |             text="Draw", | 
					
						
							|  |  |  |             icon="ops.gpencil.sculpt_weight", | 
					
						
							|  |  |  |             widget=None, | 
					
						
							|  |  |  |             keymap=( | 
					
						
							|  |  |  |                 ("gpencil.brush_paint", | 
					
						
							|  |  |  |                  dict(mode='WEIGHT', wait_for_input=False), | 
					
						
							|  |  |  |                  dict(type='EVT_TWEAK_A', value='ANY')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             draw_settings=draw_settings, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-16 18:41:11 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-27 20:50:05 +02:00
										 |  |  | class TOPBAR_PT_gpencil_materials(Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'HEADER' | 
					
						
							|  |  |  |     bl_label = "Materials" | 
					
						
							|  |  |  |     bl_ui_units_x = 14 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def poll(cls, context): | 
					
						
							|  |  |  |         ob = context.object | 
					
						
							|  |  |  |         return ob and ob.type == 'GPENCIL' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  |         ob = context.object | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ob: | 
					
						
							|  |  |  |             is_sortable = len(ob.material_slots) > 1 | 
					
						
							|  |  |  |             rows = 1 | 
					
						
							|  |  |  |             if (is_sortable): | 
					
						
							| 
									
										
										
										
											2018-09-27 21:11:13 +02:00
										 |  |  |                 rows = 10 | 
					
						
							| 
									
										
										
										
											2018-09-27 20:50:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |             row = layout.row() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             row.template_list("GPENCIL_UL_matslots", "", ob, "material_slots", ob, "active_material_index", rows=rows) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             col = row.column(align=True) | 
					
						
							|  |  |  |             col.menu("GPENCIL_MT_color_specials", icon='DOWNARROW_HLT', text="") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if is_sortable: | 
					
						
							|  |  |  |                 col.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 col.operator("object.material_slot_move", icon='TRIA_UP', text="").direction = 'UP' | 
					
						
							|  |  |  |                 col.operator("object.material_slot_move", icon='TRIA_DOWN', text="").direction = 'DOWN' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 col.separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 sub = col.column(align=True) | 
					
						
							|  |  |  |                 sub.operator("gpencil.color_isolate", icon='LOCKED', text="").affect_visibility = False | 
					
						
							|  |  |  |                 sub.operator("gpencil.color_isolate", icon='HIDE_OFF', text="").affect_visibility = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-16 18:41:11 +02:00
										 |  |  | class IMAGE_PT_tools_active(ToolSelectPanelHelper, Panel): | 
					
						
							|  |  |  |     bl_space_type = 'IMAGE_EDITOR' | 
					
						
							|  |  |  |     bl_region_type = 'TOOLS' | 
					
						
							|  |  |  |     bl_category = "Tools" | 
					
						
							|  |  |  |     bl_label = "Tools"  # not visible | 
					
						
							|  |  |  |     bl_options = {'HIDE_HEADER'} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Satisfy the 'ToolSelectPanelHelper' API. | 
					
						
							| 
									
										
										
										
											2018-07-14 09:02:36 +02:00
										 |  |  |     keymap_prefix = "Image Editor Tool:" | 
					
						
							| 
									
										
										
										
											2018-05-16 18:41:11 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def tools_from_context(cls, context, mode=None): | 
					
						
							|  |  |  |         if mode is None: | 
					
						
							| 
									
										
										
										
											2018-08-17 12:59:24 +02:00
										 |  |  |             if context.space_data is None: | 
					
						
							|  |  |  |                 mode = 'VIEW' | 
					
						
							| 
									
										
										
										
											2018-08-17 13:09:59 +02:00
										 |  |  |             else: | 
					
						
							|  |  |  |                 mode = context.space_data.mode | 
					
						
							| 
									
										
										
										
											2018-05-16 18:41:11 +02:00
										 |  |  |         for tools in (cls._tools[None], cls._tools.get(mode, ())): | 
					
						
							|  |  |  |             for item in tools: | 
					
						
							|  |  |  |                 if not (type(item) is ToolDef) and callable(item): | 
					
						
							|  |  |  |                     yield from item(context) | 
					
						
							|  |  |  |                 else: | 
					
						
							|  |  |  |                     yield item | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def tools_all(cls): | 
					
						
							|  |  |  |         yield from cls._tools.items() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # for reuse | 
					
						
							| 
									
										
										
										
											2018-10-04 12:04:36 +10:00
										 |  |  |     _tools_transform = ( | 
					
						
							|  |  |  |         _defs_image_uv_transform.transform, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-16 18:41:11 +02:00
										 |  |  |     _tools_select = ( | 
					
						
							|  |  |  |         ( | 
					
						
							| 
									
										
										
										
											2018-10-04 12:04:36 +10:00
										 |  |  |             _defs_image_uv_select.border, | 
					
						
							|  |  |  |             _defs_image_uv_select.circle, | 
					
						
							|  |  |  |             _defs_image_uv_select.lasso, | 
					
						
							| 
									
										
										
										
											2018-05-16 18:41:11 +02:00
										 |  |  |         ), | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-21 01:17:15 +12:00
										 |  |  |     _tools_annotate = ( | 
					
						
							|  |  |  |         ( | 
					
						
							| 
									
										
										
										
											2018-08-23 20:25:25 +10:00
										 |  |  |             _defs_annotate_image.scribble, | 
					
						
							|  |  |  |             _defs_annotate_image.line, | 
					
						
							|  |  |  |             _defs_annotate_image.poly, | 
					
						
							|  |  |  |             _defs_annotate_image.eraser, | 
					
						
							| 
									
										
										
										
											2018-08-21 01:17:15 +12:00
										 |  |  |         ), | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-16 18:41:11 +02:00
										 |  |  |     _tools = { | 
					
						
							|  |  |  |         None: [ | 
					
						
							|  |  |  |             # for all modes | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |         'VIEW': [ | 
					
						
							| 
									
										
										
										
											2018-10-04 12:04:36 +10:00
										 |  |  |             _defs_image_generic.cursor, | 
					
						
							| 
									
										
										
										
											2018-05-16 18:41:11 +02:00
										 |  |  |             *_tools_select, | 
					
						
							| 
									
										
										
										
											2018-10-04 12:04:36 +10:00
										 |  |  |             None, | 
					
						
							|  |  |  |             *_tools_transform, | 
					
						
							|  |  |  |             None, | 
					
						
							| 
									
										
										
										
											2018-08-21 01:17:15 +12:00
										 |  |  |             *_tools_annotate, | 
					
						
							| 
									
										
										
										
											2018-10-05 13:07:01 +10:00
										 |  |  |             None, | 
					
						
							|  |  |  |             lambda context: ( | 
					
						
							|  |  |  |                 _defs_image_uv_sculpt.generate_from_brushes(context) | 
					
						
							|  |  |  |                 if _defs_image_generic.poll_uvedit(context) | 
					
						
							|  |  |  |                 else () | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-05-16 18:41:11 +02:00
										 |  |  |         ], | 
					
						
							|  |  |  |         'MASK': [ | 
					
						
							|  |  |  |             None, | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |         'PAINT': [ | 
					
						
							|  |  |  |             _defs_texture_paint.generate_from_brushes, | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  | class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): | 
					
						
							|  |  |  |     bl_space_type = 'VIEW_3D' | 
					
						
							|  |  |  |     bl_region_type = 'TOOLS' | 
					
						
							|  |  |  |     bl_category = "Tools" | 
					
						
							| 
									
										
										
										
											2018-04-24 16:04:07 +02:00
										 |  |  |     bl_label = "Tools"  # not visible | 
					
						
							|  |  |  |     bl_options = {'HIDE_HEADER'} | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Satisfy the 'ToolSelectPanelHelper' API. | 
					
						
							| 
									
										
										
										
											2018-07-14 09:02:36 +02:00
										 |  |  |     keymap_prefix = "3D View Tool:" | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							| 
									
										
										
										
											2018-05-16 18:41:11 +02:00
										 |  |  |     def tools_from_context(cls, context, mode=None): | 
					
						
							|  |  |  |         if mode is None: | 
					
						
							|  |  |  |             mode = context.mode | 
					
						
							|  |  |  |         for tools in (cls._tools[None], cls._tools.get(mode, ())): | 
					
						
							| 
									
										
										
										
											2018-04-29 12:26:00 +02:00
										 |  |  |             for item in tools: | 
					
						
							| 
									
										
										
										
											2018-04-30 13:46:01 +02:00
										 |  |  |                 if not (type(item) is ToolDef) and callable(item): | 
					
						
							| 
									
										
										
										
											2018-04-29 12:26:00 +02:00
										 |  |  |                     yield from item(context) | 
					
						
							|  |  |  |                 else: | 
					
						
							|  |  |  |                     yield item | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  |     @classmethod | 
					
						
							|  |  |  |     def tools_all(cls): | 
					
						
							| 
									
										
										
										
											2018-04-26 14:43:32 +02:00
										 |  |  |         yield from cls._tools.items() | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # for reuse | 
					
						
							|  |  |  |     _tools_transform = ( | 
					
						
							| 
									
										
										
										
											2018-07-03 13:51:11 +02:00
										 |  |  |         _defs_transform.transform, | 
					
						
							|  |  |  |         _defs_transform.translate, | 
					
						
							| 
									
										
										
										
											2018-04-27 13:23:29 +02:00
										 |  |  |         _defs_transform.rotate, | 
					
						
							| 
									
										
										
										
											2018-04-24 09:19:28 +02:00
										 |  |  |         ( | 
					
						
							| 
									
										
										
										
											2018-04-27 13:23:29 +02:00
										 |  |  |             _defs_transform.scale, | 
					
						
							|  |  |  |             _defs_transform.scale_cage, | 
					
						
							| 
									
										
										
										
											2018-04-24 09:19:28 +02:00
										 |  |  |         ), | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-29 16:36:31 +02:00
										 |  |  |     _tools_select = ( | 
					
						
							|  |  |  |         ( | 
					
						
							|  |  |  |             _defs_view3d_select.border, | 
					
						
							|  |  |  |             _defs_view3d_select.circle, | 
					
						
							|  |  |  |             _defs_view3d_select.lasso, | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |     _tools_annotate = ( | 
					
						
							|  |  |  |         ( | 
					
						
							| 
									
										
										
										
											2018-08-23 20:25:25 +10:00
										 |  |  |             _defs_annotate_view3d.scribble, | 
					
						
							|  |  |  |             _defs_annotate_view3d.line, | 
					
						
							|  |  |  |             _defs_annotate_view3d.poly, | 
					
						
							|  |  |  |             _defs_annotate_view3d.eraser, | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         ), | 
					
						
							|  |  |  |         _defs_view3d_generic.ruler, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-25 13:17:48 +02:00
										 |  |  |     _tools_gpencil_select = ( | 
					
						
							|  |  |  |         ( | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |             _defs_gpencil_edit.box_select, | 
					
						
							| 
									
										
										
										
											2018-09-25 13:17:48 +02:00
										 |  |  |             _defs_gpencil_edit.circle_select, | 
					
						
							|  |  |  |             _defs_gpencil_edit.lasso_select, | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  |     _tools = { | 
					
						
							|  |  |  |         None: [ | 
					
						
							| 
									
										
										
										
											2018-08-23 12:12:11 +10:00
										 |  |  |             # Don't use this! because of paint modes. | 
					
						
							|  |  |  |             # _defs_view3d_generic.cursor, | 
					
						
							| 
									
										
										
										
											2017-11-02 23:05:13 +11:00
										 |  |  |             # End group. | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  |         ], | 
					
						
							|  |  |  |         'OBJECT': [ | 
					
						
							| 
									
										
										
										
											2018-08-23 12:12:11 +10:00
										 |  |  |             _defs_view3d_generic.cursor, | 
					
						
							| 
									
										
										
										
											2018-04-29 16:36:31 +02:00
										 |  |  |             *_tools_select, | 
					
						
							|  |  |  |             None, | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  |             *_tools_transform, | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |             None, | 
					
						
							|  |  |  |             *_tools_annotate, | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  |         ], | 
					
						
							|  |  |  |         'POSE': [ | 
					
						
							| 
									
										
										
										
											2018-08-23 12:12:11 +10:00
										 |  |  |             _defs_view3d_generic.cursor, | 
					
						
							| 
									
										
										
										
											2018-04-29 16:36:31 +02:00
										 |  |  |             *_tools_select, | 
					
						
							| 
									
										
										
										
											2018-08-23 12:12:11 +10:00
										 |  |  |             None, | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  |             *_tools_transform, | 
					
						
							| 
									
										
										
										
											2018-05-15 12:40:50 +02:00
										 |  |  |             None, | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |             *_tools_annotate, | 
					
						
							|  |  |  |             None, | 
					
						
							| 
									
										
										
										
											2018-05-15 12:40:50 +02:00
										 |  |  |             ( | 
					
						
							|  |  |  |                 _defs_pose.breakdown, | 
					
						
							|  |  |  |                 _defs_pose.push, | 
					
						
							|  |  |  |                 _defs_pose.relax, | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |             ), | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  |         ], | 
					
						
							|  |  |  |         'EDIT_ARMATURE': [ | 
					
						
							| 
									
										
										
										
											2018-08-23 12:12:11 +10:00
										 |  |  |             _defs_view3d_generic.cursor, | 
					
						
							| 
									
										
										
										
											2018-04-29 16:36:31 +02:00
										 |  |  |             *_tools_select, | 
					
						
							|  |  |  |             None, | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  |             *_tools_transform, | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |             None, | 
					
						
							|  |  |  |             *_tools_annotate, | 
					
						
							| 
									
										
										
										
											2018-04-27 13:23:29 +02:00
										 |  |  |             _defs_edit_armature.roll, | 
					
						
							| 
									
										
										
										
											2018-05-15 10:24:26 +02:00
										 |  |  |             ( | 
					
						
							|  |  |  |                 _defs_edit_armature.bone_size, | 
					
						
							|  |  |  |                 _defs_edit_armature.bone_envelope, | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  |             None, | 
					
						
							| 
									
										
										
										
											2018-04-27 19:16:00 +02:00
										 |  |  |             ( | 
					
						
							|  |  |  |                 _defs_edit_armature.extrude, | 
					
						
							|  |  |  |                 _defs_edit_armature.extrude_cursor, | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |             ), | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  |         ], | 
					
						
							|  |  |  |         'EDIT_MESH': [ | 
					
						
							| 
									
										
										
										
											2018-08-23 12:12:11 +10:00
										 |  |  |             _defs_view3d_generic.cursor, | 
					
						
							| 
									
										
										
										
											2018-04-29 16:36:31 +02:00
										 |  |  |             *_tools_select, | 
					
						
							|  |  |  |             None, | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  |             *_tools_transform, | 
					
						
							|  |  |  |             None, | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |             *_tools_annotate, | 
					
						
							|  |  |  |             None, | 
					
						
							| 
									
										
										
										
											2018-05-10 20:16:22 +02:00
										 |  |  |             _defs_edit_mesh.cube_add, | 
					
						
							|  |  |  |             None, | 
					
						
							| 
									
										
										
										
											2018-04-24 15:32:11 +02:00
										 |  |  |             ( | 
					
						
							| 
									
										
										
										
											2018-04-30 20:40:36 +02:00
										 |  |  |                 _defs_edit_mesh.extrude, | 
					
						
							| 
									
										
										
										
											2018-08-29 22:59:49 +10:00
										 |  |  |                 _defs_edit_mesh.extrude_normals, | 
					
						
							| 
									
										
										
										
											2018-04-30 20:40:36 +02:00
										 |  |  |                 _defs_edit_mesh.extrude_individual, | 
					
						
							|  |  |  |                 _defs_edit_mesh.extrude_cursor, | 
					
						
							| 
									
										
										
										
											2018-04-24 15:32:11 +02:00
										 |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-04-27 13:23:29 +02:00
										 |  |  |             _defs_edit_mesh.inset, | 
					
						
							| 
									
										
										
										
											2018-04-27 22:48:23 +02:00
										 |  |  |             _defs_edit_mesh.bevel, | 
					
						
							| 
									
										
										
										
											2018-04-27 22:59:51 +02:00
										 |  |  |             ( | 
					
						
							|  |  |  |                 _defs_edit_mesh.loopcut_slide, | 
					
						
							|  |  |  |                 _defs_edit_mesh.offset_edge_loops_slide, | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-04-24 15:32:11 +02:00
										 |  |  |             ( | 
					
						
							| 
									
										
										
										
											2018-04-30 20:40:36 +02:00
										 |  |  |                 _defs_edit_mesh.knife, | 
					
						
							|  |  |  |                 _defs_edit_mesh.bisect, | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             _defs_edit_mesh.poly_build, | 
					
						
							|  |  |  |             ( | 
					
						
							|  |  |  |                 _defs_edit_mesh.spin, | 
					
						
							|  |  |  |                 _defs_edit_mesh.spin_duplicate, | 
					
						
							| 
									
										
										
										
											2018-04-24 15:32:11 +02:00
										 |  |  |             ), | 
					
						
							|  |  |  |             ( | 
					
						
							| 
									
										
										
										
											2018-04-27 13:23:29 +02:00
										 |  |  |                 _defs_edit_mesh.vertex_smooth, | 
					
						
							|  |  |  |                 _defs_edit_mesh.vertex_randomize, | 
					
						
							| 
									
										
										
										
											2018-04-24 15:32:11 +02:00
										 |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-04-30 20:40:36 +02:00
										 |  |  |             ( | 
					
						
							|  |  |  |                 _defs_edit_mesh.edge_slide, | 
					
						
							|  |  |  |                 _defs_edit_mesh.vert_slide, | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-04-24 15:32:11 +02:00
										 |  |  |             ( | 
					
						
							| 
									
										
										
										
											2018-04-27 13:23:29 +02:00
										 |  |  |                 _defs_edit_mesh.shrink_fatten, | 
					
						
							|  |  |  |                 _defs_edit_mesh.push_pull, | 
					
						
							| 
									
										
										
										
											2018-04-24 15:32:11 +02:00
										 |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-08-28 20:41:48 +10:00
										 |  |  |             ( | 
					
						
							|  |  |  |                 _defs_edit_mesh.shear, | 
					
						
							|  |  |  |                 _defs_edit_mesh.tosphere, | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2017-11-02 23:05:13 +11:00
										 |  |  |             ( | 
					
						
							| 
									
										
										
										
											2018-04-30 20:40:36 +02:00
										 |  |  |                 _defs_edit_mesh.rip_region, | 
					
						
							|  |  |  |                 _defs_edit_mesh.rip_edge, | 
					
						
							| 
									
										
										
										
											2018-04-26 07:31:39 +02:00
										 |  |  |             ), | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  |         ], | 
					
						
							|  |  |  |         'EDIT_CURVE': [ | 
					
						
							| 
									
										
										
										
											2018-08-23 12:12:11 +10:00
										 |  |  |             _defs_view3d_generic.cursor, | 
					
						
							| 
									
										
										
										
											2018-04-29 16:36:31 +02:00
										 |  |  |             *_tools_select, | 
					
						
							|  |  |  |             None, | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  |             *_tools_transform, | 
					
						
							|  |  |  |             None, | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |             *_tools_annotate, | 
					
						
							|  |  |  |             None, | 
					
						
							| 
									
										
										
										
											2018-04-27 13:23:29 +02:00
										 |  |  |             _defs_edit_curve.draw, | 
					
						
							| 
									
										
										
										
											2018-08-29 15:14:41 +10:00
										 |  |  |             ( | 
					
						
							|  |  |  |                 _defs_edit_curve.extrude, | 
					
						
							|  |  |  |                 _defs_edit_curve.extrude_cursor, | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  |         ], | 
					
						
							| 
									
										
										
										
											2018-05-28 18:05:21 +02:00
										 |  |  |         'PARTICLE': [ | 
					
						
							| 
									
										
										
										
											2018-08-23 12:12:11 +10:00
										 |  |  |             _defs_view3d_generic.cursor, | 
					
						
							| 
									
										
										
										
											2018-08-02 17:41:11 +10:00
										 |  |  |             _defs_particle.generate_from_brushes, | 
					
						
							| 
									
										
										
										
											2018-05-28 18:05:21 +02:00
										 |  |  |         ], | 
					
						
							| 
									
										
										
										
											2018-04-29 14:31:00 +02:00
										 |  |  |         'SCULPT': [ | 
					
						
							|  |  |  |             _defs_sculpt.generate_from_brushes, | 
					
						
							| 
									
										
										
										
											2018-08-23 12:56:02 +10:00
										 |  |  |             None, | 
					
						
							|  |  |  |             _defs_sculpt.hide_border, | 
					
						
							|  |  |  |             _defs_sculpt.mask_border, | 
					
						
							| 
									
										
										
										
											2018-04-29 14:31:00 +02:00
										 |  |  |         ], | 
					
						
							| 
									
										
										
										
											2018-04-30 16:43:13 +02:00
										 |  |  |         'PAINT_TEXTURE': [ | 
					
						
							|  |  |  |             _defs_texture_paint.generate_from_brushes, | 
					
						
							|  |  |  |         ], | 
					
						
							| 
									
										
										
										
											2018-04-30 15:21:04 +02:00
										 |  |  |         'PAINT_VERTEX': [ | 
					
						
							| 
									
										
										
										
											2018-04-30 16:06:51 +02:00
										 |  |  |             _defs_vertex_paint.generate_from_brushes, | 
					
						
							| 
									
										
										
										
											2018-08-29 16:21:48 +10:00
										 |  |  |             None, | 
					
						
							|  |  |  |             lambda context: ( | 
					
						
							|  |  |  |                 VIEW3D_PT_tools_active._tools_select | 
					
						
							|  |  |  |                 if _defs_vertex_paint.poll_select_mask(context) | 
					
						
							|  |  |  |                 else () | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-04-30 16:06:51 +02:00
										 |  |  |         ], | 
					
						
							|  |  |  |         'PAINT_WEIGHT': [ | 
					
						
							| 
									
										
										
										
											2018-08-23 12:12:11 +10:00
										 |  |  |             # TODO, check for mixed pose mode | 
					
						
							|  |  |  |             _defs_view3d_generic.cursor, | 
					
						
							| 
									
										
										
										
											2018-04-30 16:59:16 +02:00
										 |  |  |             _defs_weight_paint.generate_from_brushes, | 
					
						
							| 
									
										
										
										
											2018-05-01 12:20:53 +02:00
										 |  |  |             None, | 
					
						
							|  |  |  |             _defs_weight_paint.sample_weight, | 
					
						
							|  |  |  |             _defs_weight_paint.sample_weight_group, | 
					
						
							|  |  |  |             None, | 
					
						
							| 
									
										
										
										
											2018-08-29 16:21:48 +10:00
										 |  |  |             lambda context: ( | 
					
						
							|  |  |  |                 VIEW3D_PT_tools_active._tools_select | 
					
						
							|  |  |  |                 if _defs_weight_paint.poll_select_mask(context) | 
					
						
							|  |  |  |                 else () | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2018-05-01 12:20:53 +02:00
										 |  |  |             None, | 
					
						
							| 
									
										
										
										
											2018-05-01 12:46:25 +02:00
										 |  |  |             _defs_weight_paint.gradient, | 
					
						
							| 
									
										
										
										
											2018-04-30 15:21:04 +02:00
										 |  |  |         ], | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         'GPENCIL_PAINT': [ | 
					
						
							|  |  |  |             _defs_gpencil_paint.generate_from_brushes, | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |         'GPENCIL_EDIT': [ | 
					
						
							| 
									
										
										
										
											2018-08-23 12:12:11 +10:00
										 |  |  |             _defs_view3d_generic.cursor, | 
					
						
							| 
									
										
										
										
											2018-10-05 10:27:04 +10:00
										 |  |  |             _defs_gpencil_edit.box_select, | 
					
						
							| 
									
										
										
										
											2018-09-21 10:28:51 +02:00
										 |  |  |             _defs_gpencil_edit.circle_select, | 
					
						
							|  |  |  |             _defs_gpencil_edit.lasso_select, | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |             None, | 
					
						
							|  |  |  |             _defs_gpencil_edit.bend, | 
					
						
							|  |  |  |             _defs_gpencil_edit.mirror, | 
					
						
							|  |  |  |             _defs_gpencil_edit.shear, | 
					
						
							|  |  |  |             _defs_gpencil_edit.tosphere, | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |         'GPENCIL_SCULPT': [ | 
					
						
							|  |  |  |             _defs_gpencil_sculpt.smooth, | 
					
						
							|  |  |  |             _defs_gpencil_sculpt.thickness, | 
					
						
							|  |  |  |             _defs_gpencil_sculpt.strength, | 
					
						
							|  |  |  |             _defs_gpencil_sculpt.grab, | 
					
						
							|  |  |  |             _defs_gpencil_sculpt.push, | 
					
						
							|  |  |  |             _defs_gpencil_sculpt.twist, | 
					
						
							|  |  |  |             _defs_gpencil_sculpt.pinch, | 
					
						
							|  |  |  |             _defs_gpencil_sculpt.randomize, | 
					
						
							|  |  |  |             _defs_gpencil_sculpt.clone, | 
					
						
							| 
									
										
										
										
											2018-09-25 13:17:48 +02:00
										 |  |  |             None, | 
					
						
							|  |  |  |             *_tools_gpencil_select, | 
					
						
							| 
									
										
										
										
											2018-07-31 10:22:19 +02:00
										 |  |  |         ], | 
					
						
							|  |  |  |         'GPENCIL_WEIGHT': [ | 
					
						
							|  |  |  |             _defs_gpencil_weight.paint, | 
					
						
							|  |  |  |         ], | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | classes = ( | 
					
						
							| 
									
										
										
										
											2018-05-16 18:41:11 +02:00
										 |  |  |     IMAGE_PT_tools_active, | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  |     VIEW3D_PT_tools_active, | 
					
						
							| 
									
										
										
										
											2018-09-27 20:50:05 +02:00
										 |  |  |     TOPBAR_PT_gpencil_materials, | 
					
						
							| 
									
										
										
										
											2017-10-21 16:19:48 +11:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__":  # only for live edit. | 
					
						
							|  |  |  |     from bpy.utils import register_class | 
					
						
							|  |  |  |     for cls in classes: | 
					
						
							|  |  |  |         register_class(cls) |