How can i fill a designed 3d circle in an axes matlab GUI object?

3 views (last 30 days)
Hi everybody,
actually I've done a Matlab GUI with an object axes and a button. When i press the button, through a button callback, i draw a 3d circle through this function, passing the handles.axes:
function [crf] = EnvironmentSpace(origin_reference,index_col,figure_handles) %Draw the environment space with an enter circle shape acces point origin = origin_reference; radius = 0.10; %[m] angle = linspace(0,2*pi,150); crf(1,:) = origin(1)+radius*cos(angle); crf(2,:) = origin(2)+radius*sin(angle); crf(3,:) = origin(3);
col=hsv(128); index_trasp =0.5; h = figure_handles; plot3(h,crf(1,:),crf(2,:),crf(3,:),'-k','LineWidth',1); %fill3(crf(1,:),crf(2,:),crf(3,:),col(index_col,:), 'FaceAlpha',index_trasp); hold on;
I obatin the 3d circle in the axes object, but when i execute the fill3 instruction I obtain a filled circle in another figure and not in my axes object. I've already set the axes property 'NextPlot' with 'Add', but the problem still persists. I have the same problem with the command 'patch' for draw a 3d parallelepiped in the same axes object in which there is the 3d circle. Can anyone help me?
Morover, how can i set the X,Y,Z label, because in the axes object inspector i can't see the property XName or something like that, but only XLim,YLim,ZLim. Thanks in advance. Best regards.
Marco

Accepted Answer

Aykut Satici
Aykut Satici on 2 Sep 2014
I have written a UI that implements what you want by slightly modifying your code. You can find it in the attachment. I could not really reproduce the issue you are experiencing. Could you be passing the figure handle in the function rather than the axes handle?
Also, note that, "plot3" and "fill3" are high-level graphics functions. If the figure on which you are trying to plot has 'HandleVisibility' property 'off' (or 'Callback' and you are not in calling "plot3" from a callback), then "plot3" may open another figure. You can use the low-level versions "line" and "patch" of these to get the same results, as implemented in the comment section in the sample code in the attachment.
You can set the x,y,z labels by using the functions "xlabel", "ylabel", and "zlabel", respectively. If you provide the axes handle to these functions as their first argument, you can be sure they are going to label the correct axes object. Again, see the provided sample code.

More Answers (1)

marco
marco on 4 Sep 2014
Thanks Aykut,
yes the problem was that the handle visibility was switched off during the callback call. Thanks a lot !
Marco

Categories

Find more on Graphics Object Properties in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!