How can I make figure title and annotations selectable?
1 次查看(过去 30 天)
显示 更早的评论
采纳的回答
OCDER
2017-9-22
编辑:OCDER
2017-9-22
See the example below. It draws a figure, and if you click above the axes area (where the title is), then it will save the title into your clipboard. You have to use some sort of event-handling function (here copyTitle) and associate this function with the figure WindowButtonUpFcn property as shown below.
plot(1:10, 1:10)
title('Copy this title to clipboard')
set(gcf, 'WindowButtonUpFcn', @copyTitle)
This is the event-handling function:
function copyTitle(hObject, eventdata)
%Remember current units, since you want pixels.
%This is not needed if all units are in pixels, but chances are they're not.
PrevAxUnit = get(gca, 'units');
PrevFigUnit = get(gcf, 'units');
set(gca, 'units', 'pixel');
set(gcf, 'units', 'pixel');
%Determine the figure, axes, point, and pointer-relative-to-figure positions.
AxesPos = get(gca, 'position');
FigurePos = get(gcf, 'position');
PointerPos = get(0, 'pointerlocation');
PointerRelPos = PointerPos - FigurePos(1:2); %1,1 is the bottom left of figure
%Here, add more calculations to determine the exact area of annotation area
%For now, assume any area above axes top is the title area.
if PointerRelPos(2) > sum(AxesPos([2 4]))
TitleStr = get(get(gca, 'title'), 'string');
fprintf('Saving the title "%s" into the clipboard.\n', TitleStr);
clipboard('copy', TitleStr);
%Here, add more actions you want when user clicks the title area
end
%Restore the units back to previous units
set(gca, 'units', PrevAxUnit);
set(gcf, 'units', PrevFigUnit);
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Interactive Control and Callbacks 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!