- Visible -> off
- HitTest -> off
- PickableParts -> none
How to add to a figure a second set of 3D axes insensitive to rotate3d, pan, zoom?
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponse acceptée
Stephen23
le 24 Fév 2015
Modifié(e) : Stephen23
le 26 Fév 2015
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 commentaires
Mike Garrity
le 25 Fév 2015
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.
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Graphics Performance dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!