图像缩略图“itemprop=

stlwrite - 写ASCII或二进制STL文件

版本1.9.0.0(10.6 kB) 斯文
将各种输入(贴片,表面)导出到STL三角网格
4.9
73评级

149下载

更新2018年5月4日

查看版本历史记录

查看许可证

**奥利弗·伍德福德的大力提速。建议更新至最新版本**
stlwrite(文件,fv)将立体缩影(stl)文件写入文件
由fv定义的三角形修补程序(具有字段顶点的结构)
和“面孔”)。

STLWRITE(文件,面,顶点)分别呈现面和顶点,
而不是FV STRUCT

stlwrite(文件,x,y,z)从x,y的曲面数据中创建STL文件,
和Z。stlwrite将网格化数据三角化为三角化数据
表面使用下面指定的三角测量选项。x,y和z可以是
具有相同尺寸的二维阵列。如果x和y是vectors
长度等于尺寸(z,2)和尺寸(z,1),它们通过
通过网格格林格创建网格数据。如果x或y是标量值,
它们用于指定栅格点之间的X和Y间距。

stlwrite(...,'propertyname',value,'propertyname',value,...)写入
使用以下属性值的STL文件:

MODE -文件使用'binary'(默认)或'ascii'写入。

标题 - 写入STL文件的标题文本(最多80个字符)。

三角测量 - 与网格数据一起使用时,三角测量要么:
'delaunay' - (默认)X,Y的Delaunay三角测量
'f' - 网格四边形的前向斜线分割
'B' - 背部斜线分割四分之一
'x' - 四边形的跨行
请注意,“F”,“B”或“T”三角形现在使用
内置FEX条目28327,“mesh2tri”。

FACECOLOR -单色(1 × 3)或一色一脸(n × 3)
RGB颜色矢量,面部/顶点输入。RGB系列
是5位(0:31),存储在Viscam / SolidView格式中
http://en.wikipedia.org/wiki/stl_ (file_format )#color_in_binary_stl.

例1:
%从面部/顶点数据写入二进制stl
tmpvol = false(20,20,20);%空体素卷
tmpvol(8:12,8:12,5:15)=1;%打开一些体素
fv = isosurface(〜tmpvol,0.5);%制作补丁w。面对“出来”
stlwrite('test.stl',fv)%保存到二进制.stl

例2:
%写入网格数据中的ASCII STL
[x,y] =交易(1:40);%创建网格参考
z =峰(40);%创建网格高度
stlwrite('test.stl',x,y,z,'mode','ascii')

