00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef CONST_
00015 #define CONST_ const
00016 #endif
00017
00018 #ifndef MULTIBSF_H
00019 #define MULTIBSF_H
00020
00021 #ifndef PKNUM_H
00022 #include "pknum.h"
00023 #endif
00024
00025 #ifndef PKGEOM_H
00026 #include "pkgeom.h"
00027 #endif
00028
00029 #ifdef __cplusplus
00030 extern "C" {
00031 #endif
00032
00033 #ifndef MULTIBS_H
00034
00035
00036 #define BS3_BC_FIRST_DER 0
00037 #define BS3_BC_FIRST_DER0 1
00038 #define BS3_BC_SECOND_DER 2
00039 #define BS3_BC_SECOND_DER0 3
00040 #define BS3_BC_THIRD_DER 4
00041 #define BS3_BC_THIRD_DER0 5
00042 #define BS3_BC_BESSEL 6
00043 #define BS3_BC_NOT_A_KNOT 7
00044 #endif
00045
00046
00047 int mbs_KnotMultiplicityf ( int lastknot, const float *knots, float t );
00048
00049 int mbs_FindKnotIntervalf ( int degree, int lastknot, const float *knots,
00050 float t, int *mult );
00051
00052 float mbs_GrevilleAbscissaf ( int degree, float *knots, int i );
00053
00054 void mbs_TransformAffKnotsf ( int degree, int lastknot, const float *inknots,
00055 float a, float b, float *outknots );
00056
00057 void mbs_multiReverseBSCurvef ( int degree, int lastknot, float *knots,
00058 int ncurves, int spdimen, int pitch,
00059 float *ctlpoints );
00060 boolean mbs_ClosedKnotsCorrectf ( int degree, int lastknot, float *knots,
00061 float T, int K, float tol );
00062
00063 int mbs_SetKnotf ( int lastknot, float *knots,
00064 int knotnum, int mult, float t );
00065 int mbs_SetKnotClosedf ( int degree, int lastknot, float *knots, float T,
00066 int knotnum, int mult, float t );
00067
00068 void _mbs_multideBoorKernelf ( int degree, const float *knots,
00069 int ncurves, int spdimen,
00070 int pitch, const float *ctlpoints,
00071 float t, int k, int r, int lj,
00072 int dpitch, float *d );
00073
00074 int mbs_multideBoorf ( int degree, int lastknot,
00075 const float *knots,
00076 int ncurves, int spdimen, int pitch,
00077 const float *ctlpoints,
00078 float t,
00079 float *cpoints );
00080
00081 #define mbs_deBoorC1f(degree,lastknot,knots,coeff,t,value) \
00082 mbs_multideBoorf ( degree, lastknot, knots, 1, 1, 0, coeff, t, value )
00083 #define mbs_deBoorC2f(degree,lastknot,knots,ctlpoints,t,cpoint) \
00084 mbs_multideBoorf ( degree, lastknot, knots, 1, 2, 0, (float*)ctlpoints, t, \
00085 (float*)cpoint )
00086 #define mbs_deBoorC3f(degree,lastknot,knots,ctlpoints,t,cpoint) \
00087 mbs_multideBoorf ( degree, lastknot, knots, 1, 3, 0, (float*)ctlpoints, t, \
00088 (float*)cpoint )
00089 #define mbs_deBoorC4f(degree,lastknot,knots,ctlpoints,t,cpoint) \
00090 mbs_multideBoorf ( degree, lastknot, knots, 1, 4, 0, (float*)ctlpoints, t, \
00091 (float*)cpoint )
00092
00093
00094 void mbs_deBoorC2Rf ( int degree, int lastknot,
00095 const float *knots, const point3f *ctlpoints,
00096 float t, point2f *cpoint );
00097
00098 void mbs_deBoorC3Rf ( int degree, int lastknot,
00099 const float *knots, const point4f *ctlpoints,
00100 float t, point3f *cpoint );
00101
00102 void mbs_deBoorP3f ( int degreeu, int lastknotu, const float *knotsu,
00103 int degreev, int lastknotv, const float *knotsv,
00104 int pitch,
00105 const point3f *ctlpoints,
00106 float u, float v, point3f *ppoint );
00107
00108 void mbs_deBoorP3Rf ( int degreeu, int lastknotu, const float *knotsu,
00109 int degreev, int lastknotv, const float *knotsv,
00110 int pitch,
00111 const point4f *ctlpoints,
00112 float u, float v, point3f *ppoint );
00113
00114 void mbs_deBoorP4f ( int degreeu, int lastknotu, const float *knotsu,
00115 int degreev, int lastknotv, const float *knotsv,
00116 int pitch,
00117 const point4f *ctlpoints,
00118 float u, float v, point4f *ppoint );
00119
00120
00121 int mbs_multideBoorDerf ( int degree, int lastknot,
00122 const float *knots,
00123 int ncurves, int spdimen, int pitch,
00124 const float *ctlpoints,
00125 float t,
00126 float *cpoints, float *dervect );
00127
00128 #define mbs_deBoorDerC1f(degree,lastknot,knots,ctlpoints,t,cpoint,cder) \
00129 mbs_multideBoorDerf ( degree, lastknot, knots, 1, 1, 0, (float*)ctlpoints, \
00130 t, cpoint, cder )
00131 #define mbs_deBoorDerC2f(degree,lastknot,knots,ctlpoints,t,cpoint,cder) \
00132 mbs_multideBoorDerf ( degree, lastknot, knots, 1, 2, 0, (float*)ctlpoints, \
00133 t, (float*)cpoint, (float*)cder )
00134 #define mbs_deBoorDerC3f(degree,lastknot,knots,ctlpoints,t,cpoint,cder) \
00135 mbs_multideBoorDerf ( degree, lastknot, knots, 1, 3, 0, (float*)ctlpoints, \
00136 t, (float*)cpoint, (float*)cder )
00137 #define mbs_deBoorDerC4f(degree,lastknot,knots,ctlpoints,t,cpoint,cder) \
00138 mbs_multideBoorDerf ( degree, lastknot, knots, 1, 4, 0, (float*)ctlpoints, \
00139 t, (float*)cpoint, (float*)cder )
00140
00141
00142 int mbs_multideBoorDer2f ( int degree, int lastknot, const float *knots,
00143 int ncurves, int spdimen,
00144 int pitch, const float *ctlpoints,
00145 float t, float *p, float *d1, float *d2 );
00146
00147 #define mbs_deBoorDer2C1f(degree,lastknot,knots,coeff,t,p,d1,d2) \
00148 mbs_multideBoorDer2f(degree,lastknot,knots,1,1,0,coeff,t,p,d1,d2)
00149 #define mbs_deBoorDer2C2f(degree,lastknot,knots,ctlpoints,t,p,d1,d2) \
00150 mbs_multideBoorDer2f(degree,lastknot,knots,1,2,0,(float*)ctlpoints,t, \
00151 (float*)p,(float*)d1,(float*)d2)
00152 #define mbs_deBoorDer2C3f(degree,lastknot,knots,ctlpoints,t,p,d1,d2) \
00153 mbs_multideBoorDer2f(degree,lastknot,knots,1,3,0,(float*)ctlpoints,t, \
00154 (float*)p,(float*)d1,(float*)d2)
00155 #define mbs_deBoorDer2C4f(degree,lastknot,knots,ctlpoints,t,p,d1,d2) \
00156 mbs_multideBoorDer2f(degree,lastknot,knots,1,4,0,(float*)ctlpoints,t, \
00157 (float*)p,(float*)d1,(float*)d2)
00158
00159
00160 int mbs_multideBoorDer3f ( int degree, int lastknot, const float *knots,
00161 int ncurves, int spdimen,
00162 int pitch, const float *ctlpoints, float t,
00163 float *p, float *d1, float *d2, float *d3 );
00164
00165 #define mbs_deBoorDer3C1f(degree,lastknot,knots,coeff,t,p,d1,d2,d3) \
00166 mbs_multideBoorDer3f(degree,lastknot,knots,1,1,0,coeff,t,p,d1,d2,d3)
00167 #define mbs_deBoorDer3C2f(degree,lastknot,knots,ctlpoints,t,p,d1,d2,d3) \
00168 mbs_multideBoorDer3f(degree,lastknot,knots,1,2,0,(float*)ctlpoints,t, \
00169 (float*)p,(float*)d1,(float*)d2,(float*)d3)
00170 #define mbs_deBoorDer3C3f(degree,lastknot,knots,ctlpoints,t,p,d1,d2,d3) \
00171 mbs_multideBoorDer3f(degree,lastknot,knots,1,3,0,(float*)ctlpoints,t, \
00172 (float*)p,(float*)d1,(float*)d2,(float*)d3)
00173 #define mbs_deBoorDer3C4f(degree,lastknot,knots,ctlpoints,t,p,d1,d2,d3) \
00174 mbs_multideBoorDer3f(degree,lastknot,knots,1,4,0,(float*)ctlpoints,t, \
00175 (float*)p,(float*)d1,(float*)d2,(float*)d3)
00176
00177
00178 boolean mbs_deBoorDerPf ( int degreeu, int lastknotu, const float *knotsu,
00179 int degreev, int lastknotv, const float *knotsv,
00180 int spdimen, int pitch, const float *ctlpoints,
00181 float u, float v,
00182 float *ppoint, float *uder, float *vder );
00183
00184 boolean mbs_deBoorDer2Pf ( int degreeu, int lastknotu, const float *knotsu,
00185 int degreev, int lastknotv, const float *knotsv,
00186 int spdimen, int pitch, const float *ctlpoints,
00187 float u, float v,
00188 float *ppoint, float *uder, float *vder,
00189 float *uuder, float *uvder, float *vvder );
00190
00191 boolean mbs_deBoorDer3Pf ( int degreeu, int lastknotu, const float *knotsu,
00192 int degreev, int lastknotv, const float *knotsv,
00193 int spdimen, int pitch, const float *ctlpoints,
00194 float u, float v,
00195 float *ppoint, float *uder, float *vder,
00196 float *uuder, float *uvder, float *vvder,
00197 float *uuuder, float *uuvder, float *uvvder,
00198 float *vvvder );
00199
00200
00201 int mbs_multiKnotInsf ( int degree, int *lastknot,
00202 float *knots,
00203 int ncurves, int spdimen, int inpitch, int outpitch,
00204 float *ctlpoints, float t );
00205
00206 #define mbs_KnotInsC1f(degree,lastknot,knots,coeff,t) \
00207 mbs_multiKnotInsf(degree,lastknot,knots,1,1,0,0,coeff, t)
00208 #define mbs_KnotInsC2f(degree,lastknot,knots,ctlpoints,t) \
00209 mbs_multiKnotInsf(degree,lastknot,knots,1,2,0,0,(float*)ctlpoints, t)
00210 #define mbs_KnotInsC3f(degree,lastknot,knots,ctlpoints,t) \
00211 mbs_multiKnotInsf(degree,lastknot,knots,1,3,0,0,(float*)ctlpoints, t)
00212 #define mbs_KnotInsC4f(degree,lastknot,knots,ctlpoints,t) \
00213 mbs_multiKnotInsf(degree,lastknot,knots,1,4,0,0,(float*)ctlpoints, t)
00214
00215
00216 int mbs_multiKnotInsClosedf ( int degree, int *lastknot, float *knots,
00217 int ncurves, int spdimen, int inpitch, int outpitch,
00218 float *ctlpoints, float t );
00219
00220 #define mbs_KnotInsClosedC1f(degree,lastknot,knots,coeff,t) \
00221 mbs_multiKnotInsClosedf(degree,lastknot,knots,1,1,0,0,coeff,t)
00222 #define mbs_KnotInsClosedC2f(degree,lastknot,knots,ctlpoints,t) \
00223 mbs_multiKnotInsClosedf(degree,lastknot,knots,1,2,0,0,(float*)ctlpoints,t)
00224 #define mbs_KnotInsClosedC3f(degree,lastknot,knots,ctlpoints,t) \
00225 mbs_multiKnotInsClosedf(degree,lastknot,knots,1,3,0,0,(float*)ctlpoints,t)
00226 #define mbs_KnotInsClosedC4f(degree,lastknot,knots,ctlpoints,t) \
00227 mbs_multiKnotInsClosedf(degree,lastknot,knots,1,4,0,0,(float*)ctlpoints,t)
00228
00229
00230 int mbs_multiKnotRemovef ( int degree, int *lastknot,
00231 float *knots,
00232 int ncurves, int spdimen, int inpitch, int outpitch,
00233 float *ctlpoints, int knotnum );
00234
00235 #define mbs_KnotRemoveC1f(degree,lastknot,knots,coeff,knotnum) \
00236 mbs_multiKnotRemovef(degree,lastknot,knots,1,1,0,0,coeff,knotnum)
00237 #define mbs_KnotRemoveC2f(degree,lastknot,knots,ctlpoints,knotnum) \
00238 mbs_multiKnotRemovef(degree,lastknot,knots,1,2,0,0, \
00239 (float*)ctlpoints, knotnum)
00240 #define mbs_KnotRemoveC3f(degree,lastknot,knots,ctlpoints,knotnum) \
00241 mbs_multiKnotRemovef(degree,lastknot,knots,1,3,0,0, \
00242 (float*)ctlpoints, knotnum)
00243 #define mbs_KnotRemoveC4f(degree,lastknot,knots,ctlpoints,knotnum) \
00244 mbs_multiKnotRemovef(degree,lastknot,knots,1,4,0,0, \
00245 (float*)ctlpoints, knotnum)
00246
00247
00248 int mbs_multiKnotRemoveClosedf ( int degree, int *lastknot,
00249 float *knots,
00250 int ncurves, int spdimen, int inpitch, int outpitch,
00251 float *ctlpoints, int knotnum );
00252
00253 #define mbs_KnotRemoveClosedC1f(degree,lastknot,knots,coeff,knotnum) \
00254 mbs_multiKnotRemoveClosedf (degree,lastknot,knots,1,1,0,0,coeff,knotnum)
00255 #define mbs_KnotRemoveClosedC2f(degree,lastknot,knots,ctlpoints,knotnum) \
00256 mbs_multiKnotRemoveClosedf (degree,lastknot,knots,1,2,0,0, \
00257 (float*)ctlpoints,knotnum)
00258 #define mbs_KnotRemoveClosedC3f(degree,lastknot,knots,ctlpoints,knotnum) \
00259 mbs_multiKnotRemoveClosedf (degree,lastknot,knots,1,3,0,0, \
00260 (float*)ctlpoints,knotnum)
00261 #define mbs_KnotRemoveClosedC4f(degree,lastknot,knots,ctlpoints,knotnum) \
00262 mbs_multiKnotRemoveClosedf (degree,lastknot,knots,1,4,0,0, \
00263 (float*)ctlpoints,knotnum)
00264
00265
00266 void mbs_multiRemoveSuperfluousKnotsf ( int ncurves, int spdimen, int degree,
00267 int *lastknot, float *knots,
00268 int inpitch, int outpitch,
00269 float *ctlpoints );
00270
00271
00272 void mbs_multiMaxKnotInsf ( int ncurves, int spdimen, int degree,
00273 int inlastknot, const float *inknots,
00274 int inpitch, const float *inctlpoints,
00275 int *outlastknot, float *outknots,
00276 int outpitch, float *outctlpoints,
00277 int *skipl, int *skipr );
00278
00279 #define mbs_MaxKnotInsC1f(degree,inlastknot,inknots,incoeff, \
00280 outlastknot,outknots,outcoeff,skipl,skipr) \
00281 mbs_multiMaxKnotInsf(1,1,degree,inlastknot,inknots,0,incoeff, \
00282 outlastknot,outknots,0,outcoeff,skipl,skipr)
00283 #define mbs_MaxKnotInsC2f(degree,inlastknot,inknots,inctlpoints, \
00284 outlastknot,outknots,outctlpoints,skipl,skipr) \
00285 mbs_multiMaxKnotInsf(1,2,degree,inlastknot,inknots,0,(float*)inctlpoints, \
00286 outlastknot,outknots,0,(float*)outctlpoints,skipl,skipr)
00287 #define mbs_MaxKnotInsC3f(degree,inlastknot,inknots,inctlpoints, \
00288 outlastknot,outknots,outctlpoints,skipl,skipr) \
00289 mbs_multiMaxKnotInsf(1,3,degree,inlastknot,inknots,0,(float*)inctlpoints, \
00290 outlastknot,outknots,0,(float*)outctlpoints,skipl,skipr)
00291 #define mbs_MaxKnotInsC4f(degree,inlastknot,inknots,inctlpoints, \
00292 outlastknot,outknots,outctlpoints,skipl,skipr) \
00293 mbs_multiMaxKnotInsf(1,4,degree,inlastknot,inknots,0,(float*)inctlpoints, \
00294 outlastknot,outknots,0,(float*)outctlpoints,skipl,skipr)
00295
00296
00297 void mbs_multiBSCurvesToBezf ( int spdimen, int ncurves,
00298 int degree, int lastinknot, const float *inknots,
00299 int inpitch, const float *inctlp,
00300 int *kpcs, int *lastoutknot, float *outknots,
00301 int outpitch, float *outctlp );
00302
00303 #define mbs_BSToBezC1f(degree,lastinknot,inknots,incoeff,kpcs, \
00304 lastoutknot,outknots,outcoeff) \
00305 mbs_multiBSCurvesToBezf(1,1,degree,lastinknot,inknots,0,incoeff, \
00306 kpcs,lastoutknot,outknots,0,outcoeff)
00307 #define mbs_BSToBezC2f(degree,lastinknot,inknots,inctlp,kpcs, \
00308 lastoutknot,outknots,outctlp) \
00309 mbs_multiBSCurvesToBezf(2,1,degree,lastinknot,inknots,0,(float*)inctlp, \
00310 kpcs,lastoutknot,outknots,0,(float*)outctlp)
00311 #define mbs_BSToBezC3f(degree,lastinknot,inknots,inctlp,kpcs, \
00312 lastoutknot,outknots,outctlp) \
00313 mbs_multiBSCurvesToBezf(3,1,degree,lastinknot,inknots,0,(float*)inctlp, \
00314 kpcs,lastoutknot,outknots,0,(float*)outctlp)
00315 #define mbs_BSToBezC4f(degree,lastinknot,inknots,inctlp,kpcs, \
00316 lastoutknot,outknots,outctlp) \
00317 mbs_multiBSCurvesToBezf(4,1,degree,lastinknot,inknots,0,(float*)inctlp, \
00318 kpcs,lastoutknot,outknots,0,(float*)outctlp)
00319
00320
00321 void mbs_BSPatchToBezf ( int spdimen,
00322 int degreeu, int lastuknot, const float *uknots,
00323 int degreev, int lastvknot, const float *vknots,
00324 int inpitch, const float *inctlp,
00325 int *kupcs, int *lastoutuknot, float *outuknots,
00326 int *kvpcs, int *lastoutvknot, float *outvknots,
00327 int outpitch, float *outctlp );
00328
00329
00330 int mbs_NumKnotIntervalsf ( int degree, int lastknot, const float *knots );
00331
00332 int mbs_LastknotMaxInsf ( int degree, int lastknot, const float *knots,
00333 int *numknotintervals );
00334
00335 int mbs_BSProdRepSizef ( int degree1, int lastknot1, const float *knots1,
00336 int degree2, int lastknot2, const float *knots2 );
00337
00338 int mbs_NumMaxKnotsf ( int degree, int lastknot, const float *knots );
00339
00340 void mbs_SetBSProdKnotsf ( int degree1, int lastknot1, const float *knots1,
00341 int degree2, int lastknot2, const float *knots2,
00342 int *degree, int *lastknot, float *knots );
00343
00344 void mbs_SetKnotPatternf ( int lastinknot, const float *inknots,
00345 int multipl,
00346 int *lastoutknot, float *outknots );
00347
00348 void mbs_multiBezScalef ( int degree, int narcs, int ncurves, int spdimen,
00349 int pitch, float *ctlpoints );
00350
00351 void mbs_multiBezUnscalef ( int degree, int narcs, int ncurves, int spdimen,
00352 int pitch, float *ctlpoints );
00353
00354 void mbs_multiMultBezCf ( int nscf, int degscf, int scfpitch,
00355 const float *scfcoef,
00356 int spdimen,
00357 int nvecf, int degvecf, int vecfpitch,
00358 const float *vecfcp,
00359 int *degprod, int prodpitch, float *prodcp );
00360
00361 void mbs_multiMultBSCf ( int nscf, int degscf,
00362 int scflastknot, const float *scfknots,
00363 int scfpitch, const float *scfcoef,
00364 int spdimen,
00365 int nvecf, int degvecf,
00366 int vecflastknot, const float *vecfknots,
00367 int vecfpitch, const float *vecfcp,
00368 int *degprod, int *prodlastknot, float *prodknots,
00369 int prodpitch, float *prodcp );
00370
00371
00372 void mbs_multiBCDegElevf ( int ncurves, int spdimen,
00373 int inpitch, int indegree, const float *inctlpoints,
00374 int deltadeg,
00375 int outpitch, int *outdegree, float *outctlpoints );
00376
00377 #define mbs_BCDegElevC1f(indegree,incoeff,deltadeg,outdegree,outcoeff) \
00378 mbs_multiBCDegElevf ( 1, 1, 0, indegree, incoeff, deltadeg, \
00379 0, outdegree, outcoeff )
00380 #define mbs_BCDegElevC2f(indegree,inctlpoints,deltadeg,outdegree,outctlpoints) \
00381 mbs_multiBCDegElevf ( 1, 2, 0, indegree, (float*)inctlpoints, deltadeg, \
00382 0, outdegree, (float*)outctlpoints )
00383 #define mbs_BCDegElevC3f(indegree,inctlpoints,deltadeg,outdegree,outctlpoints) \
00384 mbs_multiBCDegElevf ( 1, 3, 0, indegree, (float*)inctlpoints, deltadeg, \
00385 0, outdegree, (float*)outctlpoints)
00386 #define mbs_BCDegElevC4f(indegree,inctlpoints,deltadeg,outdegree,outctlpoints) \
00387 mbs_multiBCDegElevf ( 1, 4, 0, indegree, (float*)inctlpoints, deltadeg, \
00388 0, outdegree, (float*)outctlpoints )
00389
00390
00391 void mbs_BCDegElevPf ( int spdimen,
00392 int indegreeu, int indegreev, const float *inctlp,
00393 int deltadegu, int deltadegv,
00394 int *outdegreeu, int *outdegreev,
00395 float *outctlp );
00396
00397 #define mbs_BCDegElevP1f(indegreeu,indegreev,incoeff,deltadegu,deltadegv, \
00398 outdegreeu,outdegreev,outcoeff) \
00399 mbs_BCDegElevPf ( 1, indegreeu, indegreev, incoeff, deltadegu, deltadegv, \
00400 outdegreeu, outdegreev, outcoeff )
00401 #define mbs_BCDegElevP2f(indegreeu,indegreev,inctlp,deltadegu,deltadegv, \
00402 outdegreeu,outdegreev,outctlp) \
00403 mbs_BCDegElevPf ( 2, indegreeu, indegreev, (float*)inctlp, \
00404 deltadegu, deltadegv, outdegreeu, outdegreev, (float*)outctlp )
00405 #define mbs_BCDegElevP3f(indegreeu,indegreev,inctlp,deltadegu,deltadegv, \
00406 outdegreeu,outdegreev,outctlp) \
00407 mbs_BCDegElevPf ( 3, indegreeu, indegreev, (float*)inctlp, \
00408 deltadegu, deltadegv, outdegreeu, outdegreev, (float*)outctlp )
00409 #define mbs_BCDegElevP4f(indegreeu,indegreev,inctlp,deltadegu,deltadegv, \
00410 outdegreeu,outdegreev,outctlp) \
00411 mbs_BCDegElevPf ( 4, indegreeu, indegreev, (float*)inctlp, \
00412 deltadegu, deltadegv, outdegreeu, outdegreev, (float*)outctlp )
00413
00414
00415 void mbs_multiBCDegRedf ( int ncurves, int spdimen,
00416 int inpitch, int indegree, const float *inctlpoints,
00417 int deltadeg,
00418 int outpitch, int *outdegree, float *outctlpoints );
00419
00420 #define mbs_BCDegRedC1f(indegree,incoeff,deltadeg,outdegree,outcoeff) \
00421 mbs_multiBCDegRedf ( 1, 1, 0, indegree, incoeff, deltadeg, \
00422 0, outdegree, outcoeff )
00423 #define mbs_BCDegRedC2f(indegree,inctlpoints,deltadeg,outdegree,outctlpoints) \
00424 mbs_multiBCDegRedf ( 1, 2, 0, indegree, (float*)inctlpoints, deltadeg, \
00425 0, outdegree, (float*)outctlpoints )
00426 #define mbs_BCDegRedC3f(indegree,inctlpoints,deltadeg,outdegree,outctlpoints) \
00427 mbs_multiBCDegRedf ( 1, 3, 0, indegree, (float*)inctlpoints, deltadeg, \
00428 0, outdegree, (float*)outctlpoints)
00429 #define mbs_BCDegRedC4f(indegree,inctlpoints,deltadeg,outdegree,outctlpoints) \
00430 mbs_multiBCDegRedf ( 1, 4, 0, indegree, (float*)inctlpoints, deltadeg, \
00431 0, outdegree, (float*)outctlpoints )
00432
00433
00434 void mbs_BCDegRedPf ( int spdimen,
00435 int indegreeu, int indegreev, const float *inctlp,
00436 int deltadegu, int deltadegv,
00437 int *outdegreeu, int *outdegreev,
00438 float *outctlp );
00439
00440 #define mbs_BCDegRedP1f(indegreeu,indegreev,incoeff,deltadegu,deltadegv, \
00441 outdegreeu,outdegreev,outcoeff) \
00442 mbs_BCDegRedPf ( 1, indegreeu, indegreev, incoeff, deltadegu, deltadegv, \
00443 outdegreeu, outdegreev, outcoeff )
00444 #define mbs_BCDegRedP2f(indegreeu,indegreev,inctlp,deltadegu,deltadegv, \
00445 outdegreeu,outdegreev,outctlp) \
00446 mbs_BCDegRedPf ( 2, indegreeu, indegreev, (float*)inctlp, \
00447 deltadegu, deltadegv, outdegreeu, outdegreev, (float*)outctlp )
00448 #define mbs_BCDegRedP3f(indegreeu,indegreev,inctlp,deltadegu,deltadegv, \
00449 outdegreeu,outdegreev,outctlp) \
00450 mbs_BCDegRedPf ( 3, indegreeu, indegreev, (float*)inctlp, \
00451 deltadegu, deltadegv, outdegreeu, outdegreev, (float*)outctlp )
00452 #define mbs_BCDegRedP4f(indegreeu,indegreev,inctlp,deltadegu,deltadegv, \
00453 outdegreeu,outdegreev,outctlp) \
00454 mbs_BCDegRedPf ( 4, indegreeu, indegreev, (float*)inctlp, \
00455 deltadegu, deltadegv, outdegreeu, outdegreev, (float*)outctlp )
00456
00457
00458 void mbs_multiBSDegElevf ( int ncurves, int spdimen,
00459 int indegree, int inlastknot, const float *inknots,
00460 int inpitch, const float *inctlpoints,
00461 int deltadeg,
00462 int *outdegree, int *outlastknot,
00463 float *outknots, int outpitch, float *outctlpoints,
00464 boolean freeend );
00465
00466 #define mbs_BSDegElevC1f(indegree,inlastknot,inknots,incoeff, \
00467 deltadeg,outdegree,outlastknot,outknots,outcoeff,freeend) \
00468 mbs_multiBSDegElevf(1,1,indegree,inlastknot,inknots,0,incoeff, \
00469 deltadeg,outdegree,outlastknot,outknots,0,outcoeff,freeend)
00470 #define mbs_BSDegElevC2f(indegree,inlastknot,inknots,inctlpoints, \
00471 deltadeg,outdegree,outlastknot,outknots,outctlpoints,freeend) \
00472 mbs_multiBSDegElevf(1,2,indegree,inlastknot,inknots,0,(float*)inctlpoints, \
00473 deltadeg,outdegree,outlastknot,outknots,0,(float*)outctlpoints,freeend)
00474 #define mbs_BSDegElevC3f(indegree,inlastknot,inknots,inctlpoints, \
00475 deltadeg,outdegree,outlastknot,outknots,outctlpoints,freeend) \
00476 mbs_multiBSDegElevf(1,3,indegree,inlastknot,inknots,0,(float*)inctlpoints, \
00477 deltadeg,outdegree,outlastknot,outknots,0,(float*)outctlpoints,freeend)
00478 #define mbs_BSDegElevC4f(indegree,inlastknot,inknots,inctlpoints, \
00479 deltadeg,outdegree,outlastknot,outknots,outctlpoints,freeend) \
00480 mbs_multiBSDegElevf(1,4,indegree,inlastknot,inknots,0,(float*)inctlpoints, \
00481 deltadeg,outdegree,outlastknot,outknots,0,(float*)outctlpoints,freeend)
00482
00483 void mbs_multiBSDegElevClosedf ( int ncurves, int spdimen,
00484 int indegree, int inlastknot, const float *inknots,
00485 int inpitch, const float *inctlpoints,
00486 int deltadeg,
00487 int *outdegree, int *outlastknot,
00488 float *outknots, int outpitch, float *outctlpoints );
00489
00490 #define mbs_BSDegElevClosedC1f(indegree,inlastknot,inknots,incoeff, \
00491 deltadeg,outdegree,outlastknot,outknots,outcoeff) \
00492 mbs_multiBSDegElevClosedf(1,1,indegree,inlastknot,inknots,0,incoeff, \
00493 deltadeg,outdegree,outlastknot,outknots,0,outcoeff)
00494 #define mbs_BSDegElevClosedC2f(indegree,inlastknot,inknots,inctlpoints, \
00495 deltadeg,outdegree,outlastknot,outknots,outctlpoints) \
00496 mbs_multiBSDegElevClosedf(1,2,indegree,inlastknot,inknots,0,(float*)inctlpoints, \
00497 deltadeg,outdegree,outlastknot,outknots,0,(float*)outctlpoints)
00498 #define mbs_BSDegElevClosedC3f(indegree,inlastknot,inknots,inctlpoints, \
00499 deltadeg,outdegree,outlastknot,outknots,outctlpoints) \
00500 mbs_multiBSDegElevClosedf(1,3,indegree,inlastknot,inknots,0,(float*)inctlpoints, \
00501 deltadeg,outdegree,outlastknot,outknots,0,(float*)outctlpoints)
00502 #define mbs_BSDegElevClosedC4f(indegree,inlastknot,inknots,inctlpoints, \
00503 deltadeg,outdegree,outlastknot,outknots,outctlpoints) \
00504 mbs_multiBSDegElevClosedf(1,4,indegree,inlastknot,inknots,0,(float*)inctlpoints, \
00505 deltadeg,outdegree,outlastknot,outknots,0,(float*)outctlpoints)
00506
00507
00508 boolean mbs_multiBSDegRedf ( int ncurves, int spdimen,
00509 int indegree, int inlastknot, const float *inknots,
00510 int inpitch, CONST_ float *inctlpoints,
00511 int deltadeg,
00512 int *outdegree, int *outlastknot, float *outknots,
00513 int outpitch, float *outctlpoints );
00514
00515 #define mbs_BSDegRedC1f(indegree,inlastknot,inknots,incoeff,deltadeg, \
00516 outdegree,outlastknot,outknots,outcoeff) \
00517 mbs_multiBSDegRedf(1,1,indegree,inlastknot,inknots,0,incoeff,deltadeg, \
00518 outdegree,outlastknot,outknots,0,outcoeff)
00519 #define mbs_BSDegRedC2f(indegree,inlastknot,inknots,incpoints,deltadeg, \
00520 outdegree,outlastknot,outknots,outcpoints) \
00521 mbs_multiBSDegRedf(1,2,indegree,inlastknot,inknots,0,(float*)incpoints,deltadeg, \
00522 outdegree,outlastknot,outknots,0,(float*)outcpoints)
00523 #define mbs_BSDegRedC3f(indegree,inlastknot,inknots,incpoints,deltadeg, \
00524 outdegree,outlastknot,outknots,outcpoints) \
00525 mbs_multiBSDegRedf(1,3,indegree,inlastknot,inknots,0,(float*)incpoints,deltadeg, \
00526 outdegree,outlastknot,outknots,0,(float*)outcpoints)
00527 #define mbs_BSDegRedC4f(indegree,inlastknot,inknots,incpoints,deltadeg, \
00528 outdegree,outlastknot,outknots,outcpoints) \
00529 mbs_multiBSDegRedf(1,4,indegree,inlastknot,inknots,0,(float*)incpoints,deltadeg, \
00530 outdegree,outlastknot,outknots,0,(float*)outcpoints)
00531
00532
00533 boolean mbs_multiBSDegRedClosedf ( int ncurves, int spdimen,
00534 int indegree, int inlastknot, const float *inknots,
00535 int inpitch, CONST_ float *inctlpoints,
00536 int deltadeg,
00537 int *outdegree, int *outlastknot, float *outknots,
00538 int outpitch, float *outctlpoints );
00539
00540 #define mbs_BSDegRedClosedC1f(indegree,inlastknot,inknots,incoeff,deltadeg, \
00541 outdegree,outlastknot,outknots,outcoeff) \
00542 mbs_multiBSDegRedClosedf(1,1,indegree,inlastknot,inknots,0,incoeff,deltadeg, \
00543 outdegree,outlastknot,outknots,0,outcoeff)
00544 #define mbs_BSDegRedClosedC2f(indegree,inlastknot,inknots,incpoints,deltadeg, \
00545 outdegree,outlastknot,outknots,outcpoints) \
00546 mbs_multiBSDegRedClosedf(1,2,indegree,inlastknot,inknots,0,(float*)incpoints, \
00547 deltadeg,outdegree,outlastknot,outknots,0,(float*)outcpoints)
00548 #define mbs_BSDegRedClosedC3f(indegree,inlastknot,inknots,incpoints,deltadeg, \
00549 outdegree,outlastknot,outknots,outcpoints) \
00550 mbs_multiBSDegRedClosedf(1,3,indegree,inlastknot,inknots,0,(float*)incpoints, \
00551 deltadeg,outdegree,outlastknot,outknots,0,(float*)outcpoints)
00552 #define mbs_BSDegRedClosedC4f(indegree,inlastknot,inknots,incpoints,deltadeg, \
00553 outdegree,outlastknot,outknots,outcpoints) \
00554 mbs_multiBSDegRedClosedf(1,4,indegree,inlastknot,inknots,0,(float*)incpoints, \
00555 deltadeg,outdegree,outlastknot,outknots,0,(float*)outcpoints)
00556
00557
00558 void mbs_multiBCHornerf ( int degree, int ncurves, int spdimen, int pitch,
00559 const float *ctlpoints, float t, float *cpoints );
00560
00561 #define mbs_BCHornerC1f(degree,coeff,t,value) \
00562 mbs_multiBCHornerf ( degree, 1, 1, 0, coeff, t, value )
00563 #define mbs_BCHornerC2f(degree,ctlpoints,t,cpoint) \
00564 mbs_multiBCHornerf ( degree, 1, 2, 0, (float*)ctlpoints, t, (float*)cpoint )
00565 #define mbs_BCHornerC3f(degree,ctlpoints,t,cpoint) \
00566 mbs_multiBCHornerf ( degree, 1, 3, 0, (float*)ctlpoints, t, (float*)cpoint )
00567 #define mbs_BCHornerC4f(degree,ctlpoints,t,cpoint) \
00568 mbs_multiBCHornerf ( degree, 1, 4, 0, (float*)ctlpoints, t, (float*)cpoint )
00569
00570 void mbs_BCHornerC2Rf ( int degree, const point3f *ctlpoints, float t,
00571 point2f *cpoint );
00572
00573 void mbs_BCHornerC3Rf ( int degree, const point4f *ctlpoints, float t,
00574 point3f *cpoint );
00575
00576
00577 void mbs_BCHornerPf ( int degreeu, int degreev, int spdimen,
00578 const float *ctlpoints,
00579 float u, float v, float *ppoint );
00580
00581 #define mbs_BCHornerP1f(degreeu,degreev,coeff,u,v,ppoint) \
00582 mbs_BCHornerPf ( degreeu, degreev, 1, coeff, u, v, ppoint )
00583 #define mbs_BCHornerP2f(degreeu,degreev,ctlpoints,u,v,ppoint ) \
00584 mbs_BCHornerPf ( degreeu, degreev, 2, (float*)ctlpoints, \
00585 u, v, (float*)ppoint )
00586 #define mbs_BCHornerP3f(degreeu,degreev,ctlpoints,u,v,ppoint ) \
00587 mbs_BCHornerPf ( degreeu, degreev, 3, (float*)ctlpoints, \
00588 u, v, (float*)ppoint )
00589 #define mbs_BCHornerP4f(degreeu,degreev,ctlpoints,u,v,ppoint ) \
00590 mbs_BCHornerPf ( degreeu, degreev, 4, (float*)ctlpoints, \
00591 u, v, (float*)ppoint )
00592
00593 void mbs_BCHornerP3Rf ( int degreeu, int degreev, const point4f *ctlpoints,
00594 float u, float v, point3f *p );
00595
00596
00597 void mbs_multiBCHornerDerf ( int degree, int ncurves, int spdimen, int pitch,
00598 const float *ctlpoints,
00599 float t, float *p, float *d );
00600
00601 #define mbs_BCHornerDerC1f(degree,coeff,t,p,d) \
00602 mbs_multiBCHornerDerf ( degree, 1, 1, 0, coeff, t, p, d )
00603 #define mbs_BCHornerDerC2f(degree,ctlpoints,t,p,d) \
00604 mbs_multiBCHornerDerf ( degree, 1, 2, 0, (float*)ctlpoints, t, \
00605 (float*)p, (float*)d )
00606 #define mbs_BCHornerDerC3f(degree,ctlpoints,t,p,d) \
00607 mbs_multiBCHornerDerf ( degree, 1, 3, 0, (float*)ctlpoints, t, \
00608 (float*)p, (float*)d )
00609 #define mbs_BCHornerDerC4f(degree,ctlpoints,t,p,d) \
00610 mbs_multiBCHornerDerf ( degree, 1, 4, 0, (float*)ctlpoints, t, \
00611 (float*)p, (float*)d )
00612
00613 void mbs_BCHornerDerC2Rf ( int degree, const point3f *ctlpoints, float t,
00614 point2f *p, vector2f *d );
00615 void mbs_BCHornerDerC3Rf ( int degree, const point4f *ctlpoints, float t,
00616 point3f *p, vector3f *d );
00617
00618
00619 void mbs_BCHornerDerPf ( int degreeu, int degreev, int spdimen,
00620 const float *ctlpoints,
00621 float u, float v,
00622 float *p, float *du, float *dv );
00623
00624 #define mbs_BCHornerDerP1f(degreeu,degreev,coeff,u,v,p,du,dv) \
00625 mbs_BCHornerDerPf ( degreeu, degreev, 1, coeff, u, v, p, du, dv )
00626 #define mbs_BCHornerDerP2f(degreeu,degreev,ctlpoints,u,v,p,du,dv) \
00627 mbs_BCHornerDerPf ( degreeu, degreev, 2, (float*)ctlpoints, u, v, \
00628 (float*)p, (float*)du, (float*)dv )
00629 #define mbs_BCHornerDerP3f(degreeu,degreev,ctlpoints,u,v,p,du,dv) \
00630 mbs_BCHornerDerPf ( degreeu, degreev, 3, (float*)ctlpoints, u, v, \
00631 (float*)p, (float*)du, (float*)dv )
00632 #define mbs_BCHornerDerP4f(degreeu,degreev,ctlpoints,u,v,p,du,dv) \
00633 mbs_BCHornerDerPf ( degreeu, degreev, 4, (float*)ctlpoints, u, v, \
00634 (float*)p, (float*)du, (float*)dv )
00635
00636 void mbs_BCHornerDerP3Rf ( int degreeu, int degreev, const point4f *ctlpoints,
00637 float u, float v,
00638 point3f *p, vector3f *du, vector3f *dv );
00639
00640
00641 void mbs_BCHornerNvP3f ( int degreeu, int degreev, const point3f *ctlpoints,
00642 float u, float v,
00643 point3f *p, vector3f *nv );
00644
00645 void mbs_BCHornerNvP3Rf ( int degreeu, int degreev, const point4f *ctlpoints,
00646 float u, float v,
00647 point3f *p, vector3f *nv );
00648
00649
00650 void mbs_multiBCHornerDer2f ( int degree, int ncurves, int spdimen, int pitch,
00651 const float *ctlpoints,
00652 float t, float *p, float *d1, float *d2 );
00653
00654 #define mbs_BCHornerDer2C1f(degree,coeff,t,p,d1,d2) \
00655 mbs_multiBCHornerDer2f ( degree, 1, 1, 0, coeff, t, p, d1, d2 )
00656 #define mbs_BCHornerDer2C2f(degree,ctlpoints,t,p,d1,d2) \
00657 mbs_multiBCHornerDer2f ( degree, 1, 2, 0, (float*)ctlpoints, t, \
00658 (float*)p, (float*)d1, (float*)d2 )
00659 #define mbs_BCHornerDer2C3f(degree,ctlpoints,t,p,d1,d2) \
00660 mbs_multiBCHornerDer2f ( degree, 1, 3, 0, (float*)ctlpoints, t, \
00661 (float*)p, (float*)d1, (float*)d2 )
00662 #define mbs_BCHornerDer2C4f(degree,ctlpoints,t,p,d1,d2) \
00663 mbs_multiBCHornerDer2f ( degree, 1, 4, 0, (float*)ctlpoints, t, \
00664 (float*)p, (float*)d1, (float*)d2 )
00665
00666 void mbs_BCHornerDer2C2Rf ( int degree, const point3f *ctlpoints, float t,
00667 point2f *p, vector2f *d1, vector2f *d2 );
00668 void mbs_BCHornerDer2C3Rf ( int degree, const point4f *ctlpoints, float t,
00669 point3f *p, vector3f *d1, vector3f *d2 );
00670
00671 void mbs_BCHornerDer2Pf ( int degreeu, int degreev, int spdimen,
00672 const float *ctlpoints,
00673 float u, float v,
00674 float *p, float *du, float *dv,
00675 float *duu, float *duv, float *dvv );
00676
00677 #define mbs_BCHornerDer2P1f(degreeu,degreev,coeff,u,v,p,du,dv,duu,duv,dvv) \
00678 mbs_BCHornerDer2Pf ( degreeu, degreev, 1, coeff, u, v, \
00679 p, du, dv, duu, duv, dvv )
00680 #define mbs_BCHornerDer2P2f(degreeu,degreev,ctlpoints,u,v,p,du,dv,duu,duv,dvv) \
00681 mbs_BCHornerDer2Pf ( degreeu, degreev, 2, (float*)ctlpoints, u, v, \
00682 (float*)p, (float*)du, (float*)dv, (float*)duu, (float*)duv, (float*)dvv )
00683 #define mbs_BCHornerDer2P3f(degreeu,degreev,ctlpoints,u,v,p,du,dv,duu,duv,dvv) \
00684 mbs_BCHornerDer2Pf ( degreeu, degreev, 3, (float*)ctlpoints, u, v, \
00685 (float*)p, (float*)du, (float*)dv, (float*)duu, (float*)duv, (float*)dvv )
00686 #define mbs_BCHornerDer2P4f(degreeu,degreev,ctlpoints,u,v,p,du,dv,duu,duv,dvv) \
00687 mbs_BCHornerDer2Pf ( degreeu, degreev, 4, (float*)ctlpoints, u, v, \
00688 (float*)p, (float*)du, (float*)dv, (float*)duu, (float*)duv, (float*)dvv )
00689
00690 void mbs_BCHornerDer2P3Rf ( int degreeu, int degreev, const point4f *ctlpoints,
00691 float u, float v,
00692 point3f *p, vector3f *du, vector3f *dv,
00693 vector3f *duu, vector3f *duv, vector3f *dvv );
00694
00695
00696 void mbs_multiBCHornerDer3f ( int degree, int ncurves, int spdimen, int pitch,
00697 const float *ctlpoints, float t,
00698 float *p, float *d1, float *d2, float *d3 );
00699
00700 #define mbs_BCHornerDer3C1f(degree,coeff,t,p,d1,d2,d3) \
00701 mbs_multiBCHornerDer3f ( degree, 1, 1, 0, coeff, t, p, d1, d2, d3 )
00702 #define mbs_BCHornerDer3C2f(degree,ctlpoints,t,p,d1,d2,d3) \
00703 mbs_multiBCHornerDer3f ( degree, 1, 2, 0, (float*)ctlpoints, t, \
00704 (float*)p, (float*)d1, (float*)d2, (float*)d3 )
00705 #define mbs_BCHornerDer3C3f(degree,ctlpoints,t,p,d1,d2,d3) \
00706 mbs_multiBCHornerDer3f ( degree, 1, 3, 0, (float*)ctlpoints, t, \
00707 (float*)p, (float*)d1, (float*)d2, (float*)d3 )
00708 #define mbs_BCHornerDer3C4f(degree,ctlpoints,t,p,d1,d2,d3) \
00709 mbs_multiBCHornerDer3f ( degree, 1, 4, 0, (float*)ctlpoints, t, \
00710 (float*)p, (float*)d1, (float*)d2, (float*)d3 )
00711
00712
00713 void mbs_FindBezPatchDiagFormf ( int degreeu, int degreev, int spdimen,
00714 CONST_ float *cpoints,
00715 int k, int l, float u, float v,
00716 float *dfcp );
00717
00718 void mbs_BCHornerDer3Pf ( int degreeu, int degreev, int spdimen,
00719 CONST_ float *ctlpoints,
00720 float u, float v,
00721 float *p, float *pu, float *pv,
00722 float *puu, float *puv, float *pvv,
00723 float *puuu, float *puuv, float *puvv, float *pvvv );
00724
00725 #define mbs_BCHornerDer3P1f(degreeu,degreev,coeff,u,v, \
00726 p,pu,pv,puu,puv,pvv,puuu,puuv,puvv,pvvv) \
00727 mbs_BCHornerDer3Pf ( degreeu, degreev, 1, coeff, u, v, \
00728 p, pu, pv, puu, puv, pvv, puuu, puuv, puvv, pvvv )
00729 #define mbs_BCHornerDer3P2f(degreeu,degreev,ctlpoints,u,v, \
00730 p,pu,pv,puu,puv,pvv,puuu,puuv,puvv,pvvv) \
00731 mbs_BCHornerDer3Pf ( degreeu, degreev, 2, (float*)ctlpoints, u, v, \
00732 (float*)p, (float*)pu, (float*)pv, (float*)puu, (float*)puv, \
00733 (float*)pvv, (float*)puuu, (float*)puuv, (float*)puvv, (float*)pvvv )
00734 #define mbs_BCHornerDer3P3f(degreeu,degreev,ctlpoints,u,v, \
00735 p,pu,pv,puu,puv,pvv,puuu,puuv,puvv,pvvv) \
00736 mbs_BCHornerDer3Pf ( degreeu, degreev, 3, (float*)ctlpoints, u, v, \
00737 (float*)p, (float*)pu, (float*)pv, (float*)puu, (float*)puv, \
00738 (float*)pvv, (float*)puuu, (float*)puuv, (float*)puvv, (float*)pvvv )
00739 #define mbs_BCHornerDer3P4f(degreeu,degreev,ctlpoints,u,v, \
00740 p,pu,pv,puu,puv,pvv,puuu,puuv,puvv,pvvv) \
00741 mbs_BCHornerDer3Pf ( degreeu, degreev, 4, (float*)ctlpoints, u, v, \
00742 (float*)p, (float*)pu, (float*)pv, (float*)puu, (float*)puv, \
00743 (float*)pvv, (float*)puuu, (float*)puuv, (float*)puvv, (float*)pvvv )
00744
00745
00746 void mbs_deBoorBasisf ( int degree, int lastknot, const float *knots,
00747 float t, int *fnz, int *nnz, float *bfv );
00748
00749
00750 void mbs_multiBSCubicInterpf ( int lastinterpknot, float *interpknots,
00751 int ncurves, int spdimen, int xpitch,
00752 const float *x,
00753 int ypitch,
00754 char bcl, const float *ybcl,
00755 char bcr, const float *ybcr,
00756 int *lastbsknot, float *bsknots,
00757 int bspitch, float *ctlpoints );
00758
00759 void mbs_multiBSCubicClosedInterpf ( int lastinterpknot, float *interpknots,
00760 int ncurves, int spdimen, int xpitch,
00761 const float *x,
00762 int *lastbsknot, float *bsknots,
00763 int bspitch, float *ctlpoints );
00764
00765
00766 void mbs_BCFrenetC2f ( int degree, const point2f *ctlpoints, float t,
00767 point2f *cpoint, vector2f *fframe, float *curvature );
00768
00769 void mbs_BCFrenetC2Rf ( int degree, const point3f *ctlpoints, float t,
00770 point2f *cpoint, vector2f *fframe, float *curvature );
00771
00772 void mbs_BCFrenetC3f ( int degree, const point3f *ctlpoints, float t,
00773 point3f *cpoint, vector3f *fframe, float *curvatures );
00774
00775 void mbs_BCFrenetC3Rf ( int degree, const point4f *ctlpoints, float t,
00776 point3f *cpoint, vector3f *fframe, float *curvatures );
00777
00778
00779 void mbs_FundFormsBP3f ( int degreeu, int degreev, const point3f *ctlpoints,
00780 float u, float v,
00781 float *firstform, float *secondform );
00782
00783 void mbs_GMCurvaturesBP3f ( int degreeu, int degreev, const point3f *ctlpoints,
00784 float u, float v,
00785 float *gaussian, float *mean );
00786
00787 void mbs_PrincipalDirectionsBP3f ( int degreeu, int degreev,
00788 const point3f *ctlpoints,
00789 float u, float v,
00790 float *k1, vector2f *v1,
00791 float *k2, vector2f *v2 );
00792
00793 void mbs_FundFormsBP3Rf ( int degreeu, int degreev, const point4f *ctlpoints,
00794 float u, float v,
00795 float *firstform, float *secondform );
00796
00797 void mbs_GMCurvaturesBP3Rf ( int degreeu, int degreev, const point4f *ctlpoints,
00798 float u, float v,
00799 float *gaussian, float *mean );
00800
00801 void mbs_PrincipalDirectionsBP3Rf ( int degreeu, int degreev,
00802 const point4f *ctlpoints,
00803 float u, float v,
00804 float *k1, vector2f *v1,
00805 float *k2, vector2f *v2 );
00806
00807
00808 void mbs_multiBisectBezCurvesf ( int degree, int ncurves,
00809 int spdimen, int pitch,
00810 float *ctlp, float *ctlq );
00811
00812 #define mbs_BisectBC1f(degree,ctlp,ctlq) \
00813 mbs_multiBisectBezCurvesf ( degree, 1, 1, 0, ctlp, ctlq )
00814 #define mbs_BisectBC2f(degree,ctlp,ctlq) \
00815 mbs_multiBisectBezCurvesf ( degree, 1, 2, 0, (float*)ctlp, (float*)ctlq )
00816 #define mbs_BisectBC3f(degree,ctlp,ctlq) \
00817 mbs_multiBisectBezCurvesf ( degree, 1, 3, 0, (float*)ctlp, (float*)ctlq )
00818 #define mbs_BisectBC4f(degree,ctlp,ctlq) \
00819 mbs_multiBisectBezCurvesf ( degree, 1, 4, 0, (float*)ctlp, (float*)ctlq )
00820
00821 #define mbs_BisectBP1uf(degreeu,degreev,ctlp,ctlq) \
00822 mbs_multiBisectBezCurvesf ( degreeu, 1, (degreev+1), 0, ctlp, ctlq )
00823 #define mbs_BisectBP1vf(degreeu,degreev,ctlp,ctlq) \
00824 mbs_multiBisectBezCurvesf ( degreev, degreeu+1, 1, degreev+1, ctlp, ctlq )
00825 #define mbs_BisectBP2uf(degreeu,degreev,ctlp,ctlq) \
00826 mbs_multiBisectBezCurvesf ( degreeu, 1, 2*(degreev+1), 0, \
00827 (float*)ctlp, (float*)ctlq )
00828 #define mbs_BisectBP2vf(degreeu,degreev,ctlp,ctlq) \
00829 mbs_multiBisectBezCurvesf ( degreev, degreeu+1, 2, 2*(degreev+1), \
00830 (float*)ctlp, (float*)ctlq )
00831 #define mbs_BisectBP3uf(degreeu,degreev,ctlp,ctlq) \
00832 mbs_multiBisectBezCurvesf ( degreeu, 1, 3*(degreev+1), 0, \
00833 (float*)ctlp, (float*)ctlq )
00834 #define mbs_BisectBP3vf(degreeu,degreev,ctlp,ctlq) \
00835 mbs_multiBisectBezCurvesf ( degreev, degreeu+1, 3, 3*(degreev+1), \
00836 (float*)ctlp, (float*)ctlq )
00837 #define mbs_BisectBP4uf(degreeu,degreev,ctlp,ctlq) \
00838 mbs_multiBisectBezCurvesf ( degreeu, 1, 4*(degreev+1), 0, \
00839 (float*)ctlp, (float*)ctlq )
00840 #define mbs_BisectBP4vf(degreeu,degreev,ctlp,ctlq) \
00841 mbs_multiBisectBezCurvesf ( degreev, degreeu+1, 4, 4*(degreev+1), \
00842 (float*)ctlp, (float*)ctlq )
00843
00844
00845 void mbs_multiDivideBezCurvesf ( int degree, int ncurves,
00846 int spdimen, int pitch,
00847 float t,
00848 float *ctlp, float *ctlq );
00849
00850 #define mbs_DivideBC1f(degree,t,ctlp,ctlq) \
00851 mbs_multiDivideBezCurvesf ( degree, 1, 1, 0, t, ctlp, ctlq )
00852 #define mbs_DivideBC2f(degree,t,ctlp,ctlq) \
00853 mbs_multiDivideBezCurvesf ( degree, 1, 2, 0, t, (float*)ctlp, (float*)ctlq )
00854 #define mbs_DivideBC3f(degree,t,ctlp,ctlq) \
00855 mbs_multiDivideBezCurvesf ( degree, 1, 3, 0, t, (float*)ctlp, (float*)ctlq )
00856 #define mbs_DivideBC4f(degree,t,ctlp,ctlq) \
00857 mbs_multiDivideBezCurvesf ( degree, 1, 4, 0, t, (float*)ctlp, (float*)ctlq )
00858
00859 #define mbs_DivideBP1uf(degreeu,degreev,u,ctlp,ctlq) \
00860 mbs_multiDivideBezCurvesf ( degreeu, 1, (degreev+1), 0, u, ctlp, ctlq )
00861 #define mbs_DivideBP1vf(degreeu,degreev,v,ctlp,ctlq) \
00862 mbs_multiDivideBezCurvesf ( degreev, degreeu+1, 1, degreev+1, v, ctlp, ctlq )
00863 #define mbs_DivideBP2uf(degreeu,degreev,u,ctlp,ctlq) \
00864 mbs_multiDivideBezCurvesf ( degreeu, 1, 2*(degreev+1), 0, u, \
00865 (float*)ctlp, (float*)ctlq )
00866 #define mbs_DivideBP2vf(degreeu,degreev,v,ctlp,ctlq) \
00867 mbs_multiDivideBezCurvesf ( degreev, degreeu+1, 2, 2*(degreev+1), v, \
00868 (float*)ctlp, (float*)ctlq )
00869 #define mbs_DivideBP3uf(degreeu,degreev,u,ctlp,ctlq) \
00870 mbs_multiDivideBezCurvesf ( degreeu, 1, 3*(degreev+1), 0, u, \
00871 (float*)ctlp, (float*)ctlq )
00872 #define mbs_DivideBP3vf(degreeu,degreev,v,ctlp,ctlq) \
00873 mbs_multiDivideBezCurvesf ( degreev, degreeu+1, 3, 3*(degreev+1), v, \
00874 (float*)ctlp, (float*)ctlq )
00875 #define mbs_DivideBP4uf(degreeu,degreev,u,ctlp,ctlq) \
00876 mbs_multiDivideBezCurvesf ( degreeu, 1, 4*(degreev+1), 0, u, \
00877 (float*)ctlp, (float*)ctlq )
00878 #define mbs_DivideBP4vf(degreeu,degreev,v,ctlp,ctlq) \
00879 mbs_multiDivideBezCurvesf ( degreev, degreeu+1, 4, 4*(degreev+1), v, \
00880 (float*)ctlp, (float*)ctlq )
00881
00882 #ifndef MULTIBS_H
00883 void mbs_BezP3NormalDeg ( int degreeu, int degreev, int *ndegu, int *ndegv );
00884 void mbs_BezP3RNormalDeg ( int degreeu, int degreev, int *ndegu, int *ndegv );
00885 #endif
00886
00887 char mbs_BezP3Normalf ( int degreeu, int degreev, const point3f *ctlpoints,
00888 int *ndegu, int *ndegv, vector3f *ncp );
00889
00890 char mbs_BezP3RNormalf ( int degreeu, int degreev, const point4f *ctlpoints,
00891 int *ndegu, int *ndegv, vector3f *ncp );
00892
00893 boolean mbs_ApproxBSKnotsValidf ( int degree, int lastknot, const float *knots,
00894 int lastiknot, const float *iknots );
00895
00896 int mbs_ApproxBSBandmSizef ( int degree, const float *knots,
00897 int lastiknot, const float *iknots );
00898
00899 boolean mbs_ConstructApproxBSProfilef ( int degree, int lastknot,
00900 const float *knots,
00901 int lastiknot, const float *iknots,
00902 bandm_profile *prof );
00903
00904 boolean mbs_ConstructApproxBSMatrixf ( int degree, int lastknot,
00905 const float *knots,
00906 int lastiknot, const float *iknots,
00907 int *nrows, int *ncols,
00908 bandm_profile *prof,
00909 float *a );
00910
00911
00912 boolean mbs_multiConstructApproxBSCf ( int degree, int lastknot,
00913 const float *knots,
00914 int lastpknot, const float *pknots,
00915 int ncurves, int spdimen,
00916 int ppitch, const float *ppoints,
00917 int bcpitch, float *ctlpoints );
00918
00919 #define mbs_ConstructApproxBSC1f(degree,lastknot,knots,lastpknot,pknots,\
00920 ppoints,ctlpoints) \
00921 mbs_multiConstructApproxBSCf (degree,lastknot,knots,lastpknot,pknots,1,1,0,\
00922 (float*)ppoints,0,(float*)ctlpoints)
00923 #define mbs_ConstructApproxBSC2f(degree,lastknot,knots,lastpknot,pknots,\
00924 ppoints,ctlpoints) \
00925 mbs_multiConstructApproxBSCf (degree,lastknot,knots,lastpknot,pknots,1,2,0,\
00926 (float*)ppoints,0,(float*)ctlpoints)
00927 #define mbs_ConstructApproxBSC3f(degree,lastknot,knots,lastpknot,pknots,\
00928 ppoints,ctlpoints) \
00929 mbs_multiConstructApproxBSCf (degree,lastknot,knots,lastpknot,pknots,1,3,0,\
00930 (float*)ppoints,0,(float*)ctlpoints)
00931 #define mbs_ConstructApproxBSC4f(degree,lastknot,knots,lastpknot,pknots,\
00932 ppoints,ctlpoints) \
00933 mbs_multiConstructApproxBSCf (degree,lastknot,knots,lastpknot,pknots,1,4,0,\
00934 (float*)ppoints,0,(float*)ctlpoints)
00935
00936
00937 boolean mbs_OsloKnotsCorrectf ( int lastuknot, const float *uknots,
00938 int lastvknot, const float *vknots );
00939
00940 int mbs_BuildOsloMatrixProfilef ( int degree,
00941 int lastuknot, const float *uknots,
00942 int lastvknot, const float *vknots,
00943 bandm_profile *prof );
00944 void mbs_BuildOsloMatrixf ( int degree, int lastuknot, const float *uknots,
00945 const float *vknots,
00946 const bandm_profile *prof, float *a );
00947
00948
00949 void mbs_multiOsloInsertKnotsf ( int ncurves, int spdimen, int degree,
00950 int inlastknot, const float *inknots,
00951 int inpitch, float *inctlpoints,
00952 int outlastknot, const float *outknots,
00953 int outpitch, float *outctlpoints );
00954
00955 void mbs_multiOsloRemoveKnotsLSQf ( int ncurves, int spdimen, int degree,
00956 int inlastknot, const float *inknots,
00957 int inpitch, float *inctlpoints,
00958 int outlastknot, const float *outknots,
00959 int outpitch, float *outctlpoints );
00960
00961
00962 void mbs_multiBSChangeLeftKnotsf ( int ncurves, int spdimen, int degree,
00963 float *knots, int pitch, float *ctlpoints,
00964 float *newknots );
00965
00966 void mbs_multiBSChangeRightKnotsf ( int ncurves, int spdimen, int degree,
00967 int lastknot, float *knots,
00968 int pitch, float *ctlpoints,
00969 float *newknots );
00970
00971 #define mbs_BSChangeLeftKnotsC1f(degree,knots,coeff,newknots) \
00972 mbs_multiBSChangeLeftKnotsf(1,1,degree,knots,0,coeff,newknots)
00973 #define mbs_BSChangeLeftKnotsC2f(degree,knots,ctlpoints,newknots) \
00974 mbs_multiBSChangeLeftKnotsf(1,2,degree,knots,0,(float*)ctlpoints,newknots)
00975 #define mbs_BSChangeLeftKnotsC3f(degree,knots,ctlpoints,newknots) \
00976 mbs_multiBSChangeLeftKnotsf(1,3,degree,knots,0,(float*)ctlpoints,newknots)
00977 #define mbs_BSChangeLeftKnotsC4f(degree,knots,ctlpoints,newknots) \
00978 mbs_multiBSChangeLeftKnotsf(1,4,degree,knots,0,(float*)ctlpoints,newknots)
00979 #define mbs_BSChangeRightKnotsC1f(degree,lastknot,knots,coeff,newknots) \
00980 mbs_multiBSChangeRightKnotsf(1,1,degree,lastknot,knots,0,coeff,newknots)
00981 #define mbs_BSChangeRightKnotsC2f(degree,lastknot,knots,ctlpoints,newknots) \
00982 mbs_multiBSChangeRightKnotsf(1,2,degree,lastknot,knots,0,(float*)ctlpoints,newknots)
00983 #define mbs_BSChangeRightKnotsC3f(degree,lastknot,knots,ctlpoints,newknots) \
00984 mbs_multiBSChangeRightKnotsf(1,3,degree,lastknot,knots,0,(float*)ctlpoints,newknots)
00985 #define mbs_BSChangeRightKnotsC4f(degree,lastknot,knots,ctlpoints,newknots) \
00986 mbs_multiBSChangeRightKnotsf(1,4,degree,lastknot,knots,0,(float*)ctlpoints,newknots)
00987
00988
00989 typedef struct {
00990 boolean closing;
00991 byte spdimen;
00992 short degree;
00993 short lastknot;
00994 float *knots;
00995 float *points;
00996 } polycurvef;
00997
00998 typedef struct {
00999 float t;
01000 char sign1, sign2;
01001 } signpoint1f;
01002
01003 int mbs_TrimCVBoundSizef ( int nelem, const polycurvef *bound );
01004
01005 void *mbs_CompileTrimPatchBoundf ( int nelem, const polycurvef *bound,
01006 void *buffer );
01007
01008 void mbs_FindBoundLineIntersectionsf ( const void *bound,
01009 const point2f *p0, float t0,
01010 const point2f* p1, float t1,
01011 signpoint1f *inters, int *ninters );
01012
01013 void mbs_DrawTrimBSPatchDomf ( int degu, int lastuknot, const float *uknots,
01014 int degv, int lastvknot, const float *vknots,
01015 int nelem, const polycurvef *bound,
01016 int nu, float au, float bu,
01017 int nv, float av, float bv,
01018 int maxinters,
01019 void (*NotifyLine)(char,int,point2f*,point2f*),
01020 void (*DrawLine)(point2f*,point2f*,int),
01021 void (*DrawCurve)(int,int,const float*) );
01022
01023
01024 boolean mbs_MonotonicPolylinef ( int spdimen, int npoints, int pitch,
01025 const float *points, const float *v );
01026
01027 boolean mbs_MonotonicPolylineRf ( int spdimen, int npoints, int pitch,
01028 const float *points, const float *v );
01029
01030
01031 void mbs_RasterizeBC2f ( int degree, const point2f *cpoints,
01032 void (*output)(const xpoint *buf, int n),
01033 boolean outlast );
01034
01035 void mbs_RasterizeBC2Rf ( int degree, const point3f *cpoints,
01036 void (*output)(const xpoint *buf, int n),
01037 boolean outlast );
01038
01039 void mbs_RasterizeBS2f ( int degree, int lastknot, const float *knots,
01040 const point2f *cpoints,
01041 void (*output)(const xpoint *buf, int n),
01042 boolean outlast );
01043
01044 void mbs_RasterizeBS2Rf ( int degree, int lastknot, const float *knots,
01045 const point3f *cpoints,
01046 void (*output)(const xpoint *buf, int n),
01047 boolean outlast );
01048
01049
01050 void mbs_multiInterp2knHermiteBezf ( int ncurves, int spdimen, int degree,
01051 int nlbc, int lbcpitch, const float *lbc,
01052 int nrbc, int rbcpitch, const float *rbc,
01053 int pitch, float *ctlpoints );
01054
01055 void mbs_multiInterp2knHermiteBSf ( int ncurves, int spdimen, int degree,
01056 int lastknot, const float *knots,
01057 int nlbc, int lbcpitch, const float *lbc,
01058 int nrbc, int rbcpitch, const float *rbc,
01059 int pitch, float *ctlpoints );
01060
01061
01062 void mbs_multiFindBezDerivativef ( int degree, int ncurves, int spdimen,
01063 int pitch, const float *ctlpoints,
01064 int dpitch, float *dctlpoints );
01065
01066 #define mbs_FindBezDerivativeC1f(degree,coeff,dcoeff) \
01067 mbs_multiFindBezDerivativef ( degree, 1, 1, 0, coeff, 0, dcoeff )
01068 #define mbs_FindBezDerivativeC2f(degree,ctlpoints,dctlpoints) \
01069 mbs_multiFindBezDerivativef ( degree, 1, 2, 0, (float*)ctlpoints, \
01070 0, (float*)dctlpoints )
01071 #define mbs_FindBezDerivativeC3f(degree,ctlpoints,dctlpoints) \
01072 mbs_multiFindBezDerivativef ( degree, 1, 3, 0, (float*)ctlpoints, \
01073 0, (float*)dctlpoints )
01074 #define mbs_FindBezDerivativeC4f(degree,ctlpoints,dctlpoints) \
01075 mbs_multiFindBezDerivativef ( degree, 1, 4, 0, (float*)ctlpoints, \
01076 0, (float*)dctlpoints )
01077
01078
01079 void mbs_multiFindBSDerivativef ( int degree, int lastknot, const float *knots,
01080 int ncurves, int spdimen,
01081 int pitch, const float *ctlpoints,
01082 int *lastdknot, float *dknots,
01083 int dpitch, float *dctlpoints );
01084
01085 #define mbs_FindBSDerivativeC1f(degree,lastknot,knots,coeff, \
01086 lastdknot,dknots,dcoeff) \
01087 mbs_multiFindBSDerivativef ( degree, lastknot, knots, 1, 1, 0, coeff, \
01088 lastdknot, dknots, 0, dcoeff )
01089 #define mbs_FindBSDerivativeC2f(degree,lastknot,knots,ctlpoints, \
01090 lastdknot,dknots,dctlpoints) \
01091 mbs_multiFindBSDerivativef ( degree, lastknot, knots, 1, 2, 0, \
01092 (float*)ctlpoints, lastdknot, dknots, 0, (float*)dctlpoints )
01093 #define mbs_FindBSDerivativeC3f(degree,lastknot,knots,ctlpoints, \
01094 lastdknot,dknots,dctlpoints) \
01095 mbs_multiFindBSDerivativef ( degree, lastknot, knots, 1, 3, 0, \
01096 (float*)ctlpoints, lastdknot, dknots, 0, (float*)dctlpoints )
01097 #define mbs_FindBSDerivativeC4f(degree,lastknot,knots,ctlpoints, \
01098 lastdknot,dknots,dctlpoints) \
01099 mbs_multiFindBSDerivativef ( degree, lastknot, knots, 1, 4, 0, \
01100 (float*)ctlpoints, lastdknot, dknots, 0, (float*)dctlpoints )
01101
01102
01103 boolean mbs_FindBSCommonKnotSequencef ( int *degree, int *lastknot,
01104 float **knots, int nsequences, ... );
01105 boolean mbs_multiAdjustBSCRepf ( int ncurves, int spdimen,
01106 int indegree, int inlastknot, const float *inknots,
01107 int inpitch, const float *inctlpoints,
01108 int outdegree, int outlastknot, CONST_ float *outknots,
01109 int outpitch, float *outctlpoints );
01110
01111 #define mbs_AdjustBSCRepC1f(indegree,inlastknot,inknots, \
01112 inctlpoints,outdegree,outlastknot,outknots,outctlpoints) \
01113 mbs_multiAdjustBSCRepf (1,1,indegree,inlastknot,inknots,0, \
01114 inctlpoints,outdegree,outlastknot,outknots,0,outctlpoints)
01115 #define mbs_AdjustBSCRepC2f(indegree,inlastknot,inknots, \
01116 inctlpoints,outdegree,outlastknot,outknots,outctlpoints) \
01117 mbs_multiAdjustBSCRepf (1,2,indegree,inlastknot,inknots,0, \
01118 (float*)inctlpoints,outdegree,outlastknot,outknots,0,(float*)outctlpoints)
01119 #define mbs_AdjustBSCRepC3f(indegree,inlastknot,inknots, \
01120 inctlpoints,outdegree,outlastknot,outknots,outctlpoints) \
01121 mbs_multiAdjustBSCRepf (1,3,indegree,inlastknot,inknots,0, \
01122 (float*)inctlpoints,outdegree,outlastknot,outknots,0,(float*)outctlpoints)
01123 #define mbs_AdjustBSCRepC4f(indegree,inlastknot,inknots, \
01124 inctlpoints,outdegree,outlastknot,outknots,outctlpoints) \
01125 mbs_multiAdjustBSCRepf (1,4,indegree,inlastknot,inknots,0, \
01126 (float*)inctlpoints,outdegree,outlastknot,outknots,0,(float*)outctlpoints)
01127
01128
01129 void mbs_multiAddBSCurvesf ( int ncurves, int spdimen,
01130 int degree1, int lastknot1, CONST_ float *knots1,
01131 int pitch1, CONST_ float *ctlpoints1,
01132 int degree2, int lastknot2, CONST_ float *knots2,
01133 int pitch2, CONST_ float *ctlpoints2,
01134 int *sumdeg, int *sumlastknot, float *sumknots,
01135 int sumpitch, float *sumctlpoints );
01136
01137 #define mbs_AddBSCurvesC1f(degree1,lastknot1,knots1,ctlpoints1, \
01138 degree2,lastknot2,knots2,ctlpoints2, \
01139 sumdeg,sumlastknot,sumknots,sumctlpoints) \
01140 mbs_multiAddBSCurvesf (1,1,degree1,lastknot1,knots1,0,ctlpoints1, \
01141 degree2,lastknot2,knots2,0,ctlpoints2, \
01142 sumdeg,sumlastknot,sumknots,0,sumctlpoints)
01143 #define mbs_AddBSCurvesC2f(degree1,lastknot1,knots1,ctlpoints1, \
01144 degree2,lastknot2,knots2,ctlpoints2, \
01145 sumdeg,sumlastknot,sumknots,sumctlpoints) \
01146 mbs_multiAddBSCurvesf (1,2,degree1,lastknot1,knots1,0,(float*)ctlpoints1, \
01147 degree2,lastknot2,knots2,0,(float*)ctlpoints2, \
01148 sumdeg,sumlastknot,sumknots,0,(float*)sumctlpoints)
01149 #define mbs_AddBSCurvesC3f(degree1,lastknot1,knots1,ctlpoints1, \
01150 degree2,lastknot2,knots2,ctlpoints2, \
01151 sumdeg,sumlastknot,sumknots,sumctlpoints) \
01152 mbs_multiAddBSCurvesf (1,3,degree1,lastknot1,knots1,0,(float*)ctlpoints1, \
01153 degree2,lastknot2,knots2,0,(float*)ctlpoints2, \
01154 sumdeg,sumlastknot,sumknots,0,(float*)sumctlpoints)
01155 #define mbs_AddBSCurvesC4f(degree1,lastknot1,knots1,ctlpoints1, \
01156 degree2,lastknot2,knots2,ctlpoints2, \
01157 sumdeg,sumlastknot,sumknots,sumctlpoints) \
01158 mbs_multiAddBSCurvesf (1,4,degree1,lastknot1,knots1,0,(float*)ctlpoints1, \
01159 degree2,lastknot2,knots2,0,(float*)ctlpoints2, \
01160 sumdeg,sumlastknot,sumknots,0,(float*)sumctlpoints)
01161
01162
01163 void mbs_multiSubtractBSCurvesf ( int ncurves, int spdimen,
01164 int degree1, int lastknot1, CONST_ float *knots1,
01165 int pitch1, CONST_ float *ctlpoints1,
01166 int degree2, int lastknot2, CONST_ float *knots2,
01167 int pitch2, CONST_ float *ctlpoints2,
01168 int *sumdeg, int *sumlastknot, float *sumknots,
01169 int sumpitch, float *sumctlpoints );
01170
01171 #define mbs_SubtractBSCurvesC1f(degree1,lastknot1,knots1,ctlpoints1, \
01172 degree2,lastknot2,knots2,ctlpoints2, \
01173 sumdeg,sumlastknot,sumknots,sumctlpoints) \
01174 mbs_multiSubtractBSCurvesf (1,1,degree1,lastknot1,knots1,0,ctlpoints1, \
01175 degree2,lastknot2,knots2,0,ctlpoints2, \
01176 sumdeg,sumlastknot,sumknots,0,sumctlpoints)
01177 #define mbs_SubtractBSCurvesC2f(degree1,lastknot1,knots1,ctlpoints1, \
01178 degree2,lastknot2,knots2,ctlpoints2, \
01179 sumdeg,sumlastknot,sumknots,sumctlpoints) \
01180 mbs_multiSubtractBSCurvesf (1,2,degree1,lastknot1,knots1,0,(float*)ctlpoints1, \
01181 degree2,lastknot2,knots2,0,(float*)ctlpoints2, \
01182 sumdeg,sumlastknot,sumknots,0,(float*)sumctlpoints)
01183 #define mbs_SubtractBSCurvesC3f(degree1,lastknot1,knots1,ctlpoints1, \
01184 degree2,lastknot2,knots2,ctlpoints2, \
01185 sumdeg,sumlastknot,sumknots,sumctlpoints) \
01186 mbs_multiSubtractBSCurvesf (1,3,degree1,lastknot1,knots1,0,(float*)ctlpoints1, \
01187 degree2,lastknot2,knots2,0,(float*)ctlpoints2, \
01188 sumdeg,sumlastknot,sumknots,0,(float*)sumctlpoints)
01189 #define mbs_SubtractBSCurvesC4f(degree1,lastknot1,knots1,ctlpoints1, \
01190 degree2,lastknot2,knots2,ctlpoints2, \
01191 sumdeg,sumlastknot,sumknots,sumctlpoints) \
01192 mbs_multiSubtractBSCurvesf (1,4,degree1,lastknot1,knots1,0,(float*)ctlpoints1, \
01193 degree2,lastknot2,knots2,0,(float*)ctlpoints2, \
01194 sumdeg,sumlastknot,sumknots,0,(float*)sumctlpoints)
01195
01196
01197 boolean mbs_FindPolynomialZerosf ( int degree, const float *coeff,
01198 int *nzeros, float *zeros, float eps );
01199
01200
01201 void mbs_ClipBC2f ( int ncplanes, const vector3f *cplanes,
01202 int degree, const point2f *cpoints,
01203 void (*output) (int degree, const point2f *cpoints) );
01204 void mbs_ClipBC2Rf ( int ncplanes, const vector3f *cplanes,
01205 int degree, const point3f *cpoints,
01206 void (*output) (int degree, const point3f *cpoints) );
01207 void mbs_ClipBC3f ( int ncplanes, const vector4f *cplanes,
01208 int degree, const point3f *cpoints,
01209 void (*output) (int degree, const point3f *cpoints) );
01210 void mbs_ClipBC3Rf ( int ncplanes, const vector4f *cplanes,
01211 int degree, const point4f *cpoints,
01212 void (*output) (int degree, const point4f *cpoints) );
01213
01214
01215
01216 void mbs_BezC1CoonsFindCornersf ( int spdimen,
01217 int degc00, const float *c00,
01218 int degc01, const float *c01,
01219 int degc10, const float *c10,
01220 int degc11, const float *c11,
01221 float *pcorners );
01222 boolean mbs_BezC1CoonsToBezf ( int spdimen,
01223 int degc00, const float *c00,
01224 int degc01, const float *c01,
01225 int degc10, const float *c10,
01226 int degc11, const float *c11,
01227 int degd00, const float *d00,
01228 int degd01, const float *d01,
01229 int degd10, const float *d10,
01230 int degd11, const float *d11,
01231 int *n, int *m, float *p );
01232
01233 void mbs_TabCubicHFuncDer2f ( float a, float b, int nkn, const float *kn,
01234 float *hfunc, float *dhfunc, float *ddhfunc );
01235 void mbs_TabCubicHFuncDer3f ( float a, float b, int nkn, const float *kn,
01236 float *hfunc, float *dhfunc, float *ddhfunc,
01237 float *dddhfunc );
01238 void mbs_TabBezCurveDer2f ( int spdimen, int degree, const float *cp,
01239 int nkn, const float *kn,
01240 int ppitch,
01241 float *p, float *dp, float *ddp );
01242 boolean _mbs_TabBezC1Coonsf ( int spdimen, int nknu, int nknv,
01243 const float *c, const float *d, const float *p,
01244 const float *hu, const float *hv, float *pp );
01245 boolean mbs_TabBezC1CoonsDer2f ( int spdimen,
01246 int nknu, const float *knu, const float *hfuncu,
01247 const float *dhfuncu, const float *ddhfuncu,
01248 int nknv, const float *knv, const float *hfuncv,
01249 const float *dhfuncv, const float *ddhfuncv,
01250 int degc00, const float *c00,
01251 int degc01, const float *c01,
01252 int degc10, const float *c10,
01253 int degc11, const float *c11,
01254 int degd00, const float *d00,
01255 int degd01, const float *d01,
01256 int degd10, const float *d10,
01257 int degd11, const float *d11,
01258 float *p, float *pu, float *pv, float *puu, float *puv, float *pvv );
01259 boolean mbs_TabBezC1CoonsDer3f ( int spdimen,
01260 int nknu, const float *knu, const float *hfuncu,
01261 const float *dhfuncu, const float *ddhfuncu, const float *dddhfuncu,
01262 int nknv, const float *knv, const float *hfuncv,
01263 const float *dhfuncv, const float *ddhfuncv, const float *dddhfuncv,
01264 int degc00, const float *c00,
01265 int degc01, const float *c01,
01266 int degc10, const float *c10,
01267 int degc11, const float *c11,
01268 int degd00, const float *d00,
01269 int degd01, const float *d01,
01270 int degd10, const float *d10,
01271 int degd11, const float *d11,
01272 float *p, float *pu, float *pv, float *puu, float *puv, float *pvv,
01273 float *puuu, float *puuv, float *puvv, float *pvvv );
01274
01275 boolean _mbs_TabBezC1Coons0f (
01276 int spdimen, int nknu, int nknv,
01277 const float *c, const float *d, const float *p,
01278 const float *hu, const float *hv, float *pp );
01279 boolean mbs_TabBezC1Coons0Der2f ( int spdimen,
01280 int nknu, const float *knu, const float *hfuncu,
01281 const float *dhfuncu, const float *ddhfuncu,
01282 int nknv, const float *knv, const float *hfuncv,
01283 const float *dhfuncv, const float *ddhfuncv,
01284 int degc00, const float *c00,
01285 int degc01, const float *c01,
01286 int degd00, const float *d00,
01287 int degd01, const float *d01,
01288 float *p, float *pu, float *pv, float *puu, float *puv, float *pvv );
01289 boolean mbs_TabBezC1Coons0Der3f ( int spdimen,
01290 int nknu, const float *knu, const float *hfuncu,
01291 const float *dhfuncu, const float *ddhfuncu, const float *dddhfuncu,
01292 int nknv, const float *knv, const float *hfuncv,
01293 const float *dhfuncv, const float *ddhfuncv, const float *dddhfuncv,
01294 int degc00, const float *c00,
01295 int degc01, const float *c01,
01296 int degd00, const float *d00,
01297 int degd01, const float *d01,
01298 float *p, float *pu, float *pv, float *puu, float *puv, float *pvv,
01299 float *puuu, float *puuv, float *puvv, float *pvvv );
01300
01301
01302
01303 void mbs_BezC2CoonsFindCornersf ( int spdimen,
01304 int degc00, const float *c00,
01305 int degc01, const float *c01,
01306 int degc02, const float *c02,
01307 int degc10, const float *c10,
01308 int degc11, const float *c11,
01309 int degc12, const float *c12,
01310 float *pcorners );
01311 boolean mbs_BezC2CoonsToBezf ( int spdimen,
01312 int degc00, const float *c00,
01313 int degc01, const float *c01,
01314 int degc02, const float *c02,
01315 int degc10, const float *c10,
01316 int degc11, const float *c11,
01317 int degc12, const float *c12,
01318 int degd00, const float *d00,
01319 int degd01, const float *d01,
01320 int degd02, const float *d02,
01321 int degd10, const float *d10,
01322 int degd11, const float *d11,
01323 int degd12, const float *d12,
01324 int *n, int *m, float *p );
01325 void mbs_TabQuinticHFuncDer3f ( float a, float b, int nkn, const float *kn,
01326 float *hfunc, float *dhfunc,
01327 float *ddhfunc, float *dddhfunc );
01328 void mbs_TabBezCurveDer3f ( int spdimen, int degree, const float *cp,
01329 int nkn, const float *kn,
01330 int ppitch,
01331 float *p, float *dp, float *ddp, float *dddp );
01332 boolean _mbs_TabBezC2Coonsf (
01333 int spdimen, int nknu, int nknv,
01334 const float *c, const float *d, const float *p,
01335 const float *hu, const float *hv, float *pp );
01336
01337 boolean mbs_TabBezC2CoonsDer3f ( int spdimen,
01338 int nknu, const float *knu, const float *hfuncu,
01339 const float *dhfuncu, const float *ddhfuncu, const float *dddhfuncu,
01340 int nknv, const float *knv, const float *hfuncv,
01341 const float *dhfuncv, const float *ddhfuncv, const float *dddhfuncv,
01342 int degc00, const float *c00,
01343 int degc01, const float *c01,
01344 int degc02, const float *c02,
01345 int degc10, const float *c10,
01346 int degc11, const float *c11,
01347 int degc12, const float *c12,
01348 int degd00, const float *d00,
01349 int degd01, const float *d01,
01350 int degd02, const float *d02,
01351 int degd10, const float *d10,
01352 int degd11, const float *d11,
01353 int degd12, const float *d12,
01354 float *p, float *pu, float *pv, float *puu, float *puv, float *pvv,
01355 float *puuu, float *puuv, float *puvv, float *pvvv );
01356
01357 boolean _mbs_TabBezC2Coons0f (
01358 int spdimen, int nknu, int nknv,
01359 const float *c, const float *d, const float *p,
01360 const float *hu, const float *hv, float *pp );
01361 boolean mbs_TabBezC2Coons0Der3f ( int spdimen,
01362 int nknu, const float *knu, const float *hfuncu,
01363 const float *dhfuncu, const float *ddhfuncu, const float *dddhfuncu,
01364 int nknv, const float *knv, const float *hfuncv,
01365 const float *dhfuncv, const float *ddhfuncv, const float *dddhfuncv,
01366 int degc00, const float *c00,
01367 int degc01, const float *c01,
01368 int degc02, const float *c02,
01369 int degd00, const float *d00,
01370 int degd01, const float *d01,
01371 int degd02, const float *d02,
01372 float *p, float *pu, float *pv, float *puu, float *puv, float *pvv,
01373 float *puuu, float *puuv, float *puvv, float *pvvv );
01374
01375
01376
01377
01378 void mbs_BSC1CoonsFindCornersf ( int spdimen,
01379 int degc00, int lastknotc00, const float *knotsc00, const float *c00,
01380 int degc01, int lastknotc01, const float *knotsc01, const float *c01,
01381 int degc10, int lastknotc10, const float *knotsc10, const float *c10,
01382 int degc11, int lastknotc11, const float *knotsc11, const float *c11,
01383 float *pcorners );
01384 boolean mbs_BSC1CoonsToBSf ( int spdimen,
01385 int degc00, int lastknotc00, const float *knotsc00, const float *c00,
01386 int degc01, int lastknotc01, const float *knotsc01, const float *c01,
01387 int degc10, int lastknotc10, const float *knotsc10, const float *c10,
01388 int degc11, int lastknotc11, const float *knotsc11, const float *c11,
01389 int degd00, int lastknotd00, const float *knotsd00, const float *d00,
01390 int degd01, int lastknotd01, const float *knotsd01, const float *d01,
01391 int degd10, int lastknotd10, const float *knotsd10, const float *d10,
01392 int degd11, int lastknotd11, const float *knotsd11, const float *d11,
01393 int *degreeu, int *lastuknot, float *uknots,
01394 int *degreev, int *lastvknot, float *vknots, float *p );
01395
01396 void mbs_TabBSCurveDer2f ( int spdimen, int degree, int lastknot,
01397 const float *knots, const float *cp,
01398 int nkn, const float *kn, int ppitch,
01399 float *p, float *dp, float *ddp );
01400 boolean _mbs_TabBSC1Coonsf ( int spdimen, int nknu, int nknv,
01401 const float *c, const float *d, const float *p,
01402 const float *hu, const float *hv, float *pp );
01403 boolean mbs_TabBSC1CoonsDer2f ( int spdimen,
01404 int nknu, const float *knu, const float *hfuncu,
01405 const float *dhfuncu, const float *ddhfuncu,
01406 int nknv, const float *knv, const float *hfuncv,
01407 const float *dhfuncv, const float *ddhfuncv,
01408 int degc00, int lastknotc00, const float *knotsc00, const float *c00,
01409 int degc01, int lastknotc01, const float *knotsc01, const float *c01,
01410 int degc10, int lastknotc10, const float *knotsc10, const float *c10,
01411 int degc11, int lastknotc11, const float *knotsc11, const float *c11,
01412 int degd00, int lastknotd00, const float *knotsd00, const float *d00,
01413 int degd01, int lastknotd01, const float *knotsd01, const float *d01,
01414 int degd10, int lastknotd10, const float *knotsd10, const float *d10,
01415 int degd11, int lastknotd11, const float *knotsd11, const float *d11,
01416 float *p, float *pu, float *pv, float *puu, float *puv, float *pvv );
01417 boolean mbs_TabBSC1CoonsDer3f ( int spdimen,
01418 int nknu, const float *knu, const float *hfuncu,
01419 const float *dhfuncu, const float *ddhfuncu, const float *dddhfuncu,
01420 int nknv, const float *knv, const float *hfuncv,
01421 const float *dhfuncv, const float *ddhfuncv, const float *dddhfuncv,
01422 int degc00, int lastknotc00, const float *knotsc00, const float *c00,
01423 int degc01, int lastknotc01, const float *knotsc01, const float *c01,
01424 int degc10, int lastknotc10, const float *knotsc10, const float *c10,
01425 int degc11, int lastknotc11, const float *knotsc11, const float *c11,
01426 int degd00, int lastknotd00, const float *knotsd00, const float *d00,
01427 int degd01, int lastknotd01, const float *knotsd01, const float *d01,
01428 int degd10, int lastknotd10, const float *knotsd10, const float *d10,
01429 int degd11, int lastknotd11, const float *knotsd11, const float *d11,
01430 float *p, float *pu, float *pv, float *puu, float *puv, float *pvv,
01431 float *puuu, float *puuv, float *puvv, float *pvvv );
01432
01433 boolean _mbs_TabBSC1Coons0f ( int spdimen, int nknu, int nknv,
01434 const float *c, const float *d, const float *p,
01435 const float *hu, const float *hv, float *pp );
01436 boolean mbs_TabBSC1Coons0Der2f ( int spdimen,
01437 int nknu, const float *knu, const float *hfuncu,
01438 const float *dhfuncu, const float *ddhfuncu,
01439 int nknv, const float *knv, const float *hfuncv,
01440 const float *dhfuncv, const float *ddhfuncv,
01441 int degc00, int lastknotc00, const float *knotsc00, const float *c00,
01442 int degc01, int lastknotc01, const float *knotsc01, const float *c01,
01443 int degd00, int lastknotd00, const float *knotsd00, const float *d00,
01444 int degd01, int lastknotd01, const float *knotsd01, const float *d01,
01445 float *p, float *pu, float *pv, float *puu, float *puv, float *pvv );
01446 boolean mbs_TabBSC1Coons0Der3f ( int spdimen,
01447 int nknu, const float *knu, const float *hfuncu,
01448 const float *dhfuncu, const float *ddhfuncu, const float *dddhfuncu,
01449 int nknv, const float *knv, const float *hfuncv,
01450 const float *dhfuncv, const float *ddhfuncv, const float *dddhfuncv,
01451 int degc00, int lastknotc00, const float *knotsc00, const float *c00,
01452 int degc01, int lastknotc01, const float *knotsc01, const float *c01,
01453 int degd00, int lastknotd00, const float *knotsd00, const float *d00,
01454 int degd01, int lastknotd01, const float *knotsd01, const float *d01,
01455 float *p, float *pu, float *pv, float *puu, float *puv, float *pvv,
01456 float *puuu, float *puuv, float *puvv, float *pvvv );
01457
01458
01459
01460 void mbs_BSC2CoonsFindCornersf ( int spdimen,
01461 int degc00, int lastknotc00, const float *knotsc00, const float *c00,
01462 int degc01, int lastknotc01, const float *knotsc01, const float *c01,
01463 int degc02, int lastknotc02, const float *knotsc02, const float *c02,
01464 int degc10, int lastknotc10, const float *knotsc10, const float *c10,
01465 int degc11, int lastknotc11, const float *knotsc11, const float *c11,
01466 int degc12, int lastknotc12, const float *knotsc12, const float *c12,
01467 float *pcorners );
01468 boolean mbs_BSC2CoonsToBSf ( int spdimen,
01469 int degc00, int lastknotc00, const float *knotsc00, const float *c00,
01470 int degc01, int lastknotc01, const float *knotsc01, const float *c01,
01471 int degc02, int lastknotc02, const float *knotsc02, const float *c02,
01472 int degc10, int lastknotc10, const float *knotsc10, const float *c10,
01473 int degc11, int lastknotc11, const float *knotsc11, const float *c11,
01474 int degc12, int lastknotc12, const float *knotsc12, const float *c12,
01475 int degd00, int lastknotd00, const float *knotsd00, const float *d00,
01476 int degd01, int lastknotd01, const float *knotsd01, const float *d01,
01477 int degd02, int lastknotd02, const float *knotsd02, const float *d02,
01478 int degd10, int lastknotd10, const float *knotsd10, const float *d10,
01479 int degd11, int lastknotd11, const float *knotsd11, const float *d11,
01480 int degd12, int lastknotd12, const float *knotsd12, const float *d12,
01481 int *degreeu, int *lastuknot, float *uknots,
01482 int *degreev, int *lastvknot, float *vknots, float *p );
01483 void mbs_TabBSCurveDer3f ( int spdimen, int degree, int lastknot,
01484 const float *knots, const float *cp,
01485 int nkn, const float *kn, int ppitch,
01486 float *p, float *dp, float *ddp, float *dddp );
01487 boolean _mbs_TabBSC2Coonsf ( int spdimen, int nknu, int nknv,
01488 const float *c, const float *d, const float *p,
01489 const float *hu, const float *hv, float *pp );
01490 boolean mbs_TabBSC2CoonsDer3f ( int spdimen,
01491 int nknu, const float *knu, const float *hfuncu,
01492 const float *dhfuncu, const float *ddhfuncu, const float *dddhfuncu,
01493 int nknv, const float *knv, const float *hfuncv,
01494 const float *dhfuncv, const float *ddhfuncv, const float *dddhfuncv,
01495 int degc00, int lastknotc00, const float *knotsc00, const float *c00,
01496 int degc01, int lastknotc01, const float *knotsc01, const float *c01,
01497 int degc02, int lastknotc02, const float *knotsc02, const float *c02,
01498 int degc10, int lastknotc10, const float *knotsc10, const float *c10,
01499 int degc11, int lastknotc11, const float *knotsc11, const float *c11,
01500 int degc12, int lastknotc12, const float *knotsc12, const float *c12,
01501 int degd00, int lastknotd00, const float *knotsd00, const float *d00,
01502 int degd01, int lastknotd01, const float *knotsd01, const float *d01,
01503 int degd02, int lastknotd02, const float *knotsd02, const float *d02,
01504 int degd10, int lastknotd10, const float *knotsd10, const float *d10,
01505 int degd11, int lastknotd11, const float *knotsd11, const float *d11,
01506 int degd12, int lastknotd12, const float *knotsd12, const float *d12,
01507 float *p, float *pu, float *pv, float *puu, float *puv, float *pvv,
01508 float *puuu, float *puuv, float *puvv, float *pvvv );
01509 boolean _mbs_TabBSC2Coons0f ( int spdimen, int nknu, int nknv,
01510 const float *c, const float *d, const float *p,
01511 const float *hu, const float *hv, float *pp );
01512 boolean mbs_TabBSC2Coons0Der3f ( int spdimen,
01513 int nknu, const float *knu, const float *hfuncu,
01514 const float *dhfuncu, const float *ddhfuncu, const float *dddhfuncu,
01515 int nknv, const float *knv, const float *hfuncv,
01516 const float *dhfuncv, const float *ddhfuncv, const float *dddhfuncv,
01517 int degc00, int lastknotc00, const float *knotsc00, const float *c00,
01518 int degc01, int lastknotc01, const float *knotsc01, const float *c01,
01519 int degc02, int lastknotc02, const float *knotsc02, const float *c02,
01520 int degd00, int lastknotd00, const float *knotsd00, const float *d00,
01521 int degd01, int lastknotd01, const float *knotsd01, const float *d01,
01522 int degd02, int lastknotd02, const float *knotsd02, const float *d02,
01523 float *p, float *pu, float *pv, float *puu, float *puv, float *pvv,
01524 float *puuu, float *puuv, float *puvv, float *pvvv );
01525
01526
01527
01528
01529 void mbs_SphericalProductf (
01530 int degree_eq, int lastknot_eq, const point2f *cpoints_eq,
01531 int degree_mer, int lastknot_mer, const point2f *cpoints_mer,
01532 int pitch, point3f *spr_cp );
01533 void mbs_SphericalProductRf (
01534 int degree_eq, int lastknot_eq, const point3f *cpoints_eq,
01535 int degree_mer, int lastknot_mer, const point3f *cpoints_mer,
01536 int pitch, point4f *spr_cp );
01537
01538
01539
01540 boolean mbs_multiLaneRiesenfeldf ( int spdimen, int ncurves, int degree,
01541 int inlastknot, int inpitch, const float *incp,
01542 int *outlastknot, int outpitch, float *outcp );
01543
01544 #define mbs_LaneRiesenfeldC1f(degree,inlastknot,incp,outlastknot,outcp) \
01545 mbs_multiLaneRiesenfeldf ( 1, 1, degree, inlastknot, 0, incp, \
01546 outlastknot, 0, outcp )
01547 #define mbs_LaneRiesenfeldC2f(degree,inlastknot,incp,outlastknot,outcp) \
01548 mbs_multiLaneRiesenfeldf ( 2, 1, degree, inlastknot, 0, (float*)incp, \
01549 outlastknot, 0, (float*)outcp )
01550 #define mbs_LaneRiesenfeldC3f(degree,inlastknot,incp,outlastknot,outcp) \
01551 mbs_multiLaneRiesenfeldf ( 3, 1, degree, inlastknot, 0, (float*)incp, \
01552 outlastknot, 0, (float*)outcp )
01553 #define mbs_LaneRiesenfeldC4f(degree,inlastknot,incp,outlastknot,outcp) \
01554 mbs_multiLaneRiesenfeldf ( 4, 1, degree, inlastknot, 0, (float*)incp, \
01555 outlastknot, 0, (float*)outcp )
01556
01557
01558 #ifdef __cplusplus
01559 }
01560 #endif
01561
01562 #endif
01563