Main Page | Namespace List | Class Hierarchy | Class List | File List | Class Members | File Members

VrmlParser Class Reference

#include <vrmlparser.h>

Inheritance diagram for VrmlParser:

Parser List of all members.

Public Member Functions

 VrmlParser ()
void importVrml (const char *filename)
void exportVrml (const char *filename)
virtual void setParameters (const int &nbPoints, const int &nbPolys, const vector< Point3D * > &pointsList, const vector< int > &referencesList)
virtual int getNbPoints ()
virtual int getNbPolys ()
virtual vector< Point3D * > getPointsList ()
virtual vector< int > getReferencesList ()

Protected Attributes

int nbPoints
int nbPolys
vector< Point3D * > pointsList
vector< int > referencesList

Detailed Description

La classe vrmlparser regoupe toutes les fonctionalités nécéssaires au parsing d'un fichier vrml 97 ainsi qu'a son édition Les fichiers vrml doivent obligatoirement vérifier cette syntaxe.

Author:
Guitteny Fabrice

Idiart Baptiste

Le Goff Erwan


Constructor & Destructor Documentation

VrmlParser::VrmlParser  )  [inline]
 

Constructeur de VrmlParser

00060 {};


Member Function Documentation

void VrmlParser::exportVrml const char *  filename  ) 
 

Export d'un fichier en Vrml 97

Parameters:
filename nom du fichier

00114 { 00115 ofstream wrlfile(filename); 00116 00117 wrlfile << "#VRML V2.0 utf8" << endl 00118 << endl; 00119 wrlfile << "# Generated by VrmlParser" <<endl; 00120 00121 wrlfile << "Shape" <<endl << "{" <<endl; 00122 wrlfile << "geometry IndexedFaceSet" <<endl << "{" <<endl; 00123 wrlfile << "coord Coordinate" <<endl << "{" <<endl; 00124 wrlfile << "point [" <<endl; 00125 00126 for (int i=0;i<nbPoints-1; i++) { 00127 00128 wrlfile << "\t" << (pointsList[i])->getCoordinate(0) << " " 00129 << (pointsList[i]) ->getCoordinate(1)<< " " 00130 << (pointsList[i]) ->getCoordinate(2)<< "," << endl; 00131 00132 } 00133 //le dernier points est traité à part car pas de ',' 00134 00135 wrlfile << "\t" << (pointsList[nbPoints-1])->getCoordinate(0) << " " 00136 << (pointsList[nbPoints-1])->getCoordinate(1) << " " 00137 << (pointsList[nbPoints-1])->getCoordinate(2) << "]" << endl; 00138 00139 wrlfile << "}"<<endl; 00140 wrlfile << "coordIndex [" << endl; 00141 00142 for (int i=0;i<(3 * nbPolys )-3; i+=3) { 00143 00144 wrlfile << "\t" << referencesList[i] << ", " 00145 << referencesList[i+1] << ", " 00146 << referencesList[i+2] << ", " 00147 << "-1," <<endl; 00148 00149 } 00150 wrlfile << "\t" << referencesList[(3*nbPolys)-3] << ", " 00151 << referencesList[(3*nbPolys)-2] << ", " 00152 << referencesList[(3*nbPolys)-1] << ", " 00153 << "-1]" <<endl; 00154 00155 wrlfile << "}"<<endl; 00156 wrlfile << "}"<<endl; 00157 00158 wrlfile.close(); 00159 00160 00161 }

virtual int Parser::getNbPoints  )  [inline, virtual, inherited]
 

Returns:
nombre de points

00088 {return nbPoints;}

virtual int Parser::getNbPolys  )  [inline, virtual, inherited]
 

Returns:
nombre de polygones

00091 {return nbPolys;}

virtual vector<Point3D*> Parser::getPointsList  )  [inline, virtual, inherited]
 

Returns:
pointsList liste de points du model

00094 {return pointsList;}

virtual vector<int> Parser::getReferencesList  )  [inline, virtual, inherited]
 

Returns:
referencesList liste de références du model

00097 {return referencesList;}

void VrmlParser::importVrml const char *  filename  ) 
 

Import d'un fichier Vrml 97

Parameters:
filename nom du fichier

