Interactive plots: Difference between revisions
Jump to navigation
Jump to search
(Add Category:Examples.) |
m (→Demo 1: Use syntax highlighter.) |
||
Line 7: | Line 7: | ||
[[File:interactive_select2.gif]] | [[File:interactive_select2.gif]] | ||
{{Code|imageViewer example|< | {{Code|imageViewer example|<syntaxhighlight lang="octave"> | ||
clear all | clear all | ||
graphics_toolkit qt | graphics_toolkit qt | ||
Line 85: | Line 85: | ||
# first update | # first update | ||
drag_fig (gcf, []) | drag_fig (gcf, []) | ||
</ | </syntaxhighlight>}} | ||
[[Category:Examples]] | [[Category:Examples]] |
Latest revision as of 06:09, 13 July 2020
This page shows some possibilities to create interactive OpenGL plots (qt or fltk toolkit) not using uicontrols.
See also uicontrols where you can create buttons and slider to create plots
Demo 1[edit]
Code: imageViewer example |
clear all
graphics_toolkit qt
set (0, "defaultlinelinewidth", 2);
h.points = rand (2, 3); # 3 random points
h.line = [];
h.marker = [];
set (gcf, "userdata", h)
function down_fig (hsrc, evt)
h = get (hsrc, "userdata");
if (isempty (h.marker))
hold on
h.marker = plot (NA, NA, "o", "markersize", 15, "color", "green");
hold off
endif
set (hsrc, "userdata", h);
drag_fig (hsrc, evt);
endfunction
function drag_fig (hsrc, evt)
# evt 1:left button, 2:middle button, 3:right button
h = get (hsrc, "userdata");
if (! isempty (h.marker))
c = get (gca, "currentpoint")([1;3]);
set (h.marker, "xdata", c(1));
set (h.marker, "ydata", c(2));
# find nearest point
d = h.points - c;
[~, idx] = min (hypot (d(1, :), d(2, :)));
h.points(:, idx) = c;
endif
# draw / update the line
tmp = [h.points h.points(:,1)]; # duplicate first point to close triangle
if (isempty (h.line))
h.line = plot (tmp(1, :), tmp(2, :), "-o");
h.text = text (NA, NA, "", "horizontalalignment", "center");
## testing
axis ([0 1 0 1])
else
set (h.line, "xdata", tmp(1, :));
set (h.line, "ydata", tmp(2, :));
endif
# calculate the area
A = polyarea (h.points(1, :),
h.points(2, :));
P = mean (h.points, 2);
set (h.text, "position", mean (h.points, 2).');
set (h.text, "string", sprintf ("A = %.3f", A));
set (hsrc, "userdata", h);
endfunction
function up_fig (hsrc, evt)
h = get (gcbf, "userdata");
delete (h.marker);
h.marker = [];
set (gcbf, "userdata", h);
endfunction
set (gcf, "windowbuttondownfcn", @down_fig);
set (gcf, "windowbuttonmotionfcn", @drag_fig)
set (gcf, "windowbuttonupfcn", @up_fig)
# first update
drag_fig (gcf, [])
|