49 template <
typename TPo
int>
60 infile.open (aFilename.c_str(), ifstream::in);
64 trace.
error() <<
"MeshReader : can't open " << aFilename << endl;
68 getline( infile, str );
70 if ( ! infile.good() )
72 trace.
error() <<
"MeshReader : can't read " << aFilename << endl;
75 if ( str.substr(0,3) !=
"OFF")
77 cerr <<
"*" <<str<<
"*"<< endl;
78 trace.
error() <<
"MeshReader : No OFF format in " << aFilename << endl;
85 getline( infile, str );
86 if ( ! infile.good() ){
87 trace.
error() <<
"MeshReader : Invalid format in " << aFilename << endl;
91 while ( str[ 0 ] ==
'#' || str==
"");
92 istringstream str_in( str );
93 int nbPoints, nbFaces, nbEdges;
99 for(
int i=0; i<nbPoints; i++){
106 getline(infile, str);
110 for(
int i=0; i<nbFaces; i++){
112 unsigned int aNbFaceVertex;
113 infile >> aNbFaceVertex;
114 vector<unsigned int> aFace;
115 for (
unsigned int j=0; j< aNbFaceVertex; j++){
116 unsigned int anIndex;
118 aFace.push_back(anIndex);
120 if( invertVertexOrder ){
121 for(
unsigned int j=0; j < aFace.size()/2; j++){
122 unsigned int tmp=aFace.at(j);
123 aFace.at(j)=aFace.at(aFace.size()-1-j);
124 aFace.at(aFace.size()-1-j)=tmp;
129 getline(infile, str);
131 bool findValidColor=
true;
133 istringstream inColor(str);
134 double colorR, colorG, colorB, colorT;
135 findValidColor=inColor.good();
136 if(findValidColor && inColor.good()){
139 findValidColor &=!inColor.fail();
140 if(findValidColor && inColor.good()){
143 findValidColor &=!inColor.fail();
144 if(findValidColor && inColor.good()){
147 findValidColor &=!inColor.fail();
149 if(findValidColor && inColor.good()){
160 DGtal::Color c((
unsigned int)(colorR*255.0), (
unsigned int)(colorG*255.0),
161 (
unsigned int)(colorB*255.0), (
unsigned int)(colorT*255.0));
162 aMesh.addFace(aFace, c);
164 aMesh.addFace(aFace);
167 aMesh.addFace(aFace);
179 template <
typename TPo
int>
190 infile.open (aFilename.c_str(), ifstream::in);
194 trace.
error() <<
"MeshReader : can't open " << aFilename << endl;
198 getline( infile, str );
200 if ( ! infile.good() )
202 trace.
error() <<
"MeshReader : can't read " << aFilename << endl;
205 if ( str.substr(0,3) !=
"OFS")
207 trace.
error() <<
"MeshReader : No OFS format in " << aFilename << endl;
214 getline( infile, str );
215 if ( ! infile.good() ){
216 trace.
error() <<
"MeshReader : Invalid format in " << aFilename << endl;
220 while ( str[ 0 ] ==
'#' || str==
"");
221 istringstream str_in( str );
226 for(
int i=0; i<nbPoints; i++){
236 getline(infile, str);
240 getline( infile, str );
241 if ( ! infile.good() ){
242 trace.
error() <<
"MeshReader : Invalid format in " << aFilename << endl;
246 while ( str[ 0 ] ==
'#' || str==
"");
247 istringstream str_in2( str );
248 unsigned int nbFaces;
251 for(
unsigned int i=0; i<nbFaces; i++){
253 vector<unsigned int> aFace;
254 for (
unsigned int j=0; j< 3; j++){
255 unsigned int anIndex;
257 aFace.push_back(anIndex);
259 if( invertVertexOrder ){
260 unsigned int tmp=aFace.at(0);
261 aFace.at(0)=aFace.at(2);
264 aMesh.addFace(aFace);
265 getline(infile, str);
274 template <
typename TPo
int>
276 DGtal::operator<< ( MeshFromPoints<TPoint> & mesh,
const std::string &filename ){
277 string extension = filename.substr(filename.find_last_of(
".") + 1);
278 if(extension==
"off") {
281 }
else if(extension==
"ofs") {