00006 { 00007 ifstream file(filename); 00008 00009 string line; 00010 string pX,pY,pZ; 00011 00012 Point3D *p; 00013 float px=0.0 , py=0.0 , pz=0.0; 00014 int goodPosition = 0; 00015 int describePoly = 0; 00016 int endIndexedFace = 0; 00017 00018 int refp1,refp2,refp3; 00019 00020 00021 while((getline(file, line)&&(endIndexedFace==0))) { 00022 delSpace(line); 00023 //on se place juste sur la liste de points: 00024 00025 if(goodPosition==0){ 00026 while(line.find("point",0)==string::npos) 00027 getline(file,line);delSpace(line); 00028 goodPosition=1; 00029 } 00030 else 00031 { 00032 if(line.find("coordIndex",0)!=string::npos) 00033 { 00034 describePoly=1; 00035 getline(file,line); 00036 delSpace(line); 00037 } 00038 00039 if(describePoly==0) 00040 { 00041 if(line[0]!='}') 00042 { 00043 unsigned int i=0; 00044 00045 //sauvegarde de la coordonnée x 00046 while((line[i]!=' ')&&(i<line.size()))i++; 00047 00048 px=stof(line.substr(0,i)); 00049 00050 unsigned int j=i+1; 00051 //sauvegarde de l'ordonnée y 00052 while((line[j]!=' ')&&(j<line.size()))j++; 00053 py=stof(line.substr(i+1,j-i-1)); 00054 //sauvegarde de la cote z 00055 unsigned int k=j+1; 00056 while((line[k]!=',')&&(line[k]!=']')&&(k<line.size()))k++; 00057 pz=stof(line.substr(j+1,k-j-1)); 00058 00059 //construction du point p 00060 p = new Point3D(px,py,pz); 00061 00062 //ajout au tableau de point 00063 00064 pointsList.push_back(p); 00065 00066 } 00067 00068 } 00069 else 00070 { 00071 if(line[0]!='}') 00072 { 00073 00074 unsigned int i=0; 00075 //sauvegarde de la ref du point1 00076 while((line[i]!=',')&&(i<line.size()))i++; 00077 00078 refp1=stoi(line.substr(0,i)); 00079 referencesList.push_back(refp1); 00080 00081 unsigned int j=i+1; 00082 00083 //sauvegarde de la ref du point2 00084 while((line[j]!=',')&&(j<line.size()))j++; 00085 00086 refp2=stoi(line.substr(i+2,j-i-1)); 00087 00088 referencesList.push_back(refp2); 00089 00090 //sauvegarde de la cote z 00091 unsigned int k=j+1; 00092 while((line[k]!=',')&&(line[k]!=']')&&(k<line.size()))k++; 00093 00094 00095 refp3=stoi(line.substr(j+2,k-j-2)); 00096 referencesList.push_back(refp3); 00097 if(line.find("]",0)!=string::npos) 00098 endIndexedFace=1; 00099 } 00100 } 00101 } 00102 00103 00104 } 00105 00106 nbPoints = pointsList.size(); 00107 nbPolys = referencesList.size()/3; 00108 file.close(); 00109 00110 }

void Parser::setParameters const int &  nbPoints,
const int &  nbPolys,
const vector< Point3D * > &  pointsList,
const vector< int > &  referencesList
[virtual, inherited]
 

Positionne les paramètres nécéssaires pour l'export d'un modele

Parameters:
nbPoints nombre de points
nbPolys nombre de polygones
pointsList liste de points du model
referencesList liste de références du model

00005 { 00006 nbPoints = nbPts; 00007 nbPolys = nbPly; 00008 pointsList = ptsList; 00009 referencesList = refList; 00010 }


Member Data Documentation

int Parser::nbPoints [protected, inherited]
 

Parameters:
nbPoints nombre de points

int Parser::nbPolys [protected, inherited]
 

Parameters:
nbPolys nombre de polygones

vector<Point3D*> Parser::pointsList [protected, inherited]
 

Parameters:
pointsList liste de points du model

vector<int> Parser::referencesList [protected, inherited]
 

Parameters:
referencesList liste de références du model


The documentation for this class was generated from the following files:
Generated on Tue Nov 29 21:59:00 2005 for CylinderGenerator by doxygen 1.3.7