KeyPress function on data rather on figure
3 views (last 30 days)
Show older comments
Hi,
I am trying to implement a key-press function for basically a fly through scene, i.e. updating the cam target and cam pos through a patched surface.
However, the key-press is acting on the figure itself instead of the plotted data. Is there another way to implement it/what am I doing wrong?
Thanks, Ali
Example code:
patch_fig=figure;
p=patch('Faces',faces,'Vertices',vertices,'FaceColor','red');
set(patch_fig,'KeyPressFcn',{@fh_keypress_handle, patch_fig});
%%function%%
function fh_keypress_handle(H,E,patch_fig)
hAx=gca;
[cPosition, cTarget, cViewAngle, cViewVector, cRightVector, cUpVector] = getcamerageometry(hAx);
current_pos = campos(hAx);
current_camtarget = camtarget(hAx);
switch E.Key
%%Move in x direction
case 'uparrow'
if isempty(E.Modifier)
campos(current_pos + cViewVector);
camtarget([current_camtarget+cViewVector]);
camlight(hlight,'headlight')
case 'downarrow'
if isempty(E.Modifier)
campos(current_pos - cViewVector);
camtarget([current_camtarget-cViewVector]);
end
0 Comments
Answers (2)
Walter Roberson
on 7 Feb 2017
You should probably use a figure WindowKeypressFcn callback instead of a figure KeyPressFcn. The KeyPressFcn has the tendency to give typing focus to the figure.
But first alter all of your cam* calls to pass in the axes. And instead of fetching the axes using gca(), pass it in instead of patch_fig (which is not used in your routine.)
3 Comments
Walter Roberson
on 7 Feb 2017
The axes can go as the first argument to the cam* calls.
I would fix the axes stuff up first before switching to WindowKeyPressFcn; you might not have to switch that.
See Also
Categories
Find more on Graphics Object Programming in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!