MATLAB Answers

Andre
0

Using pcshow on a UI panel

Asked by Andre
on 23 Mar 2017
Latest activity Commented on by Andre
on 13 Feb 2018
Hi,
I am trying to plot a point cloud of data on an axes whose Parent is a uipanel. The uipanel was created on a figure. The issue I am having is that when I am trying to show the point cloud data using pcshow, I am getting an error as follows:
PC = pointCloud(dataPts); % Where dataPts is a Nx3 array of 3D coordinates
pcshow(PC, 'Parent', ax); % where ax is the handle to the axes whose 'Parent' is a uipanel
No appropriate method, property, or field 'Renderer' for class 'matlab.ui.container.Panel'.
Error in pcshow (line 106) if strcmpi(hFigure.Renderer, 'painters')
It seems like the pcshow only works when the axes's 'Parent' is a figure, otherwise it will not find the 'Renderer' properties (such as within the uipanel).
Is there any way of plotting point cloud data on an axes that is a 'child' of a uipanel?
Thanks a lot in advance!
Kind Regards, Andre

  0 Comments

Sign in to comment.

2 Answers

Answer by Guojin Feng on 9 Feb 2018
 Accepted Answer

I had encountered the same issue. One option would be to modify the pcshow function Modify the line around Line 108
% Get the current figure handle
hFigure = get(currentAxes,'Parent');
as
htmp = currentAxes;
while true
hFigure = get(htmp, 'Parent');
htmp = hFigure;
if isa(hFigure, 'matlab.ui.Figure')
break;
end
end
Hope this helps.

  3 Comments

Andre
on 9 Feb 2018
Hi Guojin.
Thanks a lot for this! I will try it out over the weekend and come back to you on it. I once tried to look into the pcshow function itself but didn't want to risk modifying it.
Greatly appreciated!
Andre
You can instead use
hFigure = ancestor(currentaxes, 'Figure');
Andre
on 13 Feb 2018
Thanks a lot to both parties! I tried and tested both options and they all worked seamlessly!
Andre

Sign in to comment.


Answer by Sindhu Priya on 28 Mar 2017
Edited by Sindhu Priya on 28 Mar 2017

Hi Andre,
As far as I know, 'pcshow' does not allow you to plot on any other axes apart from 'figure'. You can use 'scatter3' fucntion to plot your data on the axes of uipanel as follows,
ax = axes('Parent',uipanel,'Position',[.1 .1 .6 .6]);
scatter3(x,y,z,'Parent',ax)
Please refer
and
for further information.
Regards,
Sindhu

  0 Comments

Sign in to comment.