例3:
%写带有彩色面的二进制STL
cvals = fv.vertices(fv.faces(:,1),3);z高度的%颜色。
cLims=[最小值(cVals)最大值(cVals)];%变换高度值
ncols = 255;CMAP = JET(NCOL);%到8位颜色地图上
fcolsdbl = Interp1(Linspace(LINSPACE(LINGS(1),Chems(2),NCols),CMAP,CVALS);
fcols8bit = fcolsdbl * 255;%通过8bit(0-255)RGB三联体
stlwrite('testcol.stl',fv,'facecholor',fcols8bit)

引用为

Sven(2021)。stlwrite - 写ASCII或二进制STL文件(//www.tatmou.com/matlabcentral/fileexchange/20922-stlwrite-wroite-binary-stl-files),matlab中央文件exchange。检索到

评论和评级(150.

梅诺纳

以利亚乌切

你好,
请我需要帮助,如何将我在MATLAB中生成的粗糙表面模型转换为一个.stl文件,使其与CST兼容。
我试图使用这个代码,但我似乎没有达到正确的转换。
请恳求我。
谢谢

amir minofar.

有人可以告诉我我该怎么办?
它给我错误,说不能写文件。

无法写入test.stl

我正在使用简单的一个只是为了测试:
[x,y] =交易(1:40);%创建网格参考
z =峰(40);%创建网格高度
surf2stl('test.stl',x,y,z)

际都 于

奥利维尔毛泽地

Craig Puetz.

我一直在尝试使用此代码而不会成功。我可以使用MATLAB命令Trisurf和Surf生成3D图。我已经绘制了纬度,经度坐标,以及我使用MeshGrid生成的基于距离的网格。我的一些数据包含NaN,因为表面不是矩形区域。我尝试删除这些点,以及将它们全部设置为略低于我最低的真正高度的地板。

我没有通过任何这些数据集成功。STLWRITE(以及来自其他MATLAB中央常规SURF2STL和SURF2SOLID)的结果是平面,位于我不理解的Z坐标系上。有人可以帮助想法吗?提前致谢。

Balacaander Gnanasekaran.

嗨Sven,
我用了这个功能,它完美地工作。是否有一种方法来修改代码,使得用户给出的最大面部数量?
谢谢你。

洪阳周

Chaimaa Hermama.

你好
伟大的工作,谢谢。
一件事我观察到我不能在一个文件中产生多于一个表面(例如:球形)。那我该怎么做?
顺致敬意,

Stephan Schmiemann.

伟大的工作,完美的工作。
当我试图出口球体时,我注意到了一件事。在两个或多个顶点均落在的极点上,不能计算平面法线(由于零长度的Vektor的标准化)。这可以在其他程序中产生错误。
我加入了“方面=突起”(:,:,〜挤压(任何(任何(朝南)))));“在创建的方面之后。这忽略了零区的所有方面。

YAEJI KIM

非常酷!谢谢!

b秋

我的数据是医学图像数据。例如,CT图像中存在像素间隔和厚度。数学上,像素间隔意味着每个二维像素的中心之间的物理距离。
有人知道如何在此代码中设置像素间隔和厚度吗?

Eugenio grabovic

它始终只写三个面,甚至是例子。

樱桃

伟大的工作,谢谢分享!
然而,当使用二进制格式时,我需要在单个文件中编写许多小实体(单独的卷),我已经尝试过多次修改代码,但都没有成功。
拜托,有人可以帮忙吗?如何在单个STL文件中为二进制格式添加多个单独的实体?
先感谢您!

伊娃胡椒

Gaetano Mallardo.

通过(名称,元素矩阵3x3,xyz nodescordinates)正常工作

WA18784

嗨有人帮助 - 我试图使用此功能创建多维数据集的STL文件。像12个三角形的补丁工作一样,图形窗口出现了很好,并且STL函数工作正常,直到我在查看器中查看STL文件,我可以看到的只是一条直线而不是立方体。
这些是我的V和F值和代码,我正在使用:

v2 = [0 0 0;
2 0 0;
0 2 0;
2 2 0;
0 0 2;
2 0 2;
0 2 2;
2 2 2];

ftri =

[1 2 4;
1 4 3;
1 2 6;
1 6 5;
5 6 8;
5 8 7;
3 4 8;
3 8 7;
2 4 8;
2 8 6;
1 3 7;
1 7 5;]
图1)
cube = patch('faces',ftri,'顶点',v1,'facealpha',1,'facecholor','green');
轴相等

stlwrite('cube',ftri,v1)

严厉的耆那教

唐纳德休谟

Baisseyev Miram.

威廉武器

乔恩国王

如何使用stlwrite为具有指定节点坐标的图表生成.stl文件,以及不同的更高重量?

道格拉斯烹饪

我的经验是,这并不像Bill McDonald的那样旧的Surf2stl那么强大。

E谢内

Ringo Cheung.

嗨Sven,

这个stlwrite模块非常棒,它在生成.stl文件方面帮助很大。
现在我成功地使用patch命令在Matlab中创建了一个彩色的3D模型。然而,当我使用stlwrite导出它时,根本就没有颜色。
我尝试使用stlwrite('filename.stl',fv,'facecholor',[0 0 1]);但是没有颜色可以输出,当我使用Microsoft 3DBuilder查看它时,该文件仍然无色。我做错了什么,或者语法不正确吗?请帮忙。
谢谢,
林诺

亚山

嗨,Sven.
如何将从2D堆叠掩码生成的3D卷转换为.stl

齐渡

Monique Pienaar.

谢谢你的分享。一个问题如何在x = 0处在yz平面中创建一个表面?错误delanunay三角测量 - 积分可能是conlinear?

b秋

嗨,Sven,谢谢你的共享。但我仍然有问题。因为我的模型非常锯齿。是否有可能为我的STL模型做平滑?

斯文

@Alejandro:有两个问题:(1)除非您是*函数,否则您不使用关键字“函数”。在这里,您只需使用该功能。(2)Z的大小应为“Z = =(6000,3000);”匹配X和Y的尺寸。

斯文

@ rff123:你写道,你有“所有点的坐标,n×4,命名为a”。这只是一个错字吗?3D点将是NX3。啊......我想我看到你的意思 - 第一列是一个索引。但是,你说你的*四面体*数据是mx4?

STL文件采用三角形面(MX3),而不是三维金字塔状形状。所以基本上,您需要识别您的面孔和顶点。顶点很容易(注意:您的数据未包装,以便您的x,y,z变量对我没有意义):

顶点= a(:,2:4);

接下来,您需要面部。也许你的意思是你的变量b定义*四边形*?如果是这样,请执行以下操作:

面孔=三角形窗口(b)

stlwrite('test.stl',faces,顶点)

斯文

@ rff123:你写道,你有“所有点的坐标,n×4,命名为a”。这只是一个错字吗?3D点将是NX3。啊......我想我看到你的意思 - 第一列是一个索引。但是,你说你的*四面体*数据是mx4?

STL文件采用三角形面(MX3),而不是三维金字塔状形状。所以基本上,您需要识别您的面孔和顶点。顶点很容易(注意:您的数据未包装,以便您的x,y,z变量对我没有意义):

顶点= a(:,2:4);

接下来,您需要面部。也许你的意思是你的变量b定义*四边形*?如果是这样,请执行以下操作:

面孔=三角形窗口(b)

stlwrite('test.stl',faces,顶点)

Alejandro Fernandez.

你好,

我尝试对网格数据使用stlwrite函数stlwrite(FILE,X,Y,Z),并且我遵循的用法与代码描述中提供的示例2相同。
但是,我得到了以下可能很愚蠢的错误:error:File:stlwrite.m行:1列:34
意外的MATLAB表达。
当我把鼠标放到第34行(mode的开头),它会产生以下消息:
“在”模式“解析错误:使用可能是无效的MATLAB语法''。

请在此处查找代码提取物:

filename ='firsttest.stl'
z = =(30006000);
y =(1:6000);
X = (1:3000);
函数stlwrite(filename,x,y,z,'mode','ascii');

我已经通过转移了传输,使用双引号删除“Mode”参数来审议。
谢谢
Alejandro.

RFF123

你好,
我有一些问题。现在我有了所有点的坐标,n×4,命名为A,数据的第一列是这些点的序列号。此外,我有所有四面体的四点序列号,m×4,命名为B的数据,我尝试了许多方法来获得正确的.stl文件,但它不起作用。
①x=A(:,2);y=A(:,3);z=A(:,4);
stlwrite('test.stl',x,y,z);
结果是“重复的数据点已经被检测到并被移除……”
②然后,我遵循JD的评论(2013年4月11日),使用Mesh2Tri生成F和V,
[f,v] = mesh2tri(x,y,z,'f');
但是f = [],它是空的。
③从tetra_data(m×4)获得TRI_DATA(P×3),例如。
[1 2 3 4] = [1 2 3; 1 2 4; 1 3 4; 2 3 4]
named C, and, stlwrite((‘test.stl’,C,A), then get the .stl file, but I found the normal vector of these facets are disunity, when I used the other software(DEFORM) to open this file ,I get the warning:It seems that the geometry contains open surfaces,.....
你能帮我吗?我做错什么了吗?非常感谢你的工作和时间。

瑞安·斯科特

菲利普贝茨

伟大的东西,正是我需要的,适用于Delauny函数的输出,以生产导入CloudCompare / Polyworks Metrology软件的文件。

斯文

@Duc,你的问题是你在四边形(4点)中定义了你的脸,而STL是三角格式(3点)。有一个包叫geom3d由David Legland,它包含一个简单的triangulateFaces函数。你可以传递你的F,变量如下:

ftri =三角形窗口(f)
stlwrite('yourFile.stl',Ftri,V)

当偶尔出现这个问题时,我会明确检查。

Duc阮

你好。我正在尝试导出Tesselated鼠标Atlas的STL文件,以便我可以在COMSOL上工作。ATLAS文件中的面部是NX4矩阵,顶点是NX3矩阵。这导致您的重塑失败。请指教。

斯文

@Sheldon,没有部分stlwrite会做你描述的。也许你通过四边形数据而不是三角形数据?(如果您有顶点和面部,那么您的矩阵矩阵的尺寸是多少?)也许你有网格数据,你选择'x'三角测量?没有更多的信息,很难告诉 - 例如,我也不确定你的意思是通过将你的点转换给笛卡尔坐标(不是他们已经?)

谢尔顿桥梁

我正在使用stlwrite函数导出三角模型的问题。每当我导出文件时,它会将我的等标三角形更改为右三角形。我试图将点转换为笛卡尔坐标,但它仍然不起作用。在STLWRITE功能中有什么东西可以改变,因为不发生这种情况?

斯文

@steven:在那个情况下,我认为你应该从第一个stlwrite示例开始,看看它是否适合您。如果示例是有效,但您的内容没有,那么故障排除会识别示例和数据之间的不同情况。请注意,在示例中,命令:“图形,修补程序('faces',fv.faces,'顶点',fv.verces,'facecholor','g')”用于制作一个漂亮的3D数字。对你起作用吗?也许你的面孔和顶点不是n-by-3的双打?

史蒂文刘易斯

我只是在IsoSurface创建的FV变量中致电。

斯文

@Steven Lewis:
这些大小的数据似乎是合理的 - 我不会指望它在内存问题上失败。两个潜在问题:(1)您是否以正确的顺序与面部/顶点呼叫?如果单独传递,签名是STLWRITE(文件,面,顶点)。如果仍然遇到麻烦,您可以通过电子邮件向我发送示例数据(Gmail的Sven Dot Holcombe)。

史蒂文刘易斯

每次尝试保存我的FV文件时,我都会收到错误,说索引超过矩阵维度。然后在stlwrite中出错(第133行);C0 = BITER(Bitshift(Bitand(2 ^ 6-1,FaceColor(:1),10),C0)。我的Fv变量包含78576 x 3面,26192 x 3,两者都是双精度。我没有这些FV变量的纹理或颜色组件。有什么建议么?

法耶兹Alkadi可并

你好,
无论如何要在3D方向上偏移STL文件。我知道Surf2solid将薄表面变为固体部分。但我正在寻找的是抵消STL身体。例如,正偏移因子使体更大并返回新顶点,负偏移因子使身体变小并且还返回新顶点。
每个BergStröm的IGES工具箱中的功能(TransformStl.M)只转换STL。但是,除了STL而不是IGES文件格式之外,我正在寻找的是(offstiges.m)。

有什么功能可以做到这一点吗?
太感谢了

里马塔宁维尔酒店

伟大的工具!我唯一会添加到描述的情况是在使用ASCII格式(调整权限)时如何追加多个实体,以及使用二进制格式时如何在单个文件中编写多个单独的卷(即使在将数据传递到之前完成stlwrite)。

卡尔特斯特

一个建议:要处理可能的“不平衡”输入面部/顶点集,请将此代码放在近线85中:

facefoo = faces';
facefoo = facefoo(1 :( end - mod(numel(facefoo),9)))));
刻面=重塑(刻面(:,面部),3,3,[]);

斯文

@greg fivash.
您的问题是,您已经定义了四边形(4点)的面,而STL是一种三角形格式(3点)。David Legland提供了一个名为geom3d的包,其中包含一个简单的三角形面函数。您可以按如下方式传递F变量:

ftri =三角形窗口(f)
stlwrite('yourFile.stl',Ftri,V)

直到

非常感谢,工作完美的东西从Matlab到OpenSCAD,然后变成现实!

斯文

@Phuong tran:
您是否检查过我的surf2solid文件交换条目?它可能只是您所寻求的,因为它允许您抵消表面以将无限薄的表面变为封闭的容积。

格雷格Fivash

我看到很多人从这个脚本中得到了积极的结果,但我遇到了一些非常基本的问题。我使用面和顶点定义了一个多维数据集,它可以使用patch()正确地显示,但它不能导出为.stl文件的同一个多维数据集。当文件导出时,似乎对顶点之间的面连接有一些误解。有人知道我的情况会出什么问题吗?

我的立方体:
v = [0 0 0;
1 0 0;
0 1 0;
1 1 0;
0 0 1;
1 0 1;
0 1 1;
1 1 1];

f = [1 2 4 3;
1 2 6 5;
5 6 8 7;
3 4 8 7;
2 4 8 6;
1 3 7 5;

Phuong Tran.

谢谢Sven,
我只是想知道我们是否可以在转换为STL格式之前或之后加厚表面。
谢谢

詹姆斯·克定

乔纳森镇

乔纳森镇

在第81行中重写的第三个参数应该是尺寸(面,2)而不是3,以便为每个补丁表面进行可变数量的面。除此之外,良好的工作。

曼努埃尔卡尔沃

对我来说是诀窍!

只有两个提示我为初学者(如我)有用,如果添加到文档,我认为会有所帮助:

- 您可以从VolumeTric 3D阵列创建De Face-Vertices结构,例如,使用您的数据:
fv = isosurface(x,y,z,v);
其中X、Y、Z是具有体积阵列尺寸的向量。

-字符串参数“FILE”或“filename”(无论您如何称呼它)必须包含“.stl”扩展名,否则您将创建一个不是该格式的文件。花了五分钟弄明白了lol,以为它会被脚本添加进去。

Alexander Laut.

没关系,我找到了翻转正常的简单解决方案。说你用过:
stlwrite([名称,'。stl'],con + 1,pts,'mode','ascii');%将镜像信息导出到STL格式

简单地:
反对=[反对(:1)反对(:,3)反对(:,2)];

它会绕着每个三角形向另一个方向移动,为你翻转法线。

Alexander Laut.

是否有一种方便的方式将正常作为选项翻转。有时我将构建网格的对称区域,将(x,y,z)转换为(x,-y,z),内部将成为外部。

Amirali Nojoomi.

李哲

Stingar

这对我来说非常好!是否有一种简单的方法来致密模型?形状应该是相同的,但具有更多的三角形/顶点/面。

曼努埃尔·索达

拉马希·库拉维

我已经能够调整permissions命令以用于附加ascii类型的stl文件。但这似乎不适用于二进制格式的文件。请告知。

杨施

谢谢!适用于ADAM A的“STL至ACIS SAT转换”,以便为许多CAD程序进行实体转换。

Blupp.

斯文

@Daschulka,是的,一个STL文件有三角形和面,所以你需要把你的点云变成一个网格来制作一个STL文件。解决方法总是取决于你的特定问题-一些简单的形状可以使用Delaunay三角剖分,但它将全部取决于你的点云和你想要的网格。

daschulka.

你好呀,

我一直在寻找一个解决方案来接收使用STLWRITE后接收开放表面,就像亚历山德拉一样,但无法在评论中找到解决方案。

解决方法是什么?我的输入数据是一个点云...需要首先变成网格吗?如果是这种情况,您使用哪种功能来解决问题?

非常感谢您的帮助!

丹制动器

只是我需要从Matlab曲面3D打印。至少如果对象具有明确定义的内部。现在找到一个好的救助......仍在等待那个。

雪莉李

丹查韦斯

伟大的工作,非常有用!

Chih-hao.

Iñigomoreno

Noid Eaman.

我能够解决这个问题。您的代码在一起工作美妙。我怀疑我本可以以任何其他方式做得更好。

谢谢!

@sven.

我已经为我的2D映像工作了代码 - 使其成为冲浪(),然后将完全导出到SolidWorks。我想要将厚度或全卷添加到Surf2Solid脚本中。

有没有办法拍摄Surf2Solid'块'并将其传送到与stlwrite()的。

谢谢您的帮助!此代码很棒。

Mahmoud Taha.

撕裂丝岩

@sven.

谢谢您的帮助!但它仍然在坚实的基础上创造了类似的东西,就像一张纸一样。

斯文

@Thalles.

很难排除故障而不能够重现错误,但这是拍摄2D图像的方法,并生成其Surf()结果的STL。它是否为您提供了如何解决问题的线索?

我= imread('rice.png');
I2 = CONV2(DOUBLE(I),ONE(5)/ 5,'有效');%让它变得有点顺畅
数字
Sh =冲浪(I2);
%get xdata和ydata作为网格(不是矢量)
[XD,码]= meshgrid (sH.XData sH.YData);
stlwrite('testsurf.stl',xd,yd,sh.zdata)

撕裂丝岩

嗨Sven,谢谢你真正的工作!

我和我的stl有一些问题,你可以帮帮我吗?

我有一个图像,我正在读它并转换为双重图像。然后我选择了3个(RGB)片之一矩阵以用函数表面()冲浪,使我提供
propertys xdata,ydata和ydata在您的writestl()中使用,但它在坚实的基础上创建了类似的东西,如表格,当我在cubepro软件上打开这个stl时,打印,我收到了一个坏文件消息。

你能帮助我吗?难道我做错了什么?

谢谢你。

屈宏斌林

我创建一个结构并解决,谢谢你的代码。

屈宏斌林

你好,Sven。
我有一个顶点p矩阵:8x3
和三角形T矩阵:12x3
我使用了stlwrite('test.stl',t,p),但我收到了:
试图访问FaceColor(:,1);索引超出范围,因为尺寸(faceColor)= [0,0]。
stlwrite中的错误(第133行)
C0 = BITER(Bitshift(Bitand(2 ^ 6-1,FaceColor(:1)),10),C0);
我很困惑如何使用你的命令。谢谢你

山姆金

David Verrelli.

你好,Sven。
在威尔的评论(2015年3月29日)之后,如果我以ASCII模式书写,我也会收到一条明显不正确的信息:我始终得到“写入的4个方面”。当我以二进制模式写入时,我得到了正确的值:例如149194个面或205532个面,通过检查作为输入提供的面数进行验证。除了这个小故障,ASCII文件到目前为止似乎还不错。
谢谢你的贡献。
-div.

伊利亚·贝尔维奇

斯文

嗨,本杰明,我怀疑你的问题只是你在使用哪个阅读器。如果您的软件不能解释所选择的颜色格式(参见帮助内容),那么它看起来就像什么都没有改变。

参见例如2013年9月左右以下对此文件的评论 - 其他软件(Meshlab和Paraview)不会解释此版本的颜色,而其他软件(Viscam)则。

Beniamin Bogosel.

您使用FaceColor提供的示例似乎并不起。添加面部颜色会产生与无颜色相同的输出。

拉吉·罗伊

伟大的工作,帮助了很多

斯文

你好,Tyron,很抱歉回复得这么慢。我认为大多数的实体网格将在网格的下游完成——我希望Abacus本身有一个“四网格”功能,可以用实体元素填充一个封闭的STL体积。

典型的澳大利亚

嗨Sven,谢谢你这项工作!
我已经组合了几个修补程序来形成封闭的3D对象,并使用您的功能导出到* .stl。我如何“巩固”这一点,以便它可以在ABAQUS中啮合?

Murat Aykin.

简单而漂亮。

江水洪

你能教我如何使用它吗?我是如此愚蠢。

斯文

@Nithish:请以一种清楚地描述你有什么问题的方式制定你的问题。

斯文

@matthias:

最重要的步骤:

1.将数据置于两个变量:
“顶点”(XYZ坐标的NX3阵列。如果您有10个坐标,它将是一个10x3数组)
面部的“Faces”(FACES)为您的面部的整数号码(1,2,3,4等)。如果点5,6和3形成第一三角形,则该变量的第一行将是[5 63; ...])

2.运行命令:
图,修补程序('面,面,'顶点',顶点,'facecholor','g')

如果您无法获取这两个步骤来工作,那么STLWRITE也不会为您工作,因此尝试尝试和锻炼为什么无法编写STL文件,这将不会有帮助。

斯文

@Gaétan.

这是我将如何为stlwrite(或patch()命令)准备一个气缸。请注意,我正在使用David Legland的优秀Geom3D文件Exchange条目中的Surftomesh()和三角形窗口()函数:

[x,y,z] =气缸(1,10);
[顶点,faces4] = surftomesh(x,y,z,'xperiodic',true);
Faces3 =三角形窗口(Faces4);
stlwrite('file.stl',faces3,顶点)

图,补丁(“面孔”,Faces3,'顶点',顶点,'FaceColor','G')

nithish kalakonda

你好Sven,

谢谢你的代码。但是我不明白的是如何通过我的数据来将数组存放到STL中?

GaétanAülo

你好,先,谢谢你的贡献!
我的出口有点问题。由于气缸状形状,我的图中的大量点具有相同的X和Y坐标(但不同的Z)。因此,使用坐标参数的导出不会给我一个适当的STL文件。我目前正在寻找一种方法来创建一个三角形的我的几何形状,因为你在程序中提到它,但我真的不知道如何。你可能知道如何..?再次感谢你的时间和你的工作。

nithish kalakonda

我将我的文本数据存储到数组中。但我不明白如何将我的数组作为输入。可以请有人帮助我

马蒂西亚斯

谢谢你的回答。
我试图分别使用Patch的数据显示Matlab的Surv命令,但可悲的是我没有得到任何结果。

但是,另有可能通过使用在三角测量之后使用命令凸壳的ConnectItivityLish中计算的三角形的坐标来创建stlfile?

斯文

@matthias:
Read_vtk的帮助说:
%[顶点,face] = read_vtk(文件名,冗长);

%“顶点”是指定顶点位置的“nb.vert x 3”数组。
%'face'是一个'nb.face x 3'array,指定网格的连接。

Stlwrite的帮助说:
%stlwrite(文件、面、顶点)分别获取面和顶点

那么为什么不仅仅是以下?

[顶点,面部] = read_vtk('file.vtk');
stlwrite('file.stl',faces,顶点)

这是直接的。我不明白你想做的是mx,我的mx。

这是一个提示:如果您无法将面孔/顶点直接发送到Matlab的patch()命令(或您的x,y,z数据直接发送给matlab的surf()命令)并在屏幕上获取您想要的内容,然后使用stlwrite()不会给你想要的东西。

马蒂西亚斯

@ Sven.

[顶点,面部] = read_vtk('file.vtk');
mx(1:长度(顶点),1)=顶点(1,1:长度(顶点));
我的(1:长度(顶点),1)=顶点(2,1:长度(顶点));
MZ(1:长度(顶点),1)=顶点(3,1:长度(顶点));
stlwrite('file.stl',mx,my,mz)

基本上我正在发送我的物体的顶点信息,这是一个简单的圆柱体。但是生成的对象作为STL-file不再是关闭卷。

这是结果
http://postimg.org/image/ufpjdddrb/

斯文

@will:啊,是的,打印错误也很讨厌我:)
我已经修复了我的机器,但FEX条目现在也更新了。

斯文

@matthias:您需要提供更多详细信息,例如在调用stlwrite时运行的命令,您发送给stlwrite的变量以及出现问题(错误消息?)

将要

谢谢你的帮助。当我运行它时,我总是在它结束时收到消息“Writed1facet”。也许我不理解这个术语,但我希望刻面的数量等于正在编写的三角形的数量,我认为这是刻面矩阵的第二维度(尺寸(小平面,2))

马蒂西亚斯

你好,我在创建stlfile时遇到了麻烦,我正在使用read_vtk从vtk文件中提取顶点和面,但我不知道如何正确地提交数据到stlwrite函数?有什么建议么?
每个帮助TRX都是Gratfull

斯文

@Ye:我需要更多信息来帮助你。也许发送您的数据和命令即可调用stlwrite。

斯文

@Rebecca:没有像STLWRITE本身发出的警告。我相信您可能会指定您希望在这不是您提供的实际数据风格的情况下xy数据的“三角测量”。

它听起来您拥有完整的3D数据而不是网格XY数据,因此基于其XY坐标的三角化它不会有意义,因为您在同一XY坐标上彼此上方彼此上方的多个*点。因此,您看到的警告是由“delaunay”函数(三角剖分)吐出来。

也许你有四边形而不是三角形,所以你试图拆分它们?如果是这样,请描述(或发送)您拥有的数据,并且很容易有一种很好的方法。

丽贝卡奥·奥勒

你好,
我正在将气瓶写入STL文件,但STLWRITE一直消除重复数据点,这导致简单的圆圈而不是3D图像。我怎么能绕过这个?

“警告:已检测到并删除重复的数据点。
三角测量不会引用某些点指数。“

谢谢。

叶连辉

我使用这个得到一个stl文件,但当我使用solidworks打开它,这成为一个计划,而不是我在matlab中polted的3D图片,我不知道为什么,如果有人可以帮助我?

亚历山大克森科夫

非常简单,干净,快速实现!

托马斯

做得好!和二进制,我也喜欢它。

作为小调,能够指定法线也很酷(这并不是说我自己做不到,而是可以节省一分钟;))

