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 MULTIBSD_H
00019 #define MULTIBSD_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_KnotMultiplicityd ( int lastknot, const double *knots, double t );
00048
00049 int mbs_FindKnotIntervald ( int degree, int lastknot, const double *knots,
00050 double t, int *mult );
00051
00052 double mbs_GrevilleAbscissad ( int degree, double *knots, int i );
00053
00054 void mbs_TransformAffKnotsd ( int degree, int lastknot, const double *inknots,
00055 double a, double b, double *outknots );
00056
00057 void mbs_multiReverseBSCurved ( int degree, int lastknot, double *knots,
00058 int ncurves, int spdimen, int pitch,
00059 double *ctlpoints );
00060 boolean mbs_ClosedKnotsCorrectd ( int degree, int lastknot, double *knots,
00061 double T, int K, double tol );
00062
00063 int mbs_SetKnotd ( int lastknot, double *knots,
00064 int knotnum, int mult, double t );
00065 int mbs_SetKnotClosedd ( int degree, int lastknot, double *knots, double T,
00066 int knotnum, int mult, double t );
00067
00068 void _mbs_multideBoorKerneld ( int degree, const double *knots,
00069 int ncurves, int spdimen,
00070 int pitch, const double *ctlpoints,
00071 double t, int k, int r, int lj,
00072 int dpitch, double *d );
00073
00074 int mbs_multideBoord ( int degree, int lastknot,
00075 const double *knots,
00076 int ncurves, int spdimen, int pitch,
00077 const double *ctlpoints,
00078 double t,
00079 double *cpoints );
00080
00081 #define mbs_deBoorC1d(degree,lastknot,knots,coeff,t,value) \
00082 mbs_multideBoord ( degree, lastknot, knots, 1, 1, 0, coeff, t, value )
00083 #define mbs_deBoorC2d(degree,lastknot,knots,ctlpoints,t,cpoint) \
00084 mbs_multideBoord ( degree, lastknot, knots, 1, 2, 0, (double*)ctlpoints, t, \
00085 (double*)cpoint )
00086 #define mbs_deBoorC3d(degree,lastknot,knots,ctlpoints,t,cpoint) \
00087 mbs_multideBoord ( degree, lastknot, knots, 1, 3, 0, (double*)ctlpoints, t, \
00088 (double*)cpoint )
00089 #define mbs_deBoorC4d(degree,lastknot,knots,ctlpoints,t,cpoint) \
00090 mbs_multideBoord ( degree, lastknot, knots, 1, 4, 0, (double*)ctlpoints, t, \
00091 (double*)cpoint )
00092
00093
00094 void mbs_deBoorC2Rd ( int degree, int lastknot,
00095 const double *knots, const point3d *ctlpoints,
00096 double t, point2d *cpoint );
00097
00098 void mbs_deBoorC3Rd ( int degree, int lastknot,
00099 const double *knots, const point4d *ctlpoints,
00100 double t, point3d *cpoint );
00101
00102 void mbs_deBoorP3d ( int degreeu, int lastknotu, const double *knotsu,
00103 int degreev, int lastknotv, const double *knotsv,
00104 int pitch,
00105 const point3d *ctlpoints,
00106 double u, double v, point3d *ppoint );
00107
00108 void mbs_deBoorP3Rd ( int degreeu, int lastknotu, const double *knotsu,
00109 int degreev, int lastknotv, const double *knotsv,
00110 int pitch,
00111 const point4d *ctlpoints,
00112 double u, double v, point3d *ppoint );
00113
00114 void mbs_deBoorP4d ( int degreeu, int lastknotu, const double *knotsu,
00115 int degreev, int lastknotv, const double *knotsv,
00116 int pitch,
00117 const point4d *ctlpoints,
00118 double u, double v, point4d *ppoint );
00119
00120
00121 int mbs_multideBoorDerd ( int degree, int lastknot,
00122 const double *knots,
00123 int ncurves, int spdimen, int pitch,
00124 const double *ctlpoints,
00125 double t,
00126 double *cpoints, double *dervect );
00127
00128 #define mbs_deBoorDerC1d(degree,lastknot,knots,ctlpoints,t,cpoint,cder) \
00129 mbs_multideBoorDerd ( degree, lastknot, knots, 1, 1, 0, (double*)ctlpoints, \
00130 t, cpoint, cder )
00131 #define mbs_deBoorDerC2d(degree,lastknot,knots,ctlpoints,t,cpoint,cder) \
00132 mbs_multideBoorDerd ( degree, lastknot, knots, 1, 2, 0, (double*)ctlpoints, \
00133 t, (double*)cpoint, (double*)cder )
00134 #define mbs_deBoorDerC3d(degree,lastknot,knots,ctlpoints,t,cpoint,cder) \
00135 mbs_multideBoorDerd ( degree, lastknot, knots, 1, 3, 0, (double*)ctlpoints, \
00136 t, (double*)cpoint, (double*)cder )
00137 #define mbs_deBoorDerC4d(degree,lastknot,knots,ctlpoints,t,cpoint,cder) \
00138 mbs_multideBoorDerd ( degree, lastknot, knots, 1, 4, 0, (double*)ctlpoints, \
00139 t, (double*)cpoint, (double*)cder )
00140
00141
00142 int mbs_multideBoorDer2d ( int degree, int lastknot, const double *knots,
00143 int ncurves, int spdimen,
00144 int pitch, const double *ctlpoints,
00145 double t, double *p, double *d1, double *d2 );
00146
00147 #define mbs_deBoorDer2C1d(degree,lastknot,knots,coeff,t,p,d1,d2) \
00148 mbs_multideBoorDer2d(degree,lastknot,knots,1,1,0,coeff,t,p,d1,d2)
00149 #define mbs_deBoorDer2C2d(degree,lastknot,knots,ctlpoints,t,p,d1,d2) \
00150 mbs_multideBoorDer2d(degree,lastknot,knots,1,2,0,(double*)ctlpoints,t, \
00151 (double*)p,(double*)d1,(double*)d2)
00152 #define mbs_deBoorDer2C3d(degree,lastknot,knots,ctlpoints,t,p,d1,d2) \
00153 mbs_multideBoorDer2d(degree,lastknot,knots,1,3,0,(double*)ctlpoints,t, \
00154 (double*)p,(double*)d1,(double*)d2)
00155 #define mbs_deBoorDer2C4d(degree,lastknot,knots,ctlpoints,t,p,d1,d2) \
00156 mbs_multideBoorDer2d(degree,lastknot,knots,1,4,0,(double*)ctlpoints,t, \
00157 (double*)p,(double*)d1,(double*)d2)
00158
00159
00160 int mbs_multideBoorDer3d ( int degree, int lastknot, const double *knots,
00161 int ncurves, int spdimen,
00162 int pitch, const double *ctlpoints, double t,
00163 double *p, double *d1, double *d2, double *d3 );
00164
00165 #define mbs_deBoorDer3C1d(degree,lastknot,knots,coeff,t,p,d1,d2,d3) \
00166 mbs_multideBoorDer3d(degree,lastknot,knots,1,1,0,coeff,t,p,d1,d2,d3)
00167 #define mbs_deBoorDer3C2d(degree,lastknot,knots,ctlpoints,t,p,d1,d2,d3) \
00168 mbs_multideBoorDer3d(degree,lastknot,knots,1,2,0,(double*)ctlpoints,t, \
00169 (double*)p,(double*)d1,(double*)d2,(double*)d3)
00170 #define mbs_deBoorDer3C3d(degree,lastknot,knots,ctlpoints,t,p,d1,d2,d3) \
00171 mbs_multideBoorDer3d(degree,lastknot,knots,1,3,0,(double*)ctlpoints,t, \
00172 (double*)p,(double*)d1,(double*)d2,(double*)d3)
00173 #define mbs_deBoorDer3C4d(degree,lastknot,knots,ctlpoints,t,p,d1,d2,d3) \
00174 mbs_multideBoorDer3d(degree,lastknot,knots,1,4,0,(double*)ctlpoints,t, \
00175 (double*)p,(double*)d1,(double*)d2,(double*)d3)
00176
00177
00178 boolean mbs_deBoorDerPd ( int degreeu, int lastknotu, const double *knotsu,
00179 int degreev, int lastknotv, const double *knotsv,
00180 int spdimen, int pitch, const double *ctlpoints,
00181 double u, double v,
00182 double *ppoint, double *uder, double *vder );
00183
00184 boolean mbs_deBoorDer2Pd ( int degreeu, int lastknotu, const double *knotsu,
00185 int degreev, int lastknotv, const double *knotsv,
00186 int spdimen, int pitch, const double *ctlpoints,
00187 double u, double v,
00188 double *ppoint, double *uder, double *vder,
00189 double *uuder, double *uvder, double *vvder );
00190
00191 boolean mbs_deBoorDer3Pd ( int degreeu, int lastknotu, const double *knotsu,
00192 int degreev, int lastknotv, const double *knotsv,
00193 int spdimen, int pitch, const double *ctlpoints,
00194 double u, double v,
00195 double *ppoint, double *uder, double *vder,
00196 double *uuder, double *uvder, double *vvder,
00197 double *uuuder, double *uuvder, double *uvvder,
00198 double *vvvder );
00199
00200
00201 int mbs_multiKnotInsd ( int degree, int *lastknot,
00202 double *knots,
00203 int ncurves, int spdimen, int inpitch, int outpitch,
00204 double *ctlpoints, double t );
00205
00206 #define mbs_KnotInsC1d(degree,lastknot,knots,coeff,t) \
00207 mbs_multiKnotInsd (degree,lastknot,knots,1,1,0,0,coeff,t)
00208 #define mbs_KnotInsC2d(degree,lastknot,knots,ctlpoints,t) \
00209 mbs_multiKnotInsd (degree,lastknot,knots,1,2,0,0,(double*)ctlpoints,t)
00210 #define mbs_KnotInsC3d(degree,lastknot,knots,ctlpoints,t) \
00211 mbs_multiKnotInsd (degree,lastknot,knots,1,3,0,0,(double*)ctlpoints,t)
00212 #define mbs_KnotInsC4d(degree,lastknot,knots,ctlpoints,t) \
00213 mbs_multiKnotInsd (degree,lastknot,knots,1,4,0,0,(double*)ctlpoints,t)
00214
00215
00216 int mbs_multiKnotInsClosedd ( int degree, int *lastknot, double *knots,
00217 int ncurves, int spdimen, int inpitch, int outpitch,
00218 double *ctlpoints, double t );
00219
00220 #define mbs_KnotInsClosedC1d(degree,lastknot,knots,coeff,t) \
00221 mbs_multiKnotInsClosedd(degree,lastknot,knots,1,1,0,0,coeff,t)
00222 #define mbs_KnotInsClosedC2d(degree,lastknot,knots,ctlpoints,t) \
00223 mbs_multiKnotInsClosedd(degree,lastknot,knots,1,2,0,0,(double*)ctlpoints,t)
00224 #define mbs_KnotInsClosedC3d(degree,lastknot,knots,ctlpoints,t) \
00225 mbs_multiKnotInsClosedd(degree,lastknot,knots,1,3,0,0,(double*)ctlpoints,t)
00226 #define mbs_KnotInsClosedC4d(degree,lastknot,knots,ctlpoints,t) \
00227 mbs_multiKnotInsClosedd(degree,lastknot,knots,1,4,0,0,(double*)ctlpoints,t)
00228
00229
00230 int mbs_multiKnotRemoved ( int degree, int *lastknot,
00231 double *knots,
00232 int ncurves, int spdimen, int inpitch, int outpitch,
00233 double *ctlpoints, int knotnum );
00234
00235 #define mbs_KnotRemoveC1d(degree,lastknot,knots,coeff,knotnum) \
00236 mbs_multiKnotRemoved(degree,lastknot,knots,1,1,0,0,coeff,knotnum)
00237 #define mbs_KnotRemoveC2d(degree,lastknot,knots,ctlpoints,knotnum) \
00238 mbs_multiKnotRemoved(degree,lastknot,knots,1,2,0,0, \
00239 (double*)ctlpoints,knotnum)
00240 #define mbs_KnotRemoveC3d(degree,lastknot,knots,ctlpoints,knotnum) \
00241 mbs_multiKnotRemoved(degree,lastknot,knots,1,3,0,0, \
00242 (double*)ctlpoints,knotnum)
00243 #define mbs_KnotRemoveC4d(degree,lastknot,knots,ctlpoints,knotnum) \
00244 mbs_multiKnotRemoved(degree,lastknot,knots,1,4,0,0, \
00245 (double*)ctlpoints,knotnum)
00246
00247
00248 int mbs_multiKnotRemoveClosedd ( int degree, int *lastknot,
00249 double *knots,
00250 int ncurves, int spdimen, int inpitch, int outpitch,
00251 double *ctlpoints, int knotnum );
00252
00253 #define mbs_KnotRemoveClosedC1d(degree,lastknot,knots,coeff,knotnum) \
00254 mbs_multiKnotRemoveClosedd (degree,lastknot,knots,1,1,0,0,coeff,knotnum)
00255 #define mbs_KnotRemoveClosedC2d(degree,lastknot,knots,ctlpoints,knotnum) \
00256 mbs_multiKnotRemoveClosedd (degree,lastknot,knots,1,2,0,0, \
00257 (double*)ctlpoints,knotnum)
00258 #define mbs_KnotRemoveClosedC3d(degree,lastknot,knots,ctlpoints,knotnum) \
00259 mbs_multiKnotRemoveClosedd (degree,lastknot,knots,1,3,0,0, \
00260 (double*)ctlpoints,knotnum)
00261 #define mbs_KnotRemoveClosedC4d(degree,lastknot,knots,ctlpoints,knotnum) \
00262 mbs_multiKnotRemoveClosedd (degree,lastknot,knots,1,4,0,0, \
00263 (double*)ctlpoints,knotnum)
00264
00265
00266 void mbs_multiRemoveSuperfluousKnotsd ( int ncurves, int spdimen, int degree,
00267 int *lastknot, double *knots,
00268 int inpitch, int outpitch,
00269 double *ctlpoints );
00270
00271
00272 void mbs_multiMaxKnotInsd ( int ncurves, int spdimen, int degree,
00273 int inlastknot, const double *inknots,
00274 int inpitch, const double *inctlpoints,
00275 int *outlastknot, double *outknots,
00276 int outpitch, double *outctlpoints,
00277 int *skipl, int *skipr );
00278
00279 #define mbs_MaxKnotInsC1d(degree,inlastknot,inknots,incoeff, \
00280 outlastknot,outknots,outcoeff,skipl,skipr) \
00281 mbs_multiMaxKnotInsd(1,1,degree,inlastknot,inknots,0,incoeff, \
00282 outlastknot,outknots,0,outcoeff,skipl,skipr)
00283 #define mbs_MaxKnotInsC2d(degree,inlastknot,inknots,inctlpoints, \
00284 outlastknot,outknots,outctlpoints,skipl,skipr) \
00285 mbs_multiMaxKnotInsd(1,2,degree,inlastknot,inknots,0,(double*)inctlpoints, \
00286 outlastknot,outknots,0,(double*)outctlpoints,skipl,skipr)
00287 #define mbs_MaxKnotInsC3d(degree,inlastknot,inknots,inctlpoints, \
00288 outlastknot,outknots,outctlpoints,skipl,skipr) \
00289 mbs_multiMaxKnotInsd(1,3,degree,inlastknot,inknots,0,(double*)inctlpoints, \
00290 outlastknot,outknots,0,(double*)outctlpoints,skipl,skipr)
00291 #define mbs_MaxKnotInsC4d(degree,inlastknot,inknots,inctlpoints, \
00292 outlastknot,outknots,outctlpoints,skipl,skipr) \
00293 mbs_multiMaxKnotInsd(1,4,degree,inlastknot,inknots,0,(double*)inctlpoints, \
00294 outlastknot,outknots,0,(double*)outctlpoints,skipl,skipr)
00295
00296
00297 void mbs_multiBSCurvesToBezd ( int spdimen, int ncurves,
00298 int degree, int lastinknot, const double *inknots,
00299 int inpitch, const double *inctlp,
00300 int *kpcs, int *lastoutknot, double *outknots,
00301 int outpitch, double *outctlp );
00302
00303 #define mbs_BSToBezC1d(degree,lastinknot,inknots,incoeff,kpcs, \
00304 lastoutknot,outknots,outcoeff) \
00305 mbs_multiBSCurvesToBezd(1,1,degree,lastinknot,inknots,0,incoeff, \
00306 kpcs,lastoutknot,outknots,0,outcoeff)
00307 #define mbs_BSToBezC2d(degree,lastinknot,inknots,inctlp,kpcs, \
00308 lastoutknot,outknots,outctlp) \
00309 mbs_multiBSCurvesToBezd(2,1,degree,lastinknot,inknots,0,(double*)inctlp, \
00310 kpcs,lastoutknot,outknots,0,(double*)outctlp)
00311 #define mbs_BSToBezC3d(degree,lastinknot,inknots,inctlp,kpcs, \
00312 lastoutknot,outknots,outctlp) \
00313 mbs_multiBSCurvesToBezd(3,1,degree,lastinknot,inknots,0,(double*)inctlp, \
00314 kpcs,lastoutknot,outknots,0,(double*)outctlp)
00315 #define mbs_BSToBezC4d(degree,lastinknot,inknots,inctlp,kpcs, \
00316 lastoutknot,outknots,outctlp) \
00317 mbs_multiBSCurvesToBezd(4,1,degree,lastinknot,inknots,0,(double*)inctlp, \
00318 kpcs,lastoutknot,outknots,0,(double*)outctlp)
00319
00320
00321 void mbs_BSPatchToBezd ( int spdimen,
00322 int degreeu, int lastuknot, const double *uknots,
00323 int degreev, int lastvknot, const double *vknots,
00324 int inpitch, const double *inctlp,
00325 int *kupcs, int *lastoutuknot, double *outuknots,
00326 int *kvpcs, int *lastoutvknot, double *outvknots,
00327 int outpitch, double *outctlp );
00328
00329
00330 int mbs_NumKnotIntervalsd ( int degree, int lastknot, const double *knots );
00331
00332 int mbs_LastknotMaxInsd ( int degree, int lastknot, const double *knots,
00333 int *numknotintervals );
00334
00335 int mbs_BSProdRepSized ( int degree1, int lastknot1, const double *knots1,
00336 int degree2, int lastknot2, const double *knots2 );
00337
00338 int mbs_NumMaxKnotsd ( int degree, int lastknot, const double *knots );
00339
00340 void mbs_SetBSProdKnotsd ( int degree1, int lastknot1, const double *knots1,
00341 int degree2, int lastknot2, const double *knots2,
00342 int *degree, int *lastknot, double *knots );
00343
00344 void mbs_SetKnotPatternd ( int lastinknot, const double *inknots,
00345 int multipl,
00346 int *lastoutknot, double *outknots );
00347
00348 void mbs_multiBezScaled ( int degree, int narcs, int ncurves, int spdimen,
00349 int pitch, double *ctlpoints );
00350
00351 void mbs_multiBezUnscaled ( int degree, int narcs, int ncurves, int spdimen,
00352 int pitch, double *ctlpoints );
00353
00354 void mbs_multiMultBezCd ( int nscf, int degscf, int scfpitch,
00355 const double *scfcoef,
00356 int spdimen,
00357 int nvecf, int degvecf, int vecfpitch,
00358 const double *vecfcp,
00359 int *degprod, int prodpitch, double *prodcp );
00360
00361 void mbs_multiMultBSCd ( int nscf, int degscf,
00362 int scflastknot, const double *scfknots,
00363 int scfpitch, const double *scfcoef,
00364 int spdimen,
00365 int nvecf, int degvecf,
00366 int vecflastknot, const double *vecfknots,
00367 int vecfpitch, const double *vecfcp,
00368 int *degprod, int *prodlastknot, double *prodknots,
00369 int prodpitch, double *prodcp );
00370
00371
00372 void mbs_multiBCDegElevd ( int ncurves, int spdimen,
00373 int inpitch, int indegree, const double *inctlpoints,
00374 int deltadeg,
00375 int outpitch, int *outdegree, double *outctlpoints );
00376
00377 #define mbs_BCDegElevC1d(indegree,incoeff,deltadeg,outdegree,outcoeff) \
00378 mbs_multiBCDegElevd ( 1, 1, 0, indegree, incoeff, deltadeg, \
00379 0, outdegree, outcoeff )
00380 #define mbs_BCDegElevC2d(indegree,inctlpoints,deltadeg,outdegree,outctlpoints) \
00381 mbs_multiBCDegElevd ( 1, 2, 0, indegree, (double*)inctlpoints, deltadeg, \
00382 0, outdegree, (double*)outctlpoints )
00383 #define mbs_BCDegElevC3d(indegree,inctlpoints,deltadeg,outdegree,outctlpoints) \
00384 mbs_multiBCDegElevd ( 1, 3, 0, indegree, (double*)inctlpoints, deltadeg, \
00385 0, outdegree, (double*)outctlpoints)
00386 #define mbs_BCDegElevC4d(indegree,inctlpoints,deltadeg,outdegree,outctlpoints) \
00387 mbs_multiBCDegElevd ( 1, 4, 0, indegree, (double*)inctlpoints, deltadeg, \
00388 0, outdegree, (double*)outctlpoints )
00389
00390
00391 void mbs_BCDegElevPd ( int spdimen,
00392 int indegreeu, int indegreev, const double *inctlp,
00393 int deltadegu, int deltadegv,
00394 int *outdegreeu, int *outdegreev,
00395 double *outctlp );
00396
00397 #define mbs_BCDegElevP1d(indegreeu,indegreev,incoeff,deltadegu,deltadegv, \
00398 outdegreeu,outdegreev,outcoeff) \
00399 mbs_BCDegElevPd ( 1, indegreeu, indegreev, incoeff, deltadegu, deltadegv, \
00400 outdegreeu, outdegreev, outcoeff )
00401 #define mbs_BCDegElevP2d(indegreeu,indegreev,inctlp,deltadegu,deltadegv, \
00402 outdegreeu,outdegreev,outctlp) \
00403 mbs_BCDegElevPd ( 2, indegreeu, indegreev, (double*)inctlp, \
00404 deltadegu, deltadegv, outdegreeu, outdegreev, (double*)outctlp )
00405 #define mbs_BCDegElevP3d(indegreeu,indegreev,inctlp,deltadegu,deltadegv, \
00406 outdegreeu,outdegreev,outctlp) \
00407 mbs_BCDegElevPd ( 3, indegreeu, indegreev, (double*)inctlp, \
00408 deltadegu, deltadegv, outdegreeu, outdegreev, (double*)outctlp )
00409 #define mbs_BCDegElevP4d(indegreeu,indegreev,inctlp,deltadegu,deltadegv, \
00410 outdegreeu,outdegreev,outctlp) \
00411 mbs_BCDegElevPd ( 4, indegreeu, indegreev, (double*)inctlp, \
00412 deltadegu, deltadegv, outdegreeu, outdegreev, (double*)outctlp )
00413
00414
00415 void mbs_multiBCDegRedd ( int ncurves, int spdimen,
00416 int inpitch, int indegree, const double *inctlpoints,
00417 int deltadeg,
00418 int outpitch, int *outdegree, double *outctlpoints );
00419
00420 #define mbs_BCDegRedC1d(indegree,incoeff,deltadeg,outdegree,outcoeff) \
00421 mbs_multiBCDegRedd ( 1, 1, 0, indegree, incoeff, deltadeg, \
00422 0, outdegree, outcoeff )
00423 #define mbs_BCDegRedC2d(indegree,inctlpoints,deltadeg,outdegree,outctlpoints) \
00424 mbs_multiBCDegRedd ( 1, 2, 0, indegree, (double*)inctlpoints, deltadeg, \
00425 0, outdegree, (double*)outctlpoints )
00426 #define mbs_BCDegRedC3d(indegree,inctlpoints,deltadeg,outdegree,outctlpoints) \
00427 mbs_multiBCDegRedd ( 1, 3, 0, indegree, (double*)inctlpoints, deltadeg, \
00428 0, outdegree, (double*)outctlpoints)
00429 #define mbs_BCDegRedC4d(indegree,inctlpoints,deltadeg,outdegree,outctlpoints) \
00430 mbs_multiBCDegRedd ( 1, 4, 0, indegree, (double*)inctlpoints, deltadeg, \
00431 0, outdegree, (double*)outctlpoints )
00432
00433
00434 void mbs_BCDegRedPd ( int spdimen,
00435 int indegreeu, int indegreev, const double *inctlp,
00436 int deltadegu, int deltadegv,
00437 int *outdegreeu, int *outdegreev,
00438 double *outctlp );
00439
00440 #define mbs_BCDegRedP1d(indegreeu,indegreev,incoeff,deltadegu,deltadegv, \
00441 outdegreeu,outdegreev,outcoeff) \
00442 mbs_BCDegRedPd ( 1, indegreeu, indegreev, incoeff, deltadegu, deltadegv, \
00443 outdegreeu, outdegreev, outcoeff )
00444 #define mbs_BCDegRedP2d(indegreeu,indegreev,inctlp,deltadegu,deltadegv, \
00445 outdegreeu,outdegreev,outctlp) \
00446 mbs_BCDegRedPd ( 2, indegreeu, indegreev, (double*)inctlp, \
00447 deltadegu, deltadegv, outdegreeu, outdegreev, (double*)outctlp )
00448 #define mbs_BCDegRedP3d(indegreeu,indegreev,inctlp,deltadegu,deltadegv, \
00449 outdegreeu,outdegreev,outctlp) \
00450 mbs_BCDegRedPd ( 3, indegreeu, indegreev, (double*)inctlp, \
00451 deltadegu, deltadegv, outdegreeu, outdegreev, (double*)outctlp )
00452 #define mbs_BCDegRedP4d(indegreeu,indegreev,inctlp,deltadegu,deltadegv, \
00453 outdegreeu,outdegreev,outctlp) \
00454 mbs_BCDegRedPd ( 4, indegreeu, indegreev, (double*)inctlp, \
00455 deltadegu, deltadegv, outdegreeu, outdegreev, (double*)outctlp )
00456
00457
00458 void mbs_multiBSDegElevd ( int ncurves, int spdimen,
00459 int indegree, int inlastknot, const double *inknots,
00460 int inpitch, const double *inctlpoints,
00461 int deltadeg,
00462 int *outdegree, int *outlastknot,
00463 double *outknots, int outpitch, double *outctlpoints,
00464 boolean freeend );
00465
00466 #define mbs_BSDegElevC1d(indegree,inlastknot,inknots,incoeff, \
00467 deltadeg,outdegree,outlastknot,outknots,outcoeff,freeend) \
00468 mbs_multiBSDegElevd(1,1,indegree,inlastknot,inknots,0,incoeff, \
00469 deltadeg,outdegree,outlastknot,outknots,0,outcoeff,freeend)
00470 #define mbs_BSDegElevC2d(indegree,inlastknot,inknots,inctlpoints, \
00471 deltadeg,outdegree,outlastknot,outknots,outctlpoints,freeend) \
00472 mbs_multiBSDegElevd(1,2,indegree,inlastknot,inknots,0,(double*)inctlpoints, \
00473 deltadeg,outdegree,outlastknot,outknots,0,(double*)outctlpoints,freeend)
00474 #define mbs_BSDegElevC3d(indegree,inlastknot,inknots,inctlpoints, \
00475 deltadeg,outdegree,outlastknot,outknots,outctlpoints,freeend) \
00476 mbs_multiBSDegElevd(1,3,indegree,inlastknot,inknots,0,(double*)inctlpoints, \
00477 deltadeg,outdegree,outlastknot,outknots,0,(double*)outctlpoints,freeend)
00478 #define mbs_BSDegElevC4d(indegree,inlastknot,inknots,inctlpoints, \
00479 deltadeg,outdegree,outlastknot,outknots,outctlpoints,freeend) \
00480 mbs_multiBSDegElevd(1,4,indegree,inlastknot,inknots,0,(double*)inctlpoints, \
00481 deltadeg,outdegree,outlastknot,outknots,0,(double*)outctlpoints,freeend)
00482
00483 void mbs_multiBSDegElevClosedd ( int ncurves, int spdimen,
00484 int indegree, int inlastknot, const double *inknots,
00485 int inpitch, const double *inctlpoints,
00486 int deltadeg,
00487 int *outdegree, int *outlastknot,
00488 double *outknots, int outpitch, double *outctlpoints );
00489
00490 #define mbs_BSDegElevClosedC1d(indegree,inlastknot,inknots,incoeff, \
00491 deltadeg,outdegree,outlastknot,outknots,outcoeff) \
00492 mbs_multiBSDegElevClosedd(1,1,indegree,inlastknot,inknots,0,incoeff, \
00493 deltadeg,outdegree,outlastknot,outknots,0,outcoeff)
00494 #define mbs_BSDegElevClosedC2d(indegree,inlastknot,inknots,inctlpoints, \
00495 deltadeg,outdegree,outlastknot,outknots,outctlpoints) \
00496 mbs_multiBSDegElevClosedd(1,2,indegree,inlastknot,inknots,0,(double*)inctlpoints, \
00497 deltadeg,outdegree,outlastknot,outknots,0,(double*)outctlpoints)
00498 #define mbs_BSDegElevClosedC3d(indegree,inlastknot,inknots,inctlpoints, \
00499 deltadeg,outdegree,outlastknot,outknots,outctlpoints) \
00500 mbs_multiBSDegElevClosedd(1,3,indegree,inlastknot,inknots,0,(double*)inctlpoints, \
00501 deltadeg,outdegree,outlastknot,outknots,0,(double*)outctlpoints)
00502 #define mbs_BSDegElevClosedC4d(indegree,inlastknot,inknots,inctlpoints, \
00503 deltadeg,outdegree,outlastknot,outknots,outctlpoints) \
00504 mbs_multiBSDegElevClosedd(1,4,indegree,inlastknot,inknots,0,(double*)inctlpoints, \
00505 deltadeg,outdegree,outlastknot,outknots,0,(double*)outctlpoints)
00506
00507
00508 boolean mbs_multiBSDegRedd ( int ncurves, int spdimen,
00509 int indegree, int inlastknot, const double *inknots,
00510 int inpitch, CONST_ double *inctlpoints,
00511 int deltadeg,
00512 int *outdegree, int *outlastknot, double *outknots,
00513 int outpitch, double *outctlpoints );
00514
00515 #define mbs_BSDegRedC1d(indegree,inlastknot,inknots,incoeff,deltadeg, \
00516 outdegree,outlastknot,outknots,outcoeff) \
00517 mbs_multiBSDegRedd(1,1,indegree,inlastknot,inknots,0,incoeff,deltadeg, \
00518 outdegree,outlastknot,outknots,0,outcoeff)
00519 #define mbs_BSDegRedC2d(indegree,inlastknot,inknots,incpoints,deltadeg, \
00520 outdegree,outlastknot,outknots,outcpoints) \
00521 mbs_multiBSDegRedd(1,2,indegree,inlastknot,inknots,0,(double*)incpoints,deltadeg, \
00522 outdegree,outlastknot,outknots,0,(double*)outcpoints)
00523 #define mbs_BSDegRedC3d(indegree,inlastknot,inknots,incpoints,deltadeg, \
00524 outdegree,outlastknot,outknots,outcpoints) \
00525 mbs_multiBSDegRedd(1,3,indegree,inlastknot,inknots,0,(double*)incpoints,deltadeg, \
00526 outdegree,outlastknot,outknots,0,(double*)outcpoints)
00527 #define mbs_BSDegRedC4d(indegree,inlastknot,inknots,incpoints,deltadeg, \
00528 outdegree,outlastknot,outknots,outcpoints) \
00529 mbs_multiBSDegRedd(1,4,indegree,inlastknot,inknots,0,(double*)incpoints,deltadeg, \
00530 outdegree,outlastknot,outknots,0,(double*)outcpoints)
00531
00532
00533 boolean mbs_multiBSDegRedClosedd ( int ncurves, int spdimen,
00534 int indegree, int inlastknot, const double *inknots,
00535 int inpitch, CONST_ double *inctlpoints,
00536 int deltadeg,
00537 int *outdegree, int *outlastknot, double *outknots,
00538 int outpitch, double *outctlpoints );
00539
00540 #define mbs_BSDegRedClosedC1d(indegree,inlastknot,inknots,incoeff,deltadeg, \
00541 outdegree,outlastknot,outknots,outcoeff) \
00542 mbs_multiBSDegRedClosedd(1,1,indegree,inlastknot,inknots,0,incoeff,deltadeg, \
00543 outdegree,outlastknot,outknots,0,outcoeff)
00544 #define mbs_BSDegRedClosedC2d(indegree,inlastknot,inknots,incpoints,deltadeg, \
00545 outdegree,outlastknot,outknots,outcpoints) \
00546 mbs_multiBSDegRedClosedd(1,2,indegree,inlastknot,inknots,0,(double*)incpoints, \
00547 deltadeg,outdegree,outlastknot,outknots,0,(double*)outcpoints)
00548 #define mbs_BSDegRedClosedC3d(indegree,inlastknot,inknots,incpoints,deltadeg, \
00549 outdegree,outlastknot,outknots,outcpoints) \
00550 mbs_multiBSDegRedClosedd(1,3,indegree,inlastknot,inknots,0,(double*)incpoints, \
00551 deltadeg,outdegree,outlastknot,outknots,0,(double*)outcpoints)
00552 #define mbs_BSDegRedClosedC4d(indegree,inlastknot,inknots,incpoints,deltadeg, \
00553 outdegree,outlastknot,outknots,outcpoints) \
00554 mbs_multiBSDegRedClosedd(1,4,indegree,inlastknot,inknots,0,(double*)incpoints, \
00555 deltadeg,outdegree,outlastknot,outknots,0,(double*)outcpoints)
00556
00557
00558 void mbs_multiBCHornerd ( int degree, int ncurves, int spdimen, int pitch,
00559 const double *ctlpoints, double t, double *cpoints );
00560
00561 #define mbs_BCHornerC1d(degree,coeff,t,value) \
00562 mbs_multiBCHornerd ( degree, 1, 1, 0, coeff, t, value )
00563 #define mbs_BCHornerC2d(degree,ctlpoints,t,cpoint) \
00564 mbs_multiBCHornerd ( degree, 1, 2, 0, (double*)ctlpoints, t, (double*)cpoint )
00565 #define mbs_BCHornerC3d(degree,ctlpoints,t,cpoint) \
00566 mbs_multiBCHornerd ( degree, 1, 3, 0, (double*)ctlpoints, t, (double*)cpoint )
00567 #define mbs_BCHornerC4d(degree,ctlpoints,t,cpoint) \
00568 mbs_multiBCHornerd ( degree, 1, 4, 0, (double*)ctlpoints, t, (double*)cpoint )
00569
00570 void mbs_BCHornerC2Rd ( int degree, const point3d *ctlpoints, double t,
00571 point2d *cpoint );
00572
00573 void mbs_BCHornerC3Rd ( int degree, const point4d *ctlpoints, double t,
00574 point3d *cpoint );
00575
00576
00577 void mbs_BCHornerPd ( int degreeu, int degreev, int spdimen,
00578 const double *ctlpoints,
00579 double u, double v, double *ppoint );
00580
00581 #define mbs_BCHornerP1d(degreeu,degreev,coeff,u,v,ppoint) \
00582 mbs_BCHornerPd ( degreeu, degreev, 1, coeff, u, v, ppoint )
00583 #define mbs_BCHornerP2d(degreeu,degreev,ctlpoints,u,v,ppoint ) \
00584 mbs_BCHornerPd ( degreeu, degreev, 2, (double*)ctlpoints, \
00585 u, v, (double*)ppoint )
00586 #define mbs_BCHornerP3d(degreeu,degreev,ctlpoints,u,v,ppoint ) \
00587 mbs_BCHornerPd ( degreeu, degreev, 3, (double*)ctlpoints, \
00588 u, v, (double*)ppoint )
00589 #define mbs_BCHornerP4d(degreeu,degreev,ctlpoints,u,v,ppoint ) \
00590 mbs_BCHornerPd ( degreeu, degreev, 4, (double*)ctlpoints, \
00591 u, v, (double*)ppoint )
00592
00593 void mbs_BCHornerP3Rd ( int degreeu, int degreev, const point4d *ctlpoints,
00594 double u, double v, point3d *p );
00595
00596
00597 void mbs_multiBCHornerDerd ( int degree, int ncurves, int spdimen, int pitch,
00598 const double *ctlpoints,
00599 double t, double *p, double *d );
00600
00601 #define mbs_BCHornerDerC1d(degree,coeff,t,p,d) \
00602 mbs_multiBCHornerDerd ( degree, 1, 1, 0, coeff, t, p, d )
00603 #define mbs_BCHornerDerC2d(degree,ctlpoints,t,p,d) \
00604 mbs_multiBCHornerDerd ( degree, 1, 2, 0, (double*)ctlpoints, t, \
00605 (double*)p, (double*)d )
00606 #define mbs_BCHornerDerC3d(degree,ctlpoints,t,p,d) \
00607 mbs_multiBCHornerDerd ( degree, 1, 3, 0, (double*)ctlpoints, t, \
00608 (double*)p, (double*)d )
00609 #define mbs_BCHornerDerC4d(degree,ctlpoints,t,p,d) \
00610 mbs_multiBCHornerDerd ( degree, 1, 4, 0, (double*)ctlpoints, t, \
00611 (double*)p, (double*)d )
00612
00613 void mbs_BCHornerDerC2Rd ( int degree, const point3d *ctlpoints, double t,
00614 point2d *p, vector2d *d );
00615 void mbs_BCHornerDerC3Rd ( int degree, const point4d *ctlpoints, double t,
00616 point3d *p, vector3d *d );
00617
00618
00619 void mbs_BCHornerDerPd ( int degreeu, int degreev, int spdimen,
00620 const double *ctlpoints,
00621 double u, double v,
00622 double *p, double *du, double *dv );
00623
00624 #define mbs_BCHornerDerP1d(degreeu,degreev,coeff,u,v,p,du,dv) \
00625 mbs_BCHornerDerPd ( degreeu, degreev, 1, coeff, u, v, p, du, dv )
00626 #define mbs_BCHornerDerP2d(degreeu,degreev,ctlpoints,u,v,p,du,dv) \
00627 mbs_BCHornerDerPd ( degreeu, degreev, 2, (double*)ctlpoints, u, v, \
00628 (double*)p, (double*)du, (double*)dv )
00629 #define mbs_BCHornerDerP3d(degreeu,degreev,ctlpoints,u,v,p,du,dv) \
00630 mbs_BCHornerDerPd ( degreeu, degreev, 3, (double*)ctlpoints, u, v, \
00631 (double*)p, (double*)du, (double*)dv )
00632 #define mbs_BCHornerDerP4d(degreeu,degreev,ctlpoints,u,v,p,du,dv) \
00633 mbs_BCHornerDerPd ( degreeu, degreev, 4, (double*)ctlpoints, u, v, \
00634 (double*)p, (double*)du, (double*)dv )
00635
00636 void mbs_BCHornerDerP3Rd ( int degreeu, int degreev, const point4d *ctlpoints,
00637 double u, double v,
00638 point3d *p, vector3d *du, vector3d *dv );
00639
00640
00641 void mbs_BCHornerNvP3d ( int degreeu, int degreev, const point3d *ctlpoints,
00642 double u, double v,
00643 point3d *p, vector3d *nv );
00644
00645 void mbs_BCHornerNvP3Rd ( int degreeu, int degreev, const point4d *ctlpoints,
00646 double u, double v,
00647 point3d *p, vector3d *nv );
00648
00649
00650 void mbs_multiBCHornerDer2d ( int degree, int ncurves, int spdimen, int pitch,
00651 const double *ctlpoints,
00652 double t, double *p, double *d1, double *d2 );
00653
00654 #define mbs_BCHornerDer2C1d(degree,coeff,t,p,d1,d2) \
00655 mbs_multiBCHornerDer2d ( degree, 1, 1, 0, coeff, t, p, d1, d2 )
00656 #define mbs_BCHornerDer2C2d(degree,ctlpoints,t,p,d1,d2) \
00657 mbs_multiBCHornerDer2d ( degree, 1, 2, 0, (double*)ctlpoints, t, \
00658 (double*)p, (double*)d1, (double*)d2 )
00659 #define mbs_BCHornerDer2C3d(degree,ctlpoints,t,p,d1,d2) \
00660 mbs_multiBCHornerDer2d ( degree, 1, 3, 0, (double*)ctlpoints, t, \
00661 (double*)p, (double*)d1, (double*)d2 )
00662 #define mbs_BCHornerDer2C4d(degree,ctlpoints,t,p,d1,d2) \
00663 mbs_multiBCHornerDer2d ( degree, 1, 4, 0, (double*)ctlpoints, t, \
00664 (double*)p, (double*)d1, (double*)d2 )
00665
00666 void mbs_BCHornerDer2C2Rd ( int degree, const point3d *ctlpoints, double t,
00667 point2d *p, vector2d *d1, vector2d *d2 );
00668 void mbs_BCHornerDer2C3Rd ( int degree, const point4d *ctlpoints, double t,
00669 point3d *p, vector3d *d1, vector3d *d2 );
00670
00671 void mbs_BCHornerDer2Pd ( int degreeu, int degreev, int spdimen,
00672 const double *ctlpoints,
00673 double u, double v,
00674 double *p, double *du, double *dv,
00675 double *duu, double *duv, double *dvv );
00676
00677 #define mbs_BCHornerDer2P1d(degreeu,degreev,coeff,u,v,p,du,dv,duu,duv,dvv) \
00678 mbs_BCHornerDer2Pd ( degreeu, degreev, 1, coeff, u, v, \
00679 p, du, dv, duu, duv, dvv )
00680 #define mbs_BCHornerDer2P2d(degreeu,degreev,ctlpoints,u,v,p,du,dv,duu,duv,dvv) \
00681 mbs_BCHornerDer2Pd ( degreeu, degreev, 2, (double*)ctlpoints, u, v, \
00682 (double*)p, (double*)du, (double*)dv, (double*)duu, (double*)duv, (double*)dvv )
00683 #define mbs_BCHornerDer2P3d(degreeu,degreev,ctlpoints,u,v,p,du,dv,duu,duv,dvv) \
00684 mbs_BCHornerDer2Pd ( degreeu, degreev, 3, (double*)ctlpoints, u, v, \
00685 (double*)p, (double*)du, (double*)dv, (double*)duu, (double*)duv, (double*)dvv )
00686 #define mbs_BCHornerDer2P4d(degreeu,degreev,ctlpoints,u,v,p,du,dv,duu,duv,dvv) \
00687 mbs_BCHornerDer2Pd ( degreeu, degreev, 4, (double*)ctlpoints, u, v, \
00688 (double*)p, (double*)du, (double*)dv, (double*)duu, (double*)duv, (double*)dvv )
00689
00690 void mbs_BCHornerDer2P3Rd ( int degreeu, int degreev, const point4d *ctlpoints,
00691 double u, double v,
00692 point3d *p, vector3d *du, vector3d *dv,
00693 vector3d *duu, vector3d *duv, vector3d *dvv );
00694
00695
00696 void mbs_multiBCHornerDer3d ( int degree, int ncurves, int spdimen, int pitch,
00697 const double *ctlpoints, double t,
00698 double *p, double *d1, double *d2, double *d3 );
00699
00700 #define mbs_BCHornerDer3C1d(degree,coeff,t,p,d1,d2,d3) \
00701 mbs_multiBCHornerDer3d ( degree, 1, 1, 0, coeff, t, p, d1, d2, d3 )
00702 #define mbs_BCHornerDer3C2d(degree,ctlpoints,t,p,d1,d2,d3) \
00703 mbs_multiBCHornerDer3d ( degree, 1, 2, 0, (double*)ctlpoints, t, \
00704 (double*)p, (double*)d1, (double*)d2, (double*)d3 )
00705 #define mbs_BCHornerDer3C3d(degree,ctlpoints,t,p,d1,d2,d3) \
00706 mbs_multiBCHornerDer3d ( degree, 1, 3, 0, (double*)ctlpoints, t, \
00707 (double*)p, (double*)d1, (double*)d2, (double*)d3 )
00708 #define mbs_BCHornerDer3C4d(degree,ctlpoints,t,p,d1,d2,d3) \
00709 mbs_multiBCHornerDer3d ( degree, 1, 4, 0, (double*)ctlpoints, t, \
00710 (double*)p, (double*)d1, (double*)d2, (double*)d3 )
00711
00712
00713 void mbs_FindBezPatchDiagFormd ( int degreeu, int degreev, int spdimen,
00714 CONST_ double *cpoints,
00715 int k, int l, double u, double v,
00716 double *dfcp );
00717
00718 void mbs_BCHornerDer3Pd ( int degreeu, int degreev, int spdimen,
00719 CONST_ double *ctlpoints,
00720 double u, double v,
00721 double *p, double *pu, double *pv,
00722 double *puu, double *puv, double *pvv,
00723 double *puuu, double *puuv, double *puvv, double *pvvv );
00724
00725 #define mbs_BCHornerDer3P1d(degreeu,degreev,coeff,u,v, \
00726 p,pu,pv,puu,puv,pvv,puuu,puuv,puvv,pvvv) \
00727 mbs_BCHornerDer3Pd ( degreeu, degreev, 1, coeff, u, v, \
00728 p, pu, pv, puu, puv, pvv, puuu, puuv, puvv, pvvv )
00729 #define mbs_BCHornerDer3P2d(degreeu,degreev,ctlpoints,u,v, \
00730 p,pu,pv,puu,puv,pvv,puuu,puuv,puvv,pvvv) \
00731 mbs_BCHornerDer3Pd ( degreeu, degreev, 2, (double*)ctlpoints, u, v, \
00732 (double*)p, (double*)pu, (double*)pv, (double*)puu, (double*)puv, \
00733 (double*)pvv, (double*)puuu, (double*)puuv, (double*)puvv, (double*)pvvv )
00734 #define mbs_BCHornerDer3P3d(degreeu,degreev,ctlpoints,u,v, \
00735 p,pu,pv,puu,puv,pvv,puuu,puuv,puvv,pvvv) \
00736 mbs_BCHornerDer3Pd ( degreeu, degreev, 3, (double*)ctlpoints, u, v, \
00737 (double*)p, (double*)pu, (double*)pv, (double*)puu, (double*)puv, \
00738 (double*)pvv, (double*)puuu, (double*)puuv, (double*)puvv, (double*)pvvv )
00739 #define mbs_BCHornerDer3P4d(degreeu,degreev,ctlpoints,u,v, \
00740 p,pu,pv,puu,puv,pvv,puuu,puuv,puvv,pvvv) \
00741 mbs_BCHornerDer3Pd ( degreeu, degreev, 4, (double*)ctlpoints, u, v, \
00742 (double*)p, (double*)pu, (double*)pv, (double*)puu, (double*)puv, \
00743 (double*)pvv, (double*)puuu, (double*)puuv, (double*)puvv, (double*)pvvv )
00744
00745
00746 void mbs_deBoorBasisd ( int degree, int lastknot, const double *knots,
00747 double t, int *fnz, int *nnz, double *bfv );
00748
00749
00750 void mbs_multiBSCubicInterpd ( int lastinterpknot, double *interpknots,
00751 int ncurves, int spdimen, int xpitch,
00752 const double *x,
00753 int ypitch,
00754 char bcl, const double *ybcl,
00755 char bcr, const double *ybcr,
00756 int *lastbsknot, double *bsknots,
00757 int bspitch, double *ctlpoints );
00758
00759 void mbs_multiBSCubicClosedInterpd ( int lastinterpknot, double *interpknots,
00760 int ncurves, int spdimen, int xpitch,
00761 const double *x,
00762 int *lastbsknot, double *bsknots,
00763 int bspitch, double *ctlpoints );
00764
00765
00766 void mbs_BCFrenetC2d ( int degree, const point2d *ctlpoints, double t,
00767 point2d *cpoint, vector2d *fframe, double *curvature );
00768
00769 void mbs_BCFrenetC2Rd ( int degree, const point3d *ctlpoints, double t,
00770 point2d *cpoint, vector2d *fframe, double *curvature );
00771
00772 void mbs_BCFrenetC3d ( int degree, const point3d *ctlpoints, double t,
00773 point3d *cpoint, vector3d *fframe, double *curvatures );
00774
00775 void mbs_BCFrenetC3Rd ( int degree, const point4d *ctlpoints, double t,
00776 point3d *cpoint, vector3d *fframe, double *curvatures );
00777
00778
00779 void mbs_FundFormsBP3d ( int degreeu, int degreev, const point3d *ctlpoints,
00780 double u, double v,
00781 double *firstform, double *secondform );
00782
00783 void mbs_GMCurvaturesBP3d ( int degreeu, int degreev, const point3d *ctlpoints,
00784 double u, double v,
00785 double *gaussian, double *mean );
00786
00787 void mbs_PrincipalDirectionsBP3d ( int degreeu, int degreev,
00788 const point3d *ctlpoints,
00789 double u, double v,
00790 double *k1, vector2d *v1,
00791 double *k2, vector2d *v2 );
00792
00793 void mbs_FundFormsBP3Rd ( int degreeu, int degreev, const point4d *ctlpoints,
00794 double u, double v,
00795 double *firstform, double *secondform );
00796
00797 void mbs_GMCurvaturesBP3Rd ( int degreeu, int degreev, const point4d *ctlpoints,
00798 double u, double v,
00799 double *gaussian, double *mean );
00800
00801 void mbs_PrincipalDirectionsBP3Rd ( int degreeu, int degreev,
00802 const point4d *ctlpoints,
00803 double u, double v,
00804 double *k1, vector2d *v1,
00805 double *k2, vector2d *v2 );
00806
00807
00808 void mbs_multiBisectBezCurvesd ( int degree, int ncurves,
00809 int spdimen, int pitch,
00810 double *ctlp, double *ctlq );
00811
00812 #define mbs_BisectBC1d(degree,ctlp,ctlq) \
00813 mbs_multiBisectBezCurvesd ( degree, 1, 1, 0, ctlp, ctlq )
00814 #define mbs_BisectBC2d(degree,ctlp,ctlq) \
00815 mbs_multiBisectBezCurvesd ( degree, 1, 2, 0, (double*)ctlp, (double*)ctlq )
00816 #define mbs_BisectBC3d(degree,ctlp,ctlq) \
00817 mbs_multiBisectBezCurvesd ( degree, 1, 3, 0, (double*)ctlp, (double*)ctlq )
00818 #define mbs_BisectBC4d(degree,ctlp,ctlq) \
00819 mbs_multiBisectBezCurvesd ( degree, 1, 4, 0, (double*)ctlp, (double*)ctlq )
00820
00821 #define mbs_BisectBP1ud(degreeu,degreev,ctlp,ctlq) \
00822 mbs_multiBisectBezCurvesd ( degreeu, 1, (degreev+1), 0, ctlp, ctlq )
00823 #define mbs_BisectBP1vd(degreeu,degreev,ctlp,ctlq) \
00824 mbs_multiBisectBezCurvesd ( degreev, degreeu+1, 1, degreev+1, ctlp, ctlq )
00825 #define mbs_BisectBP2ud(degreeu,degreev,ctlp,ctlq) \
00826 mbs_multiBisectBezCurvesd ( degreeu, 1, 2*(degreev+1), 0, \
00827 (double*)ctlp, (double*)ctlq )
00828 #define mbs_BisectBP2vd(degreeu,degreev,ctlp,ctlq) \
00829 mbs_multiBisectBezCurvesd ( degreev, degreeu+1, 2, 2*(degreev+1), \
00830 (double*)ctlp, (double*)ctlq )
00831 #define mbs_BisectBP3ud(degreeu,degreev,ctlp,ctlq) \
00832 mbs_multiBisectBezCurvesd ( degreeu, 1, 3*(degreev+1), 0, \
00833 (double*)ctlp, (double*)ctlq )
00834 #define mbs_BisectBP3vd(degreeu,degreev,ctlp,ctlq) \
00835 mbs_multiBisectBezCurvesd ( degreev, degreeu+1, 3, 3*(degreev+1), \
00836 (double*)ctlp, (double*)ctlq )
00837 #define mbs_BisectBP4ud(degreeu,degreev,ctlp,ctlq) \
00838 mbs_multiBisectBezCurvesd ( degreeu, 1, 4*(degreev+1), 0, \
00839 (double*)ctlp, (double*)ctlq )
00840 #define mbs_BisectBP4vd(degreeu,degreev,ctlp,ctlq) \
00841 mbs_multiBisectBezCurvesd ( degreev, degreeu+1, 4, 4*(degreev+1), \
00842 (double*)ctlp, (double*)ctlq )
00843
00844
00845 void mbs_multiDivideBezCurvesd ( int degree, int ncurves,
00846 int spdimen, int pitch,
00847 double t,
00848 double *ctlp, double *ctlq );
00849
00850 #define mbs_DivideBC1d(degree,t,ctlp,ctlq) \
00851 mbs_multiDivideBezCurvesd ( degree, 1, 1, 0, t, ctlp, ctlq )
00852 #define mbs_DivideBC2d(degree,t,ctlp,ctlq) \
00853 mbs_multiDivideBezCurvesd ( degree, 1, 2, 0, t, (double*)ctlp, (double*)ctlq )
00854 #define mbs_DivideBC3d(degree,t,ctlp,ctlq) \
00855 mbs_multiDivideBezCurvesd ( degree, 1, 3, 0, t, (double*)ctlp, (double*)ctlq )
00856 #define mbs_DivideBC4d(degree,t,ctlp,ctlq) \
00857 mbs_multiDivideBezCurvesd ( degree, 1, 4, 0, t, (double*)ctlp, (double*)ctlq )
00858
00859 #define mbs_DivideBP1ud(degreeu,degreev,u,ctlp,ctlq) \
00860 mbs_multiDivideBezCurvesd ( degreeu, 1, (degreev+1), 0, u, ctlp, ctlq )
00861 #define mbs_DivideBP1vd(degreeu,degreev,v,ctlp,ctlq) \
00862 mbs_multiDivideBezCurvesd ( degreev, degreeu+1, 1, degreev+1, v, ctlp, ctlq )
00863 #define mbs_DivideBP2ud(degreeu,degreev,u,ctlp,ctlq) \
00864 mbs_multiDivideBezCurvesd ( degreeu, 1, 2*(degreev+1), 0, u, \
00865 (double*)ctlp, (double*)ctlq )
00866 #define mbs_DivideBP2vd(degreeu,degreev,v,ctlp,ctlq) \
00867 mbs_multiDivideBezCurvesd ( degreev, degreeu+1, 2, 2*(degreev+1), v, \
00868 (double*)ctlp, (double*)ctlq )
00869 #define mbs_DivideBP3ud(degreeu,degreev,u,ctlp,ctlq) \
00870 mbs_multiDivideBezCurvesd ( degreeu, 1, 3*(degreev+1), 0, u, \
00871 (double*)ctlp, (double*)ctlq )
00872 #define mbs_DivideBP3vd(degreeu,degreev,v,ctlp,ctlq) \
00873 mbs_multiDivideBezCurvesd ( degreev, degreeu+1, 3, 3*(degreev+1), v, \
00874 (double*)ctlp, (double*)ctlq )
00875 #define mbs_DivideBP4ud(degreeu,degreev,u,ctlp,ctlq) \
00876 mbs_multiDivideBezCurvesd ( degreeu, 1, 4*(degreev+1), 0, u, \
00877 (double*)ctlp, (double*)ctlq )
00878 #define mbs_DivideBP4vd(degreeu,degreev,v,ctlp,ctlq) \
00879 mbs_multiDivideBezCurvesd ( degreev, degreeu+1, 4, 4*(degreev+1), v, \
00880 (double*)ctlp, (double*)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_BezP3Normald ( int degreeu, int degreev, const point3d *ctlpoints,
00888 int *ndegu, int *ndegv, vector3d *ncp );
00889
00890 char mbs_BezP3RNormald ( int degreeu, int degreev, const point4d *ctlpoints,
00891 int *ndegu, int *ndegv, vector3d *ncp );
00892
00893 boolean mbs_ApproxBSKnotsValidd ( int degree, int lastknot, const double *knots,
00894 int lastiknot, const double *iknots );
00895
00896 int mbs_ApproxBSBandmSized ( int degree, const double *knots,
00897 int lastiknot, const double *iknots );
00898
00899 boolean mbs_ConstructApproxBSProfiled ( int degree, int lastknot,
00900 const double *knots,
00901 int lastiknot, const double *iknots,
00902 bandm_profile *prof );
00903
00904 boolean mbs_ConstructApproxBSMatrixd ( int degree, int lastknot,
00905 const double *knots,
00906 int lastiknot, const double *iknots,
00907 int *nrows, int *ncols,
00908 bandm_profile *prof,
00909 double *a );
00910
00911
00912 boolean mbs_multiConstructApproxBSCd ( int degree, int lastknot,
00913 const double *knots,
00914 int lastpknot, const double *pknots,
00915 int ncurves, int spdimen,
00916 int ppitch, const double *ppoints,
00917 int bcpitch, double *ctlpoints );
00918
00919 #define mbs_ConstructApproxBSC1d(degree,lastknot,knots,lastpknot,pknots,\
00920 ppoints,ctlpoints) \
00921 mbs_multiConstructApproxBSCd (degree,lastknot,knots,lastpknot,pknots,1,1,0,\
00922 (double*)ppoints,0,(double*)ctlpoints)
00923 #define mbs_ConstructApproxBSC2d(degree,lastknot,knots,lastpknot,pknots,\
00924 ppoints,ctlpoints) \
00925 mbs_multiConstructApproxBSCd (degree,lastknot,knots,lastpknot,pknots,1,2,0,\
00926 (double*)ppoints,0,(double*)ctlpoints)
00927 #define mbs_ConstructApproxBSC3d(degree,lastknot,knots,lastpknot,pknots,\
00928 ppoints,ctlpoints) \
00929 mbs_multiConstructApproxBSCd (degree,lastknot,knots,lastpknot,pknots,1,3,0,\
00930 (double*)ppoints,0,(double*)ctlpoints)
00931 #define mbs_ConstructApproxBSC4d(degree,lastknot,knots,lastpknot,pknots,\
00932 ppoints,ctlpoints) \
00933 mbs_multiConstructApproxBSCd (degree,lastknot,knots,lastpknot,pknots,1,4,0,\
00934 (double*)ppoints,0,(double*)ctlpoints)
00935
00936
00937 boolean mbs_OsloKnotsCorrectd ( int lastuknot, const double *uknots,
00938 int lastvknot, const double *vknots );
00939
00940 int mbs_BuildOsloMatrixProfiled ( int degree,
00941 int lastuknot, const double *uknots,
00942 int lastvknot, const double *vknots,
00943 bandm_profile *prof );
00944 void mbs_BuildOsloMatrixd ( int degree, int lastuknot, const double *uknots,
00945 const double *vknots,
00946 const bandm_profile *prof, double *a );
00947
00948
00949 void mbs_multiOsloInsertKnotsd ( int ncurves, int spdimen, int degree,
00950 int inlastknot, const double *inknots,
00951 int inpitch, double *inctlpoints,
00952 int outlastknot, const double *outknots,
00953 int outpitch, double *outctlpoints );
00954
00955 void mbs_multiOsloRemoveKnotsLSQd ( int ncurves, int spdimen, int degree,
00956 int inlastknot, const double *inknots,
00957 int inpitch, double *inctlpoints,
00958 int outlastknot, const double *outknots,
00959 int outpitch, double *outctlpoints );
00960
00961
00962 void mbs_multiBSChangeLeftKnotsd ( int ncurves, int spdimen, int degree,
00963 double *knots, int pitch, double *ctlpoints,
00964 double *newknots );
00965
00966 void mbs_multiBSChangeRightKnotsd ( int ncurves, int spdimen, int degree,
00967 int lastknot, double *knots,
00968 int pitch, double *ctlpoints,
00969 double *newknots );
00970
00971 #define mbs_BSChangeLeftKnotsC1d(degree,knots,coeff,newknots) \
00972 mbs_multiBSChangeLeftKnotsd(1,1,degree,knots,0,coeff,newknots)
00973 #define mbs_BSChangeLeftKnotsC2d(degree,knots,ctlpoints,newknots) \
00974 mbs_multiBSChangeLeftKnotsd(1,2,degree,knots,0,(double*)ctlpoints,newknots)
00975 #define mbs_BSChangeLeftKnotsC3d(degree,knots,ctlpoints,newknots) \
00976 mbs_multiBSChangeLeftKnotsd(1,3,degree,knots,0,(double*)ctlpoints,newknots)
00977 #define mbs_BSChangeLeftKnotsC4d(degree,knots,ctlpoints,newknots) \
00978 mbs_multiBSChangeLeftKnotsd(1,4,degree,knots,0,(double*)ctlpoints,newknots)
00979 #define mbs_BSChangeRightKnotsC1d(degree,lastknot,knots,coeff,newknots) \
00980 mbs_multiBSChangeRightKnotsd(1,1,degree,lastknot,knots,0,coeff,newknots)
00981 #define mbs_BSChangeRightKnotsC2d(degree,lastknot,knots,ctlpoints,newknots) \
00982 mbs_multiBSChangeRightKnotsd(1,2,degree,lastknot,knots,0,(double*)ctlpoints,newknots)
00983 #define mbs_BSChangeRightKnotsC3d(degree,lastknot,knots,ctlpoints,newknots) \
00984 mbs_multiBSChangeRightKnotsd(1,3,degree,lastknot,knots,0,(double*)ctlpoints,newknots)
00985 #define mbs_BSChangeRightKnotsC4d(degree,lastknot,knots,ctlpoints,newknots) \
00986 mbs_multiBSChangeRightKnotsd(1,4,degree,lastknot,knots,0,(double*)ctlpoints,newknots)
00987
00988
00989 typedef struct {
00990 boolean closing;
00991 byte spdimen;
00992 short degree;
00993 short lastknot;
00994 double *knots;
00995 double *points;
00996 } polycurved;
00997
00998 typedef struct {
00999 double t;
01000 char sign1, sign2;
01001 } signpoint1d;
01002
01003 int mbs_TrimCVBoundSized ( int nelem, const polycurved *bound );
01004
01005 void *mbs_CompileTrimPatchBoundd ( int nelem, const polycurved *bound,
01006 void *buffer );
01007
01008 void mbs_FindBoundLineIntersectionsd ( const void *bound,
01009 const point2d *p0, double t0,
01010 const point2d* p1, double t1,
01011 signpoint1d *inters, int *ninters );
01012
01013 void mbs_DrawTrimBSPatchDomd ( int degu, int lastuknot, const double *uknots,
01014 int degv, int lastvknot, const double *vknots,
01015 int nelem, const polycurved *bound,
01016 int nu, double au, double bu,
01017 int nv, double av, double bv,
01018 int maxinters,
01019 void (*NotifyLine)(char,int,point2d*,point2d*),
01020 void (*DrawLine)(point2d*,point2d*,int),
01021 void (*DrawCurve)(int,int,const double*) );
01022
01023
01024 boolean mbs_MonotonicPolylined ( int spdimen, int npoints, int pitch,
01025 const double *points, const double *v );
01026
01027 boolean mbs_MonotonicPolylineRd ( int spdimen, int npoints, int pitch,
01028 const double *points, const double *v );
01029
01030
01031 void mbs_RasterizeBC2d ( int degree, const point2d *cpoints,
01032 void (*output)(const xpoint *buf, int n),
01033 boolean outlast );
01034
01035 void mbs_RasterizeBC2Rd ( int degree, const point3d *cpoints,
01036 void (*output)(const xpoint *buf, int n),
01037 boolean outlast );
01038
01039 void mbs_RasterizeBS2d ( int degree, int lastknot, const double *knots,
01040 const point2d *cpoints,
01041 void (*output)(const xpoint *buf, int n),
01042 boolean outlast );
01043
01044 void mbs_RasterizeBS2Rd ( int degree, int lastknot, const double *knots,
01045 const point3d *cpoints,
01046 void (*output)(const xpoint *buf, int n),
01047 boolean outlast );
01048
01049
01050 void mbs_multiInterp2knHermiteBezd ( int ncurves, int spdimen, int degree,
01051 int nlbc, int lbcpitch, const double *lbc,
01052 int nrbc, int rbcpitch, const double *rbc,
01053 int pitch, double *ctlpoints );
01054
01055 void mbs_multiInterp2knHermiteBSd ( int ncurves, int spdimen, int degree,
01056 int lastknot, const double *knots,
01057 int nlbc, int lbcpitch, const double *lbc,
01058 int nrbc, int rbcpitch, const double *rbc,
01059 int pitch, double *ctlpoints );
01060
01061
01062 void mbs_multiFindBezDerivatived ( int degree, int ncurves, int spdimen,
01063 int pitch, const double *ctlpoints,
01064 int dpitch, double *dctlpoints );
01065
01066 #define mbs_FindBezDerivativeC1d(degree,coeff,dcoeff) \
01067 mbs_multiFindBezDerivatived ( degree, 1, 1, 0, coeff, 0, dcoeff )
01068 #define mbs_FindBezDerivativeC2d(degree,ctlpoints,dctlpoints) \
01069 mbs_multiFindBezDerivatived ( degree, 1, 2, 0, (double*)ctlpoints, \
01070 0, (double*)dctlpoints )
01071 #define mbs_FindBezDerivativeC3d(degree,ctlpoints,dctlpoints) \
01072 mbs_multiFindBezDerivatived ( degree, 1, 3, 0, (double*)ctlpoints, \
01073 0, (double*)dctlpoints )
01074 #define mbs_FindBezDerivativeC4d(degree,ctlpoints,dctlpoints) \
01075 mbs_multiFindBezDerivatived ( degree, 1, 4, 0, (double*)ctlpoints, \
01076 0, (double*)dctlpoints )
01077
01078
01079 void mbs_multiFindBSDerivatived ( int degree, int lastknot, const double *knots,
01080 int ncurves, int spdimen,
01081 int pitch, const double *ctlpoints,
01082 int *lastdknot, double *dknots,
01083 int dpitch, double *dctlpoints );
01084
01085 #define mbs_FindBSDerivativeC1d(degree,lastknot,knots,coeff, \
01086 lastdknot,dknots,dcoeff) \
01087 mbs_multiFindBSDerivatived ( degree, lastknot, knots, 1, 1, 0, coeff, \
01088 lastdknot, dknots, 0, dcoeff )
01089 #define mbs_FindBSDerivativeC2d(degree,lastknot,knots,ctlpoints, \
01090 lastdknot,dknots,dctlpoints) \
01091 mbs_multiFindBSDerivatived ( degree, lastknot, knots, 1, 2, 0, \
01092 (double*)ctlpoints, lastdknot, dknots, 0, (double*)dctlpoints )
01093 #define mbs_FindBSDerivativeC3d(degree,lastknot,knots,ctlpoints, \
01094 lastdknot,dknots,dctlpoints) \
01095 mbs_multiFindBSDerivatived ( degree, lastknot, knots, 1, 3, 0, \
01096 (double*)ctlpoints, lastdknot, dknots, 0, (double*)dctlpoints )
01097 #define mbs_FindBSDerivativeC4d(degree,lastknot,knots,ctlpoints, \
01098 lastdknot,dknots,dctlpoints) \
01099 mbs_multiFindBSDerivatived ( degree, lastknot, knots, 1, 4, 0, \
01100 (double*)ctlpoints, lastdknot, dknots, 0, (double*)dctlpoints )
01101
01102
01103 boolean mbs_FindBSCommonKnotSequenced ( int *degree, int *lastknot,
01104 double **knots, int nsequences, ... );
01105 boolean mbs_multiAdjustBSCRepd ( int ncurves, int spdimen,
01106 int indegree, int inlastknot, const double *inknots,
01107 int inpitch, const double *inctlpoints,
01108 int outdegree, int outlastknot, CONST_ double *outknots,
01109 int outpitch, double *outctlpoints );
01110
01111 #define mbs_AdjustBSCRepC1d(indegree,inlastknot,inknots, \
01112 inctlpoints,outdegree,outlastknot,outknots,outctlpoints) \
01113 mbs_multiAdjustBSCRepd (1,1,indegree,inlastknot,inknots,0, \
01114 inctlpoints,outdegree,outlastknot,outknots,0,outctlpoints)
01115 #define mbs_AdjustBSCRepC2d(indegree,inlastknot,inknots, \
01116 inctlpoints,outdegree,outlastknot,outknots,outctlpoints) \
01117 mbs_multiAdjustBSCRepd (1,2,indegree,inlastknot,inknots,0, \
01118 (double*)inctlpoints,outdegree,outlastknot,outknots,0,(double*)outctlpoints)
01119 #define mbs_AdjustBSCRepC3d(indegree,inlastknot,inknots, \
01120 inctlpoints,outdegree,outlastknot,outknots,outctlpoints) \
01121 mbs_multiAdjustBSCRepd (1,3,indegree,inlastknot,inknots,0, \
01122 (double*)inctlpoints,outdegree,outlastknot,outknots,0,(double*)outctlpoints)
01123 #define mbs_AdjustBSCRepC4d(indegree,inlastknot,inknots, \
01124 inctlpoints,outdegree,outlastknot,outknots,outctlpoints) \
01125 mbs_multiAdjustBSCRepd (1,4,indegree,inlastknot,inknots,0, \
01126 (double*)inctlpoints,outdegree,outlastknot,outknots,0,(double*)outctlpoints)
01127
01128
01129 void mbs_multiAddBSCurvesd ( int ncurves, int spdimen,
01130 int degree1, int lastknot1, CONST_ double *knots1,
01131 int pitch1, CONST_ double *ctlpoints1,
01132 int degree2, int lastknot2, CONST_ double *knots2,
01133 int pitch2, CONST_ double *ctlpoints2,
01134 int *sumdeg, int *sumlastknot, double *sumknots,
01135 int sumpitch, double *sumctlpoints );
01136
01137 #define mbs_AddBSCurvesC1d(degree1,lastknot1,knots1,ctlpoints1, \
01138 degree2,lastknot2,knots2,ctlpoints2, \
01139 sumdeg,sumlastknot,sumknots,sumctlpoints) \
01140 mbs_multiAddBSCurvesd (1,1,degree1,lastknot1,knots1,0,ctlpoints1, \
01141 degree2,lastknot2,knots2,0,ctlpoints2, \
01142 sumdeg,sumlastknot,sumknots,0,sumctlpoints)
01143 #define mbs_AddBSCurvesC2d(degree1,lastknot1,knots1,ctlpoints1, \
01144 degree2,lastknot2,knots2,ctlpoints2, \
01145 sumdeg,sumlastknot,sumknots,sumctlpoints) \
01146 mbs_multiAddBSCurvesd (1,2,degree1,lastknot1,knots1,0,(double*)ctlpoints1, \
01147 degree2,lastknot2,knots2,0,(double*)ctlpoints2, \
01148 sumdeg,sumlastknot,sumknots,0,(double*)sumctlpoints)
01149 #define mbs_AddBSCurvesC3d(degree1,lastknot1,knots1,ctlpoints1, \
01150 degree2,lastknot2,knots2,ctlpoints2, \
01151 sumdeg,sumlastknot,sumknots,sumctlpoints) \
01152 mbs_multiAddBSCurvesd (1,3,degree1,lastknot1,knots1,0,(double*)ctlpoints1, \
01153 degree2,lastknot2,knots2,0,(double*)ctlpoints2, \
01154 sumdeg,sumlastknot,sumknots,0,(double*)sumctlpoints)
01155 #define mbs_AddBSCurvesC4d(degree1,lastknot1,knots1,ctlpoints1, \
01156 degree2,lastknot2,knots2,ctlpoints2, \
01157 sumdeg,sumlastknot,sumknots,sumctlpoints) \
01158 mbs_multiAddBSCurvesd (1,4,degree1,lastknot1,knots1,0,(double*)ctlpoints1, \
01159 degree2,lastknot2,knots2,0,(double*)ctlpoints2, \
01160 sumdeg,sumlastknot,sumknots,0,(double*)sumctlpoints)
01161
01162
01163 void mbs_multiSubtractBSCurvesd ( int ncurves, int spdimen,
01164 int degree1, int lastknot1, CONST_ double *knots1,
01165 int pitch1, CONST_ double *ctlpoints1,
01166 int degree2, int lastknot2, CONST_ double *knots2,
01167 int pitch2, CONST_ double *ctlpoints2,
01168 int *sumdeg, int *sumlastknot, double *sumknots,
01169 int sumpitch, double *sumctlpoints );
01170
01171 #define mbs_SubtractBSCurvesC1d(degree1,lastknot1,knots1,ctlpoints1, \
01172 degree2,lastknot2,knots2,ctlpoints2, \
01173 sumdeg,sumlastknot,sumknots,sumctlpoints) \
01174 mbs_multiSubtractBSCurvesd (1,1,degree1,lastknot1,knots1,0,ctlpoints1, \
01175 degree2,lastknot2,knots2,0,ctlpoints2, \
01176 sumdeg,sumlastknot,sumknots,0,sumctlpoints)
01177 #define mbs_SubtractBSCurvesC2d(degree1,lastknot1,knots1,ctlpoints1, \
01178 degree2,lastknot2,knots2,ctlpoints2, \
01179 sumdeg,sumlastknot,sumknots,sumctlpoints) \
01180 mbs_multiSubtractBSCurvesd (1,2,degree1,lastknot1,knots1,0,(double*)ctlpoints1, \
01181 degree2,lastknot2,knots2,0,(double*)ctlpoints2, \
01182 sumdeg,sumlastknot,sumknots,0,(double*)sumctlpoints)
01183 #define mbs_SubtractBSCurvesC3d(degree1,lastknot1,knots1,ctlpoints1, \
01184 degree2,lastknot2,knots2,ctlpoints2, \
01185 sumdeg,sumlastknot,sumknots,sumctlpoints) \
01186 mbs_multiSubtractBSCurvesd (1,3,degree1,lastknot1,knots1,0,(double*)ctlpoints1, \
01187 degree2,lastknot2,knots2,0,(double*)ctlpoints2, \
01188 sumdeg,sumlastknot,sumknots,0,(double*)sumctlpoints)
01189 #define mbs_SubtractBSCurvesC4d(degree1,lastknot1,knots1,ctlpoints1, \
01190 degree2,lastknot2,knots2,ctlpoints2, \
01191 sumdeg,sumlastknot,sumknots,sumctlpoints) \
01192 mbs_multiSubtractBSCurvesd (1,4,degree1,lastknot1,knots1,0,(double*)ctlpoints1, \
01193 degree2,lastknot2,knots2,0,(double*)ctlpoints2, \
01194 sumdeg,sumlastknot,sumknots,0,(double*)sumctlpoints)
01195
01196
01197 boolean mbs_FindPolynomialZerosd ( int degree, const double *coeff,
01198 int *nzeros, double *zeros, double eps );
01199
01200
01201 void mbs_ClipBC2d ( int ncplanes, const vector3d *cplanes,
01202 int degree, const point2d *cpoints,
01203 void (*output) (int degree, const point2d *cpoints) );
01204 void mbs_ClipBC2Rd ( int ncplanes, const vector3d *cplanes,
01205 int degree, const point3d *cpoints,
01206 void (*output) (int degree, const point3d *cpoints) );
01207 void mbs_ClipBC3d ( int ncplanes, const vector4d *cplanes,
01208 int degree, const point3d *cpoints,
01209 void (*output) (int degree, const point3d *cpoints) );
01210 void mbs_ClipBC3Rd ( int ncplanes, const vector4d *cplanes,
01211 int degree, const point4d *cpoints,
01212 void (*output) (int degree, const point4d *cpoints) );
01213
01214
01215
01216 void mbs_BezC1CoonsFindCornersd ( int spdimen,
01217 int degc00, const double *c00,
01218 int degc01, const double *c01,
01219 int degc10, const double *c10,
01220 int degc11, const double *c11,
01221 double *pcorners );
01222 boolean mbs_BezC1CoonsToBezd ( int spdimen,
01223 int degc00, const double *c00,
01224 int degc01, const double *c01,
01225 int degc10, const double *c10,
01226 int degc11, const double *c11,
01227 int degd00, const double *d00,
01228 int degd01, const double *d01,
01229 int degd10, const double *d10,
01230 int degd11, const double *d11,
01231 int *n, int *m, double *p );
01232
01233 void mbs_TabCubicHFuncDer2d ( double a, double b, int nkn, const double *kn,
01234 double *hfunc, double *dhfunc, double *ddhfunc );
01235 void mbs_TabCubicHFuncDer3d ( double a, double b, int nkn, const double *kn,
01236 double *hfunc, double *dhfunc, double *ddhfunc,
01237 double *dddhfunc );
01238 void mbs_TabBezCurveDer2d ( int spdimen, int degree, const double *cp,
01239 int nkn, const double *kn,
01240 int ppitch,
01241 double *p, double *dp, double *ddp );
01242 boolean _mbs_TabBezC1Coonsd ( int spdimen, int nknu, int nknv,
01243 const double *c, const double *d, const double *p,
01244 const double *hu, const double *hv, double *pp );
01245 boolean mbs_TabBezC1CoonsDer2d ( int spdimen,
01246 int nknu, const double *knu, const double *hfuncu,
01247 const double *dhfuncu, const double *ddhfuncu,
01248 int nknv, const double *knv, const double *hfuncv,
01249 const double *dhfuncv, const double *ddhfuncv,
01250 int degc00, const double *c00,
01251 int degc01, const double *c01,
01252 int degc10, const double *c10,
01253 int degc11, const double *c11,
01254 int degd00, const double *d00,
01255 int degd01, const double *d01,
01256 int degd10, const double *d10,
01257 int degd11, const double *d11,
01258 double *p, double *pu, double *pv, double *puu, double *puv, double *pvv );
01259 boolean mbs_TabBezC1CoonsDer3d ( int spdimen,
01260 int nknu, const double *knu, const double *hfuncu,
01261 const double *dhfuncu, const double *ddhfuncu, const double *dddhfuncu,
01262 int nknv, const double *knv, const double *hfuncv,
01263 const double *dhfuncv, const double *ddhfuncv, const double *dddhfuncv,
01264 int degc00, const double *c00,
01265 int degc01, const double *c01,
01266 int degc10, const double *c10,
01267 int degc11, const double *c11,
01268 int degd00, const double *d00,
01269 int degd01, const double *d01,
01270 int degd10, const double *d10,
01271 int degd11, const double *d11,
01272 double *p, double *pu, double *pv, double *puu, double *puv, double *pvv,
01273 double *puuu, double *puuv, double *puvv, double *pvvv );
01274
01275 boolean _mbs_TabBezC1Coons0d (
01276 int spdimen, int nknu, int nknv,
01277 const double *c, const double *d, const double *p,
01278 const double *hu, const double *hv, double *pp );
01279 boolean mbs_TabBezC1Coons0Der2d ( int spdimen,
01280 int nknu, const double *knu, const double *hfuncu,
01281 const double *dhfuncu, const double *ddhfuncu,
01282 int nknv, const double *knv, const double *hfuncv,
01283 const double *dhfuncv, const double *ddhfuncv,
01284 int degc00, const double *c00,
01285 int degc01, const double *c01,
01286 int degd00, const double *d00,
01287 int degd01, const double *d01,
01288 double *p, double *pu, double *pv, double *puu, double *puv, double *pvv );
01289 boolean mbs_TabBezC1Coons0Der3d ( int spdimen,
01290 int nknu, const double *knu, const double *hfuncu,
01291 const double *dhfuncu, const double *ddhfuncu, const double *dddhfuncu,
01292 int nknv, const double *knv, const double *hfuncv,
01293 const double *dhfuncv, const double *ddhfuncv, const double *dddhfuncv,
01294 int degc00, const double *c00,
01295 int degc01, const double *c01,
01296 int degd00, const double *d00,
01297 int degd01, const double *d01,
01298 double *p, double *pu, double *pv, double *puu, double *puv, double *pvv,
01299 double *puuu, double *puuv, double *puvv, double *pvvv );
01300
01301
01302
01303 void mbs_BezC2CoonsFindCornersd ( int spdimen,
01304 int degc00, const double *c00,
01305 int degc01, const double *c01,
01306 int degc02, const double *c02,
01307 int degc10, const double *c10,
01308 int degc11, const double *c11,
01309 int degc12, const double *c12,
01310 double *pcorners );
01311 boolean mbs_BezC2CoonsToBezd ( int spdimen,
01312 int degc00, const double *c00,
01313 int degc01, const double *c01,
01314 int degc02, const double *c02,
01315 int degc10, const double *c10,
01316 int degc11, const double *c11,
01317 int degc12, const double *c12,
01318 int degd00, const double *d00,
01319 int degd01, const double *d01,
01320 int degd02, const double *d02,
01321 int degd10, const double *d10,
01322 int degd11, const double *d11,
01323 int degd12, const double *d12,
01324 int *n, int *m, double *p );
01325 void mbs_TabQuinticHFuncDer3d ( double a, double b, int nkn, const double *kn,
01326 double *hfunc, double *dhfunc,
01327 double *ddhfunc, double *dddhfunc );
01328 void mbs_TabBezCurveDer3d ( int spdimen, int degree, const double *cp,
01329 int nkn, const double *kn,
01330 int ppitch,
01331 double *p, double *dp, double *ddp, double *dddp );
01332 boolean _mbs_TabBezC2Coonsd (
01333 int spdimen, int nknu, int nknv,
01334 const double *c, const double *d, const double *p,
01335 const double *hu, const double *hv, double *pp );
01336
01337 boolean mbs_TabBezC2CoonsDer3d ( int spdimen,
01338 int nknu, const double *knu, const double *hfuncu,
01339 const double *dhfuncu, const double *ddhfuncu, const double *dddhfuncu,
01340 int nknv, const double *knv, const double *hfuncv,
01341 const double *dhfuncv, const double *ddhfuncv, const double *dddhfuncv,
01342 int degc00, const double *c00,
01343 int degc01, const double *c01,
01344 int degc02, const double *c02,
01345 int degc10, const double *c10,
01346 int degc11, const double *c11,
01347 int degc12, const double *c12,
01348 int degd00, const double *d00,
01349 int degd01, const double *d01,
01350 int degd02, const double *d02,
01351 int degd10, const double *d10,
01352 int degd11, const double *d11,
01353 int degd12, const double *d12,
01354 double *p, double *pu, double *pv, double *puu, double *puv, double *pvv,
01355 double *puuu, double *puuv, double *puvv, double *pvvv );
01356
01357 boolean _mbs_TabBezC2Coons0d (
01358 int spdimen, int nknu, int nknv,
01359 const double *c, const double *d, const double *p,
01360 const double *hu, const double *hv, double *pp );
01361 boolean mbs_TabBezC2Coons0Der3d ( int spdimen,
01362 int nknu, const double *knu, const double *hfuncu,
01363 const double *dhfuncu, const double *ddhfuncu, const double *dddhfuncu,
01364 int nknv, const double *knv, const double *hfuncv,
01365 const double *dhfuncv, const double *ddhfuncv, const double *dddhfuncv,
01366 int degc00, const double *c00,
01367 int degc01, const double *c01,
01368 int degc02, const double *c02,
01369 int degd00, const double *d00,
01370 int degd01, const double *d01,
01371 int degd02, const double *d02,
01372 double *p, double *pu, double *pv, double *puu, double *puv, double *pvv,
01373 double *puuu, double *puuv, double *puvv, double *pvvv );
01374
01375
01376
01377
01378 void mbs_BSC1CoonsFindCornersd ( int spdimen,
01379 int degc00, int lastknotc00, const double *knotsc00, const double *c00,
01380 int degc01, int lastknotc01, const double *knotsc01, const double *c01,
01381 int degc10, int lastknotc10, const double *knotsc10, const double *c10,
01382 int degc11, int lastknotc11, const double *knotsc11, const double *c11,
01383 double *pcorners );
01384 boolean mbs_BSC1CoonsToBSd ( int spdimen,
01385 int degc00, int lastknotc00, const double *knotsc00, const double *c00,
01386 int degc01, int lastknotc01, const double *knotsc01, const double *c01,
01387 int degc10, int lastknotc10, const double *knotsc10, const double *c10,
01388 int degc11, int lastknotc11, const double *knotsc11, const double *c11,
01389 int degd00, int lastknotd00, const double *knotsd00, const double *d00,
01390 int degd01, int lastknotd01, const double *knotsd01, const double *d01,
01391 int degd10, int lastknotd10, const double *knotsd10, const double *d10,
01392 int degd11, int lastknotd11, const double *knotsd11, const double *d11,
01393 int *degreeu, int *lastuknot, double *uknots,
01394 int *degreev, int *lastvknot, double *vknots, double *p );
01395
01396 void mbs_TabBSCurveDer2d ( int spdimen, int degree, int lastknot,
01397 const double *knots, const double *cp,
01398 int nkn, const double *kn, int ppitch,
01399 double *p, double *dp, double *ddp );
01400 boolean _mbs_TabBSC1Coonsd ( int spdimen, int nknu, int nknv,
01401 const double *c, const double *d, const double *p,
01402 const double *hu, const double *hv, double *pp );
01403 boolean mbs_TabBSC1CoonsDer2d ( int spdimen,
01404 int nknu, const double *knu, const double *hfuncu,
01405 const double *dhfuncu, const double *ddhfuncu,
01406 int nknv, const double *knv, const double *hfuncv,
01407 const double *dhfuncv, const double *ddhfuncv,
01408 int degc00, int lastknotc00, const double *knotsc00, const double *c00,
01409 int degc01, int lastknotc01, const double *knotsc01, const double *c01,
01410 int degc10, int lastknotc10, const double *knotsc10, const double *c10,
01411 int degc11, int lastknotc11, const double *knotsc11, const double *c11,
01412 int degd00, int lastknotd00, const double *knotsd00, const double *d00,
01413 int degd01, int lastknotd01, const double *knotsd01, const double *d01,
01414 int degd10, int lastknotd10, const double *knotsd10, const double *d10,
01415 int degd11, int lastknotd11, const double *knotsd11, const double *d11,
01416 double *p, double *pu, double *pv, double *puu, double *puv, double *pvv );
01417 boolean mbs_TabBSC1CoonsDer3d ( int spdimen,
01418 int nknu, const double *knu, const double *hfuncu,
01419 const double *dhfuncu, const double *ddhfuncu, const double *dddhfuncu,
01420 int nknv, const double *knv, const double *hfuncv,
01421 const double *dhfuncv, const double *ddhfuncv, const double *dddhfuncv,
01422 int degc00, int lastknotc00, const double *knotsc00, const double *c00,
01423 int degc01, int lastknotc01, const double *knotsc01, const double *c01,
01424 int degc10, int lastknotc10, const double *knotsc10, const double *c10,
01425 int degc11, int lastknotc11, const double *knotsc11, const double *c11,
01426 int degd00, int lastknotd00, const double *knotsd00, const double *d00,
01427 int degd01, int lastknotd01, const double *knotsd01, const double *d01,
01428 int degd10, int lastknotd10, const double *knotsd10, const double *d10,
01429 int degd11, int lastknotd11, const double *knotsd11, const double *d11,
01430 double *p, double *pu, double *pv, double *puu, double *puv, double *pvv,
01431 double *puuu, double *puuv, double *puvv, double *pvvv );
01432
01433 boolean _mbs_TabBSC1Coons0d ( int spdimen, int nknu, int nknv,
01434 const double *c, const double *d, const double *p,
01435 const double *hu, const double *hv, double *pp );
01436 boolean mbs_TabBSC1Coons0Der2d ( int spdimen,
01437 int nknu, const double *knu, const double *hfuncu,
01438 const double *dhfuncu, const double *ddhfuncu,
01439 int nknv, const double *knv, const double *hfuncv,
01440 const double *dhfuncv, const double *ddhfuncv,
01441 int degc00, int lastknotc00, const double *knotsc00, const double *c00,
01442 int degc01, int lastknotc01, const double *knotsc01, const double *c01,
01443 int degd00, int lastknotd00, const double *knotsd00, const double *d00,
01444 int degd01, int lastknotd01, const double *knotsd01, const double *d01,
01445 double *p, double *pu, double *pv, double *puu, double *puv, double *pvv );
01446 boolean mbs_TabBSC1Coons0Der3d ( int spdimen,
01447 int nknu, const double *knu, const double *hfuncu,
01448 const double *dhfuncu, const double *ddhfuncu, const double *dddhfuncu,
01449 int nknv, const double *knv, const double *hfuncv,
01450 const double *dhfuncv, const double *ddhfuncv, const double *dddhfuncv,
01451 int degc00, int lastknotc00, const double *knotsc00, const double *c00,
01452 int degc01, int lastknotc01, const double *knotsc01, const double *c01,
01453 int degd00, int lastknotd00, const double *knotsd00, const double *d00,
01454 int degd01, int lastknotd01, const double *knotsd01, const double *d01,
01455 double *p, double *pu, double *pv, double *puu, double *puv, double *pvv,
01456 double *puuu, double *puuv, double *puvv, double *pvvv );
01457
01458
01459
01460 void mbs_BSC2CoonsFindCornersd ( int spdimen,
01461 int degc00, int lastknotc00, const double *knotsc00, const double *c00,
01462 int degc01, int lastknotc01, const double *knotsc01, const double *c01,
01463 int degc02, int lastknotc02, const double *knotsc02, const double *c02,
01464 int degc10, int lastknotc10, const double *knotsc10, const double *c10,
01465 int degc11, int lastknotc11, const double *knotsc11, const double *c11,
01466 int degc12, int lastknotc12, const double *knotsc12, const double *c12,
01467 double *pcorners );
01468 boolean mbs_BSC2CoonsToBSd ( int spdimen,
01469 int degc00, int lastknotc00, const double *knotsc00, const double *c00,
01470 int degc01, int lastknotc01, const double *knotsc01, const double *c01,
01471 int degc02, int lastknotc02, const double *knotsc02, const double *c02,
01472 int degc10, int lastknotc10, const double *knotsc10, const double *c10,
01473 int degc11, int lastknotc11, const double *knotsc11, const double *c11,
01474 int degc12, int lastknotc12, const double *knotsc12, const double *c12,
01475 int degd00, int lastknotd00, const double *knotsd00, const double *d00,
01476 int degd01, int lastknotd01, const double *knotsd01, const double *d01,
01477 int degd02, int lastknotd02, const double *knotsd02, const double *d02,
01478 int degd10, int lastknotd10, const double *knotsd10, const double *d10,
01479 int degd11, int lastknotd11, const double *knotsd11, const double *d11,
01480 int degd12, int lastknotd12, const double *knotsd12, const double *d12,
01481 int *degreeu, int *lastuknot, double *uknots,
01482 int *degreev, int *lastvknot, double *vknots, double *p );
01483 void mbs_TabBSCurveDer3d ( int spdimen, int degree, int lastknot,
01484 const double *knots, const double *cp,
01485 int nkn, const double *kn, int ppitch,
01486 double *p, double *dp, double *ddp, double *dddp );
01487 boolean _mbs_TabBSC2Coonsd ( int spdimen, int nknu, int nknv,
01488 const double *c, const double *d, const double *p,
01489 const double *hu, const double *hv, double *pp );
01490 boolean mbs_TabBSC2CoonsDer3d ( int spdimen,
01491 int nknu, const double *knu, const double *hfuncu,
01492 const double *dhfuncu, const double *ddhfuncu, const double *dddhfuncu,
01493 int nknv, const double *knv, const double *hfuncv,
01494 const double *dhfuncv, const double *ddhfuncv, const double *dddhfuncv,
01495 int degc00, int lastknotc00, const double *knotsc00, const double *c00,
01496 int degc01, int lastknotc01, const double *knotsc01, const double *c01,
01497 int degc02, int lastknotc02, const double *knotsc02, const double *c02,
01498 int degc10, int lastknotc10, const double *knotsc10, const double *c10,
01499 int degc11, int lastknotc11, const double *knotsc11, const double *c11,
01500 int degc12, int lastknotc12, const double *knotsc12, const double *c12,
01501 int degd00, int lastknotd00, const double *knotsd00, const double *d00,
01502 int degd01, int lastknotd01, const double *knotsd01, const double *d01,
01503 int degd02, int lastknotd02, const double *knotsd02, const double *d02,
01504 int degd10, int lastknotd10, const double *knotsd10, const double *d10,
01505 int degd11, int lastknotd11, const double *knotsd11, const double *d11,
01506 int degd12, int lastknotd12, const double *knotsd12, const double *d12,
01507 double *p, double *pu, double *pv, double *puu, double *puv, double *pvv,
01508 double *puuu, double *puuv, double *puvv, double *pvvv );
01509 boolean _mbs_TabBSC2Coons0d ( int spdimen, int nknu, int nknv,
01510 const double *c, const double *d, const double *p,
01511 const double *hu, const double *hv, double *pp );
01512 boolean mbs_TabBSC2Coons0Der3d ( int spdimen,
01513 int nknu, const double *knu, const double *hfuncu,
01514 const double *dhfuncu, const double *ddhfuncu, const double *dddhfuncu,
01515 int nknv, const double *knv, const double *hfuncv,
01516 const double *dhfuncv, const double *ddhfuncv, const double *dddhfuncv,
01517 int degc00, int lastknotc00, const double *knotsc00, const double *c00,
01518 int degc01, int lastknotc01, const double *knotsc01, const double *c01,
01519 int degc02, int lastknotc02, const double *knotsc02, const double *c02,
01520 int degd00, int lastknotd00, const double *knotsd00, const double *d00,
01521 int degd01, int lastknotd01, const double *knotsd01, const double *d01,
01522 int degd02, int lastknotd02, const double *knotsd02, const double *d02,
01523 double *p, double *pu, double *pv, double *puu, double *puv, double *pvv,
01524 double *puuu, double *puuv, double *puvv, double *pvvv );
01525
01526
01527
01528
01529 void mbs_SphericalProductd (
01530 int degree_eq, int lastknot_eq, const point2d *cpoints_eq,
01531 int degree_mer, int lastknot_mer, const point2d *cpoints_mer,
01532 int pitch, point3d *spr_cp );
01533 void mbs_SphericalProductRd (
01534 int degree_eq, int lastknot_eq, const point3d *cpoints_eq,
01535 int degree_mer, int lastknot_mer, const point3d *cpoints_mer,
01536 int pitch, point4d *spr_cp );
01537
01538
01539
01540 boolean mbs_multiLaneRiesenfeldd ( int spdimen, int ncurves, int degree,
01541 int inlastknot, int inpitch, const double *incp,
01542 int *outlastknot, int outpitch, double *outcp );
01543
01544 #define mbs_LaneRiesenfeldC1d(degree,inlastknot,incp,outlastknot,outcp) \
01545 mbs_multiLaneRiesenfeldd ( 1, 1, degree, inlastknot, 0, incp, \
01546 outlastknot, 0, outcp )
01547 #define mbs_LaneRiesenfeldC2d(degree,inlastknot,incp,outlastknot,outcp) \
01548 mbs_multiLaneRiesenfeldd ( 2, 1, degree, inlastknot, 0, (double*)incp, \
01549 outlastknot, 0, (double*)outcp )
01550 #define mbs_LaneRiesenfeldC3d(degree,inlastknot,incp,outlastknot,outcp) \
01551 mbs_multiLaneRiesenfeldd ( 3, 1, degree, inlastknot, 0, (double*)incp, \
01552 outlastknot, 0, (double*)outcp )
01553 #define mbs_LaneRiesenfeldC4d(degree,inlastknot,incp,outlastknot,outcp) \
01554 mbs_multiLaneRiesenfeldd ( 4, 1, degree, inlastknot, 0, (double*)incp, \
01555 outlastknot, 0, (double*)outcp )
01556
01557
01558 #ifdef __cplusplus
01559 }
01560 #endif
01561
01562 #endif
01563