The below code is written in MATLAB it gives the coordinates when any object in an STL file is sliced at a desired height.
Input: STL file.
Output: Slice profile at a given height.
clc;
clear all;
FV = stlread('A3.stl'); %d the stl file
[F,V,N]=stlread('A3.stl'); %d Reading Stl file
sz= F.Points; %d Reading the cordinates
ma= max(sz(:,3));
mi= min(sz(:,3));
disp('Z must be between');
disp(ma); disp('and') ;disp(mi);
z= input('Enter Z height:');
km= F.ConnectivityList;
l=size(km);
i=l(1);
ka=1;
for j=1:i
p=km(j,1); q=km(j,2); r=km(j,3);
k1=sz(p,3); k2=sz(q,3); k3=sz(r,3);
g1= max([k1,k2,k3]);
g2= min([k1,k2,k3]);
if ((g2<=z) & (z<=g1))
if ((sz(p,3)<=z) & (z<=sz(q,3)) | ((sz(q,3)<=z) & (z<=sz(p,3))))
m= ((z-sz(p,3))/((sz(q,3)-sz(p,3))));
x(ka)=((m*((sz(q,1)-(sz(p,1)))))+(sz(p,1)));
y(ka)=((m*((sz(q,2)-(sz(p,2)))))+(sz(p,2)));
ka=ka+1;
end
if ((sz(p,3)<=z) & (z<=sz(r,3)) | ((sz(r,3)<=z) & (z<=sz(p,3))))
m= ((z-sz(p,3))/((sz(r,3)-sz(p,3))));
x(ka)=((m*((sz(r,1)-(sz(p,1)))))+(sz(p,1)));
y(ka)=((m*((sz(r,2)-(sz(p,2)))))+(sz(p,2)));
ka=ka+1;
end
if ((sz(q,3)<=z) & (z<=sz(r,3)) | ((sz(r,3)<=z) & (z<=sz(q,3))))
m= ((z-sz(q,3))/((sz(r,3)-sz(q,3))));
x(ka)=((m*((sz(r,1)-(sz(q,1)))))+(sz(q,1)));
y(ka)=((m*((sz(r,2)-(sz(q,2)))))+(sz(q,2)));
ka=ka+1;
end
end
j=j+1;
end
plot(x,y);
Comments
Post a Comment