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];
55 #include "MEDLoaderDefines.hxx"
56 /*----------------------------------------------------------*/
58 /*----------------------------------------------------------*/
59 namespace MeshFormat {
62 int typ, SolSiz, NmbWrd, NmbLin, NmbTyp, TypTab[ GmfMaxTyp ];
64 char fmt[ GmfMaxTyp*9 ];
69 int dim, ver, mod, typ, cod, pos;
71 KwdSct KwdTab[ GmfMaxKwd + 1 ];
76 char FilNam[ GmfStrSiz ];
77 double DblBuf[1000/8];
78 unsigned char blk[ BufSiz + 1000 ];
85 // see MeshGems/Docs/meshgems_formats_description.pdf
89 GmfVersionFormatted, \
103 GmfRequiredVertices, \
105 GmfRequiredTriangles, \
106 GmfRequiredQuadrilaterals, \
107 GmfTangentAtEdgeVertices, \
108 GmfNormalAtVertices, \
109 GmfNormalAtTriangleVertices, \
110 GmfNormalAtQuadrilateralVertices, \
111 GmfAngleOfCornerBound, \
115 GmfQuadrilateralsQ2, \
117 GmfSubDomainFromGeom, \
122 GmfExtraVerticesAtEdges, \
123 GmfExtraVerticesAtTriangles, \
124 GmfExtraVerticesAtQuadrilaterals, \
125 GmfExtraVerticesAtTetrahedra, \
126 GmfExtraVerticesAtPrisms, \
127 GmfExtraVerticesAtHexahedra, \
128 GmfVerticesOnGeometricVertices, \
129 GmfVerticesOnGeometricEdges, \
130 GmfVerticesOnGeometricTriangles, \
131 GmfVerticesOnGeometricQuadrilaterals, \
132 GmfEdgesOnGeometricEdges, \
143 GmfTrianglesOnGeometricTriangles, \
144 GmfTrianglesOnGeometricQuadrilaterals, \
145 GmfQuadrilateralsOnGeometricTriangles, \
146 GmfQuadrilateralsOnGeometricQuadrilaterals, \
149 GmfTangentAtVertices, \
153 GmfSolAtQuadrilaterals, \
154 GmfSolAtTetrahedra, \
160 GmfISolAtTriangles, \
161 GmfISolAtQuadrilaterals, \
162 GmfISolAtTetrahedra, \
164 GmfISolAtHexahedra, \
168 GmfCoarseHexahedra, \
169 GmfFault_MultipleEdge
174 class MeshFormatParser {
175 /*----------------------------------------------------------*/
176 /* External procedures */
177 /*----------------------------------------------------------*/
179 MEDLOADER_EXPORT MeshFormatParser();
180 MEDLOADER_EXPORT int GmfOpenMesh(const char *, int, ...);
181 MEDLOADER_EXPORT int GmfCloseMesh(int);
182 int GmfStatKwd(int, int, ...);
183 int GmfGotoKwd(int, int);
184 MEDLOADER_EXPORT int GmfSetKwd(int, int, ...);
185 void GmfGetLin(int, int, ...);
186 MEDLOADER_EXPORT void GmfSetLin(int, int, ...);
190 /*----------------------------------------------------------*/
191 /* private procedures methods */
192 /*----------------------------------------------------------*/
194 void ScaWrd(GmfMshSct *, unsigned char *);
195 void ScaDblWrd(GmfMshSct *, unsigned char *);
196 void ScaBlk(GmfMshSct *, unsigned char *, int);
197 long GetPos(GmfMshSct *);
198 void RecWrd(GmfMshSct *, unsigned char *);
199 void RecDblWrd(GmfMshSct *, unsigned char *);
200 void RecBlk(GmfMshSct *, unsigned char *, int);
201 void SetPos(GmfMshSct *, long);
202 int ScaKwdTab(GmfMshSct *);
203 void ExpFmt(GmfMshSct *, int);
204 void ScaKwdHdr(GmfMshSct *, int);
206 void GmfCpyLin(int, int, int);
210 GmfMshSct *GmfMshTab[ MaxMsh + 1 ];
219 #endif // MESHFORMATPARSER_HXX