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