multibsf.h

Go to the documentation of this file.
00001 
00002 /* ///////////////////////////////////////////////////////////////////////// */
00003 /* This file is a part of the BSTools package                                */
00004 /* written by Przemyslaw Kiciak                                              */
00005 /* ///////////////////////////////////////////////////////////////////////// */
00006 /* (C) Copyright by Przemyslaw Kiciak, 2005, 2011                            */
00007 /* this package is distributed under the terms of the                        */
00008 /* Lesser GNU Public License, see the file COPYING.LIB                       */
00009 /* ///////////////////////////////////////////////////////////////////////// */
00010 
00011 /* Header file for the libmultibs library of C procedures -              */
00012 /* processing B-spline and Bezier curves and surfaces                    */ 
00013 
00014 #ifndef CONST_  /* a dirty trick to suppress many compiler warning messages */
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 /* boundary conditions identifiers for cubic splines of interpolation */
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;             /* this must be the first field */
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 /* Bicubic polynomial Coons patches */
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 /* Biquintic polynomial Coons patches */
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 /* Bicubic B-spline Coons patches */
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 /* Biquintic B-spline Coons patches */          
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 /* spherical product of two curves */
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 /* Lane-Riesenfeld algorithm */
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 /*MULTIBSF_H*/
01563