How can you update plot data from properties in an object?
5 ビュー (過去 30 日間)
古いコメントを表示
I am new to OOP, and would like to plot changing data in an object as various methods are called that change the properties in the object. I have tried using linkdata - however it appears that this doesn't work across methods.
Is there a way to update the plot without re-plotting the figure?
sections of my code:
classdef VarStiffTDCR
properties (Constant)
F0 = [0 0 1;
0 1 0;
0 0 1];
P0 = [0 0 0]';
end
properties
%*** some properties defined here ***
end
methods
function obj = VarStiffTDCR(L,N_seg,N_pts,K_soft,K_hard,offsets)
%*** some properties initialized here ***
% Here I am plotting something based on the properties
% initialized above.
obj.figHan = figure('Name','CR Plot');
linkdata on
obj = Fkin(obj,0); % Run forward Kinematics to initialize shape.
for j = 1:obj.N_seg
indices = ((j-1)*obj.N_pts/obj.N_seg+1):(j*obj.N_pts/obj.N_seg);
plot3(obj.P(1,indices),obj.P(2,indices),obj.P(3,indices),Color=[(.9*obj.soft(j)) .1 (.9-.9*obj.soft(j))])
end
axis equal
grid on
xlabel('X [mm]');
ylabel('Y [mm]');
zlabel('Z [mm]');
end
%*** some other methods here ***
function obj = Fkin(obj,plotOn)
% This code updates P which contains the data in the plot
ds = obj.L/(obj.N_pts-1);
for j = 1:obj.N_seg
for i = ((j-1)*obj.N_pts/obj.N_seg+1):j*obj.N_pts/obj.N_seg
if i == 1
obj.BFs(:,:,i) = [0 0 1;
0 1 0;
1 0 0];
obj.P(:,i) = [0 0 0]';
else
obj.BFs(:,:,i) = obj.BFs(:,:,i-1) + ds.*[0 obj.kx(1) obj.ky(1); -obj.kx(1) 0 0; -obj.ky(1) 0 0]*obj.BFs(:,:,i-1);
obj.P(:,i) = obj.P(:,i-1) + ds*obj.BFs(1,:,i-1)';
end
end
end
if plotOn
% Here I would like the plot to update with the new values in
% P, without having to replot.
figure(obj.figHan)
refreshdata
drawnow
end
end
0 件のコメント
回答 (1 件)
参考
カテゴリ
Help Center および File Exchange で Discrete Data Plots についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!