Plotting performance reduced in APP
이전 댓글 표시
I designed a GUI with Matlab 2019a App Designer tool for visualization of 3D segments and automatic labelling. The figure below shows an example of app.UIAxes component and then the script in my app is presented.

% when a push button is pressed
cla(app.UIAxes) % app.UIAxes contains other data to be cleared from the current figure
for i=1:half
% first point of the i-segment is stored in SEGMENTS(i,1:3)
% last point of the i-segment is stored in SEGMENTS(i+half,1:3)
% plot the current segment
line(app.UIAxes,[SEGMENTS(i,1),SEGMENTS(i+half,1)],...
[SEGMENTS(i,2),SEGMENTS(i+half,2)],...
[SEGMENTS(i,3),SEGMENTS(i+half,3)],'Color','k')
% label the current segment on its midpoint
x_mid=mean([SEGMENTS(i,1),SEGMENTS(i+half,1)]);
y_mid=mean([SEGMENTS(i,2),SEGMENTS(i+half,2)]);
z_mid=mean([SEGMENTS(i,3),SEGMENTS(i+half,3)]);
text(app.UIAxes,x_mid,y_mid,z_mid,num2str(i),'Color','b',...
'FontSize',12,'FontWeight','bold'), hold(app.UIAxes,'on');
end
hold(app.UIAxes,'off');
As stated in https://it.mathworks.com/matlabcentral/answers/252979-increase-the-plotting-performance-in-the-matlab-level-drawmode-optimizing-rendering-down-sampling, I used the function line instead of plot3. However, when interacting by 3D rotation, the figure in my app is much slower than the same plotted through Matlab command window (also with few segments, but it should work with hundreds of segments). In particular, I found that the lag is introduced when adding text labels, and this lag (increased in time duration) occurs on other PCs.
Any suggestion to overcome this issue and improve usability of my app?
Thanks in advance
댓글 수: 2
Mohammad Sami
2020년 1월 17일
You can try and avoid the for loop. That can make the plotting faster. Something like this might work
% half = floor(size(SEGMENTS,1)/2);
idx = 1:half;
sgx = [SEGMENTS(idx,1),SEGMENTS(idx+half,1)]';
sgy = [SEGMENTS(idx,2),SEGMENTS(idx+half,2)]';
sgz = [SEGMENTS(idx,3),SEGMENTS(idx+half,3)]';
line(app.UIAxes,sgx,sgy,sgz,'Color','k');
x_mid=mean(sgx);
y_mid=mean(sgy);
z_mid=mean(sgz);
text(app.UIAxes,x_mid,y_mid,z_mid,string(idx),'Color','b',...
'FontSize',12,'FontWeight','bold');
Luca Vacca
2020년 1월 17일
채택된 답변
추가 답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Creating, Deleting, and Querying Graphics Objects에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!