Matlab 如何将delaunay三角剖分转换为.stl(立体光刻)格式?

Matlab 如何将delaunay三角剖分转换为.stl(立体光刻)格式?,matlab,triangulation,cad,Matlab,Triangulation,Cad,我发现了几种工具,可以将MATLAB中的等值面-class或网格数据转换为STL格式。例子包括和。我不太清楚的是如何获取一个对象,并使用它创建STL文件或将其转换为等值面对象。 根本问题是,我从不规则多边形的N×2边界点数组开始,所以我没有任何简单的方法来生成xyz网格。如果有办法将边界列表转换为内部区域的等值面(我只需要恒定的Z高度),也可以解决我的问题。 否则,我需要某种方法将delaunayTriangulation对象转换为引用的MATLAB FEX工具可以处理的对象 编辑以响应Ande

我发现了几种工具,可以将MATLAB中的
等值面
-class或
网格
数据转换为STL格式。例子包括和。我不太清楚的是如何获取一个对象,并使用它创建STL文件或将其转换为等值面对象。
根本问题是,我从不规则多边形的N×2边界点数组开始,所以我没有任何简单的方法来生成xyz网格。如果有办法将边界列表转换为内部区域的等值面(我只需要恒定的Z高度),也可以解决我的问题。
否则,我需要某种方法将
delaunayTriangulation
对象转换为引用的MATLAB FEX工具可以处理的对象

编辑以响应Ander B的建议: 我在MATLAB中验证了我的三角化集是一个圆的二维扇形。但是,当我将数据输入到
stlwrite
,并导入到
Cura
,我会得到一个灾难——直角三角形或从所需角度旋转pi,或者更糟。这是因为
stlwrite
的错误,Cura对某些意外值很敏感,还是两者兼而有之,我无法判断。以下是从光盘开始的内容: 例如,这里有一组点定义了圆的一个扇区。我可以从这些数据成功创建delaunayTriangulation对象

>> [fcx1',fcy1']
ans =
  100.4563   26.9172
   99.9712   28.6663
   99.4557   30.4067
   98.9099   32.1378
   98.3339   33.8591
   97.7280   35.5701
   97.0924   37.2703
   96.4271   38.9591
   95.7325   40.6360
   95.0087   42.3006
   94.2560   43.9523
   93.4746   45.5906
   92.6647   47.2150
   91.8265   48.8250
   90.9604   50.4202
   90.0666   52.0000
   89.1454   53.5640
   88.1970   55.1116
   87.2217   56.6425
   86.2199   58.1561
   85.1918   59.6519
   84.1378   61.1297
   83.0581   62.5888
   81.9531   64.0288
   80.8232   65.4493
   79.6686   66.8499
   78.4898   68.2301
   77.2871   69.5896
   76.0608   70.9278
   74.8113   72.2445
   73.5391   73.5391
   72.2445   74.8113
   70.9278   76.0608
   69.5896   77.2871
   68.2301   78.4898
   66.8499   79.6686
   65.4493   80.8232
   64.0288   81.9531
   62.5888   83.0581
   61.1297   84.1378
   59.6519   85.1918
   58.1561   86.2199
   56.6425   87.2217
   55.1116   88.1970
   53.5640   89.1454
   52.0000   90.0666
   50.4202   90.9604
   48.8250   91.8265
   47.2150   92.6647
   45.5906   93.4746
   43.9523   94.2560
   42.3006   95.0087
   40.6360   95.7325
   38.9591   96.4271
   37.2703   97.0924
   35.5701   97.7280
   33.8591   98.3339
   32.1378   98.9099
   30.4067   99.4557
   28.6663   99.9712
   26.9172  100.4563
   25.1599  100.9108
   23.3949  101.3345
   21.6228  101.7274
   19.8441  102.0892
   18.0594  102.4200
   16.2692  102.7196
   14.4740  102.9879
   12.6744  103.2248
   10.8710  103.4303
    9.0642  103.6042
    7.2547  103.7467
    5.4429  103.8575
    3.6295  103.9366
    1.8151  103.9842
         0  104.0000
   -1.8151  103.9842
   -3.6295  103.9366
   -5.4429  103.8575
   -7.2547  103.7467
   -9.0642  103.6042
  -10.8710  103.4303
  -12.6744  103.2248
  -14.4740  102.9879
  -16.2692  102.7196
  -18.0594  102.4200
  -19.8441  102.0892
  -21.6228  101.7274
  -23.3949  101.3345
  -25.1599  100.9108
  -26.9172  100.4563
         0         0

STL只是一种存储在内存中的网格信息的格式,因此,如果你有一个网格,你只需要使用正确的格式将数据写入内存

您似乎将顶点和面输入到
stlwrite
函数中,如下所示:

stlwrite(FILE, FACES, VERTICES);
delaunayTriangulation
输出为您提供了一个可以轻松访问此数据的对象,对于对象
DT
DT.Points
是顶点,
DT.ConnectivityList
是面


您可以在链接的文档中阅读更多信息。

基于Ander B的答案,以下是完整的顺序。这些步骤确保正确处理凹面多边形

从包含所有
x
y
坐标的两个向量开始。然后:

% build the constraint list
constr=[ (1:(numel(x)-1))' (2:numel(x))' ; numel(x) 1;];
foodel = delaunayTriangulation(x',y',constr);
% get logical indices of interior triangles
inout = isInterior(foodel);

% if desired, plot the triangles  and the original points to verify.
%  triplot(foodel.ConnectivityList(inout, :),...
    foodel.Points(:,1),foodel.Points(:,2), 'r')
% hold on
%  plot(fooa.Points(:,1),fooa.Points(:,2),'g')

% now solidify
%  need to create dummy 3rd column of points for a solid
point3 = [foodel.Points,ones(numel(foodel.Points(:,1)),1)];
% pick any negative 'elevation' to make the area into a solid
[solface,solvert] = surf2solid(foodel.ConnectivityList(inout,:),...
    point3, 'Elevation', -10);  

stlwrite('myfigure.stl',solface,solvert);

我已经成功地将一些“丑陋”的凹多边形转化为STL,Cura很乐意将其转化为gCode。

Ahh。。就是这样:我没有意识到“脸”意味着连通性。我会尝试一下,然后再报告。遗憾的是,在我最初的测试中,这并没有产生正确的数字。请参见对问题的编辑。@CarlWitthoft链接图像。Imgur今天表现得很奇怪Imgur又开始运行了--请看张贴的图片。感谢这可能有用:获取我的连接列表和点,并使用
surf2solid
强制厚度,`[面,顶点]=surf2solid(foocl,foopp,'thickness',10,'Elevation',-10);`。初步测试成功。