00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef BSFILE_H
00021 #define BSFILE_H
00022
00023 #ifndef PKVARIA_H
00024 #include "pkvaria.h"
00025 #endif
00026 #ifndef PKNUM_H
00027 #include "pknum.h"
00028 #endif
00029 #ifndef PKGEOM_H
00030 #include "pkgeom.h"
00031 #endif
00032 #ifndef MULTIBS_H
00033 #include "multibs.h"
00034 #endif
00035 #ifndef BSMESH_H
00036 #include "bsmesh.h"
00037 #endif
00038
00039 #ifdef __cplusplus
00040 extern "C" {
00041 #endif
00042
00043 #define BSF_MAX_NAME_LENGTH 64
00044
00045 #define BSF_SYMB_EOF 0
00046 #define BSF_SYMB_ERROR 1
00047 #define BSF_SYMB_INTEGER 2
00048 #define BSF_SYMB_FLOAT 3
00049 #define BSF_SYMB_LBRACE 4
00050 #define BSF_SYMB_RBRACE 5
00051 #define BSF_SYMB_PLUS 6
00052 #define BSF_SYMB_MINUS 7
00053 #define BSF_SYMB_STRING 8
00054 #define BSF_SYMB_COMMA 9
00055
00056 #define BSF_FIRST_KEYWORD 10
00057 #define BSF_SYMB_BCURVE 10
00058 #define BSF_SYMB_BPATCH 11
00059 #define BSF_SYMB_BSCURVE 12
00060 #define BSF_SYMB_BSHOLE 13
00061 #define BSF_SYMB_BSMESH 14
00062 #define BSF_SYMB_BSPATCH 15
00063 #define BSF_SYMB_CLOSED 16
00064 #define BSF_SYMB_CPOINTS 17
00065 #define BSF_SYMB_CPOINTSMK 18
00066 #define BSF_SYMB_DEGREE 19
00067 #define BSF_SYMB_DIM 20
00068 #define BSF_SYMB_DOMAIN 21
00069 #define BSF_SYMB_FACETS 22
00070 #define BSF_SYMB_HALFEDGES 23
00071 #define BSF_SYMB_KNOTS 24
00072 #define BSF_SYMB_KNOTS_U 25
00073 #define BSF_SYMB_KNOTS_V 26
00074 #define BSF_SYMB_NAME 27
00075 #define BSF_SYMB_RATIONAL 28
00076 #define BSF_SYMB_SIDES 29
00077 #define BSF_SYMB_UNIFORM 30
00078 #define BSF_SYMB_VERTICES 31
00079
00080 #define BSF_NKEYWORDS 22
00081 extern const char *bsf_keyword[BSF_NKEYWORDS];
00082
00083 extern FILE *bsf_input, *bsf_output;
00084
00085 extern int bsf_nextsymbol;
00086 extern int bsf_nextint;
00087 extern double bsf_nextfloat;
00088 extern char *bsf_namebuffer;
00089
00090
00091 boolean bsf_OpenInputFile ( const char *filename );
00092 void bsf_CloseInputFile ( void );
00093 void bsf_GetNextSymbol ( void );
00094
00095 void bsf_PrintErrorLocation ( void );
00096
00097 boolean bsf_ReadIntNumber ( int *number );
00098 boolean bsf_ReadDoubleNumber ( double *number );
00099 boolean bsf_ReadPointd ( int maxcpdimen, double *point, int *cpdimen );
00100 int bsf_ReadPointsd ( int maxcpdimen, int maxnpoints,
00101 double *points, int *cpdimen );
00102 int bsf_ReadPointsMK ( int maxnpoints, byte *mk );
00103
00104 boolean bsf_ReadSpaceDim ( int maxdim, int *spdimen );
00105 boolean bsf_ReadCurveDegree ( int maxdeg, int *degree );
00106 boolean bsf_ReadPatchDegree ( int maxdeg, int *udeg, int *vdeg );
00107
00108 boolean bsf_ReadKnotSequenced ( int maxlastknot, int *lastknot, double *knots,
00109 boolean *closed );
00110
00111 boolean bsf_ReadBezierCurve4d ( int maxdeg, int *deg, point4d *cpoints,
00112 int *spdimen, boolean *rational,
00113 byte *mk, char *name );
00114
00115 boolean bsf_ReadBSplineCurve4d ( int maxdeg, int maxlastknot, int maxncpoints,
00116 int *deg, int *lastknot, double *knots,
00117 boolean *closed, point4d *cpoints,
00118 int *spdimen, boolean *rational,
00119 byte *mk, char *name );
00120
00121 boolean bsf_ReadBezierPatch4d ( int maxdeg, int *udeg, int *vdeg,
00122 int *pitch, point4d *cpoints,
00123 int *spdimen, boolean *rational,
00124 byte *mk, char *name );
00125
00126 boolean bsf_ReadBSplinePatch4d ( int maxdeg, int maxlastknot, int maxncpoints,
00127 int *udeg, int *lastknotu, double *knotsu,
00128 int *vdeg, int *lastknotv, double *knotsv,
00129 boolean *closed_u, boolean *closed_v,
00130 int *pitch, point4d *cpoints,
00131 int *spdimen, boolean *rational,
00132 byte *mk, char *name );
00133
00134 boolean bsf_ReadBSMesh4d ( int maxnv, int maxnhe, int maxnfac,
00135 int *degree,
00136 int *nv, BSMvertex *mv, int *mvhei, point4d *vc,
00137 int *nhe, BSMhalfedge *mhe,
00138 int *nfac, BSMfacet *mfac, int *mfhei,
00139 int *spdimen, boolean *rational,
00140 byte *mkv, char *name );
00141
00142 boolean bsf_ReadBSplineHoled ( int maxk, int *hole_k, double *knots,
00143 point2d *domain_cp, point4d *hole_cp,
00144 int *spdimen, boolean *rational,
00145 byte *mk, char *name );
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158 typedef void (*bsf_BC_fptr) ( void *userData, const char *name,
00159 int degree, const point4d *cpoints,
00160 int spdimen, boolean rational, byte *mk );
00161
00162 typedef void (*bsf_BSC_fptr) ( void *userData, const char *name,
00163 int degree, int lastknot, const double *knots,
00164 boolean closed,
00165 const point4d *cpoints,
00166 int spdimen, boolean rational, byte *mk );
00167 typedef void (*bsf_BP_fptr) ( void *userData, const char *name, int udeg, int vdeg,
00168 int pitch, const point4d *cpoints,
00169 int spdimen, boolean rational, byte *mk );
00170 typedef void (*bsf_BSP_fptr) ( void *userData, const char *name,
00171 int udeg, int lastknotu, const double *knotsu,
00172 int vdeg, int lastknotv, const double *knotsv,
00173 boolean closed_u, boolean closed_v,
00174 int pitch, const point4d *cpoints,
00175 int spdimen, boolean rational, byte *mk );
00176 typedef void (*bsf_BSM_fptr) ( void *userData, const char *name, int degree,
00177 int nv, const BSMvertex *mv, const int *mvhei,
00178 const point4d *vc,
00179 int nhe, const BSMhalfedge *mhe,
00180 int nfac, const BSMfacet *mfac, const int *mfhei,
00181 int spdimen, boolean rational, byte *mkv );
00182
00183 typedef void (*bsf_BSH_fptr) ( void *userData, const char *name, int hole_k,
00184 const double *knots,
00185 const point2d *domain_cp,
00186 const point4d *hole_cp,
00187 int spdimen, boolean rational, byte *mk );
00188
00189 typedef struct {
00190 bsf_BC_fptr BezierCurveReader;
00191 bsf_BSC_fptr BSplineCurveReader;
00192 bsf_BP_fptr BezierPatchReader;
00193 bsf_BSP_fptr BSplinePatchReader;
00194 bsf_BSM_fptr BSMeshReader;
00195 bsf_BSH_fptr BSplineHoleReader;
00196 void *userData;
00197
00198 int bc_maxdeg;
00199 int bsc_maxdeg;
00200 int bsc_maxlkn;
00201 int bp_maxdeg;
00202 int bsp_maxdeg;
00203 int bsp_maxlkn;
00204 int bsm_maxdeg;
00205 int bsm_maxnv;
00206 int bsm_maxnhe;
00207 int bsm_maxnfac;
00208 } bsf_UserReaders;
00209
00210
00211 void bsf_ClearReaders ( bsf_UserReaders *readers );
00212
00213 void bsf_BC4ReadFuncd ( bsf_UserReaders *readers, bsf_BC_fptr BCReader,
00214 int maxdeg );
00215 void bsf_BSC4ReadFuncd ( bsf_UserReaders *readers, bsf_BSC_fptr BSCReader,
00216 int maxdeg, int maxlastknot );
00217 void bsf_BP4ReadFuncd ( bsf_UserReaders *readers, bsf_BP_fptr BPReader,
00218 int maxdeg );
00219 void bsf_BSP4ReadFuncd ( bsf_UserReaders *readers, bsf_BSP_fptr BSPReader,
00220 int maxdeg, int maxlastknot );
00221 void bsf_BSM4ReadFuncd ( bsf_UserReaders *readers, bsf_BSM_fptr BSMReader,
00222 int maxdeg, int maxnv, int maxnhe, int maxnfac );
00223 void bsf_BSH4ReadFuncd ( bsf_UserReaders *readers, bsf_BSH_fptr BSHReader );
00224
00225 boolean bsf_ReadBSFiled ( const char *filename, bsf_UserReaders *readers );
00226
00227
00228 boolean bsf_OpenOutputFile ( char *filename, boolean append );
00229 void bsf_CloseOutputFile ( void );
00230
00231 void bsf_WriteComment ( char *comment );
00232 void bsf_WriteDoubleNumber ( double x );
00233 void bsf_WritePointd ( int cpdimen, const double *point );
00234 void bsf_WritePointsd ( int cpdimen, int cols, int rows, int pitch,
00235 const double *points );
00236 void bsf_WritePointsMK ( int npoints, const byte *mk );
00237
00238 void bsf_WriteSpaceDim ( int spdimen, boolean rational );
00239 void bsf_WriteCurveDegree ( int degree );
00240 void bsf_WritePatchDegree ( int udeg, int vdeg );
00241
00242 void bsf_WriteKnotSequenced ( int lastknot, const double *knots, boolean closed );
00243
00244 boolean bsf_WriteBezierCurved ( int spdimen, int cpdimen, boolean rational,
00245 int deg, const double *cpoints,
00246 const byte *mk, const char *name );
00247
00248 boolean bsf_WriteBSplineCurved ( int spdimen, int cpdimen, boolean rational,
00249 int deg, int lastknot, const double *knots,
00250 boolean closed,
00251 const double *cpoints, const byte *mk,
00252 const char *name );
00253
00254 boolean bsf_WriteBezierPatchd ( int spdimen, int cpdimen, boolean rational,
00255 int udeg, int vdeg,
00256 int pitch, const double *cpoints, const byte *mk,
00257 const char *name );
00258
00259 boolean bsf_WriteBSplinePatchd ( int spdimen, int cpdimen, boolean rational,
00260 int udeg, int lastknotu, const double *knotsu,
00261 int vdeg, int lastknotv, const double *knotsv,
00262 boolean closed_u, boolean closed_v,
00263 int pitch, const double *cpoints, const byte *mk,
00264 const char *name );
00265
00266 boolean bsf_WriteBSMeshd ( int spdimen, int cpdimen, boolean rational, int degree,
00267 int nv, const BSMvertex *mv, const int *mvhei,
00268 const double *vc,
00269 int nhe, const BSMhalfedge *mhe,
00270 int nfac, const BSMfacet *mfac, const int *mfhei,
00271 const byte *mkv, const char *name );
00272
00273 boolean bsf_WriteBSplineHoled ( int hole_k, const double *knots,
00274 const point2d *domain_cp,
00275 const point3d *hole_cp, const byte *mk,
00276 const char *name );
00277
00278 #ifdef __cplusplus
00279 }
00280 #endif
00281
00282 #endif
00283