⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 off_import.h

📁 A Library of Efficient Data Types and Algorithms,封装了常用的ADT及其相关算法的软件包
💻 H
字号:
#include <LEDA/string.h>#include <LEDA/array.h>#include <LEDA/list.h>#include <LEDA/d3_point.h>#include <LEDA/stream.h>#include <fstream>// -----------------------------------------------------------// we return the bounding box, the vertices and // the face description in the parameters ...// -----------------------------------------------------------LEDA_BEGIN_NAMESPACE

#if defined(LEDA_STD_IO_HEADERS)
using std::ifstream;
#endifbool read_off_file(ifstream& I,                    double& xmin, double& xmax,		   double& ymin, double& ymax,		   double& zmin, double& zmax,		   leda::array<leda::d3_point>& vertices,		   leda::list<leda::list<int> >& face_list){          char* line = new char[1000]; leda::string act;  int mode = 1;  // init values ... face_list.clear();  const int off_keyword_mode = 1; const int off_numbers_mode = 2; const int off_vertex_mode  = 3; const int off_face_mode    = 4;  int number_of_faces, number_of_vertices, number_of_edges; int v_count =0, f_count=0;  leda::string offst("OFF");  while (! I.eof()){   // get a line ...   I.getline(line,1000);       if (line[0] != '#'){     act = leda::string(line);          if (act.length() > 0){       switch (mode){         case off_keyword_mode: {  // read file header OFF	   if (act == offst) mode++;	   break;	 }	 case off_numbers_mode: { // read number of faces/vertices/edges	   leda::string_istream IS(act);	 	   //# vertices ...	   IS >> number_of_vertices;	   	   //# faces ...	   IS >> number_of_faces;	  	   //# edges ...	   IS >> number_of_edges;	   	   vertices.resize(number_of_vertices);  	   	   mode++;	   break;	 }	 case off_vertex_mode: { // read x/y/z double values ...	   leda::string_istream IS(act);	   double xv, yv, zv;	   	   IS >> xv;	   IS >> yv;	   IS >> zv;	   	   vertices[v_count] = leda::d3_point(xv,yv,zv);	   	   // init bbox ...	   if (v_count == 0) { 	     xmin = xmax = xv;	     ymin = ymax = yv;	     zmin = zmax = zv;	   }	   else { // ... check old bbox values 	     if (xv < xmin) xmin = xv;	     if (xv > xmax) xmax = xv;	     if (yv < ymin) ymin = yv;	     if (yv > ymax) ymax = yv;	     if (zv < zmin) zmin = zv;	     if (zv > zmax) zmax = zv;	     	     	   }	   	   v_count++;	   	   if (v_count == number_of_vertices) mode++; // go into face mode ...	   	   break;	 }	 case off_face_mode: { 	   // read faces (first comes #vertices for a face, then the list of vertex indices	   leda::string_istream IS(act);	   	   int vertex_per_face, i, index;	   	   IS >> vertex_per_face;	   	   leda::list<int> act_face;	   	   for(i=0;i<vertex_per_face;i++){	     IS >> index;	     act_face.push_back(index);	   }	   	   // append new face ...	   face_list.push_back(act_face);	   	   f_count++;	   	   break;	 }       }     }   }   else {   } } delete [] line;

 I.close(); return true;}LEDA_END_NAMESPACE// -----------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -