Hello again !
Sorry, I was sick and then busy with Christmas
Here is the code 
Just put your bed leveling in the Z vector
function plot_bed_layer_templates()
m0=[5 5];m1=[295 295];b0=[0 0];b1=[300 300];pc=[9 9];lt=0.060;rm='ceil';tm='max';pp=95;of=0.03;ef=0.30;cap=Inf;
mkpng=1;dpi=300;d='layers_png';pat='layer_%03d.png';mkcsv=1;v2=1;v3=1;fc=[0 0 0];ec=[0 0 0];ew=0.4;
maj=50;minr=0;aof=8;tM=3;tmi=1.5;
nX=pc(1);nY=pc(2);x=linspace(m0(1),m1(1),nX);y=linspace(m0(2),m1(2),nY);[X,Y]=meshgrid(x,y);
Z=[ ...
-0.044000 -0.026000 0.031000 0.041000 0.062000 0.047000 0.036000 -0.016000 -0.031000; ...
0.054000 0.048000 0.095000 0.113000 0.129000 0.117000 0.091000 0.043000 0.020000; ...
0.122000 0.112000 0.133000 0.144000 0.145000 0.129000 0.097000 0.056000 0.069000; ...
0.097000 0.095000 0.121000 0.144000 0.157000 0.146000 0.132000 0.090000 0.089000; ...
0.075000 0.103000 0.137000 0.158000 0.174000 0.156000 0.132000 0.116000 0.096000; ...
0.031000 0.076000 0.111000 0.136000 0.141000 0.114000 0.107000 0.094000 0.062000; ...
0.015000 0.057000 0.094000 0.107000 0.093000 0.096000 0.075000 0.057000 0.034000; ...
-0.036000 0.009000 0.037000 0.044000 0.058000 0.050000 0.048000 0.018000 -0.007000; ...
-0.078000 -0.054000 -0.021000 0.004000 0.018000 0.008000 -0.031000 -0.050000 -0.079000 ...
];
xm=(x(1:end-1)+x(2:end))/2;ym=(y(1:end-1)+y(2:end))/2;xe=[b0(1),xm,b1(1)];ye=[b0(2),ym,b1(2)];
xL=repmat(xe(1:end-1),nY,1);xR=repmat(xe(2:end),nY,1);yB=repmat(ye(1:end-1)',1,nX);yT=repmat(ye(2:end)',1,nX);
A=[X(:) Y(:) ones(numel(X),1)];cc=A\Z(:);Zp=reshape(A*cc,size(Z));
switch lower(tm)
case 'plane', tn=max(0,Zp-Z); td='plan';
case 'max', zr=max(Z(:)); tn=max(0,zr-Z); td='max';
case 'percentile', zr=lp(Z(:),pp); tn=max(0,zr-Z); td=sprintf('P%d',pp);
case 'plane_plus_offset', tn=max(0,(Zp+of)-Z); td=sprintf('plan+%.2f',of);
otherwise, error('target_mode inconnu');
end
switch lower(rm)
case 'ceil', Nc=ceil(tn/lt);
case 'floor', Nc=floor(tn/lt);
otherwise, Nc=round(tn/lt);
end
Nc(tn<ef*lt)=0; if isfinite(cap), Nc=min(Nc,cap); end
Nmax=max(Nc(:));
S0=st(Z); Zc=Z+Nc*lt; S1=st(Zc);
if v2
f2=figure('Name','BRUT + Corrigé (2D)','Color','w','Units','normalized','Position',[0.05 0.52 0.9 0.42]);
a2=axes(f2);hold(a2,'on');imagesc(a2,x,y,Z);set(a2,'YDir','normal');axis(a2,'image');colormap(a2,parula);
cb=colorbar(a2);cb.Label.String='Z (mm)';
contour(a2,X,Y,Z,8,'k-','LineWidth',0.9);contour(a2,X,Y,Zc,8,'w--','LineWidth',1.2);
xlabel(a2,'X (mm)');ylabel(a2,'Y (mm)');title(a2,sprintf('2D — BRUT + Corrigé — PV=%.3f, RMS=%.3f',S1.pv,S1.rms));
xlim(a2,[m0(1) m1(1)]);ylim(a2,[m0(2) m1(2)]);grid(a2,'on');box(a2,'on');
end
if v3
f3=figure('Name','BRUT + Corrigé (3D)','Color','w','Units','normalized','Position',[0.05 0.06 0.9 0.42]);
a3=axes(f3);hold(a3,'on');
surf(a3,X,Y,Z,Z,'EdgeColor',[0.45 0.45 0.45],'FaceAlpha',0.90);shading(a3,'faceted');colormap(a3,parula);
cb3=colorbar(a3);cb3.Label.String='Z (mm)';
hm=mesh(a3,X,Y,Zc);set(hm,'EdgeColor','k','EdgeAlpha',0.70);
contour3(a3,X,Y,Z,8,'k','LineWidth',0.6);contour3(a3,X,Y,Zc,8,'w','LineWidth',0.6);
xlabel(a3,'X (mm)');ylabel(a3,'Y (mm)');zlabel(a3,'Z (mm)');
title(a3,sprintf('3D — BRUT (surface) + Corrigé (wireframe) — PV=%.3f, RMS=%.3f',S1.pv,S1.rms));
axis(a3,'tight');axis(a3,'vis3d');view(a3,45,30);grid(a3,'on');box(a3,'on');camlight(a3,'headlight');lighting(a3,'gouraud');
end
if mkcsv
rows=zeros(nX*nY,7);k=0;
for i=1:nY
for j=1:nX
k=k+1;
rows(k,:)=[i,j,xL(i,j),xR(i,j),yB(i,j),yT(i,j),Nc(i,j)];
end
end
T=array2table(rows,'VariableNames',{'i','j','x_min_mm','x_max_mm','y_min_mm','y_max_mm','N_couches'});
writetable(T,'shim_tiles_summary.csv');
end
if mkpng
if ~exist(d,'dir'), mkdir(d); end
bw=b1(1)-b0(1); bh=b1(2)-b0(2); bwi=bw/25.4; bhi=bh/25.4;
for L=1:Nmax
f=figure('Visible','off','Color','w'); set(f,'Units','inches','Position',[0 0 bwi bhi]);
set(f,'PaperUnits','inches','PaperPosition',[0 0 bwi bhi],'PaperSize',[bwi bhi]);
ax=axes('Parent',f,'Units','inches','Position',[0 0 bwi bhi]); hold(ax,'on');
axis(ax,[b0(1) b1(1) b0(2) b1(2)]); axis(ax,'ij'); axis(ax,'equal'); axis(ax,'off');
rectangle('Position',[0 0 bw bh],'EdgeColor',ec,'LineWidth',0.8,'Parent',ax);
for i=1:nY
for j=1:nX
if Nc(i,j)>=L
xl=xL(i,j);xr=xR(i,j);yb=yB(i,j);yt=yT(i,j);
rectangle('Position',[xl yb xr-xl yt-yb],'FaceColor',fc,'EdgeColor',ec,'LineWidth',ew,'Parent',ax);
end
end
end
axg(ax,bw,bh,aof,maj,minr,tM,tmi);
text(ax,10,15,sprintf('Layer %d/%d (%.2f mm) cible=%s PV0=%.3f RMS0=%.3f',L,Nmax,lt,td,S0.pv,S0.rms), ...
'FontWeight','bold','Interpreter','none');
fn=fullfile(d,sprintf(pat,L));
if exist('exportgraphics','file')==2
exportgraphics(ax,fn,'Resolution',dpi,'BackgroundColor','white');
else
print(f,fn,'-dpng',sprintf('-r%d',dpi));
end
close(f);
end
end
fprintf('OK. PNG couche-à-couche dans "%s" (%d fichiers, DPI=%d). Corrigé: PV=%.3f, RMS=%.3f\n',d,Nmax,dpi,S1.pv,S1.rms);
function z=lp(x,p)
x=sort(x(:));n=numel(x);if n==0,z=NaN;return;end
k=(p/100)*(n-1)+1;k0=floor(k);a=k-k0;
if k0>=n,z=x(n);elseif k0<1,z=x(1);else,z=x(k0)+a*(x(k0+1)-x(k0));end
end
function S=st(M)
S.min=min(M(:));S.max=max(M(:));S.pv=S.max-S.min;mm=mean(M(:));S.rms=sqrt(mean((M(:)-mm).^2));S.avg=mm;
end
function axg(ax,W,H,off,major_step,minor_step,tlenM,tlenm)
yX=H-off;xY=off;C=[0 0 1];
plot(ax,[off W-off],[yX yX],'-','Color',C,'LineWidth',0.9);plot(ax,[xY xY],[off H-off],'-','Color',C,'LineWidth',0.9);
if major_step>0
for xm=0:major_step:W
if xm<off||xm>W-off,continue;end
plot(ax,[xm xm],[yX-tlenM yX+tlenM],'-','Color',C,'LineWidth',0.9);
text(ax,xm,yX-2*tlenM,sprintf('%d',xm),'HorizontalAlignment','center','VerticalAlignment','top','Color',C);
end
end
if minor_step>0
for xm=0:minor_step:W
if mod(xm,major_step)==0||xm<off||xm>W-off,continue;end
plot(ax,[xm xm],[yX-tlenm yX+tlenm],'-','Color',C,'LineWidth',0.7);
end
end
if major_step>0
for ym=0:major_step:H
if ym<off||ym>H-off,continue;end
plot(ax,[xY-tlenM xY+tlenM],[ym ym],'-','Color',C,'LineWidth',0.9);
text(ax,xY-2*tlenM,ym,sprintf('%d',ym),'HorizontalAlignment','right','VerticalAlignment','middle','Color',C);
end
end
if minor_step>0
for ym=0:minor_step:H
if mod(ym,major_step)==0||ym<off||ym>H-off,continue;end
plot(ax,[xY-tlenm xY+tlenm],[ym ym],'-','Color',C,'LineWidth',0.7);
end
end
text(ax,W-off,yX-3*tlenM,'X','FontWeight','bold','HorizontalAlignment','right','Color',C);
text(ax,xY-3*tlenM,off,'Y','FontWeight','bold','HorizontalAlignment','right','Color',C);
end
end