- Visible -> off
- HitTest -> off
- PickableParts -> none
How to add to a figure a second set of 3D axes insensitive to rotate3d, pan, zoom?
3 次查看(过去 30 天)
显示 更早的评论
Dear All,
I have a plot3 object (3D surface) in a figure that I can (and often have to) freely rotate3d, pan, zoom. I need to add text to the figure that would be still with respect to rotate3d, pan, zoom (would look like caption on TV). Here is the relevant code portion:
figure;
plot3(surface..)
...
panHandle = pan(gcf);
rotateHandle = rotate3d(gcf);
zoomHandle = zoom(gcf);
set(rotateHandle,'ActionPreCallback',@rotationStarted);
set(rotateHandle,'ActionPostCallback',@rotationDone);
rotateHandle.Enable='on';
set(zoomHandle,'ActionPreCallback',@zoomStarted)
set(zoomHandle,'ActionPostCallback',@zoomEnded)
zoomHandle.Enable='on';
set(panHandle,'ActionPreCallback',@panStarted)
set(panHandle,'ActionPostCallback',@panEnded)
panHandle.Enable='on';
function rotationStarted(~,rotateHandle)
for i=1:length(Handle)
set(Handle{i},'visible','off');
end
end
function rotationDone(~,rotateHandle)
for i=1:length(Handle)
set(Handle{i},'visible','on');
end
end
function zoomStarted(~,zoomHandle)
for i=1:length(Handle)
set(Handle{i},'visible','off');
end
end
function zoomEnded(~,zoomHandle)
for i=1:length(Handle)
set(Handle{i},'visible','on');
end
end
function panStarted(~,panHandle)
for i=1:length(Handle)
set(Handle{i},'visible','off');
end
end
function panEnded(~, panHandle)
for i=1:length(Handle)
set(Handle{i},'visible','on');
end
end
I thought that the natural way is to add a second set of 3D axes identical to the plot3 object ones, however which would not be subject to rotate3d, pan, zoom (ie. restrict the rotation handles to axes1 instead of gcf), and add text to this second axis set.
Please advise, thank you,
Octavian.
0 个评论
采纳的回答
Stephen23
2015-2-24
编辑:Stephen23
2015-2-26
I did something very similar to this in a FEX submssion:
Run the function cubehelix_view: you can see how the warning text is always static, even when the 3D axes are clickable and rotatable. This text is actually on some 2D axes, invisible and infront of the 3D axes, and so does not move when the 3D axes are rotated or panned.
Simply add the static axes in front of the zoomable axes (either after creating the zoomable axes, or using uistack to adjust the order), then change its axes properties :
3 个评论
Mike Garrity
2015-2-25
The PickableParts property was added in R2014b so that you could control the visibility and pickability separately. If you don't set PickableParts, then it will just match your setting for Visible. I think that's fine for what you're trying to do here.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Graphics Performance 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!