Luis Castro.

亲爱的

我想请您详细解释一下如何通过点执行stl转换。我有22050点(xyz)属于河床。我的任务是生成一个STL文件。
我应该以什么形式取点?
当我运行编译stlwrite?。他们能给我台阶吗?
拜托,你能帮我。

urlea.

谢谢Sven,

求伟大

干杯

斯文

@URLEA:是的,您可以在(或之后)生成面部/顶点时执行此操作。

如果你使用isosurface()函数从逻辑生成面/顶点,请记住isosurface()将*总是*生成从低到高的面。在这种情况下,当您调用isosurface时,您可以将您的逻辑掩码反转(使其外部为1,内部为0)。

要在脸上触发顶点后,请使用以下内容:

fv.faces = fv.faces(:,[2 1 3])

urlea.

我正在尝试使用您在代码中提供的示例来从Face / Vertex数据文件中编写二进制STL。然后,我导入魔法中生成的文件(实现)并使用自动工具生成身体的诊断。它说所有面都被倒置(正常指向内部)。有没有办法解决Matlab代码内的方法?

史蒂夫

非常感谢!

亚当·哈特

太棒了!

亚当

惊人的!谢谢!

雷扎

嗨朋友们,

干得好。我用它来制作一个复杂的几何图形,它来自于图像。我创建了.stl文件,但许多曲面是打开的,没有连接。我想要有体积的闭合曲面。

