00001 #ifndef __nurbs_h__
00002 #define __nurbs_h__
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00021 int ay_act_leastSquares(double *Q, int m, int n, int p, int kt,
00022 double **U, double **P);
00023
00026 int ay_act_leastSquaresClosed(double *Q, int m, int n, int p, int kt,
00027 double **U, double **P);
00028
00031 void ay_act_multmatrixmn(int m, int n, double *M1, double *M2, double *R);
00032
00035 int ay_act_solve(int m, int n, int stride, double *A, double *B, double *X);
00036
00039 int ay_act_resize(ay_acurve_object *curve, int new_length);
00040
00043 int ay_act_revert(ay_acurve_object *curve);
00044
00047 int ay_act_getpntfromindex(ay_acurve_object *curve, int index, double **p);
00048
00051 int ay_act_approxtcmd(ClientData clientData, Tcl_Interp *interp,
00052 int argc, char *argv[]);
00053
00056 int ay_act_solveaxbtcmd(ClientData clientData, Tcl_Interp *interp,
00057 int argc, char *argv[]);
00058
00059
00060
00061
00064 double ay_apt_round(double d);
00065
00068 int ay_apt_getpntfromindex(ay_apatch_object *patch, int indexu, int indexv,
00069 double **p);
00070
00073 int ay_apt_swapuv(ay_apatch_object *ap);
00074
00077 void ay_apt_revertu(ay_apatch_object *ap);
00078
00081 void ay_apt_revertv(ay_apatch_object *ap);
00082
00085 int ay_apt_approximateuv(double *cv, int width, int height,
00086 int awidth, int aheight,
00087 int uorder, int vorder,
00088 int uknottype, int vknottype,
00089 int closeu, int closev,
00090 ay_nurbpatch_object **np);
00091
00094 int ay_apt_approximatevu(double *cv, int width, int height,
00095 int awidth, int aheight,
00096 int uorder, int vorder,
00097 int uknottype, int vknottype,
00098 int closeu, int closev,
00099 ay_nurbpatch_object **np);
00100
00103 int ay_apt_approximateu(double *cv, int width, int height,
00104 int awidth,
00105 int uorder, int vorder,
00106 int uknottype, int vknottype,
00107 int closeu, int closev,
00108 ay_nurbpatch_object **np);
00109
00112 int ay_apt_approximatev(double *cv, int width, int height,
00113 int aheight,
00114 int uorder, int vorder,
00115 int uknottype, int vknottype,
00116 int closeu, int closev,
00117 ay_nurbpatch_object **np);
00118
00121 int ay_apt_approxtcmd(ClientData clientData, Tcl_Interp *interp,
00122 int argc, char *argv[]);
00123
00124
00125
00126
00129 void ay_bevelt_parsetags(ay_tag *tag, ay_bparam *params);
00130
00133 int ay_bevelt_addbevels(ay_bparam *bparams, ay_cparam *cparams, ay_object *o,
00134 ay_object **dst);
00135
00138 int ay_bevelt_createc(double radius, ay_object *o1, ay_object *o2,
00139 ay_nurbpatch_object **bevel);
00140
00143 int ay_bevelt_createc3d(double radius, int revert,
00144 ay_object *o1, ay_object *o2,
00145 double *n, int nstride,
00146 double *t, int tstride,
00147 ay_nurbpatch_object **bevel);
00148
00151 int ay_bevelt_createroundtocap(double radius, int revert,
00152 ay_object *o1, double *t, int tstride,
00153 ay_nurbpatch_object **bevel);
00154
00157 int ay_bevelt_createroundtonormal(double radius, int revert, ay_object *o1,
00158 double *nt, int nstride, double *ta, int tstride,
00159 double *mn,
00160 ay_nurbpatch_object **bevel);
00161
00164 int ay_bevelt_findbevelcurve(int index, ay_object **c);
00165
00168 int ay_bevelt_createconcat(int side, ay_object *o, ay_object *c,
00169 ay_object **bevel);
00170
00171
00172
00173
00176 int ay_capt_addcaps(ay_cparam *cparams, ay_bparam *bparams, ay_object *o,
00177 ay_object **dst);
00178
00181 int ay_capt_crtsimplecap(ay_object *c, int mode, double frac, double *mp,
00182 ay_object **cap);
00183
00186 int ay_capt_integrate(ay_object *c, int side, int knottype, ay_object *s);
00187
00190 int ay_capt_crttrimcap(ay_object *c, ay_object **cap);
00191
00194 int ay_capt_crtgordoncap(ay_object *c, ay_object **cap);
00195
00198 void ay_capt_parsetags(ay_tag *tag, ay_cparam *params);
00199
00202 void ay_capt_createtags(ay_object *o, int *caps);
00203
00206 int ay_capt_capnurbpatch(ay_nurbpatch_object *np, int side, double *mpp);
00207
00210 int ay_capt_capstcmd(ClientData clientData, Tcl_Interp *interp,
00211 int argc, char *argv[]);
00212
00213
00214
00215
00218 int ay_ict_interpolateC2C(int length, double sdlen, double edlen,
00219 int param_type,
00220 int have_end_derivs, double *sderiv, double *ederiv,
00221 double *controlv,
00222 ay_nurbcurve_object **c);
00223
00226 int ay_ict_interpolateC2CClosed(int length, double sdlen, double edlen,
00227 int param_type,
00228 int have_end_derivs, double *sderiv, double *ederiv,
00229 double *controlv,
00230 ay_nurbcurve_object **c);
00231
00234 int ay_ict_interpolateG3D(int iorder, int length, double sdlen, double edlen,
00235 int have_end_derivs, int param_type,
00236 double *controlv, double *sderiv, double *ederiv,
00237 ay_nurbcurve_object **c);
00238
00241 int ay_ict_interpolateG3DClosed(int iorder, int length,
00242 double sdlen, double edlen,
00243 int have_end_derivs, int param_type,
00244 double *controlv,
00245 double *sderiv, double *ederiv,
00246 ay_nurbcurve_object **c);
00247
00250 int ay_ict_resize(ay_icurve_object *curve, int new_length);
00251
00254 int ay_ict_revert(ay_icurve_object *curve);
00255
00258 int ay_ict_getpntfromindex(ay_icurve_object *curve, int index, double **p);
00259
00262 int ay_ict_interptcmd(ClientData clientData, Tcl_Interp *interp,
00263 int argc, char *argv[]);
00264
00265
00266
00269 int ay_ipt_getpntfromindex(ay_ipatch_object *patch, int indexu, int indexv,
00270 double **p);
00271
00274 int ay_ipt_swapuv(ay_ipatch_object *ip);
00275
00278 void ay_ipt_revertu(ay_ipatch_object *ip);
00279
00282 void ay_ipt_revertv(ay_ipatch_object *ip);
00283
00286 int ay_ipt_interpolateu(ay_nurbpatch_object *np, int order, int ktype);
00287
00290 int ay_ipt_interpolateud(ay_nurbpatch_object *np, int order, int ktype,
00291 int dmode, double sdlen, double edlen,
00292 double *sd, double *ed);
00293
00296 int ay_ipt_interpolateudc(ay_nurbpatch_object *np, int order, int ktype,
00297 int dmode, double sdlen, double edlen,
00298 double *sd, double *ed);
00299
00302 int ay_ipt_interpolatev(ay_nurbpatch_object *np, int order, int ktype);
00303
00306 int ay_ipt_interpolatevd(ay_nurbpatch_object *np, int order, int ktype,
00307 int dmode, double sdlen, double edlen,
00308 double *sd, double *ed);
00309
00312 int ay_ipt_interpolatevdc(ay_nurbpatch_object *np, int order, int ktype,
00313 int dmode, double sdlen, double edlen,
00314 double *sd, double *ed);
00315
00318 int ay_ipt_interpuvtcmd(ClientData clientData, Tcl_Interp *interp,
00319 int argc, char *argv[]);
00320
00323 int ay_ipt_crtderiv(int mode, ay_ipatch_object *ip);
00324
00325
00326
00327
00330 int ay_knots_createnp(ay_nurbpatch_object *patch);
00331
00334 int ay_knots_createnc(ay_nurbcurve_object *curve);
00335
00338 int ay_knots_check(int length, int order, int knot_count, double *knotv);
00339
00342 void ay_knots_printerr(char *location, int errcode);
00343
00346 int ay_knots_rescaletorange(int n, double *knotv, double rmin, double rmax);
00347
00350 int ay_knots_rescaletomindist(int n, double *knotv, double mindist);
00351
00354 int ay_knots_unify(double *Ua, int Ualen, double *Ub, int Ublen,
00355 double **Ubar, int *Ubarlen);
00356
00359 int ay_knots_mergenc(ay_nurbcurve_object *curve, double *Ubar, int Ubarlen);
00360
00363 int ay_knots_mergenp(ay_nurbpatch_object *patch,
00364 double *Ubar, int Ubarlen, double *Vbar, int Vbarlen);
00365
00368 int ay_knots_getuminmax(ay_object *o, int order, int knots, double *knotv,
00369 double *umin, double *umax);
00370
00373 int ay_knots_getvminmax(ay_object *o, int order, int knots, double *knotv,
00374 double *vmin, double *vmax);
00375
00378 int ay_knots_setuminmax(ay_object *o, double umin, double umax);
00379
00382 int ay_knots_setvminmax(ay_object *o, double vmin, double vmax);
00383
00386 int ay_knots_coarsen(int order, int knotvlen, double *knotv, int count,
00387 double **newknotv);
00388
00391 int ay_knots_chordparam(double *Q, int Qlen, int stride, double **U);
00392
00395 int ay_knots_centriparam(double *Q, int Qlen, int stride, double **U);
00396
00399 int ay_knots_chordparamnp(int dir, double *Q, int width, int height,
00400 int stride, double **U);
00401
00404 int ay_knots_centriparamnp(int dir, double *Q, int width, int height,
00405 int stride, double **U);
00406
00409 int ay_knots_isclamped(unsigned int side, unsigned int order,
00410 double *U, unsigned int Ulen,
00411 double eps);
00412
00415 int ay_knots_classify(unsigned int order, double *U, unsigned int Ulen,
00416 double eps);
00417
00420 int ay_knots_revert(double *U, int ulen);
00421
00424 int ay_knots_getdisc(int Ulen, double *U, int order, int *Udlen, double **Ud);
00425
00428 int ay_knots_remove(unsigned int index, int order, int length, double **U);
00429
00432 int ay_knots_insert(unsigned int index, int order, int length, double **U);
00433
00436 void ay_knots_match(ay_nurbcurve_object *nc, double eps, double *u);
00437
00440 int ay_knots_evalparam(char **fpname, double u, int relative, int length,
00441 int order, double *knotv, double *v);
00442
00445 int ay_knots_isbezierspline(int length, int order, double *U);
00446
00449 int ay_knots_init(Tcl_Interp *interp);
00450
00451
00452
00453
00456 int ay_nb_LUDecompose(int n, double *A, int *pivot);
00457
00460 int ay_nb_LUInvert(int n, double *inv, int *pivot);
00461
00464 int ay_nb_GlobalInterpolation4D(int n, double *Q, double *ub, double *Uc,
00465 int d);
00466
00469 int ay_nb_GlobalInterpolation4DD(int n, double *Q, double *ub, double *Uc,
00470 int d, double *D1, double *D2);
00471
00474 int ay_nb_RemoveKnotCurve4D(int n, int p, double *U, double *Pw, double tol,
00475 int r, int s, int num, double *Ubar, double *Qw);
00476
00479 void ay_nb_Bin(int maxn, int maxk, double *bin);
00480
00483 int ay_nb_DegreeElevateCurve4D(int stride, int n, int p,
00484 double *U, double *Pw,
00485 int t, int *nh, double *Uh, double *Qw);
00486
00489 int ay_nb_SolveTridiagonal(int n, double *Q, double *U, double *P);
00490
00493 int ay_nb_InsertKnotCurve4D(int np, int p, double *UP, double *Pw, double u,
00494 int k, int s, int r, int *nq, double *UQ,
00495 double *Qw);
00496
00499 int ay_nb_InsertKnotCurve3D(int np, int p, double *UP, double *P, double u,
00500 int k, int s, int r, int *nq, double *UQ,
00501 double *Q);
00502
00505 int ay_nb_FindSpan(int n, int p, double u, double *U);
00506
00509 int ay_nb_FindSpanMult(int n, int p, double u, double *U, int *s);
00510
00513 int ay_nb_BasisFuns(int i, double u, int p, double *U, double *N);
00514
00517 void ay_nb_BasisFunsM(int i, double u, int p, double *U, double *N);
00518
00521 int ay_nb_CurvePoint4D(int n, int p, double *U, double *Pw, double u,
00522 double *C);
00523
00526 void ay_nb_CurvePoint4DM(int n, int p, double *U, double *Pw, double u,
00527 double *C);
00528
00531 int ay_nb_CurvePoint3D(int n, int p, double *U, double *P, double u,
00532 double *C);
00533
00536 void ay_nb_CurvePoint3DM(int n, int p, double *U, double *P, double u,
00537 double *C);
00538
00541 int ay_nb_SurfacePoint4D(int n, int m, int p, int q, double *U, double *V,
00542 double *Pw, double u, double v, double *C);
00543
00546 int ay_nb_SurfacePoint3D(int n, int m, int p, int q, double *U, double *V,
00547 double *P, double u, double v, double *C);
00548
00551 void ay_nb_DersBasisFuns(int i, double u, int p, int n, double *U,
00552 double *ders);
00553
00556 void ay_nb_FirstDer3D(int n, int p, double *U, double *P, double u,
00557 double *C1);
00558
00561 void ay_nb_SecondDer3D(int n, int p, double *U, double *P, double u,
00562 double *C2);
00563
00566 void ay_nb_FirstDer4D(int n, int p, double *U, double *Pw, double u,
00567 double *C1);
00568
00571 void ay_nb_SecondDer4D(int n, int p, double *U, double *Pw, double u,
00572 double *C2);
00573
00576 void ay_nb_FirstDerSurf4D(int n, int m, int p, int q, double *U, double *V,
00577 double *Pw, double u, double v, double *C);
00578
00581 int ay_nb_FirstDerSurf4DMSize(int p, int q);
00582
00585 void ay_nb_FirstDerSurf4DM(int n, int m, int p, int q, double *U, double *V,
00586 double *Pw, double u, double v, double *C);
00587
00590 void ay_nb_FirstDerSurf3D(int n, int m, int p, int q, double *U, double *V,
00591 double *P, double u, double v, double *C);
00592
00595 int ay_nb_FirstDerSurf3DMSize(int p, int q);
00596
00599 void ay_nb_FirstDerSurf3DM(int n, int m, int p, int q, double *U, double *V,
00600 double *P, double u, double v, double *C);
00601
00604 void ay_nb_SecondDerSurf3D(int n, int m, int p, int q, double *U, double *V,
00605 double *P, double u, double v, double *C);
00606
00609 void ay_nb_SecondDerSurf4D(int n, int m, int p, int q, double *U, double *V,
00610 double *Pw, double u, double v, double *C);
00611
00614 int ay_nb_CreateNurbsCircleArc(double r, double ths, double the,
00615 int *length, double **knotv, double **controlv);
00616
00619 void ay_nb_RefineKnotVectCurve(int is_rat, int n, int p,
00620 double *U, double *Pw,
00621 double *X, int r, double *Ubar, double *Qw);
00622
00625 int ay_nb_DegreeElevateSurfU4D(int stride, int w, int h, int p, double *U,
00626 double *Pw, int t,
00627 int *nw, double *Uh, double *Qw);
00628
00631 int ay_nb_DegreeElevateSurfV4D(int stride, int w, int h, int q, double *V,
00632 double *Pw, int t,
00633 int *nh, double *Vh, double *Qw);
00634
00637 int ay_nb_RefineKnotVectSurfU(int is_rat, int w, int h, int p, double *U,
00638 double *Pw, double *X, int r,
00639 double *Ubar, double *Qw);
00640
00643 int ay_nb_RefineKnotVectSurfV(int is_rat, int w, int h, int p, double *V,
00644 double *Pw, double *X, int r,
00645 double *Vbar, double *Qw);
00646
00649 int ay_nb_DecomposeCurve(int stride, int n, int p, double *U, double *Pw,
00650 int *nb, double **Qw);
00651
00654 int ay_nb_InsertKnotSurfU(int stride, int w, int h, int p, double *UP,
00655 double *Pw,
00656 double u, int k, int s, int r,
00657 double *UQ, double *Qw);
00658
00661 int ay_nb_InsertKnotSurfV(int stride, int w, int h, int q, double *VP,
00662 double *Pw,
00663 double v, int k, int s, int r,
00664 double *VQ, double *Qw);
00665
00668 int ay_nb_RemoveKnotSurfV(int w, int h, int q, double *V, double *Pw,
00669 double tol,
00670 int r, int s, int num, double *Vbar, double *Qw);
00671
00674 void ay_nb_UnclampCurve(int israt, int n, int p, int s, double *U, double *Pw,
00675 int updateknots);
00676
00679 void ay_nb_UnclampSurfaceU(int israt, int w, int h, int p, int s,
00680 double *U, double *Pw);
00681
00684 void ay_nb_UnclampSurfaceV(int israt, int w, int h, int q, int s,
00685 double *V, double *Pw);
00686
00689 int ay_nb_DegreeReduceCurve4D(int n, int p, double *U, double *Qw, double tol,
00690 int *nh, double *Uh, double *Pw);
00691
00694 int ay_nb_DegreeReduceSurfV(int w, int h, int q, double *V, double *Pw,
00695 double tol, int *nh, double *Vbar, double *Qw);
00696
00699 void ay_nb_MakeOneArc(double *P0, double *T0, double *P2, double *T2, double *P,
00700 double *P1, double *w1);
00701
00704 double ay_nb_InsertControlCurve4D(int n, int p, double *U, double *Pw, int qi,
00705 double *Q);
00706
00707
00708
00711 int ay_nct_create(int order, int length, int knot_type,
00712 double *controlv, double *knotv,
00713 ay_nurbcurve_object **curveptr);
00714
00717 void ay_nct_destroy(ay_nurbcurve_object *curve);
00718
00721 void ay_nct_clearmp(ay_nurbcurve_object *c);
00722
00725 void ay_nct_recreatemp(ay_nurbcurve_object *c);
00726
00729 int ay_nct_collapseselp(ay_object *o);
00730
00733 int ay_nct_explodemp(ay_object *o);
00734
00737 int ay_nct_resize(ay_nurbcurve_object *curve, int new_length);
00738
00741 int ay_nct_close(ay_nurbcurve_object *curve);
00742
00745 int ay_nct_open(ay_nurbcurve_object *curve);
00746
00749 int ay_nct_refinearray(double *Pw, int len, int stride, ay_point *selp,
00750 double **Qw, int *Qwlen);
00751
00754 int ay_nct_revertarr(double *cv, int cvlen, int stride);
00755
00758 int ay_nct_revert(ay_nurbcurve_object *curve);
00759
00762 int ay_nct_refinekn(ay_nurbcurve_object *curve, int maintain_ends,
00763 double *newknotv, int newknotvlen);
00764
00767 int ay_nct_refinecv(ay_nurbcurve_object *curve, ay_point *selp);
00768
00769
00772 int ay_nct_refinekntcmd(ClientData clientData, Tcl_Interp *interp,
00773 int argc, char *argv[]);
00774
00777 int ay_nct_clampperiodic(ay_nurbcurve_object *curve);
00778
00781 int ay_nct_clamp(ay_nurbcurve_object *curve, int side);
00782
00785 int ay_nct_clamptcmd(ClientData clientData, Tcl_Interp *interp,
00786 int argc, char *argv[]);
00787
00790 int ay_nct_elevate(ay_nurbcurve_object *curve, int new_order);
00791
00792
00795 int ay_nct_elevatetcmd(ClientData clientData, Tcl_Interp *interp,
00796 int argc, char *argv[]);
00797
00800 int ay_nct_insertkntcmd(ClientData clientData, Tcl_Interp *interp,
00801 int argc, char *argv[]);
00802
00805 int ay_nct_findu(struct Togl *togl, ay_object *o,
00806 double *winXY, double *worldXYZ, double *u);
00807
00810 int ay_nct_finducb(struct Togl *togl, int argc, char *argv[]);
00811
00814 int ay_nct_split(ay_object *src, double u, int relative, ay_object **result);
00815
00818 int ay_nct_splittcmd(ClientData clientData, Tcl_Interp *interp,
00819 int argc, char *argv[]);
00820
00823 int ay_nct_concatctcmd(ClientData clientData, Tcl_Interp *interp,
00824 int argc, char *argv[]);
00825
00828 int ay_nct_crtncircle(double radius, ay_nurbcurve_object **curve);
00829
00832 int ay_nct_crtncirclearc(double radius, double arc,
00833 ay_nurbcurve_object **curve);
00834
00837 int ay_nct_crtnhcircle(double radius, ay_nurbcurve_object **curve);
00838
00841 int ay_nct_crtncirclefrom3pnts(double *A, double *B, double *C,
00842 ay_nurbcurve_object **ncircle);
00843
00846 int ay_nct_crtncirclearcfrom3pnts(double *A, double *B, double *C,
00847 int keep_cvs,
00848 ay_nurbcurve_object **ncirclearc);
00849
00852 int ay_nct_crtnconicarc(double *p0, double *t0,
00853 double *p2, double *t2,
00854 double *p1, int keep_cvs,
00855 ay_nurbcurve_object **narc);
00856
00859 int ay_nct_crtncircletcmd(ClientData clientData, Tcl_Interp *interp,
00860 int argc, char *argv[]);
00861
00864 int ay_nct_crtnparabola(double ymin, double ymax, double rmax,
00865 ay_nurbcurve_object **curve);
00866
00869 int ay_nct_crtnhyperbola(double ymin, double ymax, double a, double b,
00870 ay_nurbcurve_object **curve);
00871
00874 int ay_nct_crtnparabolatcmd(ClientData clientData, Tcl_Interp *interp,
00875 int argc, char *argv[]);
00876
00879 int ay_nct_crtnconicarctcmd(ClientData clientData, Tcl_Interp *interp,
00880 int argc, char *argv[]);
00881
00884 int ay_nct_crtrecttcmd(ClientData clientData, Tcl_Interp *interp,
00885 int argc, char *argv[]);
00886
00889 int ay_nct_crtcircbspcv(int sections, double radius, double arc, int order,
00890 double **result);
00891
00895 int ay_nct_crtcircbsp(int sections, double radius, double arc, int order,
00896 ay_nurbcurve_object **result);
00897
00900 int ay_nct_crtclosedbsptcmd(ClientData clientData, Tcl_Interp *interp,
00901 int argc, char *argv[]);
00902
00905 int ay_nct_getorientation(ay_nurbcurve_object *curve, int stride,
00906 int report, int plane, double *oangle);
00907
00910 int ay_nct_getorientation3d(ay_nurbcurve_object *curve, int stride,
00911 int report, double *orient);
00912
00915 int ay_nct_getwinding(ay_nurbcurve_object *curve, double *v);
00916
00919 int ay_nct_isclosed(ay_nurbcurve_object *nc);
00920
00923 void ay_nct_settype(ay_nurbcurve_object *nc);
00924
00927 int ay_nct_applytrafo(ay_object *c);
00928
00931 int ay_nct_getpntfromindex(ay_nurbcurve_object *curve, int index, double **p);
00932
00935 void ay_nct_concatobjs(ay_object *o, ay_object **result);
00936
00937
00940 int ay_nct_concatmultiple(int closed, int knot_type, int fillgaps,
00941 ay_object *curves,
00942 ay_object **result);
00943
00946 int ay_nct_fillgap(int order, double tanlen,
00947 ay_nurbcurve_object *c1, ay_nurbcurve_object *c2,
00948 ay_object **result);
00949
00952 int ay_nct_fillgaps(int closed, int order, double tanlen, ay_object *curves);
00953
00956 int ay_nct_arrange(ay_object *o, ay_object *t, int rotate);
00957
00960 int ay_nct_rescaleknvtcmd(ClientData clientData, Tcl_Interp *interp,
00961 int argc, char *argv[]);
00962
00965 double ay_nct_gettorsion(ay_nurbcurve_object *nc, int relative, double u);
00966
00969 double ay_nct_getcurvature(ay_nurbcurve_object *nc, int relative, double u);
00970
00973 int ay_nct_curvplottcmd(ClientData clientData, Tcl_Interp *interp,
00974 int argc, char *argv[]);
00975
00978 int ay_nct_getcurvaturetcmd(ClientData clientData, Tcl_Interp *interp,
00979 int argc, char *argv[]);
00980
00983 int ay_nct_intersect(ay_nurbcurve_object *cu, ay_nurbcurve_object *cv,
00984 double *intersection);
00985
00988 int ay_nct_intersectsets(int ncu, ay_object *cu, int ncv, ay_object *cv,
00989 double *intersections);
00990
00993 int ay_nct_iscompatible(ay_object *curves, int level, int *result);
00994
00997 int ay_nct_makecompatible(ay_object *curves, int level);
00998
01001 int ay_nct_shiftarr(int dir, int stride, int cvlen, double *cv);
01002
01005 int ay_nct_shiftctcmd(ClientData clientData, Tcl_Interp *interp,
01006 int argc, char *argv[]);
01007
01010 int ay_nct_toplane(int plane, int allow_flip, ay_object *c);
01011
01014 int ay_nct_toxytcmd(ClientData clientData, Tcl_Interp *interp,
01015 int argc, char *argv[]);
01016
01019 int ay_nct_iscomptcmd(ClientData clientData, Tcl_Interp *interp,
01020 int argc, char *argv[]);
01021
01024 int ay_nct_makecomptcmd(ClientData clientData, Tcl_Interp *interp,
01025 int argc, char *argv[]);
01026
01029 int ay_nct_israt(ay_nurbcurve_object *curve);
01030
01033 int ay_nct_coarsen(ay_nurbcurve_object *curve, ay_point *selp);
01034
01037 int ay_nct_coarsenarray(double *Pw, int len, int stride, ay_point *selp,
01038 double **Qw, int *Qwlen);
01039
01042 int ay_nct_removesuperfluousknots(ay_nurbcurve_object *nc, double tol);
01043
01046 int ay_nct_removekntcmd(ClientData clientData, Tcl_Interp *interp,
01047 int argc, char *argv[]);
01048
01051 int ay_nct_trimtcmd(ClientData clientData, Tcl_Interp *interp,
01052 int argc, char *argv[]);
01053
01056 int ay_nct_trim(ay_nurbcurve_object **curve, double umin, double umax);
01057
01060 int ay_nct_isdegen(ay_nurbcurve_object *curve);
01061
01064 int ay_nct_offset(ay_object *o, int mode, double offset,
01065 ay_nurbcurve_object **nc);
01066
01069 int ay_nct_cmppnt(const void *p1, const void *p2);
01070
01073 int ay_nct_cmppntp(const void *p1, const void *p2);
01074
01077 int ay_nct_estlen(ay_nurbcurve_object *nc, double *len);
01078
01081 int ay_nct_estlentcmd(ClientData clientData, Tcl_Interp *interp,
01082 int argc, char *argv[]);
01083
01086 int ay_nct_reparamtcmd(ClientData clientData, Tcl_Interp *interp,
01087 int argc, char *argv[]);
01088
01091 int ay_nct_euctohom(ay_nurbcurve_object *nc);
01092
01095 int ay_nct_homtoeuc(ay_nurbcurve_object *nc);
01096
01099 void ay_nct_isplanar(ay_object *c, int allow_flip, ay_object **cp,
01100 int *is_planar);
01101
01104 int ay_nct_unclamptcmd(ClientData clientData, Tcl_Interp *interp,
01105 int argc, char *argv[]);
01106
01109 int ay_nct_extend(ay_nurbcurve_object *curve, double *p);
01110
01113 int ay_nct_extendtcmd(ClientData clientData, Tcl_Interp *interp,
01114 int argc, char *argv[]);
01115
01118 double ay_nct_meandist(int cvlen, int cvastride, double *cva,
01119 int cvbstride, double *cvb);
01120
01123 int ay_nct_shifttominmeandist(int cvlen, int cvstride,
01124 double *cva, double *cvb);
01125
01128 int ay_nct_rotatetominmeandist(int cvlen, int cvstride,
01129 double *cva, double *cvb);
01130
01133 int ay_nct_getcvtangents(ay_nurbcurve_object *nc, double **result);
01134
01137 int ay_nct_computebreakpoints(ay_nurbcurve_object *ncurve);
01138
01141 void ay_nct_drawbreakpoints(ay_nurbcurve_object *ncurve);
01142
01145 void ay_nct_colorfromweight(double w);
01146
01149 int ay_nct_extractnc(ay_object *src, double umin, double umax, int relative,
01150 ay_object **result);
01151
01154 int ay_nct_extractnctcmd(ClientData clientData, Tcl_Interp *interp,
01155 int argc, char *argv[]);
01156
01158 int ay_nct_fair(ay_nurbcurve_object *curve, ay_point *selp, double tol,
01159 int fair_worst);
01160
01162 int ay_nct_fairnctcmd(ClientData clientData, Tcl_Interp *interp,
01163 int argc, char *argv[]);
01164
01167 int ay_nct_tobezierspline(ay_nurbcurve_object *nc);
01168
01171 double ay_nct_dist(ay_nurbcurve_object *nc1, ay_nurbcurve_object *nc2,
01172 int mode);
01173
01175 int ay_nct_distnctcmd(ClientData clientData, Tcl_Interp *interp,
01176 int argc, char *argv[]);
01177
01178
01179
01182 int ay_npt_create(int uorder, int vorder, int width, int height,
01183 int uknot_type, int vknot_type,
01184 double *controlv, double *uknotv, double *vknotv,
01185 ay_nurbpatch_object **patchptr);
01186
01189 void ay_npt_destroy(ay_nurbpatch_object *patch);
01190
01193 int ay_npt_createnpatchobject(ay_object **result);
01194
01197 void ay_npt_resetdisplay(ay_object *o);
01198
01201 int ay_npt_resizearrayw(double **controlvptr, int stride,
01202 int width, int height, int new_width);
01203
01206 int ay_npt_resizew(ay_nurbpatch_object *np, int new_width);
01207
01210 int ay_npt_resizearrayh(double **controlvptr, int stride,
01211 int width, int height, int new_height);
01212
01215 int ay_npt_resizeh(ay_nurbpatch_object *np, int new_height);
01216
01219 int ay_npt_revertu(ay_nurbpatch_object *np);
01220
01223 int ay_npt_revertutcmd(ClientData clientData, Tcl_Interp *interp,
01224 int argc, char *argv[]);
01225
01228 int ay_npt_revertv(ay_nurbpatch_object *np);
01229
01232 int ay_npt_revertvtcmd(ClientData clientData, Tcl_Interp *interp,
01233 int argc, char *argv[]);
01234
01237 int ay_npt_swaparray(double **controlvptr, int stride,
01238 int width, int height);
01239
01242 int ay_npt_swapuv(ay_nurbpatch_object *np);
01243
01246 int ay_npt_drawtrimcurve(ay_object *o, GLUnurbsObj *no, unsigned int refine);
01247
01250 int ay_npt_drawtrimcurves(ay_object *o, unsigned int refine_trims);
01251
01254 void ay_npt_drawhandles(struct Togl *togl, ay_nurbpatch_object *npatch);
01255
01258 void ay_npt_drawrohandles(ay_nurbpatch_object *patch);
01259
01262 int ay_npt_computebreakpoints(ay_nurbpatch_object *npatch);
01263
01266 void ay_npt_drawbreakpoints(ay_nurbpatch_object *npatch);
01267
01270 int ay_npt_crtcobbsphere(ay_nurbpatch_object **cobbsphere);
01271
01274 int ay_npt_crtnsphere(double radius, ay_nurbpatch_object **nsphere);
01275
01278 int ay_npt_crtnparaboloid(double ymin, double ymax, double rmax,
01279 ay_nurbpatch_object **nparab);
01280
01283 int ay_npt_crtnhyperboloid(double ymin, double ymax, double a, double b,
01284 ay_nurbpatch_object **nhyperb);
01285
01288 int ay_npt_crtntorus(double majorradius, double minorradius,
01289 ay_nurbpatch_object **nsphere);
01290
01293 int ay_npt_crtncylinder(double radius, double height,
01294 ay_nurbpatch_object **nsphere);
01295
01298 int ay_npt_crtncone(double radius, double height,
01299 ay_nurbpatch_object **nsphere);
01300
01303 int ay_npt_crtndisk(double radius, ay_nurbpatch_object **nsphere);
01304
01307 int ay_npt_crtncube(double radius, ay_nurbpatch_object **ncube);
01308
01311 int ay_npt_crtnquadtcmd(ClientData clientData, Tcl_Interp *interp,
01312 int argc, char *argv[]);
01313
01316 int ay_npt_crtnsphere2tcmd(ClientData clientData, Tcl_Interp *interp,
01317 int argc, char *argv[]);
01318
01321 int ay_npt_breakintocurvesu(ay_object *o, int apply_trafo,
01322 ay_object **curves, ay_object ***last);
01323
01326 int ay_npt_breakintocurvesv(ay_object *o, int apply_trafo,
01327 ay_object **curves, ay_object ***last);
01328
01331 int ay_npt_breakintocurvestcmd(ClientData clientData, Tcl_Interp *interp,
01332 int argc, char *argv[]);
01333
01336 int ay_npt_buildfromcurves(ay_list_object *curves, int ncurves, int type,
01337 int order, int knot_type, int apply_trafo,
01338 ay_object **patch);
01339
01340
01343 int ay_npt_buildfromcurvestcmd(ClientData clientData, Tcl_Interp *interp,
01344 int argc, char *argv[]);
01345
01348 int ay_npt_fillgap(ay_object *o1, ay_object *o2,
01349 double tanlen, char *uv, ay_object **result);
01350
01353 int ay_npt_setback(ay_object *o1, ay_object *o2, double tanlen, char *uv);
01354
01357 int ay_npt_concat(ay_object *o, int type, int order,
01358 int knot_type, int fillet_type, double ftlen,
01359 int compatible, char *uv, ay_object **result);
01360
01363 int ay_npt_revolve(ay_object *o, double arc, int sections, int order,
01364 ay_nurbpatch_object **revolution);
01365
01368 int ay_npt_swing(ay_object *o1, ay_object *o2,
01369 ay_nurbpatch_object **swing);
01370
01373 int ay_npt_sweep(ay_object *o1, ay_object *o2, ay_object *o3, int sections,
01374 int rotate, int closed, ay_nurbpatch_object **sweep);
01375
01378 int ay_npt_sweepperiodic(ay_object *o1, ay_object *o2, ay_object *o3,
01379 int sections, int rotate,
01380 ay_nurbpatch_object **sweep);
01381
01384 int ay_npt_birail1(ay_object *o1, ay_object *o2, ay_object *o3, int sections,
01385 int closed, ay_nurbpatch_object **birail1);
01386
01389 int ay_npt_birail1periodic(ay_object *o1, ay_object *o2, ay_object *o3,
01390 int sections,
01391 ay_nurbpatch_object **birail1);
01392
01395 int ay_npt_birail2(ay_object *o1, ay_object *o2, ay_object *o3, ay_object *o4,
01396 ay_object *o5,
01397 int sections, int closed, int fullinterpolctrl,
01398 ay_nurbpatch_object **birail2);
01399
01402 int ay_npt_skinu(ay_object *curves, int order, int knot_type,
01403 int interpolate, ay_nurbpatch_object **skin);
01404
01407 int ay_npt_skinv(ay_object *curves, int order, int knot_type,
01408 int interpolate, ay_nurbpatch_object **skin);
01409
01412 int ay_npt_extrude(double height, ay_object *o,
01413 ay_nurbpatch_object **extrusion);
01414
01417 int ay_npt_gettangentfromcontrol2D(int ctype, int n, int p, int stride,
01418 double *P, int a, double *T);
01419
01420
01423 int ay_npt_createcap(double z, ay_nurbcurve_object *curve,
01424 double *ominx, double *omaxx,
01425 double *ominy, double *omaxy,
01426 ay_nurbpatch_object **cap);
01427
01430 int ay_npt_applytrafo(ay_object *p);
01431
01434 int ay_npt_getpntfromindex(ay_nurbpatch_object *patch, int indexu, int indexv,
01435 double **p);
01436
01439 int ay_npt_elevateu(ay_nurbpatch_object *patch, int t, int is_clamped);
01440
01443 int ay_npt_elevatev(ay_nurbpatch_object *patch, int t, int is_clamped);
01444
01447 int ay_npt_elevateuvtcmd(ClientData clientData, Tcl_Interp *interp,
01448 int argc, char *argv[]);
01449
01452 int ay_npt_swapuvtcmd(ClientData clientData, Tcl_Interp *interp,
01453 int argc, char *argv[]);
01454
01457 int ay_npt_gordon(ay_object *cu, ay_object *cv, ay_object *in,
01458 int uorder, int vorder,
01459 ay_nurbpatch_object **gordon);
01460
01463 int ay_npt_dualskin(ay_object *cu, ay_object *cv, ay_object *tc,
01464 int uorder, int vorder,
01465 ay_nurbpatch_object **dskin);
01466
01469 void ay_npt_gordonwc(ay_object *g);
01470
01473 void ay_npt_gordonwct(ay_object *g);
01474
01477 int ay_npt_extractboundary(ay_object *o, int apply_trafo, int extractnt,
01478 double **pvnt, ay_nurbcurve_object **result);
01479
01482 int ay_npt_extracttrim(ay_object *o, int tnum, double param, int apply_trafo,
01483 int extractnt, double **pvnt, ay_nurbcurve_object **result);
01484
01487 int ay_npt_extractnc(ay_object *npatch, int side, double param, int relative,
01488 int apply_trafo, int extractnt,
01489 double **pvnt,
01490 ay_nurbcurve_object **result);
01491
01494 int ay_npt_israt(ay_nurbpatch_object *np);
01495
01498 int ay_npt_isboundcurve(ay_object *o,
01499 double b1, double b2, double b3, double b4,
01500 int *result);
01501
01504 int ay_npt_istrimmed(ay_object *o, int mode);
01505
01508 int ay_npt_closeu(ay_nurbpatch_object *np, int mode);
01509
01512 int ay_npt_closeutcmd(ClientData clientData, Tcl_Interp *interp,
01513 int argc, char *argv[]);
01514
01517 int ay_npt_closev(ay_nurbpatch_object *np, int mode);
01518
01521 int ay_npt_closevtcmd(ClientData clientData, Tcl_Interp *interp,
01522 int argc, char *argv[]);
01523
01526 int ay_npt_openu(ay_nurbpatch_object *np, double offset);
01527
01530 int ay_npt_openv(ay_nurbpatch_object *np, double offset);
01531
01534 int ay_npt_openuvtcmd(ClientData clientData, Tcl_Interp *interp,
01535 int argc, char *argv[]);
01536
01539 int ay_npt_isplanar(ay_nurbpatch_object *np, double *n);
01540
01543 int ay_npt_isclosedu(ay_nurbpatch_object *np);
01544
01547 int ay_npt_isclosedv(ay_nurbpatch_object *np);
01548
01551 void ay_npt_setuvtypes(ay_nurbpatch_object *np, int dir);
01552
01555 void ay_npt_clearmp(ay_nurbpatch_object *np);
01556
01559 void ay_npt_recreatemp(ay_nurbpatch_object *np);
01560
01563 int ay_npt_collapseselp(ay_object *o);
01564
01567 int ay_npt_explodemp(ay_object *o);
01568
01571 int ay_npt_getbeveltags(ay_object *o, int place,
01572 int *has_bevel, int *type, double *radius, int *sense);
01573
01576 int ay_npt_clampu(ay_nurbpatch_object *np, int side);
01577
01580 int ay_npt_clampv(ay_nurbpatch_object *np, int side);
01581
01584 int ay_npt_clampuvtcmd(ClientData clientData, Tcl_Interp *interp,
01585 int argc, char *argv[]);
01586
01589 int ay_npt_rescaletrims(ay_object *trim,
01590 int mode, double omin, double omax,
01591 double nmin, double nmax);
01592
01595 int ay_npt_rescaleknvnptcmd(ClientData clientData, Tcl_Interp *interp,
01596 int argc, char *argv[]);
01597
01600 int ay_npt_insertknutcmd(ClientData clientData, Tcl_Interp *interp,
01601 int argc, char *argv[]);
01602
01605 int ay_npt_insertknvtcmd(ClientData clientData, Tcl_Interp *interp,
01606 int argc, char *argv[]);
01607
01610 int ay_npt_splitu(ay_object *src, double u, int relative, ay_object **result);
01611
01614 int ay_npt_splitv(ay_object *src, double v, int relative, ay_object **result);
01615
01618 int ay_npt_splituvtcmd(ClientData clientData, Tcl_Interp *interp,
01619 int argc, char *argv[]);
01620
01623 int ay_npt_extractnp(ay_object *src, double umin, double umax,
01624 double vmin, double vmax, int relative,
01625 ay_object **result);
01626
01629 int ay_npt_extractnptcmd(ClientData clientData, Tcl_Interp *interp,
01630 int argc, char *argv[]);
01631
01634 int ay_npt_offset(ay_object *o, int mode, double offset,
01635 ay_nurbpatch_object **np);
01636
01639 int ay_npt_finduv(struct Togl *togl, ay_object *o,
01640 double *winXY, double *worldXYZ, double *u, double *v);
01641
01644 int ay_npt_finduvcb(struct Togl *togl, int argc, char *argv[]);
01645
01646
01649 int ay_npt_avglensu(double *cv, int width, int height, int stride,
01650 double **avlens);
01651
01654 int ay_npt_avglensv(double *cv, int width, int height, int stride,
01655 double **avlens);
01656
01659 int ay_npt_concatstcmd(ClientData clientData, Tcl_Interp *interp,
01660 int argc, char *argv[]);
01661
01664 int ay_npt_remknunptcmd(ClientData clientData, Tcl_Interp *interp,
01665 int argc, char *argv[]);
01666
01669 int ay_npt_remknvnptcmd(ClientData clientData, Tcl_Interp *interp,
01670 int argc, char *argv[]);
01671
01674 int ay_npt_removesuperfluousknots(ay_nurbpatch_object *np, double tol);
01675
01678 int ay_npt_remsuknnptcmd(ClientData clientData, Tcl_Interp *interp,
01679 int argc, char *argv[]);
01680
01683 int ay_npt_degreereduce(ay_nurbpatch_object *np, double tol);
01684
01687 int ay_npt_degreereducetcmd(ClientData clientData, Tcl_Interp *interp,
01688 int argc, char *argv[]);
01689
01692 int ay_npt_euctohom(ay_nurbpatch_object *nc);
01693
01696 int ay_npt_homtoeuc(ay_nurbpatch_object *nc);
01697
01700 int ay_npt_refineu(ay_nurbpatch_object *patch,
01701 double *newknotv, int newknotvlen);
01702
01705 int ay_npt_refinev(ay_nurbpatch_object *patch,
01706 double *newknotv, int newknotvlen);
01707
01710 int ay_npt_refineuvtcmd(ClientData clientData, Tcl_Interp *interp,
01711 int argc, char *argv[]);
01712
01715 void ay_npt_gnd(char dir, ay_nurbpatch_object *np, int ij, double *p,
01716 double **dp);
01717
01720 void ay_npt_getcvnormals(ay_nurbpatch_object *np, double *n);
01721
01724 void ay_npt_getcvnormal(ay_nurbpatch_object *np, int i, int j, double *n);
01725
01728 int ay_npt_unclamptcmd(ClientData clientData, Tcl_Interp *interp,
01729 int argc, char *argv[]);
01730
01733 void ay_npt_gentexcoords(ay_nurbpatch_object *np, ay_tag *tags,
01734 double **result);
01735
01738 int ay_npt_iscompatible(ay_object *patches, int side, int level, int *result);
01739
01742 int ay_npt_iscomptcmd(ClientData clientData, Tcl_Interp *interp,
01743 int argc, char *argv[]);
01744
01747 int ay_npt_makecompatible(ay_object *patches, int side, int level);
01748
01751 int ay_npt_makecomptcmd(ClientData clientData, Tcl_Interp *interp,
01752 int argc, char *argv[]);
01753
01756 int ay_npt_isdegen(ay_nurbpatch_object *patch);
01757
01760 int ay_npt_getcurvaturetcmd(ClientData clientData, Tcl_Interp *interp,
01761 int argc, char *argv[]);
01762
01765 int ay_npt_fair(ay_nurbpatch_object *np, ay_point *selp, double tol,
01766 int mode, int worst);
01767
01770 int ay_npt_fairnptcmd(ClientData clientData, Tcl_Interp *interp,
01771 int argc, char *argv[]);
01772
01775 int ay_npt_drawboundaries(struct Togl *togl, ay_object *o);
01776
01779 int ay_npt_pickboundcb(struct Togl *togl, int argc, char *argv[]);
01780
01783 int ay_npt_selectbound(ay_object *o, unsigned int pid, unsigned int bid,
01784 int format);
01785
01788 void ay_npt_deselectbound(ay_object *o, unsigned int pid, unsigned int bid);
01789
01792 int ay_npt_isboundselected(ay_object *o, unsigned int pid, unsigned int bid);
01793
01796 int ay_npt_tgordon(ay_object **curves, int uorder, int vorder,
01797 ay_nurbpatch_object **gordon);
01798
01801 int ay_npt_flashboundcb(struct Togl *togl, int argc, char *argv[]);
01802
01805 int ay_npt_tobeziersplineu(ay_nurbpatch_object *np);
01806
01809 int ay_npt_tobeziersplinev(ay_nurbpatch_object *np);
01810
01811
01812
01813
01816 int ay_pmt_tonpatch(ay_object *o, int btype, ay_object **result);
01817
01820 int ay_pmt_valid(ay_pamesh_object *pamesh);
01821
01824 int ay_pmt_getpntfromindex(ay_pamesh_object *patch, int indexu, int indexv,
01825 double **p);
01826
01829 int ay_pmt_swapuv(ay_pamesh_object *pm);
01830
01833 void ay_pmt_revertu(ay_pamesh_object *pm);
01834
01837 void ay_pmt_revertv(ay_pamesh_object *pm);
01838
01841 int ay_pmt_israt(ay_pamesh_object *pm);
01842
01844 int ay_pmt_tobasistcmd(ClientData clientData, Tcl_Interp *interp,
01845 int argc, char *argv[]);
01846
01848 void ay_pmt_getbasis(int btype, double **result);
01849
01852 void ay_pmt_init();
01853
01854
01855
01856
01859 void ay_stess_destroy(ay_stess_patch *stess);
01860
01863 int ay_stess_GetQF(double gst);
01864
01867 int ay_stess_CurvePoints2D(int n, int p, double *U, double *Pw, int stride,
01868 int is_rat, int qf, int *Clen, double **C);
01869
01872 int ay_stess_CurvePoints3D(int n, int p, double *U, double *Pw, int is_rat,
01873 int qf, int *Clen, double **C);
01874
01877 int ay_stess_SurfacePoints3D(int n, int m, int p, int q, double *U, double *V,
01878 double *P, int qfu, int qfv,
01879 int *Cn, int *Cm, double **C);
01880
01883 int ay_stess_SurfacePoints4D(int n, int m, int p, int q, double *U, double *V,
01884 double *P, int qfu, int qfv,
01885 int *Cn, int *Cm, double **C);
01886
01889 void ay_stess_DrawTrimmedSurface(ay_stess_patch *stess);
01890
01893 void ay_stess_ShadeTrimmedSurface(ay_stess_patch *stess);
01894
01897 int ay_stess_TessTrimCurves(ay_object *o, int qf, int *nt, double ***tt,
01898 int **tl, int **td);
01899
01902 int ay_stess_ReTessTrimCurves(ay_object *o, int qf, int nt, double **tt,
01903 int *tl, double **tp);
01904
01907 int ay_stess_TessTrimmedNP(ay_object *o, int qf, ay_stess_patch *stess);
01908
01911 int ay_stess_TessNP(ay_object *o, int qf, ay_stess_patch *stess);
01912
01915 int ay_stess_topomesh(ay_stess_patch *stess, ay_object **result);
01916
01919 int ay_tess_quadrangulate(ay_object *o, ay_nurbpatch_object *np, double *uv,
01920 char *stname, ay_object **q);
01921
01924 void ay_stess_init(Tcl_Interp *interp);
01925
01926
01927
01928
01931 int ay_tess_checktri(double *p1, double *p2, double *p3);
01932
01935 int ay_tess_npatch(ay_object *o,
01936 int smethod, double sparamu, double sparamv,
01937 int use_tc, char *myst,
01938 int use_vc, char *mycs,
01939 int use_vn, char *myn,
01940 int refine_trims, int primitives, double quad_eps,
01941 ay_object **pm);
01942
01946 int ay_tess_npatchtcmd(ClientData clientData, Tcl_Interp *interp,
01947 int argc, char *argv[]);
01948
01951 int ay_tess_pomeshf(ay_pomesh_object *pomesh,
01952 unsigned int f, unsigned int m, unsigned int n,
01953 int optimize,
01954 ay_pomesh_object **trpomesh);
01955
01958 int ay_tess_pomesh(ay_pomesh_object *pomesh, int optimize, double *normal,
01959 ay_pomesh_object **trpomesh);
01960
01963 int ay_tess_ncurve(ay_nurbcurve_object *ncurve, double tmode, double tparam,
01964 double **verts, int *vertslen);
01965
01966
01969 double ay_rtess_getedgethresh(double tolerance);
01970
01973 int ay_rtess_tessnp(ay_nurbpatch_object *np, int degen, int dice,
01974 double tolerance, ay_object **result);
01975
01976
01979 #endif