How to plot patch with point cloud

13 views (last 30 days)
Hello MATLAB community!
So I am trying to plot a point cloud in the same plot as a patch. The patch is an enclosed surface and the point cloud should be mostly inside that surface. It works great if I say something like this pseudocode:
g = patch
plot(g)
hold on
h = pcshow(ptCloud)
And that's grand. But I want to add a for loop that plays a timeseries where each time point has a new point cloud in the same space. When I try to change anything, the axes get very messed up and I basically have to replot the entire thing for each time point. If I delete(g) or delete(h) the whole thing disappears. If I try to just say pcshow(ptCloud2) it plots it on top of the other cloud (because is hold on). I don't know enough about plotting patches or pcshow to understand what is happening here. Any insight would be much appreciated. Or if you can come up with a better approach.
Also, bonus points if you can tell me how to get rid of the axes that appear in the center of the plot every time I click and drag to rotate :)
Thanks!!
Brendan

Accepted Answer

Brendan Balken
Brendan Balken on 28 Jan 2020
data = csvread(['./ptClouds/' dataName '/' dataName '_1.csv']);
pcshow(pointCloud(data(:,1:3), 'Intensity', data(:,4)), 'MarkerSize', pointSize);
for k=1:numVol
data = csvread(['./ptClouds/' dataName '/' dataName '_' num2str(k) '.csv']);
x = get(fig, 'children');
ax = x(3);
ax.Children(1).XData = data(:,1);
ax.Children(1).YData = data(:,2);
ax.Children(1).ZData = data(:,3);
ax.Children(1).CData = data(:,4);
drawnow
end
So this is what I have for now. It works pretty well. It basically finds the data that defines the point cloud, replaces those values, and redraws the figure. This preserves everything about the axes. At the moment, I'm looking into doing this outside of MATLAB because MATLAB seems very limited for rendering 3d surfaces. So I haven't yet had the chance to try your suggestion John, but it sounds really cool and I want to check it out. If I end up using MATLAB for this, I'll try it out and get back to you. Thanks!!

More Answers (1)

Githin John
Githin John on 28 Jan 2020
Edited: Githin John on 28 Jan 2020
From what I understood off your question, it seems like the pcplayer might help with plotting a time series pointCloud. You can use the view function in the loop as shown in the examples from the documentation.
player=pcplayer(...)
patch(player.Axes,...)
  1 Comment
Brendan Balken
Brendan Balken on 28 Jan 2020
Hey John! Thanks for the suggestion! I solved the problem one way (see posted answer). I may not end up usin MATLAB for this, but if I do I'll try pcplayer and get back to you. Thanks!

Sign in to comment.

Products


Release

R2019b

Community Treasure Hunt

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

Start Hunting!