感谢您的评论和帮助。

@Sven:你的两个把戏我都玩过。我发现问题不在于你的代码;这是我用来查看网格的软件。我尝试了Meshlab和ParaView。它们都不适用于彩色表面。也许它们适用于另一种解释。VisCam在这方面效果很好。谢谢!

斯文

@Ben:这是一个使用VisiCam颜色规范的示例:

tmpvol = true(20,20,20);内部手段上的%零
TMPVOL(8:12,8:12,5:15)= 0;%isosurface使三角形成为三角形
fv = isosurface(tmpvol,0.5);物体中的%点
FaceColval = fv.vertices(fv.faces(:,1),3);%颜色z高度
crane = [min(faceecolval)max(facecholval)];
ncols = 255;
Colmap = Jet(NCols);
FaceColsdBl = Interp1(Linspace(Crange(1),Crange(2),NCols),Colmap,FaceColval);
faceCols8bit=faceColsDbl*255;
stlwrite('testcol.stl',fv,'facecholor',faceCols8bit)
图,补丁(FV,'Facevertexcdata',FaceColsDBL,'FaceColor','Flat')

我在这里使用了免费观看者http://viscam-view.software.informer.com/download/而且颜色很好地显示出来。

您将注意到上面的代码中的两个技巧。
1.确保您的脸部正常指向向外。Viscam仅显示外侧,带有颜色和内侧。
2.确保提供8位缩放颜色(即,在0到255之间而不是Matlab的0和1之间)。

