This is a read-only mirror of pymolwiki.org
Difference between revisions of "PowerMate Dial OS X"
m |
m (8 revisions) |
||
(6 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
− | [http:// | + | [http://scottlab.ucsc.edu/~wgscott/xtal/wiki/index.php/Using_powermate_dials_with_PyMOL Link to W. G. Scott's web page] (off site). Use of the script below is explained in that link. Briefly, the PowerMate driver must be installed and configured as explained in detail in that link before this script will work. |
+ | Pymol lets you define some keys (the function keys, ALT-[A-Z,0-9], left, right, up, down, etc) as pythonic pymol commands, like those below. I chose 2 degree increments for rotation and 0.5 for translations because these values give a visually smooth response, but change this to suit your own taste. Type | ||
− | < | + | help set_key |
+ | |||
+ | in pymol for more information. | ||
+ | |||
+ | The code below dynamically assigns functions to the four programmed keys by running python scripts in pymol to reset the key bindings. Clicking the Powermate dial to activate the toggle function (assigned to F5) allows you to toggle cyclically through dial functionality options, thus giving you three sets of rotations and translations. | ||
+ | |||
+ | In other words, turn the dial right or left to rotate in the plus y or minus y directions. Push down while turning right or left to get the plus and minus y translations. Click the dial (press down and release rapidly) to toggle to an analogous dial set for z, and then click again for x, and then again for y. | ||
+ | |||
+ | <source lang="python"> | ||
from pymol import cmd | from pymol import cmd | ||
Line 65: | Line 74: | ||
dialy() | dialy() | ||
− | </ | + | </source> |
+ | [[Category:Script_Library|Powermate Dial OS X]] | ||
+ | [[Category:UI_Scripts]] |
Latest revision as of 03:48, 28 March 2014
Link to W. G. Scott's web page (off site). Use of the script below is explained in that link. Briefly, the PowerMate driver must be installed and configured as explained in detail in that link before this script will work.
Pymol lets you define some keys (the function keys, ALT-[A-Z,0-9], left, right, up, down, etc) as pythonic pymol commands, like those below. I chose 2 degree increments for rotation and 0.5 for translations because these values give a visually smooth response, but change this to suit your own taste. Type
help set_key
in pymol for more information.
The code below dynamically assigns functions to the four programmed keys by running python scripts in pymol to reset the key bindings. Clicking the Powermate dial to activate the toggle function (assigned to F5) allows you to toggle cyclically through dial functionality options, thus giving you three sets of rotations and translations.
In other words, turn the dial right or left to rotate in the plus y or minus y directions. Push down while turning right or left to get the plus and minus y translations. Click the dial (press down and release rapidly) to toggle to an analogous dial set for z, and then click again for x, and then again for y.
from pymol import cmd
# Define aliases for mapping in [x,y,z] rotations and translations into a single Powermate
# dial. Toggling between the three is possible if you then assign these to special keys.
# Functions for x,y,z rotations and translations using Powermate dial
# Program F1 and F2 for Rotate Right and Rotate Left
# Program F3 and F4 for Click & Rotate Right and Click & Rotate Left
# Program F5 for Click (to toggle between dialsets)
# dialset = 2
def dialx(): \
global dialset \
dialset = 1 \
cmd.set_key ('F1', cmd.turn,('x',-2.0)) \
cmd.set_key ('F2', cmd.turn,('x',2.0)) \
cmd.set_key ('F3', cmd.move,('x',-0.5)) \
cmd.set_key ('F4', cmd.move,('x',0.5)) \
print "dialset ", dialset, " [ X ]\n" \
return dialset
def dialy(): \
global dialset \
dialset = 2 \
cmd.set_key ('F1', cmd.turn,('y',-2.0)) \
cmd.set_key ('F2', cmd.turn,('y',2.0)) \
cmd.set_key ('F3', cmd.move,('y',-0.5)) \
cmd.set_key ('F4', cmd.move,('y',0.5)) \
print "dialset ", dialset, " [ Y ]\n" \
return dialset
def dialz(): \
global dialset \
dialset = 3 \
cmd.set_key ('F1', cmd.turn,('z',-2.0)) \
cmd.set_key ('F2', cmd.turn,('z',2.0)) \
cmd.set_key ('F3', cmd.move,('z',-0.5)) \
cmd.set_key ('F4', cmd.move,('z',0.5)) \
print "dialset ", dialset, " [ Z ]\n" \
return dialset
def toggle_dial(): \
if dialset == 1 : \
print "Changing to y" \
dialy() \
elif dialset == 2 : \
print "Changing to z" \
dialz() \
elif dialset == 3 : \
print "Changing to x" \
dialx() \
else: print "Dial assignment isn't working"
cmd.set_key ('F5', toggle_dial)
# Start default dial state for rotate y (arbitrary choice)
dialy()