MATLAB Answers

How could I create stl file based on the ellipsoid command?

35 views (last 30 days)
Daniel Chou
Daniel Chou on 21 Dec 2020
Edited: Daniel Chou on 24 Dec 2020
I try several methods to write an stl file based on the ellipsoid geometry.
But I haven't find way to successfully do it.
Following is my code
clear
clc
close all
[x, y, z] = ellipsoid(0,0,0,5.9,3.25,3.25,30);
s=surf(x,y,z)
p=surf2patch(s)
%Extract faces and vertices from structure p
pf=p.faces
pv=p.vertices
tr=triangulation(pf,pv)
stlwrite(tr,'ell.stl')
The message ''Tetrahedron triangulation is not supported.'' appears, I know I could use ''boundaryFacets'' command to solve this problem, but I don't know how to create an alphaShape of ellipsoid.
Could anyone gives me a hint?

  0 Comments

Sign in to comment.

Accepted Answer

Aditya Patil
Aditya Patil on 24 Dec 2020
stlwrite only support triangles.
You can get the alphaShape of ellipsoid using the alphaShape function.
shp = alphaShape(tr.Points)
There is also the freeBoundary function.
[F,P] = freeBoundary(tr)
trNew = triangulation(F,P)
stlwrite(trNew, "freeboundary.stl")

  1 Comment

Daniel Chou
Daniel Chou on 24 Dec 2020
Dear @Aditya Patil
I sincerely appreciate for your assistance.
You save me from this haha.
Before viewing your suggestion, I already used the freeboundary method to create the stl file. However, the mesh quality is a disaster, I'm still trying to figure out how to solve it.
After reading your hint I try to modify my code as follow,
clear
clc
close all
%input the properties of ellipsoid by ''ellipsoid'' function
[x, y, z] = ellipsoid(1,1,1,5.9,3.25,3.25,30,5);
%Convert the ellipsoid to surface via ''surf''
s=surf(x,y,z)
%from surface to patch: generate the faces and vertices
p=surf2patch(x,y,z)
%Extract faces and vertices from structure p
pf=p.faces
pv=p.vertices
tr=triangulation(pf,pv)
sha=alphaShape(tr.Points)
%Using larger sha.Alpha to imprive the quality of mesh
sha.Alpha=5
plot(sha)
%Extract boundary face of alphaShape
[F,P]=boundaryFacets(sha)
%New set of triangulation
Newtr=triangulation(F,P)
%Export stl file
stlwrite(Newtr, "ell_3.stl")
I got an adorable ellipsoid stl file with steady mesh quality, which allows me to do re-meshing work in meshmixer and further model manipulation in solidworks.
Thank you very much again!!
Sincerely yours
Daniel Chou

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by