那对你有用吗?我可能会将其作为一个例子包含在帮助中,只要它对您仍然有效。请注意,STL文件中有两种相互竞争的颜色“解释”。这只是其中之一,所以我希望您的软件能够很好地解释它。

任何人都可以使用每面色颜色编写STL文件的示例吗?我尝试了几次,但没有成功。

谢谢!

浩杰

伟大的工作!

非常好的代码和惊人的快速!感谢分享!

jd.

@sven:谢谢。它像魅力一样工作!当我尝试在stlwrite中使用三角测量时,它不起作用,但是当我使用使用的mesh2tri生成面孔和顶点时,然后使用它们的stlwrite,它运作!再次感谢这么快的回复!

斯文

@JD:
问题是您的输入是“网格数据”而不是“三角形数据”,因为X,Y,Z中的每一个是20×20矩阵,而不是一组顶点和三角形。
这可以通过stlwrite处理(请参阅“三角测量”参数的帮助文件),但您需要了解网格数据的默认“三角测量”是X-Y 2D数据的DELAUNAYTRI。在这种感觉中,你已经重复了x-y对(一个在球体顶部,底部的一个)。你得到的警告来自“delaunay”,而不是来自“stlwrite”。
您可以通过指定您希望的网格数据三角化的方式来克服这一点:

