source: proiecte/pmake3d/make3d_original/Make3dSingleImageStanford_version0.1/third_party/lightspeed/graphics/move_obj.m @ 37

Last change on this file since 37 was 37, checked in by (none), 14 years ago

Added original make3d

File size: 1.7 KB
Line 
1function move_obj(arg)
2% callback function for draggable objects
3% Any object can be made draggable via
4%   set(obj, 'ButtonDownFcn', 'move_obj(1)');
5
6% using deltas allows us to drag big objects
7global last_pos;
8
9% handle events
10switch arg
11  case 2    % button motion
12    pos = get(gca, 'CurrentPoint');
13    pos = pos(1,:);
14
15    switch get(gco, 'type')
16      case 'text', obj_pos = get(gco, 'Pos')';
17      case 'line',
18        obj_pos(1,:) = get(gco,'xdata');
19        obj_pos(2,:) = get(gco,'ydata');
20      otherwise error(['cannot handle type ' get(gco,'type')])
21    end
22    % if the scale is logarithmic then the delta is a ratio
23    if strcmp(get(gca,'xscale'), 'log')
24      new_pos(1,:) = obj_pos(1,:) * (pos(1)/last_pos(1));
25    else
26      new_pos(1,:) = obj_pos(1,:) + (pos(1)-last_pos(1));
27    end
28    if strcmp(get(gca,'yscale'), 'log')
29      new_pos(2,:) = obj_pos(2,:) * (pos(2)/last_pos(2));
30    else
31      new_pos(2,:) = obj_pos(2,:) + (pos(2)-last_pos(2));
32    end
33    switch get(gco, 'type')
34      case 'text', set(gco, 'Pos', new_pos);
35      case 'line',
36        set(gco, 'xdata', new_pos(1,:), ...
37                 'ydata', new_pos(2,:));
38    end
39    last_pos = pos;
40  case 1    % buttondown
41    % start moving
42    % dragging looks better with double buffering on
43    set(gcf, 'DoubleBuffer', 'on');
44    last_pos = get(gca,'CurrentPoint');
45    last_pos = last_pos(1,:);
46    % set callbacks
47    fig = gcf;
48    %set(fig, 'pointer', 'fleur');
49    set(fig, 'windowbuttonmotionfcn', 'move_obj(2)');
50    set(fig, 'windowbuttonupfcn', 'move_obj(3)');
51  case 3    % button up
52    % finished moving
53    % clear callbacks
54    fig = gcf;
55    %set(fig, 'pointer', 'arrow');
56    set(fig, 'windowbuttonmotionfcn', '');
57    set(fig, 'windowbuttonupfcn', '');
58  otherwise
59    error('invalid argument')
60end
Note: See TracBrowser for help on using the repository browser.