Escolar Documentos
Profissional Documentos
Cultura Documentos
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%
% ===== Funções disponíveis =====
% tri = STL_read (STL_file,skip) -> Função obrigatória para carregar o
arquivo STL. (usar skip = 0)
% tri = STL_transl(tri,xc,yc,zc) -> Translada o STL de xc,yc,zc
% tri = STL_m_p_mm(tri) -> Converte de metros para
milimetros
% tri = STL_mm_p_m(tri) -> Converte de milimetros para
metros
% plot_patch (tri) -> Plota o STL ( !dependendo
do tamanho do arquivo pode ficar muito pesado! )
% STL_save(tri,name) -> Salva o STL
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%
STL_file = 'to_stl_temp5.stl';
skip = 10;
tri = STL_read(STL_file,skip);
keyboard
% tri = STL_mm_p_m(tri);
% tri = STL_transl(tri,0.805,0.6,0);
% plot_patch (tri)
% STL_save(tri,'side_mirror_7_2mm.stl')
toc
end
%% ========================================================================
function pts = STL2PTS (tri)
k=0;
pts(1,1) = 0;
pts(1,2) = 0;
pts(1,3) = 0;
for ii=1:length(tri)
encontrou_igual=false;
for jj=1:k
if (tri(ii).v1(1)==pts(jj,1) & tri(ii).v1(2)==pts(jj,2) &
tri(ii).v1(3)==pts(jj,3))
encontrou_igual = true;
end
end
if encontrou_igual==false
pts(ii,1) = tri(ii).v1(1);
pts(ii,2) = tri(ii).v1(2);
pts(ii,3) = tri(ii).v1(3);
k=k+1;
end
end
end
%% ========================================================================
fclose all;
arq = fopen(STL_file);
n_txt = 0;
i=0;
V1 = fgetl(arq);
while n_txt~=-1
i = i+1;
n_txt = fgetl(arq);
try
n_txt = strtrim(n_txt);
[tri(i).n] = str2num(n_txt(13:end));
[~] = fgetl(arq);
V_txt= strtrim(fgetl(arq));
[tri(i).v1] = str2num(V_txt(7:end));
V_txt = strtrim(fgetl(arq));
[tri(i).v2] = str2num(V_txt(7:end));
V_txt = strtrim(fgetl(arq));
[tri(i).v3] = str2num(V_txt(7:end));
[~] = fgetl(arq);
[~] = fgetl(arq);
for j=1:skip*7
[~] = fgetl(arq);
end
end
end
fclose(arq);
tri(i-1)=[];
% for i=1:length(tri)
% tri(i).g(1) = (tri(i).v1(1) + tri(i).v2(1) + tri(i).v3(1))/3;
% tri(i).g(2) = (tri(i).v1(2) + tri(i).v2(2) + tri(i).v3(2))/3;
% tri(i).g(3) = (tri(i).v1(3) + tri(i).v2(3) + tri(i).v3(3))/3;
% end
end
%% ========================================================================
for i=1:length(tri)
tri(i).v1(1) = tri(i).v1(1) + xc;
tri(i).v2(1) = tri(i).v2(1) + xc;
tri(i).v3(1) = tri(i).v3(1) + xc;
% for i=1:length(tri)
% tri(i).g(1) = (tri(i).v1(1) + tri(i).v2(1) + tri(i).v3(1))/3;
% tri(i).g(2) = (tri(i).v1(2) + tri(i).v2(2) + tri(i).v3(2))/3;
% tri(i).g(3) = (tri(i).v1(3) + tri(i).v2(3) + tri(i).v3(3))/3;
% end
end
%% ========================================================================
function tri = STL_m_p_mm(tri)
for i=1:length(tri)
tri(i).v1(:) = tri(i).v1(:)*1000;
tri(i).v2(:) = tri(i).v2(:)*1000;
tri(i).v3(:) = tri(i).v3(:)*1000;
end
% for i=1:length(tri)
% tri(i).g(1) = (tri(i).v1(1) + tri(i).v2(1) + tri(i).v3(1))/3;
% tri(i).g(2) = (tri(i).v1(2) + tri(i).v2(2) + tri(i).v3(2))/3;
% tri(i).g(3) = (tri(i).v1(3) + tri(i).v2(3) + tri(i).v3(3))/3;
% end
end
%% ========================================================================
for i=1:length(tri)
tri(i).v1(:) = tri(i).v1(:)/1000;
tri(i).v2(:) = tri(i).v2(:)/1000;
tri(i).v3(:) = tri(i).v3(:)/1000;
end
% for i=1:length(tri)
% tri(i).g(1) = (tri(i).v1(1) + tri(i).v2(1) + tri(i).v3(1))/3;
% tri(i).g(2) = (tri(i).v1(2) + tri(i).v2(2) + tri(i).v3(2))/3;
% tri(i).g(3) = (tri(i).v1(3) + tri(i).v2(3) + tri(i).v3(3))/3;
% end
end
%% ========================================================================
function STL_save(tri,name)
arq = fopen(name,'w');
fprintf(arq,'solid solid\n');
for i=1:length(tri)
fprintf(arq,'facet normal %9.6f %9.6f %9.6f\n ',tri(i).n(1),
tri(i).n(2), tri(i).n(3));
fprintf(arq,'\touterloop\n');
fprintf(arq,'\t\tvertex %9.6f %9.6f %9.6f\n',tri(i).v1(1),
tri(i).v1(2), tri(i).v1(3));
fprintf(arq,'\t\tvertex %9.6f %9.6f %9.6f\n',tri(i).v2(1),
tri(i).v2(2), tri(i).v2(3));
fprintf(arq,'\t\tvertex %9.6f %9.6f %9.6f\n',tri(i).v3(1),
tri(i).v3(2), tri(i).v3(3));
fprintf(arq,'\tendloop\n');
fprintf(arq,'endfacet\n');
end
fprintf(arq,'endsolid solid');
end
%% ========================================================================
%% ========================================================================
function plot_normal(tri)
figure('doublebuffer','on'); hold on
for i=1:10:length(tri)-1
quiver3(tri(i).g(1), tri(i).g(2), tri(i).g(3),tri(i).n(1), tri(i).n(2),
tri(i).n(3),'r')
end
end