stlwrite('test1.stl',x,y,z,'mode','ascii','trigumation','f')

注意,您需要从“mesh2tri”http://www.mathwands.com/matlabcentral/fileexchange/28327.为此工作。我会询问凯文允许在STLWRITE(这是一个小但非常方便的函数)中包含它的权限。

jd.

你好!我面临着亚历山大的问题。我试图为球体进行Gerate曲面网格,然后转换为.stl格式。当我试图在Meshlab中查看它时,球体的一半消失了。我确实得到了关于重复数据点的翘曲。

警告:已检测到重复的数据点并删除。
三角测量不会引用某些点指数。

我使用的命令如下:
[x,y,z] =球体(20);
stlwrite('test1.stl',x,y,z,'mode','ascii');

任何帮助都将受到高度赞赏。谢谢。

斯文

@alexandra,我将在使用stlwrite之前,Matlab中可能在Matlab中打赌。你能给我发一个通过开放的数据的一个例子吗?

亚历山德拉

Hej,
我有问题是我使用stlwrite后获得开放的曲面。有人有一个想法如何做到这一点?

或链球

有谁知道如何显示我使用的每张面孔的不同颜色?我尝试了meshlab和3d max

亚当

感谢您的帮助Sven,事实证明了在Gambit中的进口设置中的问题。由于这些文件中的几何形状更复杂,因此需要有点不同。再次,精彩的计划!!

