1 #ifndef MESHFORMATPARSER_HXX
2 #define MESHFORMATPARSER_HXX
3 /*----------------------------------------------------------*/
7 /*----------------------------------------------------------*/
9 /* Description: handle .meshb file format I/O */
10 /* Author: Loic MARECHAL */
11 /* Creation date: feb 16 2007 */
12 /* Last modification: dec 12 2020 */
14 /*----------------------------------------------------------*/
17 /*----------------------------------------------------------*/
19 /*----------------------------------------------------------*/
22 #define GmfStrSiz 1024
23 #define GmfMaxTyp 1000
36 /*----------------------------------------------------------*/
38 /*----------------------------------------------------------*/
52 // see MeshGems/Docs/meshgems_formats_description.pdf
53 extern const char* GmfKwdFmt[ GmfMaxKwd + 1 ][4];
54 /*----------------------------------------------------------*/
56 /*----------------------------------------------------------*/
57 namespace MeshFormat {
60 int typ, SolSiz, NmbWrd, NmbLin, NmbTyp, TypTab[ GmfMaxTyp ];
62 char fmt[ GmfMaxTyp*9 ];
67 int dim, ver, mod, typ, cod, pos;
69 KwdSct KwdTab[ GmfMaxKwd + 1 ];
74 char FilNam[ GmfStrSiz ];
75 double DblBuf[1000/8];
76 unsigned char blk[ BufSiz + 1000 ];
83 // see MeshGems/Docs/meshgems_formats_description.pdf
87 GmfVersionFormatted, \
101 GmfRequiredVertices, \
103 GmfRequiredTriangles, \
104 GmfRequiredQuadrilaterals, \
105 GmfTangentAtEdgeVertices, \
106 GmfNormalAtVertices, \
107 GmfNormalAtTriangleVertices, \
108 GmfNormalAtQuadrilateralVertices, \
109 GmfAngleOfCornerBound, \
113 GmfQuadrilateralsQ2, \
115 GmfSubDomainFromGeom, \
120 GmfExtraVerticesAtEdges, \
121 GmfExtraVerticesAtTriangles, \
122 GmfExtraVerticesAtQuadrilaterals, \
123 GmfExtraVerticesAtTetrahedra, \
124 GmfExtraVerticesAtPrisms, \
125 GmfExtraVerticesAtHexahedra, \
126 GmfVerticesOnGeometricVertices, \
127 GmfVerticesOnGeometricEdges, \
128 GmfVerticesOnGeometricTriangles, \
129 GmfVerticesOnGeometricQuadrilaterals, \
130 GmfEdgesOnGeometricEdges, \
141 GmfTrianglesOnGeometricTriangles, \
142 GmfTrianglesOnGeometricQuadrilaterals, \
143 GmfQuadrilateralsOnGeometricTriangles, \
144 GmfQuadrilateralsOnGeometricQuadrilaterals, \
147 GmfTangentAtVertices, \
151 GmfSolAtQuadrilaterals, \
152 GmfSolAtTetrahedra, \
158 GmfISolAtTriangles, \
159 GmfISolAtQuadrilaterals, \
160 GmfISolAtTetrahedra, \
162 GmfISolAtHexahedra, \
166 GmfCoarseHexahedra, \
167 GmfFault_MultipleEdge
172 class MeshFormatParser {
173 /*----------------------------------------------------------*/
174 /* External procedures */
175 /*----------------------------------------------------------*/
178 int GmfOpenMesh(const char *, int, ...);
179 int GmfCloseMesh(int);
180 int GmfStatKwd(int, int, ...);
181 int GmfGotoKwd(int, int);
182 int GmfSetKwd(int, int, ...);
183 void GmfGetLin(int, int, ...);
184 void GmfSetLin(int, int, ...);
188 /*----------------------------------------------------------*/
189 /* private procedures methods */
190 /*----------------------------------------------------------*/
192 void ScaWrd(GmfMshSct *, unsigned char *);
193 void ScaDblWrd(GmfMshSct *, unsigned char *);
194 void ScaBlk(GmfMshSct *, unsigned char *, int);
195 long GetPos(GmfMshSct *);
196 void RecWrd(GmfMshSct *, unsigned char *);
197 void RecDblWrd(GmfMshSct *, unsigned char *);
198 void RecBlk(GmfMshSct *, unsigned char *, int);
199 void SetPos(GmfMshSct *, long);
200 int ScaKwdTab(GmfMshSct *);
201 void ExpFmt(GmfMshSct *, int);
202 void ScaKwdHdr(GmfMshSct *, int);
204 void GmfCpyLin(int, int, int);
208 GmfMshSct *GmfMshTab[ MaxMsh + 1 ];
217 #endif // MESHFORMATPARSER_HXX