00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef lint
00039 static const char RCStree[] = "@(#)$Header: /cvsroot/brlcad/brlcad/src/librt/table.c,v 14.14 2006/09/16 02:04:26 lbutler Exp $ (BRL)";
00040 #endif
00041
00042 #include "common.h"
00043
00044 #include <stdio.h>
00045 #ifdef HAVE_STRING_H
00046 #include <string.h>
00047 #endif
00048 #include <math.h>
00049
00050 #include "tcl.h"
00051
00052 #include "machine.h"
00053 #include "bu.h"
00054 #include "vmath.h"
00055 #include "db.h"
00056 #include "nmg.h"
00057 #include "raytrace.h"
00058 #include "rtgeom.h"
00059 #include "./debug.h"
00060
00061
00062 const struct bu_structparse rt_nul_parse[] = {
00063 {""}
00064 };
00065
00066 #if __STDC__ && !defined(alliant)
00067 # define RT_DECLARE_INTERFACE(name) \
00068 BU_EXTERN(int rt_##name##_prep, (struct soltab *stp, \
00069 struct rt_db_internal *ip, struct rt_i *rtip )); \
00070 BU_EXTERN(int rt_##name##_shot, (struct soltab *stp,\
00071 register struct xray *rp, \
00072 struct application *ap, struct seg *seghead )); \
00073 BU_EXTERN(int rt_##name##_piece_shot, (\
00074 struct rt_piecestate *psp, \
00075 struct rt_piecelist *plp, \
00076 double dist_corr, \
00077 struct xray *rp, \
00078 struct application *ap, \
00079 struct seg *seghead )); \
00080 BU_EXTERN(void rt_##name##_piece_hitsegs, (\
00081 struct rt_piecestate *psp, \
00082 struct seg *seghead, \
00083 struct application *ap)); \
00084 BU_EXTERN(void rt_##name##_print, (const struct soltab *stp)); \
00085 BU_EXTERN(void rt_##name##_norm, (struct hit *hitp, \
00086 struct soltab *stp, struct xray *rp)); \
00087 BU_EXTERN(void rt_##name##_uv, (struct application *ap, \
00088 struct soltab *stp, struct hit *hitp, \
00089 struct uvcoord *uvp)); \
00090 BU_EXTERN(void rt_##name##_curve, (struct curvature *cvp, \
00091 struct hit *hitp, struct soltab *stp)); \
00092 BU_EXTERN(int rt_##name##_class, ()); \
00093 BU_EXTERN(void rt_##name##_free, (struct soltab *stp)); \
00094 BU_EXTERN(int rt_##name##_plot, (struct bu_list *vhead, \
00095 struct rt_db_internal *ip, \
00096 const struct rt_tess_tol *ttol, \
00097 const struct bn_tol *tol)); \
00098 BU_EXTERN(void rt_##name##_vshot, (struct soltab *stp[], \
00099 struct xray *rp[], \
00100 struct seg segp[], int n, struct application *ap )); \
00101 BU_EXTERN(int rt_##name##_tess, (struct nmgregion **r, \
00102 struct model *m, struct rt_db_internal *ip, \
00103 const struct rt_tess_tol *ttol, \
00104 const struct bn_tol *tol)); \
00105 BU_EXTERN(int rt_##name##_tnurb, (struct nmgregion **r, \
00106 struct model *m, struct rt_db_internal *ip, \
00107 const struct bn_tol *tol)); \
00108 BU_EXTERN(int rt_##name##_import5, (struct rt_db_internal *ip, \
00109 const struct bu_external *ep, const mat_t mat, \
00110 const struct db_i *dbip, struct resource *resp, const int minor_type )); \
00111 BU_EXTERN(int rt_##name##_export5, (struct bu_external *ep, \
00112 const struct rt_db_internal *ip, \
00113 double local2mm, const struct db_i *dbip, \
00114 struct resource *resp, \
00115 const int minor_type)); \
00116 BU_EXTERN(int rt_##name##_import, (struct rt_db_internal *ip, \
00117 const struct bu_external *ep, const mat_t mat, \
00118 const struct db_i *dbip, struct resource *resp )); \
00119 BU_EXTERN(int rt_##name##_export, (struct bu_external *ep, \
00120 const struct rt_db_internal *ip, \
00121 double local2mm, const struct db_i *dbip, \
00122 struct resource *resp )); \
00123 BU_EXTERN(void rt_##name##_ifree, (struct rt_db_internal *ip, \
00124 struct resource *resp)); \
00125 BU_EXTERN(int rt_##name##_describe, (struct bu_vls *str, \
00126 const struct rt_db_internal *ip, \
00127 int verbose, \
00128 double mm2local, \
00129 struct resource *resp, \
00130 struct db_i *db_i)); \
00131 BU_EXTERN(int rt_##name##_xform, (struct rt_db_internal *op, \
00132 const mat_t mat, struct rt_db_internal *ip, \
00133 int free, struct db_i *dbip, \
00134 struct resource *resp)); \
00135 extern const struct bu_structparse rt_##name##_parse[];
00136 #else
00137 # define RT_DECLARE_INTERFACE(name) \
00138 BU_EXTERN(int rt_name_prep, (struct soltab *stp, \
00139 struct rt_db_internal *ip, struct rt_i *rtip )); \
00140 BU_EXTERN(int rt_name_shot, (struct soltab *stp, struct xray *rp, \
00141 struct application *ap, struct seg *seghead )); \
00142 BU_EXTERN(int rt_name_piece_shot, (\
00143 struct rt_piecestate *psp, \
00144 struct rt_piecelist *plp, \
00145 double dist_corr, \
00146 struct xray *rp, \
00147 struct application *ap, \
00148 struct seg *seghead )); \
00149 BU_EXTERN(void rt_name_piece_hitsegs, (\
00150 struct rt_piecestate *psp, \
00151 struct seg *seghead, \
00152 struct application *ap)); \
00153 BU_EXTERN(void rt_name_print, (const struct soltab *stp)); \
00154 BU_EXTERN(void rt_name_norm, (struct hit *hitp, \
00155 struct soltab *stp, struct xray *rp)); \
00156 BU_EXTERN(void rt_name_uv, (struct application *ap, \
00157 struct soltab *stp, struct hit *hitp, \
00158 struct uvcoord *uvp)); \
00159 BU_EXTERN(void rt_name_curve, (struct curvature *cvp, \
00160 struct hit *hitp, struct soltab *stp)); \
00161 BU_EXTERN(int rt_name_class, ()); \
00162 BU_EXTERN(void rt_name_free, (struct soltab *stp)); \
00163 BU_EXTERN(int rt_name_plot, (struct bu_list *vhead, \
00164 struct rt_db_internal *ip, \
00165 const struct rt_tess_tol *ttol, \
00166 const struct bn_tol *tol)); \
00167 BU_EXTERN(void rt_name_vshot, (struct soltab *stp[], \
00168 struct xray *rp[], \
00169 struct seg segp[], int n, struct application *ap )); \
00170 BU_EXTERN(int rt_name_tess, (struct nmgregion **r, \
00171 struct model *m, struct rt_db_internal *ip, \
00172 const struct rt_tess_tol *ttol, \
00173 const struct bn_tol *tol)); \
00174 BU_EXTERN(int rt_name_tnurb, (struct nmgregion **r, \
00175 struct model *m, struct rt_db_internal *ip, \
00176 const struct bn_tol *tol)); \
00177 BU_EXTERN(int rt_name_import5, (struct rt_db_internal *ip, \
00178 const struct bu_external *ep, const mat_t mat, \
00179 const struct db_i *dbip, struct resource *resp, const int minor_type )); \
00180 BU_EXTERN(int rt_name_export5, (struct bu_external *ep, \
00181 const struct rt_db_internal *ip, \
00182 double local2mm, const struct db_i *dbip, struct resource *resp, \
00183 const int minor_type )); \
00184 BU_EXTERN(int rt_name_import, (struct rt_db_internal *ip, \
00185 const struct bu_external *ep, const mat_t mat, \
00186 const struct db_i *dbip, struct resource *resp )); \
00187 BU_EXTERN(int rt_name_export, (struct bu_external *ep, \
00188 const struct rt_db_internal *ip, \
00189 double local2mm, const struct db_i *dbip, struct resource *resp )); \
00190 BU_EXTERN(void rt_name_ifree, (struct rt_db_internal *ip, \
00191 struct resource *resp)); \
00192 BU_EXTERN(int rt_name_describe, (struct bu_vls *str, \
00193 const struct rt_db_internal *ip, int verbose, \
00194 double mm2local, struct resource *resp, \
00195 struct db_i *db_i)); \
00196 BU_EXTERN(int rt_name_xform, (struct rt_db_internal *op, \
00197 const mat_t mat, struct rt_db_internal *ip, \
00198 int free, struct db_i *dbip, \
00199 struct resource *resp)); \
00200 extern const struct bu_structparse rt_name_parse[];
00201 #endif
00202
00203
00204 RT_DECLARE_INTERFACE(nul)
00205
00206 #define rt_tor_xform rt_generic_xform
00207 RT_DECLARE_INTERFACE(tor)
00208
00209 #define rt_tgc_xform rt_generic_xform
00210 RT_DECLARE_INTERFACE(tgc)
00211
00212 #define rt_ell_xform rt_generic_xform
00213 RT_DECLARE_INTERFACE(ell)
00214
00215 #define rt_arb_xform rt_generic_xform
00216 RT_DECLARE_INTERFACE(arb)
00217
00218 #define rt_ars_xform rt_generic_xform
00219 RT_DECLARE_INTERFACE(ars)
00220
00221 RT_DECLARE_INTERFACE(hlf)
00222
00223 #define rt_rec_xform rt_generic_xform
00224 RT_DECLARE_INTERFACE(rec)
00225
00226 #define rt_pg_xform rt_generic_xform
00227 RT_DECLARE_INTERFACE(pg)
00228
00229 #define rt_nurb_xform rt_generic_xform
00230 RT_DECLARE_INTERFACE(nurb)
00231
00232 #define rt_sph_xform rt_generic_xform
00233 RT_DECLARE_INTERFACE(sph)
00234
00235 #define rt_ebm_xform rt_generic_xform
00236 RT_DECLARE_INTERFACE(ebm)
00237
00238 #define rt_vol_xform rt_generic_xform
00239 RT_DECLARE_INTERFACE(vol)
00240
00241 #define rt_arbn_xform rt_generic_xform
00242 RT_DECLARE_INTERFACE(arbn)
00243
00244 #define rt_pipe_xform rt_generic_xform
00245 RT_DECLARE_INTERFACE(pipe)
00246
00247 #define rt_part_xform rt_generic_xform
00248 RT_DECLARE_INTERFACE(part)
00249
00250 #define rt_nmg_xform rt_generic_xform
00251 RT_DECLARE_INTERFACE(nmg)
00252
00253 #define rt_rpc_xform rt_generic_xform
00254 RT_DECLARE_INTERFACE(rpc)
00255
00256 #define rt_rhc_xform rt_generic_xform
00257 RT_DECLARE_INTERFACE(rhc)
00258
00259 #define rt_epa_xform rt_generic_xform
00260 RT_DECLARE_INTERFACE(epa)
00261
00262 #define rt_ehy_xform rt_generic_xform
00263 RT_DECLARE_INTERFACE(ehy)
00264
00265 #define rt_eto_xform rt_generic_xform
00266 RT_DECLARE_INTERFACE(eto)
00267
00268 #define rt_grp_xform rt_generic_xform
00269 RT_DECLARE_INTERFACE(grp)
00270
00271 #define rt_hf_xform rt_generic_xform
00272 RT_DECLARE_INTERFACE(hf)
00273
00274 #define rt_dsp_xform rt_generic_xform
00275 RT_DECLARE_INTERFACE(dsp)
00276
00277 #define rt_sketch_xform rt_generic_xform
00278 RT_DECLARE_INTERFACE(sketch)
00279
00280 RT_DECLARE_INTERFACE(extrude)
00281
00282 #define rt_submodel_xform rt_generic_xform
00283 RT_DECLARE_INTERFACE(submodel)
00284
00285 #define rt_cline_xform rt_generic_xform
00286 RT_DECLARE_INTERFACE(cline)
00287
00288 RT_DECLARE_INTERFACE(bot)
00289
00290 #define rt_superell_xform rt_generic_xform
00291 RT_DECLARE_INTERFACE(superell)
00292
00293 #define rt_metaball_xform rt_generic_xform
00294 RT_DECLARE_INTERFACE(metaball)
00295
00296
00297 int rt_comb_export5(
00298 struct bu_external *ep,
00299 const struct rt_db_internal *ip,
00300 double local2mm,
00301 const struct db_i *dbip,
00302 struct resource *resp,
00303 const int minor_type);
00304 int rt_comb_import5(
00305 struct rt_db_internal *ip,
00306 const struct bu_external *ep,
00307 const mat_t mat,
00308 const struct db_i *dbip,
00309 struct resource *resp,
00310 const int minor_type);
00311
00312
00313 BU_EXTERN(int rt_binexpm_import5, (struct rt_db_internal * ip,
00314 const struct bu_external *ep,
00315 const mat_t mat,
00316 const struct db_i *dbip,
00317 struct resource *resp,
00318 const int minor_type));
00319 BU_EXTERN(int rt_binunif_import5, (struct rt_db_internal * ip,
00320 const struct bu_external *ep,
00321 const mat_t mat,
00322 const struct db_i *dbip,
00323 struct resource *resp,
00324 const int minor_type));
00325 BU_EXTERN(int rt_binmime_import5, (struct rt_db_internal * ip,
00326 const struct bu_external *ep,
00327 const mat_t mat,
00328 const struct db_i *dbip,
00329 struct resource *resp,
00330 const int minor_type));
00331
00332 BU_EXTERN(int rt_binexpm_export5, (struct bu_external *ep,
00333 const struct rt_db_internal *ip,
00334 double local2mm,
00335 const struct db_i *dbip,
00336 struct resource *resp,
00337 const int minor_type));
00338
00339 BU_EXTERN(int rt_binunif_export5, (struct bu_external *ep,
00340 const struct rt_db_internal *ip,
00341 double local2mm,
00342 const struct db_i *dbip,
00343 struct resource *resp,
00344 const int minor_type));
00345
00346 BU_EXTERN(void rt_binunif_ifree, (struct rt_db_internal *ip,
00347 struct resource *resp));
00348 BU_EXTERN(int rt_binunif_describe, (struct bu_vls *str,
00349 const struct rt_db_internal *ip, int verbose,
00350 double mm2local, struct resource *resp, struct db_i *db_i));
00351 BU_EXTERN( void rt_binunif_make, (const struct rt_functab *ftp,
00352 struct rt_db_internal *intern,
00353 double diameter ) );
00354 BU_EXTERN( int rt_binunif_tclget, (Tcl_Interp *interp,
00355 const struct rt_db_internal *intern,
00356 const char *attr ) );
00357 BU_EXTERN(int rt_binunif_tcladjust, (Tcl_Interp *interp,
00358 struct rt_db_internal *intern,
00359 int argc,
00360 char **argv,
00361 struct resource *resp ) );
00362
00363
00364 BU_EXTERN(int rt_comb_tclget, (Tcl_Interp *interp,
00365 const struct rt_db_internal *intern, const char *item));
00366 BU_EXTERN(int rt_comb_tcladjust, (Tcl_Interp *interp,
00367 struct rt_db_internal *intern, int argc, char **argv,
00368 struct resource *resp));
00369 BU_EXTERN(int rt_comb_tclform, (const struct rt_functab *ftp,
00370 Tcl_Interp *interp));
00371 BU_EXTERN(void rt_comb_make, (const struct rt_functab *ftp,
00372 struct rt_db_internal *intern, double diameter));
00373
00374
00375 BU_EXTERN(int rt_parsetab_tclget, (Tcl_Interp *interp,
00376 const struct rt_db_internal *intern, const char *attr));
00377 BU_EXTERN(int rt_parsetab_tcladjust, (Tcl_Interp *interp,
00378 struct rt_db_internal *intern, int argc, char **argv,
00379 struct resource *));
00380 BU_EXTERN(int rt_parsetab_tclform, (const struct rt_functab *ftp,
00381 Tcl_Interp *interp));
00382 BU_EXTERN(void rt_generic_make, (const struct rt_functab *ftp,
00383 struct rt_db_internal *intern, double diameter));
00384
00385
00386 BU_EXTERN(int rt_ebm_tclget, (Tcl_Interp *interp,
00387 const struct rt_db_internal *intern, const char *attr));
00388 BU_EXTERN(int rt_ebm_tcladjust, (Tcl_Interp *interp,
00389 struct rt_db_internal *intern, int argc, char **argv,
00390 struct resource *resp));
00391 BU_EXTERN(int rt_ebm_tclform, (const struct rt_functab *ftp,
00392 Tcl_Interp *interp));
00393 BU_EXTERN(void rt_ebm_make, (const struct rt_functab *, struct rt_db_internal *,
00394 double ));
00395
00396
00397 BU_EXTERN(int rt_arbn_tclget, (Tcl_Interp *interp,
00398 const struct rt_db_internal *intern, const char *attr));
00399 BU_EXTERN(int rt_arbn_tcladjust, (Tcl_Interp *interp,
00400 struct rt_db_internal *intern, int argc, char **argv,
00401 struct resource *resp));
00402
00403
00404 BU_EXTERN(int rt_ars_tclget, (Tcl_Interp *interp,
00405 const struct rt_db_internal *intern, const char *attr));
00406 BU_EXTERN(int rt_ars_tcladjust, (Tcl_Interp *interp,
00407 struct rt_db_internal *intern, int argc, char **argv,
00408 struct resource *resp));
00409
00410
00411 extern int rt_dsp_tclget(Tcl_Interp *interp,
00412 const struct rt_db_internal *intern,
00413 const char *attr);
00414
00415 extern int rt_dsp_tcladjust(Tcl_Interp *interp,
00416 struct rt_db_internal *intern,
00417 int argc,
00418 char **argv,
00419 struct resource *resp);
00420 BU_EXTERN(void rt_dsp_make, (const struct rt_functab *, struct rt_db_internal *,
00421 double ));
00422
00423
00424 BU_EXTERN(int rt_pipe_tclget, (Tcl_Interp *interp,
00425 const struct rt_db_internal *intern, const char *attr));
00426 BU_EXTERN(int rt_pipe_tcladjust, (Tcl_Interp *interp,
00427 struct rt_db_internal *intern, int argc, char **argv,
00428 struct resource *resp));
00429
00430
00431 BU_EXTERN(int rt_nurb_tclget, (Tcl_Interp *interp,
00432 const struct rt_db_internal *intern, const char *attr));
00433 BU_EXTERN(int rt_nurb_tcladjust, (Tcl_Interp *interp,
00434 struct rt_db_internal *intern, int argc, char **argv,
00435 struct resource *resp));
00436
00437
00438 BU_EXTERN(int rt_nmg_tclget, (Tcl_Interp *interp,
00439 const struct rt_db_internal *intern, const char *attr));
00440 BU_EXTERN(int rt_nmg_tcladjust, (Tcl_Interp *interp,
00441 struct rt_db_internal *intern, int argc, char **argv,
00442 struct resource *resp));
00443 BU_EXTERN(void rt_nmg_make, (const struct rt_functab *, struct rt_db_internal *,
00444 double ));
00445
00446
00447 BU_EXTERN(int rt_bot_tclget, (Tcl_Interp *interp,
00448 const struct rt_db_internal *intern, const char *attr));
00449 BU_EXTERN(int rt_bot_tcladjust, (Tcl_Interp *interp,
00450 struct rt_db_internal *intern, int argc, char **argv,
00451 struct resource *resp));
00452 BU_EXTERN(int rt_bot_tclform, (const struct rt_functab *ftp, Tcl_Interp *interp));
00453
00454
00455 BU_EXTERN(int rt_sketch_tclget, (Tcl_Interp *interp,
00456 const struct rt_db_internal *intern, const char *attr));
00457 BU_EXTERN(int rt_sketch_tcladjust, (Tcl_Interp *interp,
00458 struct rt_db_internal *intern, int argc, char **argv,
00459 struct resource *resp));
00460 BU_EXTERN(int rt_sketch_tclform, (const struct rt_functab *ftp, Tcl_Interp *interp));
00461
00462
00463 BU_EXTERN(int rt_cline_tclget, (Tcl_Interp *interp,
00464 const struct rt_db_internal *intern, const char *attr));
00465 BU_EXTERN(int rt_cline_tcladjust, (Tcl_Interp *interp,
00466 struct rt_db_internal *intern, int argc, char **argv,
00467 struct resource *resp));
00468 BU_EXTERN(int rt_cline_tclform, (const struct rt_functab *ftp, Tcl_Interp *interp));
00469
00470
00471 BU_EXTERN(int rt_extrude_tclget, (Tcl_Interp *interp,
00472 const struct rt_db_internal *intern, const char *attr));
00473 BU_EXTERN(int rt_extrude_tcladjust, (Tcl_Interp *interp,
00474 struct rt_db_internal *intern, int argc, char **argv,
00475 struct resource *resp));
00476 BU_EXTERN(int rt_extrude_tclform, (const struct rt_functab *ftp, Tcl_Interp *interp));
00477
00478
00479 BU_EXTERN(void rt_vstub, (struct soltab *stp[], struct xray *rp[],
00480 struct seg segp[], int n, struct application *ap ));
00481
00482
00483 BU_EXTERN(int rt_generic_xform, (struct rt_db_internal *op,
00484 const mat_t mat, struct rt_db_internal *ip,
00485 int free, struct db_i *dbip, struct resource *resp));
00486
00487
00488 #if __STDC__
00489 int rt_nul_tclget(Tcl_Interp *interp, const struct rt_db_internal *intern, const char *attr) {
00490 Tcl_AppendResult(interp, "rt_nul_tclget", (char *)NULL);
00491 return TCL_ERROR;
00492 }
00493 int rt_nul_tcladjust(Tcl_Interp *interp, struct rt_db_internal *intern, int argc, char **argv, struct resource *resp) {
00494 RT_CK_RESOURCE(resp);
00495 Tcl_AppendResult(interp, "rt_nul_tcladjust", (char *)NULL);
00496 return TCL_ERROR;
00497 }
00498 int rt_nul_tclform(const struct rt_functab *ftp, Tcl_Interp *interp) {
00499 Tcl_AppendResult(interp, "rt_nul_tclform", (char *)NULL);
00500 return TCL_ERROR;
00501 }
00502 void rt_nul_make(const struct rt_functab *ftp, struct rt_db_internal *intern, double diameter) {
00503 bu_bomb("rt_nul_make invoked\n");
00504 }
00505 #else
00506 int rt_nul_tclget(interp, intern, attr)
00507 Tcl_Interp *interp;
00508 const struct rt_db_internal *intern;
00509 const char *attr;
00510 {
00511 Tcl_AppendResult(interp, "rt_nul_tclget", (char *)NULL);
00512 return TCL_ERROR;
00513 }
00514 int rt_nul_tcladjust(interp, intern, argc, argv)
00515 Tcl_Interp *interp;
00516 struct rt_db_internal *intern;
00517 int argc;
00518 char **argv;
00519 {
00520 Tcl_AppendResult(interp, "rt_nul_tcladjust", (char *)NULL);
00521 return TCL_ERROR;
00522 }
00523 int rt_nul_tclform(ftp, interp)
00524 const struct rt_functab *ftp;
00525 Tcl_Interp *interp;
00526 {
00527 Tcl_AppendResult(interp, "rt_nul_tclform", (char *)NULL);
00528 return TCL_ERROR;
00529 }
00530 void rt_nul_make(ftp, intern, diameter)
00531 const struct rt_functab *ftp;
00532 struct rt_db_internal *intern;
00533 double diameter;
00534 {
00535 bu_bomb("rt_nul_make invoked\n");
00536 }
00537 #endif
00538
00539 const struct rt_functab rt_functab[] = {
00540 {RT_FUNCTAB_MAGIC, "ID_NULL", "NULL",
00541 0,
00542 rt_nul_prep, rt_nul_shot, rt_nul_print, rt_nul_norm,
00543 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00544 rt_nul_uv, rt_nul_curve, rt_nul_class, rt_nul_free,
00545 rt_nul_plot, rt_nul_vshot, rt_nul_tess, rt_nul_tnurb,
00546 rt_nul_import5, rt_nul_export5,
00547 rt_nul_import, rt_nul_export, rt_nul_ifree,
00548 rt_nul_describe,rt_nul_xform, rt_nul_parse,
00549 0, 0,
00550 rt_nul_tclget, rt_nul_tcladjust, rt_nul_tclform,
00551 rt_nul_make,
00552 },
00553
00554 {RT_FUNCTAB_MAGIC, "ID_TOR", "tor",
00555 1,
00556 rt_tor_prep, rt_tor_shot, rt_tor_print, rt_tor_norm,
00557 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00558 rt_tor_uv, rt_tor_curve, rt_tor_class, rt_tor_free,
00559 rt_tor_plot, rt_tor_vshot, rt_tor_tess, rt_nul_tnurb,
00560 rt_tor_import5, rt_tor_export5,
00561 rt_tor_import, rt_tor_export, rt_tor_ifree,
00562 rt_tor_describe,rt_tor_xform, rt_tor_parse,
00563 sizeof(struct rt_tor_internal), RT_TOR_INTERNAL_MAGIC,
00564 rt_parsetab_tclget, rt_parsetab_tcladjust, rt_parsetab_tclform,
00565 NULL,
00566 },
00567
00568 {RT_FUNCTAB_MAGIC, "ID_TGC", "tgc",
00569 1,
00570 rt_tgc_prep, rt_tgc_shot, rt_tgc_print, rt_tgc_norm,
00571 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00572 rt_tgc_uv, rt_tgc_curve, rt_tgc_class, rt_tgc_free,
00573 rt_tgc_plot, rt_tgc_vshot, rt_tgc_tess, rt_tgc_tnurb,
00574 rt_tgc_import5, rt_tgc_export5,
00575 rt_tgc_import, rt_tgc_export, rt_tgc_ifree,
00576 rt_tgc_describe,rt_tgc_xform, rt_tgc_parse,
00577 sizeof(struct rt_tgc_internal), RT_TGC_INTERNAL_MAGIC,
00578 rt_parsetab_tclget, rt_parsetab_tcladjust, rt_parsetab_tclform,
00579 NULL,
00580 },
00581
00582 {RT_FUNCTAB_MAGIC, "ID_ELL", "ell",
00583 1,
00584 rt_ell_prep, rt_ell_shot, rt_ell_print, rt_ell_norm,
00585 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00586 rt_ell_uv, rt_ell_curve, rt_ell_class, rt_ell_free,
00587 rt_ell_plot, rt_ell_vshot, rt_ell_tess, rt_ell_tnurb,
00588 rt_ell_import5, rt_ell_export5,
00589 rt_ell_import, rt_ell_export, rt_ell_ifree,
00590 rt_ell_describe,rt_ell_xform, rt_ell_parse,
00591 sizeof(struct rt_ell_internal), RT_ELL_INTERNAL_MAGIC,
00592 rt_parsetab_tclget, rt_parsetab_tcladjust, rt_parsetab_tclform,
00593 NULL,
00594 },
00595
00596 {RT_FUNCTAB_MAGIC, "ID_ARB8", "arb8",
00597 0,
00598 rt_arb_prep, rt_arb_shot, rt_arb_print, rt_arb_norm,
00599 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00600 rt_arb_uv, rt_arb_curve, rt_arb_class, rt_arb_free,
00601 rt_arb_plot, rt_arb_vshot, rt_arb_tess, rt_arb_tnurb,
00602 rt_arb_import5, rt_arb_export5,
00603 rt_arb_import, rt_arb_export, rt_arb_ifree,
00604 rt_arb_describe,rt_arb_xform, rt_arb_parse,
00605 sizeof(struct rt_arb_internal), RT_ARB_INTERNAL_MAGIC,
00606 rt_parsetab_tclget, rt_parsetab_tcladjust, rt_parsetab_tclform,
00607 NULL,
00608 },
00609
00610 {RT_FUNCTAB_MAGIC, "ID_ARS", "ars",
00611 1,
00612 rt_ars_prep, rt_bot_shot, rt_ars_print, rt_bot_norm,
00613 rt_bot_piece_shot, rt_bot_piece_hitsegs,
00614 rt_ars_uv, rt_bot_curve, rt_bot_class, rt_bot_free,
00615 rt_ars_plot, rt_vstub, rt_ars_tess, rt_nul_tnurb,
00616 rt_ars_import5, rt_ars_export5,
00617 rt_ars_import, rt_ars_export, rt_ars_ifree,
00618 rt_ars_describe,rt_ars_xform, NULL,
00619 sizeof(struct rt_ars_internal), RT_ARS_INTERNAL_MAGIC,
00620 rt_ars_tclget, rt_ars_tcladjust, rt_parsetab_tclform,
00621 NULL,
00622 },
00623
00624 {RT_FUNCTAB_MAGIC, "ID_HALF", "half",
00625 0,
00626 rt_hlf_prep, rt_hlf_shot, rt_hlf_print, rt_hlf_norm,
00627 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00628 rt_hlf_uv, rt_hlf_curve, rt_hlf_class, rt_hlf_free,
00629 rt_hlf_plot, rt_hlf_vshot, rt_hlf_tess, rt_nul_tnurb,
00630 rt_hlf_import5, rt_hlf_export5,
00631 rt_hlf_import, rt_hlf_export, rt_hlf_ifree,
00632 rt_hlf_describe,rt_generic_xform, rt_hlf_parse,
00633 sizeof(struct rt_half_internal), RT_HALF_INTERNAL_MAGIC,
00634 rt_parsetab_tclget, rt_parsetab_tcladjust, rt_parsetab_tclform,
00635 NULL,
00636 },
00637
00638 {RT_FUNCTAB_MAGIC, "ID_REC", "rec",
00639 1,
00640 rt_rec_prep, rt_rec_shot, rt_rec_print, rt_rec_norm,
00641 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00642 rt_rec_uv, rt_rec_curve, rt_rec_class, rt_rec_free,
00643 rt_tgc_plot, rt_rec_vshot, rt_tgc_tess, rt_nul_tnurb,
00644 rt_tgc_import5, rt_tgc_export5,
00645 rt_tgc_import, rt_tgc_export, rt_tgc_ifree,
00646 rt_tgc_describe,rt_rec_xform, rt_tgc_parse,
00647 sizeof(struct rt_tgc_internal), RT_TGC_INTERNAL_MAGIC,
00648 rt_parsetab_tclget, rt_parsetab_tcladjust, rt_parsetab_tclform,
00649 NULL,
00650 },
00651
00652 {RT_FUNCTAB_MAGIC, "ID_POLY", "poly",
00653 1,
00654 rt_pg_prep, rt_pg_shot, rt_pg_print, rt_pg_norm,
00655 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00656 rt_pg_uv, rt_pg_curve, rt_pg_class, rt_pg_free,
00657 rt_pg_plot, rt_vstub, rt_pg_tess, rt_nul_tnurb,
00658 rt_nul_import5, rt_nul_export5,
00659 rt_pg_import, rt_pg_export, rt_pg_ifree,
00660 rt_pg_describe, rt_pg_xform, NULL,
00661 sizeof(struct rt_pg_internal), RT_PG_INTERNAL_MAGIC,
00662 rt_parsetab_tclget, rt_parsetab_tcladjust, rt_parsetab_tclform,
00663 NULL,
00664 },
00665
00666 {RT_FUNCTAB_MAGIC, "ID_BSPLINE", "bspline",
00667 1,
00668 rt_nurb_prep, rt_nurb_shot, rt_nurb_print, rt_nurb_norm,
00669 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00670 rt_nurb_uv, rt_nurb_curve, rt_nurb_class, rt_nurb_free,
00671 rt_nurb_plot, rt_vstub, rt_nurb_tess, rt_nul_tnurb,
00672 rt_nurb_import5, rt_nurb_export5,
00673 rt_nurb_import, rt_nurb_export, rt_nurb_ifree,
00674 rt_nurb_describe,rt_nurb_xform, NULL,
00675 sizeof(struct rt_nurb_internal), RT_NURB_INTERNAL_MAGIC,
00676 rt_nurb_tclget, rt_nurb_tcladjust, rt_parsetab_tclform,
00677 NULL,
00678 },
00679
00680 {RT_FUNCTAB_MAGIC, "ID_SPH", "sph",
00681 0,
00682 rt_sph_prep, rt_sph_shot, rt_sph_print, rt_sph_norm,
00683 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00684 rt_sph_uv, rt_sph_curve, rt_sph_class, rt_sph_free,
00685 rt_ell_plot, rt_sph_vshot, rt_ell_tess, rt_ell_tnurb,
00686 rt_ell_import5, rt_ell_export5,
00687 rt_ell_import, rt_ell_export, rt_ell_ifree,
00688 rt_ell_describe,rt_sph_xform, rt_ell_parse,
00689 sizeof(struct rt_ell_internal), RT_ELL_INTERNAL_MAGIC,
00690 rt_parsetab_tclget, rt_parsetab_tcladjust, rt_parsetab_tclform,
00691 NULL,
00692 },
00693
00694 {RT_FUNCTAB_MAGIC, "ID_NMG", "nmg",
00695 1,
00696 rt_nmg_prep, rt_nmg_shot, rt_nmg_print, rt_nmg_norm,
00697 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00698 rt_nmg_uv, rt_nmg_curve, rt_nmg_class, rt_nmg_free,
00699 rt_nmg_plot, rt_nmg_vshot, rt_nmg_tess, rt_nul_tnurb,
00700 rt_nmg_import5, rt_nmg_export5,
00701 rt_nmg_import, rt_nmg_export, rt_nmg_ifree,
00702 rt_nmg_describe,rt_nmg_xform, NULL,
00703 sizeof(struct model), NMG_MODEL_MAGIC,
00704 rt_nmg_tclget, rt_nmg_tcladjust, rt_parsetab_tclform,
00705 rt_nmg_make,
00706 },
00707
00708 {RT_FUNCTAB_MAGIC, "ID_EBM", "ebm",
00709 1,
00710 rt_ebm_prep, rt_ebm_shot, rt_ebm_print, rt_ebm_norm,
00711 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00712 rt_ebm_uv, rt_ebm_curve, rt_ebm_class, rt_ebm_free,
00713 rt_ebm_plot, rt_vstub, rt_ebm_tess, rt_nul_tnurb,
00714 rt_ebm_import5, rt_ebm_export5,
00715 rt_ebm_import, rt_ebm_export, rt_ebm_ifree,
00716 rt_ebm_describe,rt_ebm_xform, rt_ebm_parse,
00717 sizeof(struct rt_ebm_internal), RT_EBM_INTERNAL_MAGIC,
00718 rt_ebm_tclget, rt_ebm_tcladjust, rt_ebm_tclform,
00719 rt_ebm_make,
00720 },
00721
00722 {RT_FUNCTAB_MAGIC, "ID_VOL", "vol",
00723 1,
00724 rt_vol_prep, rt_vol_shot, rt_vol_print, rt_vol_norm,
00725 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00726 rt_vol_uv, rt_vol_curve, rt_vol_class, rt_vol_free,
00727 rt_vol_plot, rt_vstub, rt_vol_tess, rt_nul_tnurb,
00728 rt_vol_import5, rt_vol_export5,
00729 rt_vol_import, rt_vol_export, rt_vol_ifree,
00730 rt_vol_describe,rt_vol_xform, rt_vol_parse,
00731 sizeof(struct rt_vol_internal), RT_VOL_INTERNAL_MAGIC,
00732 rt_parsetab_tclget, rt_parsetab_tcladjust, rt_parsetab_tclform,
00733 NULL,
00734 },
00735
00736 {RT_FUNCTAB_MAGIC, "ID_ARBN", "arbn",
00737 0,
00738 rt_arbn_prep, rt_arbn_shot, rt_arbn_print, rt_arbn_norm,
00739 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00740 rt_arbn_uv, rt_arbn_curve, rt_arbn_class, rt_arbn_free,
00741 rt_arbn_plot, rt_arbn_vshot, rt_arbn_tess, rt_nul_tnurb,
00742 rt_arbn_import5, rt_arbn_export5,
00743 rt_arbn_import, rt_arbn_export, rt_arbn_ifree,
00744 rt_arbn_describe,rt_arbn_xform, NULL,
00745 sizeof(struct rt_arbn_internal), RT_ARBN_INTERNAL_MAGIC,
00746 rt_arbn_tclget, rt_arbn_tcladjust, rt_parsetab_tclform,
00747 NULL,
00748 },
00749
00750 {RT_FUNCTAB_MAGIC, "ID_PIPE", "pipe",
00751 1,
00752 rt_pipe_prep, rt_pipe_shot, rt_pipe_print, rt_pipe_norm,
00753 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00754 rt_pipe_uv, rt_pipe_curve, rt_pipe_class, rt_pipe_free,
00755 rt_pipe_plot, rt_pipe_vshot, rt_pipe_tess, rt_nul_tnurb,
00756 rt_pipe_import5, rt_pipe_export5,
00757 rt_pipe_import, rt_pipe_export, rt_pipe_ifree,
00758 rt_pipe_describe,rt_pipe_xform, NULL,
00759 sizeof(struct rt_pipe_internal), RT_PIPE_INTERNAL_MAGIC,
00760 rt_pipe_tclget,
00761 rt_pipe_tcladjust,
00762 rt_parsetab_tclform,
00763 NULL,
00764 },
00765
00766 {RT_FUNCTAB_MAGIC, "ID_PARTICLE", "part",
00767 0,
00768 rt_part_prep, rt_part_shot, rt_part_print, rt_part_norm,
00769 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00770 rt_part_uv, rt_part_curve, rt_part_class, rt_part_free,
00771 rt_part_plot, rt_part_vshot, rt_part_tess, rt_nul_tnurb,
00772 rt_part_import5, rt_part_export5,
00773 rt_part_import, rt_part_export, rt_part_ifree,
00774 rt_part_describe,rt_part_xform, rt_part_parse,
00775 sizeof(struct rt_part_internal), RT_PART_INTERNAL_MAGIC,
00776 rt_parsetab_tclget, rt_parsetab_tcladjust, rt_parsetab_tclform,
00777 NULL,
00778 },
00779
00780 {RT_FUNCTAB_MAGIC, "ID_RPC", "rpc",
00781 0,
00782 rt_rpc_prep, rt_rpc_shot, rt_rpc_print, rt_rpc_norm,
00783 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00784 rt_rpc_uv, rt_rpc_curve, rt_rpc_class, rt_rpc_free,
00785 rt_rpc_plot, rt_rpc_vshot, rt_rpc_tess, rt_nul_tnurb,
00786 rt_rpc_import5, rt_rpc_export5,
00787 rt_rpc_import, rt_rpc_export, rt_rpc_ifree,
00788 rt_rpc_describe,rt_rpc_xform, rt_rpc_parse,
00789 sizeof(struct rt_rpc_internal), RT_RPC_INTERNAL_MAGIC,
00790 rt_parsetab_tclget, rt_parsetab_tcladjust, rt_parsetab_tclform,
00791 NULL,
00792 },
00793
00794 {RT_FUNCTAB_MAGIC, "ID_RHC", "rhc",
00795 0,
00796 rt_rhc_prep, rt_rhc_shot, rt_rhc_print, rt_rhc_norm,
00797 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00798 rt_rhc_uv, rt_rhc_curve, rt_rhc_class, rt_rhc_free,
00799 rt_rhc_plot, rt_rhc_vshot, rt_rhc_tess, rt_nul_tnurb,
00800 rt_rhc_import5, rt_rhc_export5,
00801 rt_rhc_import, rt_rhc_export, rt_rhc_ifree,
00802 rt_rhc_describe,rt_rhc_xform, rt_rhc_parse,
00803 sizeof(struct rt_rhc_internal), RT_RHC_INTERNAL_MAGIC,
00804 rt_parsetab_tclget, rt_parsetab_tcladjust, rt_parsetab_tclform,
00805 NULL,
00806 },
00807
00808 {RT_FUNCTAB_MAGIC, "ID_EPA", "epa",
00809 0,
00810 rt_epa_prep, rt_epa_shot, rt_epa_print, rt_epa_norm,
00811 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00812 rt_epa_uv, rt_epa_curve, rt_epa_class, rt_epa_free,
00813 rt_epa_plot, rt_epa_vshot, rt_epa_tess, rt_nul_tnurb,
00814 rt_epa_import5, rt_epa_export5,
00815 rt_epa_import, rt_epa_export, rt_epa_ifree,
00816 rt_epa_describe,rt_epa_xform, rt_epa_parse,
00817 sizeof(struct rt_epa_internal), RT_EPA_INTERNAL_MAGIC,
00818 rt_parsetab_tclget, rt_parsetab_tcladjust, rt_parsetab_tclform,
00819 NULL,
00820 },
00821
00822 {RT_FUNCTAB_MAGIC, "ID_EHY", "ehy",
00823 0,
00824 rt_ehy_prep, rt_ehy_shot, rt_ehy_print, rt_ehy_norm,
00825 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00826 rt_ehy_uv, rt_ehy_curve, rt_ehy_class, rt_ehy_free,
00827 rt_ehy_plot, rt_ehy_vshot, rt_ehy_tess, rt_nul_tnurb,
00828 rt_ehy_import5, rt_ehy_export5,
00829 rt_ehy_import, rt_ehy_export, rt_ehy_ifree,
00830 rt_ehy_describe,rt_ehy_xform, rt_ehy_parse,
00831 sizeof(struct rt_ehy_internal), RT_EHY_INTERNAL_MAGIC,
00832 rt_parsetab_tclget, rt_parsetab_tcladjust, rt_parsetab_tclform,
00833 NULL,
00834 },
00835
00836 {RT_FUNCTAB_MAGIC, "ID_ETO", "eto",
00837 1,
00838 rt_eto_prep, rt_eto_shot, rt_eto_print, rt_eto_norm,
00839 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00840 rt_eto_uv, rt_eto_curve, rt_eto_class, rt_eto_free,
00841 rt_eto_plot, rt_eto_vshot, rt_eto_tess, rt_nul_tnurb,
00842 rt_eto_import5, rt_eto_export5,
00843 rt_eto_import, rt_eto_export, rt_eto_ifree,
00844 rt_eto_describe,rt_eto_xform, rt_eto_parse,
00845 sizeof(struct rt_eto_internal), RT_ETO_INTERNAL_MAGIC,
00846 rt_parsetab_tclget, rt_parsetab_tcladjust, rt_parsetab_tclform,
00847 NULL,
00848 },
00849
00850 {RT_FUNCTAB_MAGIC, "ID_GRIP", "grip",
00851 1,
00852 rt_grp_prep, rt_grp_shot, rt_grp_print, rt_grp_norm,
00853 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00854 rt_grp_uv, rt_grp_curve, rt_grp_class, rt_grp_free,
00855 rt_grp_plot, rt_grp_vshot, rt_grp_tess, rt_nul_tnurb,
00856 rt_grp_import5, rt_grp_export5,
00857 rt_grp_import, rt_grp_export, rt_grp_ifree,
00858 rt_grp_describe,rt_grp_xform, rt_grp_parse,
00859 sizeof(struct rt_grip_internal), RT_GRIP_INTERNAL_MAGIC,
00860 rt_parsetab_tclget, rt_parsetab_tcladjust, rt_parsetab_tclform,
00861 NULL,
00862 },
00863
00864 {RT_FUNCTAB_MAGIC, "ID_JOINT", "joint",
00865 0,
00866 rt_nul_prep, rt_nul_shot, rt_nul_print, rt_nul_norm,
00867 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00868 rt_nul_uv, rt_nul_curve, rt_nul_class, rt_nul_free,
00869 rt_nul_plot, rt_nul_vshot, rt_nul_tess, rt_nul_tnurb,
00870 rt_nul_import5, rt_nul_export5,
00871 rt_nul_import, rt_nul_export, rt_nul_ifree,
00872 rt_nul_describe,rt_nul_xform, NULL,
00873 0, 0,
00874 rt_nul_tclget, rt_nul_tcladjust, rt_nul_tclform,
00875 rt_nul_make,
00876 },
00877
00878 {RT_FUNCTAB_MAGIC, "ID_HF", "hf",
00879 0,
00880 rt_hf_prep, rt_hf_shot, rt_hf_print, rt_hf_norm,
00881 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00882 rt_hf_uv, rt_hf_curve, rt_hf_class, rt_hf_free,
00883 rt_hf_plot, rt_vstub, rt_hf_tess, rt_nul_tnurb,
00884 rt_hf_import5, rt_hf_export5,
00885 rt_hf_import, rt_hf_export, rt_hf_ifree,
00886 rt_hf_describe,rt_hf_xform, rt_hf_parse,
00887 sizeof(struct rt_hf_internal), RT_HF_INTERNAL_MAGIC,
00888 rt_parsetab_tclget, rt_parsetab_tcladjust, rt_parsetab_tclform,
00889 NULL,
00890 },
00891
00892 {RT_FUNCTAB_MAGIC, "ID_DSP", "dsp",
00893 1,
00894 rt_dsp_prep, rt_dsp_shot, rt_dsp_print, rt_dsp_norm,
00895 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00896 rt_dsp_uv, rt_dsp_curve, rt_dsp_class, rt_dsp_free,
00897 rt_dsp_plot, rt_vstub, rt_nul_tess, rt_nul_tnurb,
00898 rt_dsp_import5, rt_dsp_export5,
00899 rt_dsp_import, rt_dsp_export, rt_dsp_ifree,
00900 rt_dsp_describe,rt_dsp_xform, rt_dsp_parse,
00901 sizeof(struct rt_dsp_internal), RT_DSP_INTERNAL_MAGIC,
00902 rt_dsp_tclget, rt_dsp_tcladjust, rt_nul_tclform,
00903 rt_dsp_make,
00904 },
00905
00906 {RT_FUNCTAB_MAGIC, "ID_SKETCH", "sketch",
00907 0,
00908 rt_sketch_prep, rt_sketch_shot, rt_sketch_print, rt_sketch_norm,
00909 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00910 rt_sketch_uv, rt_sketch_curve, rt_sketch_class,rt_sketch_free,
00911 rt_sketch_plot, rt_vstub, rt_nul_tess, rt_nul_tnurb,
00912 rt_sketch_import5, rt_sketch_export5,
00913 rt_sketch_import, rt_sketch_export, rt_sketch_ifree,
00914 rt_sketch_describe,rt_sketch_xform, NULL,
00915 sizeof(struct rt_sketch_internal), RT_SKETCH_INTERNAL_MAGIC,
00916 rt_sketch_tclget, rt_sketch_tcladjust, rt_sketch_tclform,
00917 NULL,
00918 },
00919
00920 {RT_FUNCTAB_MAGIC, "ID_EXTRUDE", "extrude",
00921 1,
00922 rt_extrude_prep, rt_extrude_shot, rt_extrude_print, rt_extrude_norm,
00923 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00924 rt_extrude_uv, rt_extrude_curve, rt_extrude_class, rt_extrude_free,
00925 rt_extrude_plot, rt_extrude_vshot, rt_extrude_tess, rt_nul_tnurb,
00926 rt_extrude_import5, rt_extrude_export5,
00927 rt_extrude_import, rt_extrude_export, rt_extrude_ifree,
00928 rt_extrude_describe,rt_extrude_xform, NULL,
00929 sizeof(struct rt_extrude_internal), RT_EXTRUDE_INTERNAL_MAGIC,
00930 rt_extrude_tclget, rt_extrude_tcladjust, rt_extrude_tclform,
00931 NULL,
00932 },
00933
00934 {RT_FUNCTAB_MAGIC, "ID_SUBMODEL", "submodel",
00935 1,
00936 rt_submodel_prep, rt_submodel_shot, rt_submodel_print, rt_submodel_norm,
00937 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00938 rt_submodel_uv, rt_submodel_curve, rt_submodel_class, rt_submodel_free,
00939 rt_submodel_plot, rt_vstub, rt_submodel_tess, rt_nul_tnurb,
00940 rt_submodel_import5, rt_submodel_export5,
00941 rt_submodel_import, rt_submodel_export, rt_submodel_ifree,
00942 rt_submodel_describe, rt_submodel_xform, rt_submodel_parse,
00943 sizeof(struct rt_submodel_internal), RT_SUBMODEL_INTERNAL_MAGIC,
00944 rt_parsetab_tclget, rt_parsetab_tcladjust, rt_parsetab_tclform,
00945 NULL,
00946 },
00947
00948 {RT_FUNCTAB_MAGIC, "ID_CLINE", "cline",
00949 0,
00950 rt_cline_prep, rt_cline_shot, rt_cline_print, rt_cline_norm,
00951 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00952 rt_cline_uv, rt_cline_curve, rt_cline_class, rt_cline_free,
00953 rt_cline_plot, rt_cline_vshot, rt_cline_tess, rt_cline_tnurb,
00954 rt_cline_import5, rt_cline_export5,
00955 rt_cline_import, rt_cline_export, rt_cline_ifree,
00956 rt_cline_describe,rt_cline_xform, rt_cline_parse,
00957 sizeof(struct rt_cline_internal), RT_CLINE_INTERNAL_MAGIC,
00958 rt_cline_tclget, rt_cline_tcladjust, rt_cline_tclform,
00959 NULL,
00960 },
00961
00962 {RT_FUNCTAB_MAGIC, "ID_BOT", "bot",
00963 0,
00964 rt_bot_prep, rt_bot_shot, rt_bot_print, rt_bot_norm,
00965 rt_bot_piece_shot, rt_bot_piece_hitsegs,
00966 rt_bot_uv, rt_bot_curve, rt_bot_class, rt_bot_free,
00967 rt_bot_plot, rt_bot_vshot, rt_bot_tess, rt_bot_tnurb,
00968 rt_bot_import5, rt_bot_export5,
00969 rt_bot_import, rt_bot_export, rt_bot_ifree,
00970 rt_bot_describe,rt_bot_xform, NULL,
00971 sizeof(struct rt_bot_internal), RT_BOT_INTERNAL_MAGIC,
00972 rt_bot_tclget, rt_bot_tcladjust, rt_bot_tclform,
00973 NULL,
00974 },
00975
00976
00977
00978 {RT_FUNCTAB_MAGIC, "ID_COMBINATION", "comb",
00979 0,
00980 rt_nul_prep, rt_nul_shot, rt_nul_print, rt_nul_norm,
00981 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00982 rt_nul_uv, rt_nul_curve, rt_nul_class, rt_nul_free,
00983 rt_nul_plot, rt_nul_vshot, rt_nul_tess, rt_nul_tnurb,
00984 rt_comb_import5, rt_comb_export5,
00985 rt_comb_import4, rt_comb_export4, rt_comb_ifree,
00986 rt_comb_describe,rt_generic_xform, NULL,
00987 0, 0,
00988 rt_comb_tclget, rt_comb_tcladjust, rt_comb_tclform,
00989 rt_comb_make,
00990 },
00991
00992 {RT_FUNCTAB_MAGIC, "ID_BINEXPM", "binexpm",
00993 0,
00994 rt_nul_prep, rt_nul_shot, rt_nul_print, rt_nul_norm,
00995 rt_nul_piece_shot, rt_nul_piece_hitsegs,
00996 rt_nul_uv, rt_nul_curve, rt_nul_class, rt_nul_free,
00997 rt_nul_plot, rt_nul_vshot, rt_nul_tess, rt_nul_tnurb,
00998 rt_binexpm_import5,
00999 rt_nul_export5,
01000 rt_nul_import, rt_nul_export, rt_nul_ifree,
01001 rt_nul_describe,rt_generic_xform, NULL,
01002 0, 0,
01003 rt_nul_tclget, rt_nul_tcladjust, rt_nul_tclform,
01004 rt_nul_make,
01005 },
01006
01007 {RT_FUNCTAB_MAGIC, "ID_BINUNIF", "binunif",
01008 0,
01009 rt_nul_prep, rt_nul_shot, rt_nul_print, rt_nul_norm,
01010 rt_nul_piece_shot, rt_nul_piece_hitsegs,
01011 rt_nul_uv, rt_nul_curve, rt_nul_class, rt_nul_free,
01012 rt_nul_plot, rt_nul_vshot, rt_nul_tess, rt_nul_tnurb,
01013 rt_binunif_import5,
01014 rt_binunif_export5,
01015 rt_nul_import, rt_nul_export, rt_binunif_ifree,
01016 rt_binunif_describe, rt_generic_xform, NULL,
01017 0, 0,
01018 rt_binunif_tclget, rt_binunif_tcladjust, rt_nul_tclform,
01019 rt_binunif_make,
01020 },
01021
01022 {RT_FUNCTAB_MAGIC, "ID_BINMIME", "binmime",
01023 0,
01024 rt_nul_prep, rt_nul_shot, rt_nul_print, rt_nul_norm,
01025 rt_nul_piece_shot, rt_nul_piece_hitsegs,
01026 rt_nul_uv, rt_nul_curve, rt_nul_class, rt_nul_free,
01027 rt_nul_plot, rt_nul_vshot, rt_nul_tess, rt_nul_tnurb,
01028 rt_binmime_import5, rt_nul_export5,
01029 rt_nul_import, rt_nul_export, rt_nul_ifree,
01030 rt_nul_describe,rt_generic_xform, NULL,
01031 0, 0,
01032 rt_nul_tclget, rt_nul_tcladjust, rt_nul_tclform,
01033 rt_nul_make,
01034 },
01035
01036 {RT_FUNCTAB_MAGIC, "ID_SUPERELL", "superell",
01037 1,
01038 rt_superell_prep, rt_superell_shot, rt_superell_print, rt_superell_norm,
01039 rt_nul_piece_shot, rt_nul_piece_hitsegs,
01040 rt_superell_uv, rt_superell_curve, rt_superell_class, rt_superell_free,
01041 rt_superell_plot, rt_superell_vshot, rt_superell_tess, rt_superell_tnurb,
01042 rt_superell_import5, rt_superell_export5,
01043 rt_superell_import, rt_superell_export, rt_superell_ifree,
01044 rt_superell_describe,rt_superell_xform, rt_superell_parse,
01045 sizeof(struct rt_superell_internal), RT_SUPERELL_INTERNAL_MAGIC,
01046 rt_parsetab_tclget, rt_parsetab_tcladjust, rt_parsetab_tclform,
01047 NULL,
01048 },
01049
01050 {RT_FUNCTAB_MAGIC, "ID_METABALL", "metaball",
01051 1,
01052 rt_metaball_prep, rt_metaball_shot, rt_metaball_print, rt_metaball_norm,
01053 rt_nul_piece_shot, rt_nul_piece_hitsegs,
01054 rt_metaball_uv, rt_metaball_curve, rt_metaball_class, rt_metaball_free,
01055 rt_metaball_plot, rt_nul_vshot, rt_metaball_tess, rt_metaball_tnurb,
01056 rt_metaball_import5, rt_metaball_export5,
01057 rt_nul_import, rt_nul_export, rt_metaball_ifree,
01058 rt_metaball_describe, rt_metaball_xform, rt_nul_parse,
01059 sizeof(struct rt_metaball_internal), RT_METABALL_INTERNAL_MAGIC,
01060 rt_parsetab_tclget, rt_parsetab_tcladjust, rt_parsetab_tclform,
01061 NULL,
01062 },
01063
01064 {0L, ">ID_MAXIMUM", ">id_max",
01065 0,
01066 rt_nul_prep, rt_nul_shot, rt_nul_print, rt_nul_norm,
01067 rt_nul_piece_shot, rt_nul_piece_hitsegs,
01068 rt_nul_uv, rt_nul_curve, rt_nul_class, rt_nul_free,
01069 rt_nul_plot, rt_nul_vshot, rt_nul_tess, rt_nul_tnurb,
01070 rt_nul_import5, rt_nul_export5,
01071 rt_nul_import, rt_nul_export, rt_nul_ifree,
01072 rt_nul_describe,rt_nul_xform, NULL,
01073 0, 0,
01074 rt_nul_tclget, rt_nul_tcladjust, rt_nul_tclform,
01075 rt_nul_make,
01076 }
01077 };
01078 const int rt_nfunctab = sizeof(rt_functab)/sizeof(struct rt_functab);
01079
01080
01081
01082
01083 #if __STDC__
01084 #define DEF(func,args) func BU_ARGS(args) { \
01085 bu_log(#func " unimplemented\n"); return; }
01086 #define IDEF(func,args) func BU_ARGS(args) { \
01087 bu_log(#func " unimplemented\n"); return(0); }
01088 #define NDEF(func,args) func BU_ARGS(args) { \
01089 bu_log(#func " unimplemented\n"); return(-1); }
01090 #else
01091 #define DEF(func,args) func BU_ARGS(args) { \
01092 bu_log("func unimplemented\n"); return; }
01093 #define IDEF(func,args) func BU_ARGS(args) { \
01094 bu_log("func unimplemented\n"); return(0); }
01095 #define NDEF(func,args) func BU_ARGS(args) { \
01096 bu_log("func unimplemented\n"); return(-1); }
01097 #endif
01098
01099 int IDEF(rt_nul_prep,(struct soltab *stp,
01100 struct rt_db_internal *ip,
01101 struct rt_i *rtip))
01102 int IDEF(rt_nul_shot,(struct soltab *stp,
01103 struct xray *rp,
01104 struct application *ap,
01105 struct seg *seghead))
01106 int IDEF(rt_nul_piece_shot,(struct rt_piecestate *psp,
01107 struct rt_piecelist *plp,
01108 double dist_corr,
01109 struct xray *rp,
01110 struct application *ap,
01111 struct seg *seghead))
01112 void DEF(rt_nul_piece_hitsegs,(struct rt_piecestate *psp,
01113 struct seg *seghead,
01114 struct application *ap))
01115 void DEF(rt_nul_print,(const struct soltab *stp))
01116 void DEF(rt_nul_norm,(struct hit *hitp,
01117 struct soltab *stp,
01118 struct xray *rp))
01119 void DEF(rt_nul_uv,(struct application *ap,
01120 struct soltab *stp,
01121 struct hit *hitp,
01122 struct uvcoord *uvp))
01123 void DEF(rt_nul_curve,(struct curvature *cvp,
01124 struct hit *hitp,
01125 struct soltab *stp))
01126 int IDEF(rt_nul_class,())
01127 void DEF(rt_nul_free,(struct soltab *stp))
01128 int NDEF(rt_nul_plot,(struct bu_list *vhead,
01129 struct rt_db_internal *ip,
01130 const struct rt_tess_tol *ttol,
01131 const struct bn_tol *tol))
01132 void DEF(rt_nul_vshot,(struct soltab *stp[],
01133 struct xray *rp[],
01134 struct seg segp[], int n,
01135 struct application *ap))
01136 int NDEF(rt_nul_tess,(struct nmgregion **r,
01137 struct model *m,
01138 struct rt_db_internal *ip,
01139 const struct rt_tess_tol *ttol,
01140 const struct bn_tol *tol))
01141 int NDEF(rt_nul_tnurb,(struct nmgregion **r,
01142 struct model *m,
01143 struct rt_db_internal *ip,
01144 const struct bn_tol *tol))
01145 int NDEF(rt_nul_import5,(struct rt_db_internal *ip,
01146 const struct bu_external *ep,
01147 const mat_t mat, const struct db_i *dbip,
01148 struct resource *resp,
01149 const int minot_type))
01150 int NDEF(rt_nul_export5,(struct bu_external *ep,
01151 const struct rt_db_internal *ip,
01152 double local2mm, const struct db_i *dbip,
01153 struct resource *resp,
01154 const int minor_type ))
01155 int NDEF(rt_nul_import,(struct rt_db_internal *ip,
01156 const struct bu_external *ep,
01157 const mat_t mat, const struct db_i *dbip,
01158 struct resource *resp ))
01159 int NDEF(rt_nul_export,(struct bu_external *ep,
01160 const struct rt_db_internal *ip,
01161 double local2mm, const struct db_i *dbip,
01162 struct resource *resp ))
01163 void DEF(rt_nul_ifree,(struct rt_db_internal *ip, struct resource *resp))
01164 int NDEF(rt_nul_describe,(struct bu_vls *str,
01165 const struct rt_db_internal *ip,
01166 int verbose, double mm2local, struct resource *resp,
01167 struct db_i *db_i))
01168 int NDEF(rt_nul_xform, (struct rt_db_internal *op,
01169 const mat_t mat, struct rt_db_internal *ip,
01170 int free, struct db_i *dbip, struct resource *resp))
01171
01172
01173 static char idmap[] = {
01174 ID_NULL,
01175 ID_NULL,
01176 ID_NULL,
01177 ID_NULL,
01178 ID_NULL,
01179 ID_NULL,
01180 ID_NULL,
01181 ID_NULL,
01182 ID_NULL,
01183 ID_NULL,
01184 ID_NULL,
01185 ID_NULL,
01186 ID_NULL,
01187 ID_NULL,
01188 ID_NULL,
01189 ID_NULL,
01190 ID_TOR,
01191 ID_NULL,
01192 ID_TGC,
01193 ID_ELL,
01194 ID_ARB8,
01195 ID_NULL,
01196 ID_NULL,
01197 ID_NULL,
01198 ID_HALF,
01199 ID_NULL,
01200 ID_RPC,
01201 ID_RHC,
01202 ID_EPA,
01203 ID_EHY,
01204 ID_ETO,
01205 ID_GRIP,
01206 ID_NULL
01207 };
01208
01209
01210
01211
01212
01213
01214
01215
01216
01217 int
01218 rt_id_solid(struct bu_external *ep)
01219 {
01220 register union record *rec;
01221 register int id;
01222
01223 BU_CK_EXTERNAL( ep );
01224 rec = (union record *)ep->ext_buf;
01225
01226 switch( rec->u_id ) {
01227 case ID_SOLID:
01228 id = idmap[(int)(rec->s.s_type)];
01229 break;
01230 case ID_ARS_A:
01231 id = ID_ARS;
01232 break;
01233 case ID_P_HEAD:
01234 id = ID_POLY;
01235 break;
01236 case ID_BSOLID:
01237 id = ID_BSPLINE;
01238 break;
01239 case DBID_STRSOL:
01240
01241 if( strcmp( rec->ss.ss_keyword, "ebm" ) == 0 ) {
01242 id = ID_EBM;
01243 break;
01244 } else if( strcmp( rec->ss.ss_keyword, "vol" ) == 0 ) {
01245 id = ID_VOL;
01246 break;
01247 } else if( strcmp( rec->ss.ss_keyword, "hf" ) == 0 ) {
01248 id = ID_HF;
01249 break;
01250 } else if( strcmp( rec->ss.ss_keyword, "dsp" ) == 0 ) {
01251 id = ID_DSP;
01252 break;
01253 } else if( strcmp( rec->ss.ss_keyword, "submodel" ) == 0 ) {
01254 id = ID_SUBMODEL;
01255 break;
01256 }
01257 bu_log("rt_id_solid(%s): String solid type '%s' unknown\n",
01258 rec->ss.ss_name, rec->ss.ss_keyword );
01259 id = ID_NULL;
01260 break;
01261 case DBID_ARBN:
01262 id = ID_ARBN;
01263 break;
01264 case DBID_PIPE:
01265 id = ID_PIPE;
01266 break;
01267 case DBID_PARTICLE:
01268 id = ID_PARTICLE;
01269 break;
01270 case DBID_NMG:
01271 id = ID_NMG;
01272 break;
01273 case DBID_SKETCH:
01274 id = ID_SKETCH;
01275 break;
01276 case DBID_EXTR:
01277 id = ID_EXTRUDE;
01278 break;
01279 case DBID_CLINE:
01280 id = ID_CLINE;
01281 break;
01282 case DBID_BOT:
01283 id = ID_BOT;
01284 break;
01285 default:
01286 bu_log("rt_id_solid: u_id=x%x unknown\n", rec->u_id);
01287 id = ID_NULL;
01288 break;
01289 }
01290 if( id < ID_NULL || id > ID_MAX_SOLID ) {
01291 bu_log("rt_id_solid: internal error, id=%d?\n", id);
01292 id = ID_NULL;
01293 }
01294 return(id);
01295 }
01296
01297
01298
01299
01300
01301
01302
01303 const struct rt_functab *
01304 rt_get_functab_by_label(const char *label)
01305 {
01306 register const struct rt_functab *ftp;
01307
01308 for( ftp = rt_functab; ftp->magic != 0; ftp++ ) {
01309 if( strncmp( label, ftp->ft_label, 8 ) == 0 )
01310 return ftp;
01311 }
01312 return NULL;
01313 }
01314
01315
01316
01317
01318
01319
01320
01321
01322
01323
01324
01325
01326
01327
01328
01329 int
01330 rt_generic_xform(
01331 struct rt_db_internal *op,
01332 const mat_t mat,
01333 struct rt_db_internal *ip,
01334 int free,
01335 struct db_i *dbip,
01336 struct resource *resp)
01337 {
01338 struct bu_external ext;
01339 int id;
01340 struct bu_attribute_value_set avs;
01341
01342
01343 RT_CK_DB_INTERNAL( ip );
01344 RT_CK_DBI(dbip);
01345 RT_CK_RESOURCE(resp);
01346
01347 id = ip->idb_type;
01348 BU_INIT_EXTERNAL(&ext);
01349
01350 switch (dbip->dbi_version) {
01351 case 4:
01352 if( rt_functab[id].ft_export( &ext, ip, 1.0, dbip, resp ) < 0 ) {
01353 bu_log("rt_generic_xform(): %s export failure\n",
01354 rt_functab[id].ft_name);
01355 return -1;
01356 }
01357 if( (free || op == ip) ) rt_db_free_internal(ip, resp);
01358
01359 RT_INIT_DB_INTERNAL(op);
01360 if( rt_functab[id].ft_import( op, &ext, mat, dbip, resp ) < 0 ) {
01361 bu_log("rt_generic_xform(): solid import failure\n");
01362 return -1;
01363 }
01364 break;
01365 case 5:
01366 avs.magic = -1;
01367
01368 if( rt_functab[id].ft_export5( &ext, ip, 1.0, dbip, resp, 0 ) < 0 ) {
01369 bu_log("rt_generic_xform(): %s export failure\n",
01370 rt_functab[id].ft_name);
01371 return -1;
01372 }
01373
01374 if( (free || op == ip) ) {
01375 if( ip->idb_avs.magic == BU_AVS_MAGIC ) {
01376
01377
01378
01379 bu_avs_init( &avs, ip->idb_avs.count, "avs" );
01380 bu_avs_merge( &avs, &ip->idb_avs );
01381 }
01382 rt_db_free_internal(ip, resp);
01383 }
01384
01385 RT_INIT_DB_INTERNAL(op);
01386
01387 if( !free && op != ip ) {
01388
01389 if( ip->idb_avs.magic == BU_AVS_MAGIC ) {
01390 bu_avs_init( &op->idb_avs, ip->idb_avs.count, "avs" );
01391 bu_avs_merge( &op->idb_avs, &ip->idb_avs );
01392 }
01393 } else if( avs.magic == BU_AVS_MAGIC ) {
01394
01395 bu_avs_init( &op->idb_avs, avs.count, "avs" );
01396 bu_avs_merge( &op->idb_avs, &avs );
01397 bu_avs_free( &avs );
01398 }
01399
01400 if( rt_functab[id].ft_import5( op, &ext, mat, dbip, resp, 0 ) < 0 ) {
01401 bu_log("rt_generic_xform(): solid import failure\n");
01402 return -1;
01403 }
01404 break;
01405 }
01406
01407 bu_free_external( &ext );
01408
01409 RT_CK_DB_INTERNAL( op );
01410 return 0;
01411 }
01412
01413
01414
01415
01416
01417
01418
01419
01420
01421