Convert 3D coordinates to stl surface

21 vues (au cours des 30 derniers jours)
Bewler
Bewler le 23 Sep 2019
So I have an issue from coordinate data[X,Y,Z]. It appears you can use stlwrite to readily convert vertice and face data or X,Y 2D delaunay triangulated graphs to stl files however, since I only have coordinate data [X,Y,Z] I cannot convert the delaunay triangulated object to an stl file because the delaunay functions convert it into tetrahedron instead of a 3D surface. Is there any solution to generate a surface from XYZ coordinate data and export out as an STL file? I cannot seem to find a solution unless there is already facet and vertice data.
Edit: Looks like boundary facets can give me what I'm looking for
Current implementation
X = table(:,1)
Y = table(:,2)
Z = table(:,3)
tri = delaunaytriangulation(X,Y,Z);
stlwrite(tri, 'filename.stl','ascii')
  2 commentaires
darova
darova le 23 Sep 2019
Please attach your data
Bewler
Bewler le 24 Sep 2019
Modifié(e) : darova le 17 Juin 2020
Here's the data.
I can seem to do
tri = delaunay(X,Y);
trisurf(tri,X,Y,Z);
and it comes out perfectly with heights and transitions and faces between the triangles...
When I try to plot it as an stl, the faces are very incorrect however the coordinate data is correct
tri = delaunay(X,Y,Z);
stlPlot(dataTable,tri, 'stlplot')

Connectez-vous pour commenter.

Réponses (3)

Fabio Freschi
Fabio Freschi le 25 Sep 2019
I don't know where the stlPlot function comes from, so I cannot replicate your problem. Anyway, your call
tri = delaunay(X,Y,Z);
Creates a delaunay triangulation with 3d simplexes, e.g. with tetrahedra (four-node volume elements). Maybe this is why you get the wrong result.
  4 commentaires
Fabio Freschi
Fabio Freschi le 25 Sep 2019
In your case it is maybe better to triangulate the surface in the xy plane
% triangulate in xy
T = delaunay(X,Y);
% create triangulation in 3d
tri = triangulation(T,X,Y,Z);
% plot
patch('Faces',tri.ConnectivityList,'Vertices',tri.Points,'FaceColor','red')
% now save
stlwrite(tri,'mytriangulation.stl');
tar abu
tar abu le 17 Juin 2020
hey
can you please send me the stl file.
i need it in "nameofthefile.stl"
thank you

Connectez-vous pour commenter.


darova
darova le 25 Sep 2019
I took your data and did this:
A = xlsread('data.xlsx');
X = A(:,1);
Y = A(:,2);
Z = A(:,3);
stlwrite('file.stl',X,Y,Z)
fv = stlread('file.stl')
patch(fv,'FaceColor', [0.8 0.8 1], ...
'EdgeColor', 'none', ...
'FaceLighting', 'flat', ...
'CDataMapping', 'direct', ...
'AmbientStrength', 0.5);
camlight
axis equal
Is it wrong?
img1.png
  3 commentaires
darova
darova le 25 Sep 2019
I downloaded stlwrite() from HERE
Bewler
Bewler le 25 Sep 2019
It says patch doesn't have enough input arguments. I'm still trying to see the stl file.

Connectez-vous pour commenter.


FRANCESCO OTTAVIANI
FRANCESCO OTTAVIANI le 19 Déc 2022
This code worked in my case
clear global;
A = readmatrix('point3d.txt');
B = unique(A,'rows');
X = B(:,1);
Y = B(:,2);
Z = B(:,3);
% triangulate in xy
T = delaunay(X,Y);
% create triangulation in 3d
tri = triangulation(T,X,Y,Z);
% plot
patch('Faces',tri.ConnectivityList,'Vertices',tri.Points,'FaceColor','red')
% now save
stlwrite(tri,'point3d.stl');

Produits


Version

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by