斯文

哈,上次留言来自我 - 从工作中的另一台计算机登录。

Binu.

@Nick和Adam,我不确定与您的文件一起玩的问题。随意使用您的积分/面部数据来电发送电子邮件给.MAT文件*和*您使用的2或3行来创建Matlab中此数据的工作(!)图(请注意,我只需有时间查看它如果该图已清洁创建)。

亚当

伟大的计划。它为我的2个文件的2个文件很好,但另一个没有输出可读网格(我试图在SolidWorks和Gambit中打开它),另一个没有将网格连接到三角形,只有Gambit的一些点。两个网格都使用TrimeSh函数很好。有任何想法吗?

缺口

@sven你很清楚,谢谢。我问一个其他问题,更好地了解。

我的一组P X-Y-Z描述了一个3D表面,即我可以在Matlab(使用Plot3或Trisurf),如您所说的那样。

要编写stl,我可以直接使用函数"stlwrite"?
这是我的三维坐标的三角剖分吗?

在那种情况下,我必须给出哪些选项,以使其正常工作?因为我尝试了很多方法,但是当我给出“三角测量”时,它想要其他选项和值,我不知道要投入什么。

再次感谢!

斯文

@Nick:如果您从一组P X-Y-Z点创建Delaunay三角测量:

dt = DelaunayTri (x, y, z)

