How do I combine two surfaces to a single surface for conversion to solid to .stl
2 views (last 30 days)
Show older comments
I have two surfaces -- a surface of compiled Bezier surfaces and a semi-sphere. I would like to integrate these two surfaces to one for conversion to a solid, then conversion to .stl. Currently, with the code that I have, the two surfaces remain distinct and the resultant .stl is not a closed piece, which causes issues in printing. Is there some way to take these two function-based surfaces and merge/compile them to form one surface to ease surf2solid and then .stl conversion? I used one surf() fcn to display the two surfaces by combining them in a matrix with the coordinates for the surface 1 and sphere surface separated by a column of NaN.
Relevant code is as follows:
FOOT='r'
%% Insert Builder
figure (1) clf('reset')
Ax=[0 0 0 0 .42 .46 .67 .92 1.18 1.17 1.56 1.93 1.72 2.18 2.60 2.76]; Ay=[0 0.94 2.07 3.1 0.05 1.06 2.21 3.1 .24 1.12 2.15 3.1 .99 1.55 2.22 3.1]; Az=[1.219 0.466 0.19 0 1.268 0.466 0.2925 0.098 1.17 .6305 0.47 .267 1.066 1.156 1.056 .978]; Bx=[0 0 0 0 0.92 .88 1.05 1.22 1.93 1.93 1.91 2.26 2.76 2.98 3.11 3.25;]; By=[3.1 4.06 5.07 6 3.1 4.10 5.06 6 3.1 4.08 5.07 6 3.1 3.89 4.80 6;]; Bz=[0 -.049 .086 .237 .098 .0715 .105 .306 .261 .3335 .38 .53 .978 1.04 1.091 1.219]; Cx=[0 0 0 0 1.22 1.4 1.46 1.45 2.26 2.5 2.7 2.94 3.25 3.45 3.6 3.8;]; Cy=[6 7.67 9.16 10.4 6 7.76 9.17 10.4 6 7.63 9.17 10.4 6 7.56 9.13 10.4;]; Cz=[.237 .56 .708 .697 0.306 0.507 0.532 0.452 0.53 0.718 0.597 0.232 1.219 1.46 1.409 1.37;]; Dx=[0 0 0 0 1.45 1.53 1.36 1.48 2.94 3.02 2.95 2.85 3.8 3.85 3.9 3.9]; Dy=[10.4 12.76 14.91 17. 10.4 12.82 14.96 17 10.4 12.71 14.88 17. 10.4 12.61 14.92 17.]; Dz=[.697 .702 .605 .242 .452 .1145 .075 -.189 .232 .1185 -.069 -.165 1.37 1.148 .741 .3]; Ex=[0 0 0 0 1.48 1.5 1.39 1.29 2.85 2.83 2.74 2.55 3.9 3.92 3.94 3.98]; Ey=[17. 18.1 19.27 20.48 17 17.99 19.09 20.28 17. 17.89 18.52 19.44 17 17.64 18.27 18.78]; Ez=[.242 -.05 .0194 .033 -.189 -.243 -.1 .033 -.165 -.1965 -.1 .196 .3 .295 .402 .446]; Fx=[0 0 0 0 1.29 1.2 1.24 1.14 2.55 2.41 2.43 2.34 3.98 3.95 3.9 3.85]; Fy=[20.48 21.37 21.87 22.84 20.28 20.98 21.47 22.25 19.44 19.92 20.60 21.13 18.78 19.33 19.87 20.34]; Fz=[.033 .169 .6 .5 .033 .166 .6 .5 .196 .488 .5 .45 .446 .49 .5 .5]; Gx=[0 0 0 0 1.14 1.14 1.26 1.6 2.34 2.22 2.57 3.46 3.85 3.8 3.74 3.6]; Gy=[22.84 23.89 24.89 26.11 22.25 22.92 23.81 25.14 21.13 21.6 22. 22.1 20.34 20.83 21.3 21.7]; Gz=[.5 .4 .2 .9 .5 .4 .2 .723 .45 .3 .2 .8 .5 .5 .3 .55]; Nx=[-1.84 -2.44 -2.83 -2.84 -1.35 -1.61 -2.07 -2.12 -0.78 -0.88 -1.08 -1.06 0 0 0 0]; Ny=[0.86 1.59 2.49 3.1 0.24 1.2 2.2 3.1 .12 1.12 2.16 3.1 0 0.94 2.07 3.1]; Nz=[1.249 1.3 1.247 1.103 1.029 .6759 .602 .36 1.097 .5765 .282 .081 1.219 0.466 0.19 0]; Mx=[-2.84 -2.88 -2.91 -2.95 -2.12 -2.11 -2.02 -1.95 -1.06 -1.01 -0.86 -.94 0 0 0 0]; My=[3.1 4.29 5.23 6 3.1 4.25 5.20 6 3.1 4.18 5.2 6 3.1 4.06 5.07 6]; Mz=[1.103 1.187 1.402 1.354 0.36 .4545 .549 .751 .081 .1125 .186 .45 0 -.049 .086 .237]; Lx=[-2.95 -3.1 -3.34 -3.66 -1.95 -2.04 -2.17 -2.58 -.94 -1.01 -1.14 -1.28 0 0 0 0]; Ly=[6 7.55 8.98 10.4 6 7.61 9.16 10.4 6 7.71 9.17 10.4 6 7.67 9.16 10.4]; Lz=[1.354 1.704 2.081 2.359 .751 1.1955 1.4835 1.633 .45 .739 1.017 1.137 .237 .56 .708 .697;]; Kx=[-3.66 -3.73 -3.70 -4.15 -2.58 -2.71 -2.48 -2.69 -1.28 -1.2 -1.12 -1.22 0 0 0 0]; Ky=[10.4 12.79 14.93 17 10.4 12.68 14.85 17 10.4 12.81 14.91 17. 10.4 12.76 14.91 17.]; Kz=[2.359 2.325 1.849 1.463 1.633 1.6 1.293 .756 1.137 1.186 .9635 .662 .697 .702 .605 .242]; Jx=[-4.15 -4.19 -4.57 -4.45 -2.69 -2.83 -2.95 -2.99 -1.22 -1.37 -1.3 -1.54 0 0 0 0]; Jy=[17. 17.92 18.94 20.35 17 18.25 19.34 20.8 17. 18.32 19.28 20.68 17. 18.1 19.27 20.48]; Jz=[1.463 1.217 .854 .95 .756 .546 .3585 .427 .662 .457 .164 .09 .242 -.05 .0194 .033]; Ix=[-4.45 -4.59 -4.63 -4.74 -2.99 -2.94 -3.21 -3.28 -1.54 -1.53 -1.63 -1.14 0 0 0 0]; Iy=[20.35 20.92 21.49 22 20.8 21.29 21.77 22.73 20.68 21.76 22.27 23.43 20.48 21.37 21.87 22.84]; Iz=[0.95 .9 .99 .9 .427 .8035 .66 .56 .09 .4035 .65 .55 .033 .169 .6 .5]; Hx=[-4.74 -4.8 -4.8 -4.6 -3.28 -3.35 -3.68 -4.4 -1.14 -1.14 -1.58 -1.6 0 0 0 0]; Hy=[22 23.15 24. 25 22.73 23.86 25.29 26 23.43 24.67 25.59 27.13 22.84 23.89 24.89 26.11]; Hz=[.9 .81 .2 .6 .56 .46 .2 .9 .55 .45 .3 .9 .5 .4 .2 .9];
if FOOT=='r' n=1:10; a=11:21; nn=n; aa=a-10;
Gz(:,4)=Gz(:,3); Hz(:,4)=Hz(:,3);
elseif FOOT=='l' a=1:10; n=11:21; nn=n-10; aa=a;
end
%%%%%%%% PLOT FOOT SURFACE for j=1:1:11 for i=1:1:11 u=(i-1)/10; w=(j-1)/10; [Axi(i,j),Ayi(i,j),Azi(i,j)]=bez_surf(Ax,Ay,Az,u,w); [Bxi(i,j),Byi(i,j),Bzi(i,j)]=bez_surf(Bx,By,Bz,u,w); [Cxi(i,j),Cyi(i,j),Czi(i,j)]=bez_surf(Cx,Cy,Cz,u,w); [Dxi(i,j),Dyi(i,j),Dzi(i,j)]=bez_surf(Dx,Dy,Dz,u,w); [Exi(i,j),Eyi(i,j),Ezi(i,j)]=bez_surf(Ex,Ey,Ez,u,w); [Fxi(i,j),Fyi(i,j),Fzi(i,j)]=bez_surf(Fx,Fy,Fz,u,w); [Gxi(i,j),Gyi(i,j),Gzi(i,j)]=bez_surf(Gx,Gy,Gz,u,w); [Hxi(i,j),Hyi(i,j),Hzi(i,j)]=bez_surf(Hx,Hy,Hz,u,w); [Ixi(i,j),Iyi(i,j),Izi(i,j)]=bez_surf(Ix,Iy,Iz,u,w); [Jxi(i,j),Jyi(i,j),Jzi(i,j)]=bez_surf(Jx,Jy,Jz,u,w); [Kxi(i,j),Kyi(i,j),Kzi(i,j)]=bez_surf(Kx,Ky,Kz,u,w); [Lxi(i,j),Lyi(i,j),Lzi(i,j)]=bez_surf(Lx,Ly,Lz,u,w); [Mxi(i,j),Myi(i,j),Mzi(i,j)]=bez_surf(Mx,My,Mz,u,w); [Nxi(i,j),Nyi(i,j),Nzi(i,j)]=bez_surf(Nx,Ny,Nz,u,w);
%Heel cup %[HCxi(i,j), HCyi(i,j), HCzi(i,j)] = bez_surf(HCx1, HCy1, HCz1, u,w);
end end
n=1:10; a=11:21; nn=n; aa=a-10;
footx=zeros(21,71); footy=zeros(21,71); footz=zeros(21,71); footx(n,1:10)=Nxi(nn,1:10);footy(n,1:10)=Nyi(nn,1:10);footz(n,1:10)=Nzi(nn,1:10); footx(a,1:10)=Axi(aa,1:10);footy(a,1:10)=Ayi(aa,1:10);footz(a,1:10)=Azi(aa,1:10); footx(n,11:20)=Mxi(nn,1:10);footy(n,11:20)=Myi(nn,1:10);footz(n,11:20)=Mzi(nn,1:10); footx(a,11:20)=Bxi(aa,1:10);footy(a,11:20)=Byi(aa,1:10);footz(a,11:20)=Bzi(aa,1:10); footx(n,21:30)=Lxi(nn,1:10);footy(n,21:30)=Lyi(nn,1:10);footz(n,21:30)=Lzi(nn,1:10); footx(a,21:30)=Cxi(aa,1:10);footy(a,21:30)=Cyi(aa,1:10);footz(a,21:30)=Czi(aa,1:10); footx(n,31:40)=Kxi(nn,1:10);footy(n,31:40)=Kyi(nn,1:10);footz(n,31:40)=Kzi(nn,1:10); footx(a,31:40)=Dxi(aa,1:10);footy(a,31:40)=Dyi(aa,1:10);footz(a,31:40)=Dzi(aa,1:10); footx(n,41:50)=Jxi(nn,1:10);footy(n,41:50)=Jyi(nn,1:10);footz(n,41:50)=Jzi(nn,1:10); footx(a,41:50)=Exi(aa,1:10);footy(a,41:50)=Eyi(aa,1:10);footz(a,41:50)=Ezi(aa,1:10); footx(n,51:60)=Ixi(nn,1:10);footy(n,51:60)=Iyi(nn,1:10);footz(n,51:60)=Izi(nn,1:10); footx(a,51:60)=Fxi(aa,1:10);footy(a,51:60)=Fyi(aa,1:10);footz(a,51:60)=Fzi(aa,1:10); footx(n,61:71)=Hxi(nn,1:11);footy(n,61:71)=Hyi(nn,1:11);footz(n,61:71)=Hzi(nn,1:11); footx(a,61:71)=Gxi(aa,1:11);footy(a,61:71)=Gyi(aa,1:11);footz(a,61:71)=Gzi(aa,1:11);
%% Sphere piece
sphere_num=20; [X,Y,Z]=sphere(sphere_num);
Z(1:8,1:21) = 0; %is a semi-sphere
%% surface (footx) x (footy) x (footz)
%footy(I1:I2,I3:I4) = 2*Y(:,:)+15.5;
footxN = zeros(21,1); footxN(1:21,1) = NaN; footyN = zeros(21,1); footyN(1:21,1) = NaN; footzN = zeros(21,1); footzN(1:21,1) = NaN;
footzM = [footz footzN Z]; footxM = [footx footxN 2*X]; footyM = [footy footyN 2*Y+20];
hold on surf(footxM,footyM,footzM);
xlabel('x') ylabel('y') zlabel('z') axis equal
figure(2) clf('reset')
[solidx, solidy, solidz1] = surf2solid([footx], [footy], [footz]); [SX, SY,SZ] = surf2solid(2*X,2*Y,Z-0.5); solidz = zeros(27,77); solidz(3:25, 3:75) = solidz1(3:25, 3:75)-2.5;
SZ(:,1) = 6; SZ(:,2) = 6; SZ(:,26) =6; SZ(:,27) = 6;
solidxA = [solidx SX/7+1]; solidyA = [solidy SY/7+6]; solidzA = [solidz SZ/7-.3];
surf(solidxA, solidyA, solidzA);
xlabel('x') ylabel('y') zlabel('z') axis equal
0 Comments
Answers (0)
See Also
Categories
Find more on Surface and Mesh Plots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!