我只想通过回调更改表面图Cdata。
cyl = surf(X_Length,Y_Circle,Z_Circle,'Cdata',map100);
我正在尝试
cyl.Cdata = map200;
但是它不起作用。任何人都知道正确的方法吗?
这是完整的代码。 首先创建圆柱体。
map100 = getCylinderHeatMap(filename);
[X_Length,Y_Circle,Z_Circle,map100] = createSurfCylinderInitial(map100);
cyl = surf(X_Length,Y_Circle,Z_Circle,'Cdata',map100);
splitFileName = strsplit(string(T{1,1}),'.');
title(compose("3D Cylinder Heatmap Plot" + "\n" + "Time: " + splitFileName{1,1}));
zlabel("Z-Position");
ylabel("Y-Position");
xlabel("X-Length(Cm)");
set(gca,'Ydir','reverse')
colormap(myHeatMap);
colorbar;
shading interp
Maximum_Value = 450;
Minimum_Value = 50;
caxis([Minimum_Value Maximum_Value]);
然后在回调中,我更新颜色。
function []= sliderCallback(b,T,myHeatMap,cyl)
value = round(b.Value);
%Testing lines load your matrix%
filename = strcat('\Users\Ali\Desktop\Documents\DataVis\Projekt\data\day\', string(T{value,1}));
map100 = getCylinderHeatMap(filename);
splitFileName = strsplit(string(T{value,1}),'.');
map100 = createSurfCylinderMapOnly(map100);
%surf(X_Length,Y_Circle,Z_Circle,'Cdata',map100);
cyl.CData = map100;
title(compose("3D Cylinder Heatmap Plot" + "\n" + "Time: " + splitFileName{1,1}));
zlabel("Z-Position");
ylabel("Y-Position");
xlabel("X-Length(Cm)");
set(gca,'Ydir','reverse');
colormap(myHeatMap);
colorbar;
shading interp
%
Maximum_Value = 450;
Minimum_Value = 50;
caxis([Minimum_Value Maximum_Value]);
end
当我按回叫时,什么也没有发生。 我认为我需要一些如何重画圆柱体的方法,但是那是我首先要避免的方法,以节省计算能力。并只更新颜色图。
答案 0 :(得分:1)
只要Cdata
具有与旧地图数据相同的高度和宽度(map100
尺寸= map200
尺寸),就应该替换颜色数据而不会出现任何问题。在这里,我创建了一个随机的Cdata
色彩映射表,但是当然,该数组可以设置为您想要的任何uint8
或double
值。我建议您在使用之前确保在回调函数中定义Cdata
。
cyl = surf(X_Length,Y_Circle,Z_Circle,'Cdata',map100);
shading interp
%Setting the surf to new test data%
[mapHeight,mapWidth] = size(map100);
map200 = rand(mapHeight,mapWidth);
cyl.CData = map200;