Pipeline graphique
 Tout Structures de données Espaces de nommage Fichiers Fonctions Variables Définitions de type Énumérations Valeurs énumérées Macros
PlyLoader.h
Aller à la documentation de ce fichier.
1 #ifndef _PLYLOADER
2 #define _PLYLOADER
3 #include <stdio.h>
4 #include "defTypes.h"
5 
7 namespace Ply {
8  /* pour les sommets */
10 
13  typedef struct {
16  float x,y,z;
20  float nx,ny,nz;
24  float r,g,b;
28  float u,v;
32  float c;
34  } POINT_PLY;
35 
36  /* pour les faces */
38  typedef struct {
39  unsigned char npts;
40  unsigned int *ind;
41  float nx,ny,nz;
45  } FACE_PLY;
46 
48  typedef enum {
51  } FileType;
53  typedef enum {
57  } Endian;
58  typedef enum {
59  NoError = 0x00000000,
60  Fatal = 0x00000001,
61  Warning = 0x00000002,
62  FileNotFound = 0x00000004
63  } Error;
65  const int maxfields = 12;
66 
68  typedef bool (*ReadFun)(FILE *,float&);
70  typedef struct {
71  ReadFun readfun; // fonction de lecture
72  int dec; // d�calage depuis le d�but de structure
73  } ReadFmt;
74 
76  const dword
77  CheckNotChecked = 0x00000000,
78  CheckInvalidIndices = 0x00000001,
79  CheckUnconnectedPts = 0x00000002,
80  CheckUnsharedEdges = 0x00000004,
81  CheckRevFacets = 0x00000008,
82  CheckInvNormals = 0x00000010,
83  CheckBadNormals = 0x00000020,
84  CheckNormal = 0x10000000,
85  CheckCoherence = 0x20000000;
86 }
87 
88 class PlyLoader {
89 private:
96  bool doswap;
99  FILE *ptf;
100  Ply::Endian WhichEndian(void);
101  const char *GetMask(dword, int, int);
102  const char *GetMask(dword m);
103  float MaxBound(void);
104  bool PerformNormalCheck (float, float*);
105  void InvertFaceNormalsAndIndex(void);
106  void InvertFaceNormalsIfNeeded(void);
107  void InvertNormals(void);
108  void Init(void);
109  void Delete(void);
110  bool BuildReader(int, int, int, uchar&, char*);
111  bool ReadHeader(void);
112  bool ReadPoints(void);
113  bool ReadTextFaces(void);
114  bool ReadBinaryFaces(void);
115  bool ReadData(void);
116 public:
118  PlyLoader();
120  ~PlyLoader();
122 
132  void CoherenceCheck (void);
134  void NormalCheck(void);
136  void CheckAndRepair(void);
138  void NormalizeObject(void);
140 
144  void ProcessNormals(void);
146  void Dump(void);
148  void DumpSample(void);
150  bool Load(const char *name);
152  void SmartInvertNormals(void);
154  inline int getNFaces(void) {return nfaces; };
156  inline int getNPoints(void) { return npoints; };
158 
161  inline Ply::POINT_PLY *getPoints(void) { return points; };
163 
168  inline Ply::FACE_PLY *getFaces(void) { return faces; };
170  inline bool HavePosition() { return (HavePos==3); };
172  inline bool HaveNormal() { return (HaveNrm==3); };
174  inline bool HaveColor() { return (HaveCol==3); };
175  // M�thode permettant de v�rifier l'�tat d'un objet lu
177  /* Les v�rifications ont �t� effectu�es si l'une des m�thodes suivantes
178  a �t� appel�e: CoherenceCheck, NormalCheck ou CheckAndRepair (= NormalCheck + CoherenceCheck).
179  */
180  inline bool IsChecked(void) { return check != 0; };
182  inline bool CheckHaveInvalidIndices(void) { return (check & Ply::CheckInvalidIndices) != 0; };
184  inline bool CheckHaveUnconnectedPts(void) { return (check & Ply::CheckUnconnectedPts) != 0; };
186  inline bool CheckHaveUnsharedEdges(void) { return (check & Ply::CheckUnsharedEdges) != 0; };
188  inline bool CheckHaveRevFacets(void) { return (check & Ply::CheckRevFacets) != 0; };
190  inline bool CheckHaveInvNormals(void) { return (check & Ply::CheckInvNormals) != 0; };
192  inline bool CheckHaveBadNormals(void) { return (check & Ply::CheckBadNormals) != 0; };
194  inline bool IsNormalCheck(void) { return (check & Ply::CheckInvalidIndices) != 0; };
196  inline bool IsCoherenceCheck(void) { return (check & Ply::CheckInvalidIndices) != 0; };
197 };
198 #endif
uchar HavePos
Definition: PlyLoader.h:97
const dword CheckNormal
si SimpleCheck (A = v�rification des normales) a �t� effectu�
Definition: PlyLoader.h:84
void Init(void)
m�thode interne
Definition: PlyLoader.cpp:614
void ProcessNormals(void)
Recalcul des normales sur un objet.
Definition: PlyLoader.cpp:538
bool BuildReader(int, int, int, uchar &, char *)
m�thode interne
Definition: PlyLoader.cpp:351
bool CheckHaveInvalidIndices(void)
�valu� par CoherenceCheck, vrai si un indice utilis� n'a pas de sommet associ�.
Definition: PlyLoader.h:182
~PlyLoader()
destructeur
Definition: PlyLoader.cpp:604
bool ReadTextFaces(void)
m�thode interne
Definition: PlyLoader.cpp:445
const dword CheckCoherence
si CoherenceCheck (B) a �t� effectu�
Definition: PlyLoader.h:85
FileType
Enum sur la mani�re de stocker les donn�es dans le fichier.
Definition: PlyLoader.h:48
FILE * ptf
Definition: PlyLoader.h:99
float MaxBound(void)
m�thode interne
Definition: PlyLoader.cpp:93
non d�fini
Definition: PlyLoader.h:56
int npoints
Definition: PlyLoader.h:90
bool CheckHaveBadNormals(void)
�valu� par CoherenceCheck, vrai si les normales semblent invers�es (heuristique).
Definition: PlyLoader.h:192
PlyLoader()
constructeur
Definition: PlyLoader.cpp:598
void CheckAndRepair(void)
= NormalCheck + CoherenceCheck
Definition: PlyLoader.cpp:621
Error
Definition: PlyLoader.h:58
int getNPoints(void)
renvoie le nombre de sommets lus dans le fichier PLY.
Definition: PlyLoader.h:156
bool HaveColor()
vrai si la fichier lu contient pour chaque sommet la couleur au sommet
Definition: PlyLoader.h:174
bool IsCoherenceCheck(void)
vrai si NormalCheck (= v�rification des normales) a �t� effectu�.
Definition: PlyLoader.h:196
const dword CheckBadNormals
si les normales semblent invers�es (heuristique) (B)
Definition: PlyLoader.h:83
void InvertFaceNormalsIfNeeded(void)
m�thode interne
Definition: PlyLoader.cpp:487
Ply::Endian WhichEndian(void)
m�thode interne
Definition: PlyLoader.cpp:54
Ply::ReadFmt field[Ply::maxfields]
Definition: PlyLoader.h:93
bool ReadPoints(void)
m�thode interne
Definition: PlyLoader.cpp:436
bool doswap
Definition: PlyLoader.h:96
uchar HaveCol
Definition: PlyLoader.h:97
int nfields
Definition: PlyLoader.h:90
uchar HaveUV
Definition: PlyLoader.h:97
Ply::FACE_PLY * getFaces(void)
renvoie un pointeur sur le tableau des faces lues dans le fichier PLY.
Definition: PlyLoader.h:168
bool Load(const char *name)
charge le fichier PLY et construit les structures de donn�es.
Definition: PlyLoader.cpp:650
ReadFun readfun
Definition: PlyLoader.h:71
binaire en big endian
Definition: PlyLoader.h:54
void SmartInvertNormals(void)
inverse les normales si n�cessaire: si les normales sont lues, inverse simplement les normales...
Definition: PlyLoader.cpp:509
bool IsNormalCheck(void)
vrai si CoherenceCheck (= v�rification de la coh�rence g�om�trique) a �t� effectu�.
Definition: PlyLoader.h:194
Namespace utilis� pour stocker les structures, �num�rations, ... du PlyLoader. ...
Definition: PlyLoader.h:7
unsigned int * ind
Definition: PlyLoader.h:40
Ply::Endian machFMT
Definition: PlyLoader.h:94
Ply::POINT_PLY * getPoints(void)
renvoie un pointeur sur le tableau des sommets lus dans le fichier PLY.
Definition: PlyLoader.h:161
unsigned char npts
Nombre de sommets pour cette face (toujours 3)
Definition: PlyLoader.h:39
void DumpSample(void)
affiche les 10 premiers sommets lus dans le fichier
Definition: PlyLoader.cpp:270
void InvertNormals(void)
m�thode interne
Definition: PlyLoader.cpp:524
const dword CheckRevFacets
si des polygones adjacents ne sont pas orient�s dans le m�me sens (B)
Definition: PlyLoader.h:81
le stockage est en texte
Definition: PlyLoader.h:50
int nfaces
Definition: PlyLoader.h:90
Ply::Endian plyFMT
Definition: PlyLoader.h:94
void CoherenceCheck(void)
test de la coh�rence g�om�trique d'un objet
Definition: PlyLoader.cpp:152
const dword CheckNotChecked
constante pour les v�rifications d'une g�om�trie
Definition: PlyLoader.h:77
bool CheckHaveInvNormals(void)
�valu� par CoherenceCheck, vrai si le sens des normales a �t� test�.
Definition: PlyLoader.h:190
structure interne pour le stockage des fonctions internes de lecture
Definition: PlyLoader.h:70
bool IsChecked(void)
Teste si les v�rifications g�om�triques ont �t� effectu�es.
Definition: PlyLoader.h:180
bool ReadBinaryFaces(void)
m�thode interne
Definition: PlyLoader.cpp:455
bool PerformNormalCheck(float, float *)
m�thode interne
Definition: PlyLoader.cpp:107
const dword CheckInvalidIndices
si un indice utilis� n'a pas de sommet associ� (B)
Definition: PlyLoader.h:78
bool(* ReadFun)(FILE *, float &)
pointeur interne sur une fonction de lecture
Definition: PlyLoader.h:68
binaire en little endian
Definition: PlyLoader.h:55
uchar HaveNrm
Definition: PlyLoader.h:97
Structure utilis�e pour lire les caract�ristiques des sommets.
Definition: PlyLoader.h:38
void InvertFaceNormalsAndIndex(void)
m�thode interne
Definition: PlyLoader.cpp:468
void NormalizeObject(void)
renormalise l'objet pour qu'il soit centr� � l'origine du rep�re (local) et de largeur 1...
Definition: PlyLoader.cpp:688
unsigned int dword
Definition: defTypes.h:4
Ply::FileType fileFMT
Definition: PlyLoader.h:95
int getNFaces(void)
renvoie le nombre de faces lues dans le fichier PLY.
Definition: PlyLoader.h:154
Ply::FACE_PLY * faces
Definition: PlyLoader.h:92
const int maxfields
nombre maximum de champs lus dans un fichier PLY
Definition: PlyLoader.h:65
uchar HaveTol
Definition: PlyLoader.h:97
bool HaveNormal()
vrai si la fichier lu contient pour chaque sommet la normale au sommet
Definition: PlyLoader.h:172
const dword CheckInvNormals
si le sens des normales a �t� test� (B)
Definition: PlyLoader.h:82
bool ReadData(void)
m�thode interne
bool CheckHaveUnsharedEdges(void)
�valu� par CoherenceCheck, vrai si chaque ar�te n'est pas partag�e par 2 polygones.
Definition: PlyLoader.h:186
void Delete(void)
m�thode interne
Definition: PlyLoader.cpp:608
const dword CheckUnsharedEdges
si chaque ar�te n'est pas partag�e par 2 polygones (B)
Definition: PlyLoader.h:80
unsigned char uchar
Definition: defTypes.h:5
bool CheckHaveRevFacets(void)
�valu� par CoherenceCheck, vrai si des polygones adjacents ne sont pas orient�s dans le m�me sens...
Definition: PlyLoader.h:188
dword check
Definition: PlyLoader.h:98
void NormalCheck(void)
test des normales (si elles existent)
Definition: PlyLoader.cpp:629
bool HavePosition()
vrai si la fichier lu contient pour chaque sommet la position du sommet
Definition: PlyLoader.h:170
void Dump(void)
Affiche les valeurs de tous les sommets et faces lus dans la structure. Ne change pas le r�sultat de...
Definition: PlyLoader.cpp:291
structure utilis�e pour lire un fichier au format PLY
Definition: PlyLoader.h:13
Ply::POINT_PLY * points
Definition: PlyLoader.h:91
bool CheckHaveUnconnectedPts(void)
�valu� par CoherenceCheck, vrai si un sommet n'appartient � aucun polygone.
Definition: PlyLoader.h:184
const dword CheckUnconnectedPts
si un sommet n'appartient � aucun polygone (B)
Definition: PlyLoader.h:79
bool ReadHeader(void)
m�thode interne
Definition: PlyLoader.cpp:375
const char * GetMask(dword, int, int)
m�thode interne
Definition: PlyLoader.cpp:65
le stockage est en binaire
Definition: PlyLoader.h:49
Endian
Enum pour le type de stockage des donn�es en binaire.
Definition: PlyLoader.h:53