有没有简单的方法来检测读取STL文件是ASCII还是二进制格式?

时间:2016-01-02 23:32:24

标签: wpf stl helix-3d-toolkit

如果读取STL文件是ASCII格式还是二进制格式,我怎么能以编程方式找到它。 我使用C#WPF和Helix Toolkit来加载STL文件。

1 个答案:

答案 0 :(得分:0)

我担心如果你在标题中找到“可靠”字样(正如Ardahan所说),唯一剩下的方法就是一致性检查或解析器。有几个(不知何故“愚蠢”)选项:

  1. ASCII STL文件完全由人类可以读取的字符组成,但新行除外。 (A-Z,a-z,0-9,..., - )。因此,如果您发现除了这些之外的任何内容,它就不能是ASCII STL(反过来也是不够的 - 例如,当您只找到正确的字符时,并不意味着它是有效的ASCII STL文件 - 请参阅第3点)。
  2. 您可以对三角形的数量与文件的大小进行一致性检查(例如,您希望文件二进制文件,如果一致性检查失败,那么它不是,或者至少不是有效的) 。一致性检查是:numOfTriangles * sizeof(STLTriangleStructure)+ 84 ==文件大小。我不确定这是100%防弹 - 你可以幸运,并且在偏移80的ASCII STL中有适当的4个字节,因此它将对应于文件大小,但我认为这是一种罕见的情况。
  3. ASCII STL文件可能只包含预定义的一组单词(solid,facet,normal,loop,...),但第一行除外。这些单词必须按给定顺序排列 - 你可以为它编写一个解析器,如果失败,那么它就不是一个有效的ASCII STL文件。