C++流操作之fstream(三)

2013-09-26 18:39:05 · 作者: · 浏览: 100

 

  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 . . .