结果(dt.arriangulation)不会是“三角形表面网”。您会注意到结果是N-by-4矩阵。这意味着三角测量中的每一行代表四面体 - 一个小*固体*,其中4个三角形面 - 不是表面三角形。

STL格式描述了表面三角形而不是Tetra固体。也许你想要你积分的凸孔?(即,只有你所有的Tetra固体的*最外面的面孔*)请注意,如果您的简单的实体实际上是凸起的。

这是我的建议:在尝试写入STL文件之前绘制到屏幕。如果您可以先在Matlab上工作的3D表面图(使用补丁,Trisurf等),*然后*您将能够在没有问题的情况下写入STL。

缺口

嗨,我有一组简单的实体的坐标,我必须创建有限的卷来工作。所以我制作了一个3D delaunay三角测量,我现在拥有一个n×4矩阵,具有由此产生的tetrahedron点。现在,我需要创建一个.stl文件来导出这项工作。我该怎么做呢?是否有可能?因为在选项中,只有2D中的三角测量的声音。非常感谢。

joachim

罗马W.

斯文

@ava:很高兴听到这个问题(节点指数)得到了解决

艾娃

@sven:我正在使用stl查看器,也是最多的2.o来看看结果文件,但是所有面部都断开连接。

斯文

这是我第一次遇到这样的问题。当您在stlwrite帮助中运行示例时,会发生同样的事情吗?如果没有,尝试使用splitFV FEX条目,看看原始的面/顶点是否确实是连接的。如果stlwrite示例本身没有连接,您使用什么软件来读取。stl?

艾娃

面部未连接到结果STL。,有人有什么主意吗?

谢谢

威廉·蒂埃克斯

效果很好。对于我的旧Matlab版本,我必须删除一行以使其正常工作:
Narginchk(2,INF)

奥利弗·伍德福德

二进制输出现在非常快!:)

斯文

佛教者
最新的更新使Vectoriened Face正常计算和相邻的FWRITE呼叫结合起来显着改进。希望它很有用。

奥利弗·伍德福德

工作正常,但速度非常慢(至少在二进制模式下)。

霍尔格罗斯

太棒了!这就是我想要的……

乔治斯蒂弗里德

工作得很好!

斯科特伯恩斯顿

Cad2matdemo.m的好伴侣。很有用。

Matlab释放兼容性
用R2011B创建
兼容任何释放
平台兼容性
窗户 苹果系统 Linux.

社区寻宝

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!