239 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			239 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# ##### 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.
 | 
						|
 | 
						|
from bpy.types import Panel
 | 
						|
 | 
						|
from .space_toolsystem_common import (
 | 
						|
    ToolSelectPanelHelper,
 | 
						|
)
 | 
						|
 | 
						|
 | 
						|
class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel):
 | 
						|
    bl_space_type = 'VIEW_3D'
 | 
						|
    bl_region_type = 'TOOLS'
 | 
						|
    bl_category = "Tools"
 | 
						|
    bl_label = "Tools"  # not visible
 | 
						|
    bl_options = {'HIDE_HEADER'}
 | 
						|
 | 
						|
    # Satisfy the 'ToolSelectPanelHelper' API.
 | 
						|
    keymap_prefix = "3D View Tool: "
 | 
						|
 | 
						|
    @classmethod
 | 
						|
    def tools_from_context(cls, context):
 | 
						|
        return (cls._tools[None], cls._tools.get(context.mode, ()))
 | 
						|
 | 
						|
    @classmethod
 | 
						|
    def tools_all(cls):
 | 
						|
        return [t for t_list in cls._tools.values() for t in t_list]
 | 
						|
 | 
						|
    # Internal Data
 | 
						|
 | 
						|
    # for reuse
 | 
						|
    _tools_transform = (
 | 
						|
        ("Translate", "ops.transform.translate", "TRANSFORM_WGT_manipulator",
 | 
						|
         (("transform.translate", dict(release_confirm=True), dict(type='EVT_TWEAK_A', value='ANY')),)),
 | 
						|
        ("Rotate", "ops.transform.rotate", "TRANSFORM_WGT_manipulator",
 | 
						|
         (("transform.rotate", dict(release_confirm=True), dict(type='EVT_TWEAK_A', value='ANY')),)),
 | 
						|
        (
 | 
						|
            ("Scale", "ops.transform.resize", "TRANSFORM_WGT_manipulator",
 | 
						|
             (("transform.resize", dict(release_confirm=True), dict(type='EVT_TWEAK_A', value='ANY')),)),
 | 
						|
            ("Scale Cage", "ops.transform.resize.cage", "VIEW3D_WGT_xform_cage", None),
 | 
						|
        ),
 | 
						|
        None,
 | 
						|
        ("Ruler/Protractor", "ops.view3d.ruler", "VIEW3D_WGT_ruler",
 | 
						|
         (("view3d.ruler_add", dict(), dict(type='EVT_TWEAK_A', value='ANY')),)),
 | 
						|
 | 
						|
        # DEBUGGING ONLY
 | 
						|
        # ("Pixel Test", "tool_icon.pixeltest", None, (("wm.splash", dict(), dict(type='ACTIONMOUSE', value='PRESS')),)),
 | 
						|
    )
 | 
						|
 | 
						|
    _tools = {
 | 
						|
        None: [
 | 
						|
            ("Cursor", "ops.generic.cursor", None,
 | 
						|
             (("view3d.cursor3d", dict(), dict(type='ACTIONMOUSE', value='CLICK')),)),
 | 
						|
 | 
						|
            # 'Select' Group
 | 
						|
            (
 | 
						|
                ("Select Border", "ops.generic.select_border", None, (
 | 
						|
                    ("view3d.select_border", dict(deselect=False), dict(type='EVT_TWEAK_A', value='ANY')),
 | 
						|
                    ("view3d.select_border", dict(deselect=True), dict(type='EVT_TWEAK_A', value='ANY', ctrl=True)),
 | 
						|
                )),
 | 
						|
                ("Select Circle", "ops.generic.select_circle", None, (
 | 
						|
                    ("view3d.select_circle", dict(deselect=False), dict(type='ACTIONMOUSE', value='PRESS')),
 | 
						|
                    ("view3d.select_circle", dict(deselect=True), dict(type='ACTIONMOUSE', value='PRESS', ctrl=True)),
 | 
						|
                )),
 | 
						|
                ("Select Lasso", "ops.generic.select_lasso", None, (
 | 
						|
                    ("view3d.select_lasso",
 | 
						|
                     dict(deselect=False), dict(type='EVT_TWEAK_A', value='ANY')),
 | 
						|
                    ("view3d.select_lasso",
 | 
						|
                     dict(deselect=True), dict(type='EVT_TWEAK_A', value='ANY', ctrl=True)),
 | 
						|
                )),
 | 
						|
            ),
 | 
						|
            # End group.
 | 
						|
        ],
 | 
						|
        'OBJECT': [
 | 
						|
            *_tools_transform,
 | 
						|
        ],
 | 
						|
        'POSE': [
 | 
						|
            *_tools_transform,
 | 
						|
        ],
 | 
						|
        'EDIT_ARMATURE': [
 | 
						|
            *_tools_transform,
 | 
						|
            ("Roll", None, None, (
 | 
						|
                ("transform.transform",
 | 
						|
                 dict(release_confirm=True, mode='BONE_ROLL'),
 | 
						|
                 dict(type='EVT_TWEAK_A', value='ANY')),
 | 
						|
            )),
 | 
						|
            None,
 | 
						|
            ("Extrude Cursor", None, None,
 | 
						|
             (("armature.click_extrude", dict(), dict(type='ACTIONMOUSE', value='PRESS')),)),
 | 
						|
        ],
 | 
						|
        'EDIT_MESH': [
 | 
						|
            *_tools_transform,
 | 
						|
            None,
 | 
						|
            (
 | 
						|
                ("Rip Region", "ops.mesh.rip", None, (
 | 
						|
                    ("mesh.rip_move", dict(),
 | 
						|
                     dict(type='ACTIONMOUSE', value='PRESS')),
 | 
						|
                )),
 | 
						|
                ("Rip Edge", "ops.mesh.rip_edge", None, (
 | 
						|
                    ("mesh.rip_edge_edge_move", dict(),
 | 
						|
                     dict(type='ACTIONMOUSE', value='PRESS')),
 | 
						|
                )),
 | 
						|
            ),
 | 
						|
 | 
						|
            ("Poly Build", "ops.mesh.polybuild_hover", None, (
 | 
						|
                ("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)),
 | 
						|
                ("mesh.polybuild_hover", dict(use_boundary=False), dict(type='MOUSEMOVE', value='ANY', alt=True)),
 | 
						|
                ("mesh.polybuild_hover", dict(use_boundary=True), dict(type='MOUSEMOVE', value='ANY', any=True)),
 | 
						|
            )),
 | 
						|
 | 
						|
 | 
						|
            # 'Slide' Group
 | 
						|
            (
 | 
						|
                ("Edge Slide", "ops.transform.edge_slide", None, (
 | 
						|
                    ("transform.edge_slide", dict(release_confirm=True),
 | 
						|
                     dict(type='ACTIONMOUSE', value='PRESS')),
 | 
						|
                )),
 | 
						|
                ("Vertex Slide", "ops.transform.edge_slide", None, (
 | 
						|
                    ("transform.vert_slide", dict(release_confirm=True),
 | 
						|
                     dict(type='ACTIONMOUSE', value='PRESS')),
 | 
						|
                )),
 | 
						|
            ),
 | 
						|
            # End group.
 | 
						|
 | 
						|
            (
 | 
						|
                ("Spin", "ops.mesh.spin", None, (
 | 
						|
                    ("mesh.spin", dict(),
 | 
						|
                     dict(type='ACTIONMOUSE', value='PRESS')),
 | 
						|
                )),
 | 
						|
                ("Spin (Duplicate)", "ops.mesh.spin.duplicate", None, (
 | 
						|
                    ("mesh.spin", dict(dupli=True),
 | 
						|
                     dict(type='ACTIONMOUSE', value='PRESS')),
 | 
						|
                )),
 | 
						|
            ),
 | 
						|
 | 
						|
 | 
						|
            ("Inset Faces", "ops.mesh.inset", None, (
 | 
						|
                ("mesh.inset", dict(),
 | 
						|
                 dict(type='ACTIONMOUSE', value='PRESS')),
 | 
						|
            )),
 | 
						|
 | 
						|
            (
 | 
						|
                ("Extrude Region", "ops.view3d.edit_mesh_extrude", None, (
 | 
						|
                    ("view3d.edit_mesh_extrude", dict(),
 | 
						|
                     dict(type='ACTIONMOUSE', value='PRESS')),
 | 
						|
                )),
 | 
						|
                ("Extrude Individual", "ops.view3d.edit_mesh_extrude_individual", None, (
 | 
						|
                    ("mesh.extrude_faces_move", dict(),
 | 
						|
                     dict(type='ACTIONMOUSE', value='PRESS')),
 | 
						|
                )),
 | 
						|
            ),
 | 
						|
 | 
						|
            (
 | 
						|
                ("Randomize", "ops.transform.vertex_random", None, (
 | 
						|
                    ("transform.vertex_random", dict(),
 | 
						|
                     dict(type='ACTIONMOUSE', value='PRESS')),
 | 
						|
                )),
 | 
						|
                ("Smooth", "ops.mesh.vertices_smooth", None, (
 | 
						|
                    ("mesh.vertices_smooth", dict(),
 | 
						|
                     dict(type='ACTIONMOUSE', value='PRESS')),
 | 
						|
                )),
 | 
						|
            ),
 | 
						|
 | 
						|
            (
 | 
						|
                ("Shrink/Fatten", "ops.transform.shrink_fatten", None, (
 | 
						|
                    ("transform.shrink_fatten", dict(release_confirm=True),
 | 
						|
                     dict(type='ACTIONMOUSE', value='PRESS')),
 | 
						|
                )),
 | 
						|
                ("Push/Pull", "ops.transform.push_pull", None, (
 | 
						|
                    ("transform.push_pull", dict(release_confirm=True),
 | 
						|
                     dict(type='ACTIONMOUSE', value='PRESS')),
 | 
						|
                )),
 | 
						|
            ),
 | 
						|
 | 
						|
            # Knife Group
 | 
						|
            (
 | 
						|
                ("Knife", "ops.mesh.knife_tool", None, (
 | 
						|
                    ("mesh.knife_tool",
 | 
						|
                     dict(wait_for_input=False, use_occlude_geometry=True, only_selected=False),
 | 
						|
                     dict(type='ACTIONMOUSE', value='PRESS')),)),
 | 
						|
                None,
 | 
						|
                ("Bisect", "ops.mesh.bisect", None, (
 | 
						|
                    ("mesh.bisect",
 | 
						|
                     dict(),
 | 
						|
                     dict(type='EVT_TWEAK_A', value='ANY')),)),
 | 
						|
            ),
 | 
						|
            # End group.
 | 
						|
            ("Extrude Cursor", None, None,
 | 
						|
             (("mesh.dupli_extrude_cursor", dict(), dict(type='ACTIONMOUSE', value='PRESS')),)),
 | 
						|
        ],
 | 
						|
        'EDIT_CURVE': [
 | 
						|
            *_tools_transform,
 | 
						|
            None,
 | 
						|
            ("Draw", None, None,
 | 
						|
             (("curve.draw", dict(wait_for_input=False), dict(type='ACTIONMOUSE', value='PRESS')),)),
 | 
						|
            ("Extrude Cursor", None, None,
 | 
						|
             (("curve.vertex_add", dict(), dict(type='ACTIONMOUSE', value='PRESS')),)),
 | 
						|
        ],
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
classes = (
 | 
						|
    VIEW3D_PT_tools_active,
 | 
						|
)
 | 
						|
 | 
						|
if __name__ == "__main__":  # only for live edit.
 | 
						|
    from bpy.utils import register_class
 | 
						|
    for cls in classes:
 | 
						|
        register_class(cls)
 |