因为要实现后台估价stl模型文件的价格,所以需要计算stl的体积,参考了很多,但都是别的语言的,并不像调用别的库,并不需要渲染图形,只是单纯的读取文件数据进行计算,所以就自己写了。stl文件分为两种存储形式二进制和ascii码。
二进制
我用blender来生成一个正方体
用hex的编辑器查看
按其他网友的解释,文件开头的80字节是文件头,接下来的4字节是三角面的数量,之后的每50字节为一个三角面,红色圈起来的地方0C对应的十进制为12,即正方体的六个正方形切成的12个三角形。
$file = fopen('C:\Users\Hyz\Desktop\cube.stl', 'r');
fread($file, 80);//无实际用处,仅做文件指针跳过使用
$facet = unpack('i', fread($file, 4));
$volume = 0.0;
for ($i = 0; $i < $facet[1]; $i++) {
$binContent = fread($file, 50);
if ($binContent) {
$temp = unpack("fvx/fvy/fvz/fx1/fy1/fz1/fx2/fy2/fz2/fx3/fy3/fz3/H4attr",$binContent);
//角面片的法矢量,12字节,vx,vy,v