forked from bartvdbraak/blender
28f0f2d048
Thanks to Willian for integrating the webbrowser module. Some of the URLs (Python reference, Release notes) will need to be updated upon release. These are contained in http://www.blender3d.org/Help/index.php
442 lines
13 KiB
Python
442 lines
13 KiB
Python
#!BPY
|
|
|
|
""" Registration info for Blender menus:
|
|
Name: 'Hotkey Reference'
|
|
Blender: 232
|
|
Group: 'Help'
|
|
Tip: 'All the hotkeys'
|
|
"""
|
|
# $Id$
|
|
#------------------------
|
|
# Hotkeys script
|
|
# jm soler (2003)
|
|
# -----------------------
|
|
# Page officielle :
|
|
# http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_hotkeyscript.htm
|
|
# Communiquer les problemes et les erreurs sur:
|
|
# http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender
|
|
#---------------------------------------------
|
|
# ce script est proposé sous licence GPL pour etre associe
|
|
# a la distribution de Blender 2.33 et suivant
|
|
# --------------------------------------------------------------------------
|
|
# this script is released under GPL licence
|
|
# for the Blender 2.33 scripts package
|
|
# --------------------------------------------------------------------------
|
|
# ***** BEGIN GPL LICENSE BLOCK *****
|
|
#
|
|
# Copyright (C) 2003, 2004: Jean-Michel Soler
|
|
#
|
|
# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
#
|
|
# ***** END GPL LICENCE BLOCK *****
|
|
# --------------------------------------------------------------------------
|
|
|
|
import Blender
|
|
from Blender.Draw import *
|
|
from Blender.BGL import *
|
|
|
|
hotkeys={
|
|
'Specials 1 ':[
|
|
[',', 'Set Bounding Box rotation scaling pivot'],
|
|
['.', 'Set 3D cursor as rotation scaling pivot'] ,
|
|
['~', 'Display all layers'] ,
|
|
['Shift-~', 'Display all/previous layers'] ,
|
|
['TAB', 'Enter/exit edit mode'] ,
|
|
['TAB', 'Edit Mode and Numerical Edit (see N key) : move to next input value'],
|
|
['TAB', 'Sequencer: Edit meta strip'] ,
|
|
['CTRL-TAB', 'Enter/exit pose mode']
|
|
],
|
|
|
|
'Specials 2 ':[
|
|
['F1', 'Open File'],
|
|
['F2', 'Save File'],
|
|
['F3', 'Save image'],
|
|
['F4', 'Logic window (may change)'],
|
|
['F5', 'Material window'],
|
|
['F6', 'Texture window'],
|
|
['F7', 'Object window'],
|
|
['F8', 'World window'],
|
|
['F9', 'Edit Mode window'],
|
|
['F10', 'Render Window'],
|
|
['F11', 'Recall the last rendered image'],
|
|
['F12', 'Render current Scene'],
|
|
['Shift-F1', 'Library Data Select'],
|
|
['Shift-F4', 'Data Select '],
|
|
['Shift-F5', '3D window'],
|
|
['Shift-F6', 'IPO window'],
|
|
['Shift-F8', 'Video Sequencer window'],
|
|
['Shift-F9', 'OOP window'],
|
|
['Shift-F10', 'Image Window']
|
|
] ,
|
|
|
|
'Numbers ':[
|
|
['1..2..0-=', 'Show layer 1..2..12'] ,
|
|
['ALT-1..2..0', 'Show layer 11..12..20'] ,
|
|
['SHIFT-1..2..0-=', 'Toggle layer 1..2..12'] ,
|
|
['SHIFT-ALT-...', 'Toggle layer 11..12..20'] ],
|
|
|
|
'Numpad ':[
|
|
['Numpad DEL', 'Zoom on object'] ,
|
|
['Numpad /', 'Local view on object (hide others)'] ,
|
|
['Numpad *', "Rotate view to object's local axes"] ,
|
|
['Numpad +', 'Zoom in (works everywhere)'] ,
|
|
['Numpad +', 'Proportional vertex edit mode: Increase range of influence'] ,
|
|
['Numpad -', 'Zoom out (works everywhere)'] ,
|
|
['Numpad -', 'Proportional vertex edit mode: Decrease range of influence'] ,
|
|
['Numpad INS', 'Set Camera view'] ,
|
|
['CTRL-Numpad INS', 'Set active object as camera'] ,
|
|
['ALT-Numbad INS', 'Restore old camera'] ,
|
|
['Numpad 1', 'Front view'] ,
|
|
['CTRL-Numpad 1', 'Back view'] ,
|
|
['Numpad 3', 'Right-Side view'] ,
|
|
['CTRL-Numpad 3', 'Left-Side view'] ,
|
|
['Numpad 7', 'Top view'] ,
|
|
['CTRL-Numpad 7', 'Bottom view '] ,
|
|
['Numpad 5', 'Toggle orthogonal // perspective view'] ,
|
|
['Numpad 9', 'Redraw view'] ,
|
|
['Numpad 2', 'Rotate view left'] ,
|
|
['Numpad 6', 'Rotate view right'] ,
|
|
['Numpad 8', 'Rotate view up'] ,
|
|
['Numpad 2', 'Rotate view down'] ],
|
|
|
|
'Arrows ':[
|
|
['PgUp', 'IPO: Select next keyframe'] ,
|
|
['CTRL-PgUp', 'IPO: Select and jump to next keyframe'] ,
|
|
['PgDn', 'IPO: Select previous keyframe'] ,
|
|
['CTRL-PgDn', 'IPO: Select and jump to previous keyframe'] ,
|
|
['LEFT', 'One frame backwards'] ,
|
|
['RIGHT', 'One frame forwards'] ,
|
|
['DOWN', '10 frames backwards'] ,
|
|
['UP', '10 frames forwards'] ],
|
|
|
|
'Letters ':[ {"A":[
|
|
['A', 'Select all / Deselect all'] ,
|
|
['ALT-A', 'Animate current window'] ,
|
|
['CTRL-A', "Apply object's size/rotation to object data"] ,
|
|
['SHIFT-A', 'Sequencer: ADD menu'] ,
|
|
['SHIFT-ALT-A', 'Animate all windows'] ,
|
|
['SHIFT-CTRL-A', 'Apply lattice / Make dupliverts real']] ,
|
|
|
|
"B":[
|
|
['B', 'Border select'] ,
|
|
['BB', 'Circle select'] ,
|
|
['SHIFT-B', 'Set render border'] ],
|
|
|
|
"C":[
|
|
['C', 'Center view on cursor'] ,
|
|
['C', 'Sequencer: Change images'] ,
|
|
['C', 'IPO: Snap current frame to selected key'] ,
|
|
['ALT-C', 'Convert menu'] ,
|
|
['CTRL-C', 'Copy menu (Copy properties of active to selected objects)'] ,
|
|
['SHIFT-C', 'Center and zoom view on selected objects']] ,
|
|
|
|
"D":[
|
|
['D', 'Set 3d draw mode'] ,
|
|
['ALT-D', 'Create new instance of object'] ,
|
|
['CTRL-D', 'Display alpha of image texture as wire'] ,
|
|
['SHIFT-D', 'Create full copy of object'] ],
|
|
|
|
"E":[
|
|
['E', 'Extrude'],
|
|
['EX', 'Extrude along X axis'],
|
|
['EY', 'Extrude along Y axis'],
|
|
['EZ', 'Extrude along Z axis'],
|
|
['ALT-E', 'Edit mode: exit edit mode'],] ,
|
|
|
|
"F":[
|
|
['F', 'Edit mode: Make edge/face'] ,
|
|
['F', 'Sequencer: Set Filter Y'] ,
|
|
['F', 'Faceselect mode'] ,
|
|
['ALT-F', 'Beautify fill'] ,
|
|
['CTRL-F', 'Sort faces in Z direction'] ,
|
|
['CTRL-F', 'Edit mode: Flip triangle edges'] ,
|
|
['SHIFT-F', 'Edit mode: Fill with triangles']] ,
|
|
|
|
"G":[
|
|
['G', 'Grab (move)'] ,
|
|
['ALT-G', 'Clear location'] ,
|
|
['SHIFT-ALT-G', 'Remove selected objects from group'] ,
|
|
['CTRL-G', 'Add selected objects to group'] ,
|
|
['SHIFT-G', 'Group menu'] ],
|
|
|
|
"H":[
|
|
['H', 'Hide selected vertices/faces'] ,
|
|
['H', 'Curves: Set handle type'] ,
|
|
['ALT-H', 'Reveal vertices'] ,
|
|
['CTRL-H', 'Curves: Automatic handle calculation'] ,
|
|
['SHIFT-H', 'Hide deselected vertices'] ,
|
|
['SHIFT-H', 'Curves: Set handle type']] ,
|
|
|
|
"I":[
|
|
['I', 'Keyframe menu'] ],
|
|
|
|
"J":[
|
|
['J', 'Mesh: Join all adjacent triangles to quads'] ,
|
|
['J', 'Swap render page of render window'] ,
|
|
['CTRL-J', 'Join selected objects'] ,
|
|
['CTRL-J', 'Nurbs: Add segment'] ,
|
|
['CTRL-J', 'IPO: Join keyframes menu'],
|
|
['ALT-J', 'Edit Mode: convert quads to triangles']
|
|
],
|
|
|
|
"K":[
|
|
['K', '3d window: Show keyframe positions'] ,
|
|
['K', 'IPO: Show keyframe positions'] ,
|
|
['K', 'Nurbs: Print knots'] ,
|
|
['CTRL-K', 'Make skeleton from armature'] ,
|
|
['SHIFT-K', 'Show and select all keyframes for object'] ,
|
|
['SHIFT-K', 'Edit: Knife Mode select'],
|
|
['SHIFT-K', 'Faceselect: Clear vertexcolours'],
|
|
] ,
|
|
|
|
"L":[
|
|
['L', 'Make local menu'] ,
|
|
['L', 'Edit mode: Select linked vertices (near mouse pointer)'] ,
|
|
['L', 'OOPS window: Select linked objects'] ,
|
|
['CTRL-L', 'Make links menu'] ,
|
|
['SHIFT-L', 'Select links menu'] ],
|
|
|
|
"M":[
|
|
['M', 'Move object to different layer'] ,
|
|
['M', 'Sequencer: Make meta strip (group) from selected strips'],
|
|
['ALT-M', 'Edit Mode: Merge vertices'] ],
|
|
|
|
"N":[
|
|
['N', 'Numeric input menu (Size/Rot/Loc)'] ,
|
|
['N', 'OOPS window: Rename object/linked objects'] ,
|
|
['CTRL-N', 'Armature: Recalculate bone roll angles'] ,
|
|
['CTRL-N', 'Recalculate normals to outside'] ,
|
|
['CTRL-ALT-N', 'Recalculate normals to inside'] ],
|
|
|
|
"O":[
|
|
['O', 'Edit mode: Toggle proportional vertex editing'] ,
|
|
['ALT-O', 'Clear object origin'] ,
|
|
['CTRL-O', 'Revert current file to last saved'] ,
|
|
['SHIFT-O', 'Proportional vertex edit mode: Toggle smooth/steep falloff'] ],
|
|
|
|
"P":[
|
|
['P', 'Start realtime engine'] ,
|
|
['P', 'Edit mode: Seperate vertices to new object'] ,
|
|
['ALT-P', 'Clear parent relationship'] ,
|
|
['CTRL-P', 'Make active object parent of selected object'] ,
|
|
['CTRL-SHIFT-P', 'Make active object parent of selected object without inverse'] ,
|
|
['CTRL-P', 'Edit mode: Make active vertex parent of selected object'] ],
|
|
|
|
"Q":[['Q', 'Quit'] ],
|
|
|
|
"R":[
|
|
['R', 'Rotate'] ,
|
|
['R', 'IPO: Record mouse movement as IPO curve'] ,
|
|
['RX', 'Rotate around X axis'] ,
|
|
['RXX', "Rotate around object's local X axis"] ,
|
|
['RY', 'Rotate around Y axis'] ,
|
|
['RYY', "Rotate around object's local Y axis"] ,
|
|
['RZ', 'Rotate around Z axis'] ,
|
|
['RZZ', "Rotate around object's local Z axis"] ,
|
|
['ALT-R', 'Clear object rotation'] ,
|
|
['SHIFT-R', 'Nurbs: Select row'],
|
|
['CTRL-R', 'Edit Mode: Knife, cut selected edges, accept left mouse/ cancel right mouse'],
|
|
['SHIT-R', 'Edit Mode: loop Selection']],
|
|
|
|
"S":[
|
|
['S', 'Scale'] ,
|
|
['SX', 'Flip around X axis'] ,
|
|
['SY', 'Flip around Y axis'] ,
|
|
['SZ', 'Flip around Z axis'] ,
|
|
['SXX', 'Flip around X axis and show axis'] ,
|
|
['SYY', 'Flip around Y axis and show axis'] ,
|
|
['SZZ', 'Flip around Z axis and show axis'] ,
|
|
['ALT-S', 'Edit mode: Shrink/fatten (Scale along vertex normals)'] ,
|
|
['ALT-S', 'Clear object size'] ,
|
|
['CTRL-S', 'Edit mode: Shear'] ,
|
|
['SHIFT-S', 'Cursor/Grid snap menu'] ],
|
|
|
|
"T":[
|
|
['T', 'Sequencer: Touch and print selected movies'] ,
|
|
['T', 'Adjust texture space'] ,
|
|
['T', 'Edit mode: Flip 3d curve'] ,
|
|
['T', 'IPO: Change IPO type'] ,
|
|
['ALT-T', 'Clear tracking of object'] ,
|
|
['CTRL-T', 'Make selected object track active object'] ,
|
|
['CTRL-T', 'Mesh: Convert to triangles'] ,
|
|
['CTRL-ALT-T', 'Blenchmark'] ],
|
|
|
|
"U":[
|
|
['U', 'Make single user menu'] ,
|
|
['U', 'Edit mode: Reload object data from before entering edit mode'] ,
|
|
['U', 'Faceselect mode: Automatic UV calculation menu'] ,
|
|
['U', 'Vertex-/Weightpaint mode: Undo'] ,
|
|
['CTRL-U', 'Save current state as user default'],
|
|
['SHIFT-U', 'EditMode : Redo Menu'],
|
|
['ALT-U', 'Edit Mode: Undo Menu']
|
|
],
|
|
|
|
"V":[
|
|
['V', 'Curves/Nurbs: Vector handle'] ,
|
|
['V', 'Vertexpaint mode'] ,
|
|
['ALT-V', "Scale object to match image texture's aspect ratio"] ,
|
|
['SHIFT-V', 'Edit mode: Align view to selected vertices'] ],
|
|
|
|
"W":[
|
|
['W', 'Boolean operations menu'] ,
|
|
['W', 'Edit mode: Specials menu'] ,
|
|
['CTRL-W', 'Save current file'] ,
|
|
['CTRL-W', 'Nurbs: Switch direction'] ,
|
|
['SHIFT-W', 'Warp/bend selected vertices around cursor'] ] ,
|
|
|
|
"X":[
|
|
['X', 'Delete menu'] ,
|
|
['CTRL-X', 'Restore default state (Erase all)'] ],
|
|
|
|
"Y":[
|
|
['Y', 'Mesh: Split selected vertices/faces from the rest'] ],
|
|
|
|
"Z":[
|
|
['Z', 'Switch 3d draw type : solide/ wireframe (see also D)'],
|
|
['Alt-Z', 'Switch 3d draw type : solid / textured (see also D)'],
|
|
['Shift-Z', 'Switch 3d draw type : shaded / wireframe (see also D)'],
|
|
|
|
]}]}
|
|
|
|
|
|
for k in hotkeys.keys():
|
|
hotkeys[k].append(Create(0))
|
|
|
|
for k in hotkeys['Letters '][0]:
|
|
hotkeys['Letters '][0][k].append(Create(0))
|
|
|
|
hotL=hotkeys['Letters '][0].keys()
|
|
hotL.sort()
|
|
|
|
hot=hotkeys.keys()
|
|
hot.sort()
|
|
|
|
glCr=glRasterPos2d
|
|
glCl3=glColor3f
|
|
glCl4=glColor4f
|
|
glRct=glRectf
|
|
|
|
cf=[0.95,0.95,0.9,0.0]
|
|
c1=[0.95,0.95,0.9,0.0]
|
|
c=cf
|
|
r=[0,0,0,0]
|
|
|
|
def trace_rectangle4(r,c):
|
|
glCl4(c[0],c[1],c[2],c[3])
|
|
glRct(r[0],r[1],r[2],r[3])
|
|
|
|
def trace_rectangle3(r,c,c1):
|
|
glCl3(c[0],c[1],c[2])
|
|
glRct(r[0],r[1],r[2],r[3])
|
|
glCl3(c1[0],c1[1],c1[2])
|
|
|
|
def draw():
|
|
global r,c,c1,hotkeys, hot, hotL
|
|
|
|
size=Buffer(GL_FLOAT, 4)
|
|
glGetFloatv(GL_SCISSOR_BOX, size)
|
|
size= size.list
|
|
|
|
for s in [0,1,2,3]: size[s]=int(size[s])
|
|
|
|
c=[0.9,0.95,0.95,0.0]
|
|
c1=[0.95,0.95,0.9,0.0]
|
|
|
|
r=[0,size[3],size[2],0]
|
|
trace_rectangle4(r,c)
|
|
|
|
c=[0.7,0.7,0.9,0.0]
|
|
c1=[0.95,0.95,0.9,0.0]
|
|
|
|
r=[0,size[3],size[2],size[3]-20]
|
|
trace_rectangle4(r,c)
|
|
|
|
c1=[0.7,0.7,0.9,0.0]
|
|
c=[0.2,0.2,0.4,0.0]
|
|
c2=[0.87,0.87,0.95,0.0]
|
|
|
|
r=[0,size[3]-20,size[2],size[3]-44]
|
|
trace_rectangle4(r,c)
|
|
|
|
glColor3f(0.1, 0.1, 0.15)
|
|
glRasterPos2f(10, size[3]-16)
|
|
|
|
Text("HotKey")
|
|
|
|
l=0
|
|
listed=0
|
|
Llisted=0
|
|
for k in hot:
|
|
hotkeys[k][-1]=Toggle(k, hot.index(k)+10, 4+(20*26)/6*hot.index(k), size[3]-(40), len(k)*8, 20, hotkeys[k][-1].val )
|
|
l+=len(k)
|
|
if hotkeys[k][-1].val==1.0:
|
|
listed=hot.index(k)
|
|
#print listed
|
|
l=0
|
|
if hot[listed]!='Letters ':
|
|
for n in hotkeys[hot[listed]][:-1]:
|
|
if l%2==0:
|
|
r=[4,size[3]-(18*l+66),
|
|
8+(21*26), size[3]-(46+18*l)]
|
|
trace_rectangle4(r,c2)
|
|
glColor3f(0.1, 0.1, 0.15)
|
|
glRasterPos2f(4+8, size[3]-(58+18*l))
|
|
Text(n[0])
|
|
glRasterPos2f(4+8*15, size[3]-(58+18*l))
|
|
Text(' : '+n[1])
|
|
l+=1
|
|
else:
|
|
for k in hotL:
|
|
pos=hotL.index(k)
|
|
hotkeys['Letters '][0][k][-1]=Toggle(k,pos+20,4+hotL.index(k)*21, size[3]-(52+18), 20, 20, hotkeys['Letters '][0][k][-1].val )
|
|
if hotkeys['Letters '][0][k][-1].val==1.0:
|
|
Llisted=pos
|
|
for n in hotkeys['Letters '][0][hotL[Llisted]][:-1]:
|
|
if l%2==0:
|
|
r=[4,size[3]-(18*l+92),
|
|
8+(21*26), size[3]-(74+18*l)]
|
|
trace_rectangle4(r,c2)
|
|
glColor3f(0.1, 0.1, 0.15)
|
|
glRasterPos2f(4+8, size[3]-(88+18*l))
|
|
Text(n[0])
|
|
glRasterPos2f(4+8*15, size[3]-(88+18*l))
|
|
Text(' : '+n[1])
|
|
l+=1
|
|
|
|
def event(evt, val):
|
|
global hotkeys
|
|
if ((evt== QKEY or evt== ESCKEY) and not val): Exit()
|
|
|
|
def bevent(evt):
|
|
global hotkeysmhot, hotL
|
|
if (evt== 1):
|
|
Exit()
|
|
|
|
elif (evt in range(10,20,1)):
|
|
for k in hot:
|
|
if hot.index(k)+10!=evt:
|
|
hotkeys[k][-1].val=0
|
|
|
|
Blender.Window.Redraw()
|
|
|
|
elif (evt in range(20,46,1)):
|
|
for k in hotL:
|
|
if hotL.index(k)+20!=evt:
|
|
hotkeys['Letters '][0][k][-1].val=0
|
|
|
|
Blender.Window.Redraw()
|
|
|
|
Register(draw, event, bevent)
|