while (getline(in, line)) {
if (line.find("facet normal") != string::npos) {
facet f;
//read normal
stringstream ns(line);
ns >> word; //eat "facet"
ns >> word; //eat "normal"
ns >> f.normal[0] >> f.normal >> f.normal ;
//read vertices
getline(in, line); //"outer loop"
for (int i = 0; i < 3; i++) {
getline(in, line);
stringstream vs(line);
vs >> word; //eat "vertex"
vs >> f.vertex[i][0] >> f.vertex[i] >> f.vertex[i] ;
}
getline(in, line); //"endloop"
getline(in, line); //"endfacet"
solid.push_back(f);
}
}
in.close();
//output
int cnt = solid.size();
printf("read %d facet\n", cnt);
for (int i = 0; i < cnt; i++) {
facet& f = solid[i];
printf("\nfacet %d:\nnormal = (%f, %f, %f)\n", \
i+1, f.normal[0], f.normal , f.normal );
for (int j = 0; j < 3; j++) {
printf("vertex[%d] = (%f, %f, %f)\n", \
j+1, f.vertex[j][0], f.vertex[j] , f.vertex[j] );
}
}
return 0;
}
测试文件为:
cube_corner.stl
solid cube_corner
facet normal 0.0 -1.0 0.0
outer loop
vertex 0.0 0.0 0.0
vertex 1.0 0.0 0.0
vertex 0.0 0.0 1.0
endloop
endfacet
facet normal 0.0 0.0 -1.0
outer loop
vertex 0.0 0.0 0.0
vertex 0.0 1.0 0.0
vertex 1.0 0.0 0.0
endloop
endfacet
facet normal 0.0 0.0 -1.0
outer loop
vertex 0.0 0.0 0.0
vertex 0.0 0.0 1.0
vertex 0.0 1.0 0.0
endloop
endfacet
facet normal 0.577 0.577 0.577
outer loop
vertex 1.0 0.0 0.0
vertex 0.0 1.0 0.0
vertex 0.0 0.0 1.0
endloop
endfacet
endsolid
输入结果为:
read 4 facet
facet 1:
normal = (0.000000, -1.000000, 0.000000)
vertex = (0.000000, 0.000000, 0.000000)
vertex = (1.000000, 0.000000, 0.000000)
vertex = (0.000000, 0.000000, 1.000000)
facet 2:
normal = (0.000000, 0.000000, -1.000000)
vertex = (0.000000, 0.000000, 0.000000)
vertex = (0.000000, 1.000000, 0.000000)
vertex = (1.000000, 0.000000, 0.000000)
facet 3:
normal = (0.000000, 0.000000, -1.000000)
vertex = (0.000000, 0.000000, 0.000000)
vertex = (0.000000, 0.000000, 1.000000)
vertex = (0.000000, 1.000000, 0.000000)
facet 4:
normal = (0.577000, 0.577000, 0.577000)
vertex = (1.000000, 0.000000, 0.000000)
vertex = (0.000000, 1.000000, 0.000000)
vertex = (0.000000, 0.000000, 1.000000)
Press any key to continue . . .