diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000000..07a868e9407 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/bin +/lib +/build diff --git a/ChangeLog b/ChangeLog index ee7d80934cd..6ee12bfcc12 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2017-09-22 18:35 starseeker + + * [r70328] include/rt/functab.h, src/librt/cut.c, + src/librt/primitives/arb8/arb8.c, src/librt/primitives/table.cpp: + Removal of arb8 classification is causing some change - commit a + minimal re-insertion to RELEASE branch to document what may be + needed here... + 2017-09-21 15:17 starseeker * [r70321] src/other/libutahrle/CMakeLists.txt: diff --git a/NEWS b/NEWS index dab571d102f..4f6c5acb4b1 100644 --- a/NEWS +++ b/NEWS @@ -10,7 +10,7 @@ descriptive text that emphasizes or further describes significant changes made. See document footer for additional details. ---------------------------------------------------------------------- ---- 2017-09-21 Release 7.26.4 --- +--- 2017-09-22 Release 7.26.4 --- ---------------------------------------------------------------------- This is a patch release, primary focused on updates to the build diff --git a/include/rt/functab.h b/include/rt/functab.h index eebc9fb5396..c293f349a56 100644 --- a/include/rt/functab.h +++ b/include/rt/functab.h @@ -116,6 +116,9 @@ struct rt_functab { struct soltab *stp); #define RTFUNCTAB_FUNC_CURVE_CAST(_func) ((void (*)(struct curvature *, struct hit *, struct soltab *))_func) + int (*ft_classify)(const struct soltab * /*stp*/, const vect_t /*min*/, const vect_t /*max*/, const struct bn_tol * /*tol*/); +#define RTFUNCTAB_FUNC_CLASS_CAST(_func) ((int (*)(const struct soltab *, const vect_t, const vect_t, const struct bn_tol *))_func) + void (*ft_free)(struct soltab * /*stp*/); #define RTFUNCTAB_FUNC_FREE_CAST(_func) ((void (*)(struct soltab *))_func) diff --git a/misc/debian/changelog b/misc/debian/changelog index 34789b86546..40e7371b561 100644 --- a/misc/debian/changelog +++ b/misc/debian/changelog @@ -2,7 +2,7 @@ brlcad (7.26.4-0) unstable; urgency=low * update brlcad version - -- Cliff Yapp Thu, 21 Sep 2017 12:30:18 -0400 + -- Cliff Yapp Thu, 22 Sep 2017 17:21:44 -0400 brlcad (7.26.2-0) unstable; urgency=low diff --git a/src/librt/cut.c b/src/librt/cut.c index a5b31a234ea..fca2984d9f1 100644 --- a/src/librt/cut.c +++ b/src/librt/cut.c @@ -50,7 +50,7 @@ #include "bn/plot3.h" -HIDDEN int rt_ck_overlap(const vect_t min, const vect_t max, const struct soltab *stp); +HIDDEN int rt_ck_overlap(const vect_t min, const vect_t max, const struct soltab *stp, const struct rt_i *rtip); HIDDEN int rt_ct_box(struct rt_i *rtip, union cutter *cutp, int axis, double where, int force); HIDDEN void rt_ct_optim(struct rt_i *rtip, union cutter *cutp, size_t depth); HIDDEN void rt_ct_free(struct rt_i *rtip, union cutter *cutp); @@ -103,7 +103,8 @@ rt_cut_one_axis(struct bu_ptbl *boxes, struct rt_i *rtip, int axis, int min, int /* Search all solids for those in this slice */ RT_VISIT_ALL_SOLTABS_START(stp, rtip) { RT_CHECK_SOLTAB(stp); - if (!rt_ck_overlap(box->bn.bn_min, box->bn.bn_max, stp)) + if (!rt_ck_overlap(box->bn.bn_min, box->bn.bn_max, + stp, rtip)) continue; box->bn.bn_list[box->bn.bn_len++] = stp; } RT_VISIT_ALL_SOLTABS_END @@ -553,7 +554,7 @@ rt_nugrid_cut(register struct nugridnode *nugnp, register struct boxnode *fromp, for (i = 0, stpp = fromp->bn_list; i < fromp->bn_len; i++, stpp++) { - if (!rt_ck_overlap(xmin, xmax, *stpp)) + if (!rt_ck_overlap(xmin, xmax, *stpp, rtip)) continue; nu_xbox.bn_list[nu_xbox.bn_len++] = *stpp; } @@ -569,7 +570,9 @@ rt_nugrid_cut(register struct nugridnode *nugnp, register struct boxnode *fromp, nu_ybox.bn_len = 0; /* Search X slice for membs of this Y slice */ for (i=0; ibn.bn_len-1; i >= 0; i--) { struct soltab *stp = inp->bn.bn_list[i]; - if (!rt_ck_overlap(outp->bn.bn_min, outp->bn.bn_max, stp)) + if (!rt_ck_overlap(outp->bn.bn_min, outp->bn.bn_max, + stp, rtip)) continue; outp->bn.bn_list[outp->bn.bn_len++] = stp; } @@ -1298,12 +1304,15 @@ rt_ct_box(struct rt_i *rtip, register union cutter *cutp, register int axis, dou * See if any part of the solid is contained within the bounding box * (RPP). * + * If the solid RPP at least partly overlaps the bounding RPP, invoke + * the per-solid "classifier" method to perform a more rigorous check. + * * Returns - - * !0 if object potentially overlaps box. + * !0 if object overlaps box. * 0 if no overlap. */ HIDDEN int -rt_ck_overlap(register const fastf_t *min, register const fastf_t *max, register const struct soltab *stp) +rt_ck_overlap(register const fastf_t *min, register const fastf_t *max, register const struct soltab *stp, register const struct rt_i *rtip) { RT_CHECK_SOLTAB(stp); @@ -1322,7 +1331,14 @@ rt_ck_overlap(register const fastf_t *min, register const fastf_t *max, register /* If the object fits in a box (i.e., it's not infinite), and that * box doesn't overlap with the bounding RPP, we know it's a miss. */ - if ((stp->st_aradius < INFINITY) && V3RPP_DISJOINT(stp->st_min, stp->st_max, min, max)) + if (stp->st_aradius < INFINITY) { + if (V3RPP_DISJOINT(stp->st_min, stp->st_max, min, max)) + return 0; + } + + /* RPP overlaps, invoke per-solid method for detailed check */ + if (OBJ[stp->st_id].ft_classify && + OBJ[stp->st_id].ft_classify(stp, min, max, &rtip->rti_tol) == BN_CLASSIFY_OUTSIDE) return 0; /* don't know, check it */ diff --git a/src/librt/primitives/arb8/arb8.c b/src/librt/primitives/arb8/arb8.c index 496c4ff6281..2a650cec169 100644 --- a/src/librt/primitives/arb8/arb8.c +++ b/src/librt/primitives/arb8/arb8.c @@ -1190,6 +1190,25 @@ rt_arb_plot(struct bu_list *vhead, struct rt_db_internal *ip, const struct rt_te return 0; } +int +rt_arb_class(const struct soltab *stp, const fastf_t *min, const fastf_t *max, const struct bn_tol *tol) +{ + register struct arb_specific *arbp = (struct arb_specific *)stp->st_specific; + register int i; + + if (arbp == (struct arb_specific *)0) { + bu_log("arb(%s): no faces\n", stp->st_name); + return BN_CLASSIFY_UNIMPLEMENTED; + } + + for (i = 0; i < arbp->arb_nmfaces; i++) { + if (bn_hlf_class(arbp->arb_face[i].peqn, min, max, tol) == BN_CLASSIFY_OUTSIDE) + return BN_CLASSIFY_OUTSIDE; + } + + /* FIXME: We need to test for BN_CLASSIFY_INSIDE vs. BN_CLASSIFY_OVERLAPPING! */ + return BN_CLASSIFY_UNIMPLEMENTED; /* let the caller assume the worst */ +} /** * Import an ARB8 from the database format to the internal format. diff --git a/src/librt/primitives/table.cpp b/src/librt/primitives/table.cpp index 1a77a5ce5b8..f09842a4d33 100644 --- a/src/librt/primitives/table.cpp +++ b/src/librt/primitives/table.cpp @@ -50,6 +50,7 @@ extern "C" { extern void rt_##name##_norm(struct hit *hitp, struct soltab *stp, struct xray *rp); \ extern void rt_##name##_uv(struct application *ap, struct soltab *stp, struct hit *hitp, struct uvcoord *uvp); \ extern void rt_##name##_curve(struct curvature *cvp, struct hit *hitp, struct soltab *stp); \ + extern int rt_##name##_class(const struct soltab *, const vect_t *, const vect_t *, const struct bn_tol *); \ extern void rt_##name##_free(struct soltab *stp); \ extern int rt_##name##_plot(struct bu_list *vhead, struct rt_db_internal *ip, const struct rt_tess_tol *ttol, const struct bn_tol *tol, const struct rt_view_info *info); \ extern int rt_##name##_adaptive_plot(struct rt_db_internal *ip, const struct rt_view_info *info); \ @@ -184,6 +185,7 @@ const struct rt_functab OBJ[] = { NULL, NULL, NULL, + NULL, 0, 0, NULL, @@ -214,6 +216,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_tor_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_tor_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_tor_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_tor_plot), RTFUNCTAB_FUNC_ADAPTIVE_PLOT_CAST(rt_tor_adaptive_plot), @@ -259,6 +262,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_tgc_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_tgc_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_tgc_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_tgc_plot), RTFUNCTAB_FUNC_ADAPTIVE_PLOT_CAST(rt_tgc_adaptive_plot), @@ -304,6 +308,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_ell_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_ell_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_ell_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_ell_plot), RTFUNCTAB_FUNC_ADAPTIVE_PLOT_CAST(rt_ell_adaptive_plot), @@ -349,6 +354,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_arb_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_arb_curve), + RTFUNCTAB_FUNC_CLASS_CAST(rt_arb_class), RTFUNCTAB_FUNC_FREE_CAST(rt_arb_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_arb_plot), NULL, /* adaptive_plot */ @@ -394,6 +400,7 @@ const struct rt_functab OBJ[] = { RTFUNCTAB_FUNC_PIECE_HITSEGS_CAST(rt_bot_piece_hitsegs), RTFUNCTAB_FUNC_UV_CAST(rt_bot_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_bot_curve), + NULL, /* classify */ RTFUNCTAB_FUNC_FREE_CAST(rt_bot_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_ars_plot), NULL, /* adaptive_plot */ @@ -439,6 +446,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_hlf_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_hlf_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_hlf_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_hlf_plot), NULL, /* adaptive_plot */ @@ -484,6 +492,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_rec_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_rec_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_rec_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_tgc_plot), RTFUNCTAB_FUNC_ADAPTIVE_PLOT_CAST(rt_tgc_adaptive_plot), @@ -529,6 +538,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_pg_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_pg_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_pg_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_pg_plot), NULL, /* adaptive_plot */ @@ -574,6 +584,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_nurb_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_nurb_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_nurb_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_nurb_plot), NULL, /* adaptive_plot */ @@ -619,6 +630,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_sph_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_sph_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_sph_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_ell_plot), RTFUNCTAB_FUNC_ADAPTIVE_PLOT_CAST(rt_ell_adaptive_plot), @@ -664,6 +676,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_nmg_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_nmg_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_nmg_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_nmg_plot), NULL, /* adaptive_plot */ @@ -709,6 +722,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_ebm_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_ebm_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_ebm_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_ebm_plot), NULL, /* adaptive_plot */ @@ -754,6 +768,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_vol_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_vol_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_vol_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_vol_plot), NULL, /* adaptive_plot */ @@ -799,6 +814,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_arbn_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_arbn_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_arbn_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_arbn_plot), NULL, /* adaptive_plot */ @@ -844,6 +860,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_pipe_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_pipe_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_pipe_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_pipe_plot), RTFUNCTAB_FUNC_ADAPTIVE_PLOT_CAST(rt_pipe_adaptive_plot), @@ -889,6 +906,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_part_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_part_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_part_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_part_plot), NULL, /* adaptive_plot */ @@ -934,6 +952,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_rpc_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_rpc_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_rpc_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_rpc_plot), RTFUNCTAB_FUNC_ADAPTIVE_PLOT_CAST(rt_rpc_adaptive_plot), @@ -979,6 +998,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_rhc_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_rhc_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_rhc_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_rhc_plot), RTFUNCTAB_FUNC_ADAPTIVE_PLOT_CAST(rt_rhc_adaptive_plot), @@ -1024,6 +1044,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_epa_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_epa_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_epa_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_epa_plot), RTFUNCTAB_FUNC_ADAPTIVE_PLOT_CAST(rt_epa_adaptive_plot), @@ -1069,6 +1090,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_ehy_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_ehy_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_ehy_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_ehy_plot), RTFUNCTAB_FUNC_ADAPTIVE_PLOT_CAST(rt_ehy_adaptive_plot), @@ -1114,6 +1136,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_eto_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_eto_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_eto_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_eto_plot), RTFUNCTAB_FUNC_ADAPTIVE_PLOT_CAST(rt_eto_adaptive_plot), @@ -1159,6 +1182,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_grp_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_grp_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_grp_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_grp_plot), NULL, /* adaptive_plot */ @@ -1204,6 +1228,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_joint_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_joint_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_joint_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_joint_plot), NULL, /* adaptive_plot */ @@ -1245,6 +1270,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ NULL, /* uv */ NULL, /* curve */ + NULL, /* classify */ NULL, /* free */ RTFUNCTAB_FUNC_PLOT_CAST(rt_joint_plot), /* plot */ NULL, /* adaptive_plot */ @@ -1291,6 +1317,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_hf_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_hf_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_hf_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_hf_plot), NULL, /* adaptive_plot */ @@ -1336,6 +1363,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_dsp_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_dsp_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_dsp_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_dsp_plot), NULL, /* adaptive_plot */ @@ -1381,6 +1409,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_sketch_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_sketch_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_sketch_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_sketch_plot), NULL, /* adaptive_plot */ @@ -1426,6 +1455,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_extrude_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_extrude_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_extrude_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_extrude_plot), NULL, /* adaptive_plot */ @@ -1471,6 +1501,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_submodel_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_submodel_curve), + NULL, /* classify */ RTFUNCTAB_FUNC_FREE_CAST(rt_submodel_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_submodel_plot), NULL, /* adaptive_plot */ @@ -1516,6 +1547,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_cline_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_cline_curve), + NULL, /* classify */ RTFUNCTAB_FUNC_FREE_CAST(rt_cline_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_cline_plot), NULL, /* adaptive_plot */ @@ -1561,6 +1593,7 @@ const struct rt_functab OBJ[] = { RTFUNCTAB_FUNC_PIECE_HITSEGS_CAST(rt_bot_piece_hitsegs), RTFUNCTAB_FUNC_UV_CAST(rt_bot_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_bot_curve), + NULL, /* classify */ RTFUNCTAB_FUNC_FREE_CAST(rt_bot_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_bot_plot), RTFUNCTAB_FUNC_ADAPTIVE_PLOT_CAST(rt_bot_adaptive_plot), @@ -1606,6 +1639,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ NULL, /* uv */ NULL, /* curve */ + NULL, /* classify */ NULL, /* free */ NULL, /* plot */ NULL, /* adaptive_plot */ @@ -1653,6 +1687,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ NULL, /* uv */ NULL, /* curve */ + NULL, /* classify */ NULL, /* free */ NULL, /* plot */ NULL, /* adaptive_plot */ @@ -1698,6 +1733,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ NULL, /* uv */ NULL, /* curve */ + NULL, /* classify */ NULL, /* free */ NULL, /* plot */ NULL, /* adaptive_plot */ @@ -1745,6 +1781,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ NULL, /* uv */ NULL, /* curve */ + NULL, /* classify */ NULL, /* free */ NULL, /* plot */ NULL, /* adaptive_plot */ @@ -1790,6 +1827,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_superell_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_superell_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_superell_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_superell_plot), NULL, /* adaptive_plot */ @@ -1835,6 +1873,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_metaball_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_metaball_curve), + NULL, /* classify */ RTFUNCTAB_FUNC_FREE_CAST(rt_metaball_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_metaball_plot), NULL, /* adaptive_plot */ @@ -1880,6 +1919,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_brep_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_brep_curve), + NULL, /* classify */ RTFUNCTAB_FUNC_FREE_CAST(rt_brep_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_brep_plot), RTFUNCTAB_FUNC_ADAPTIVE_PLOT_CAST(rt_brep_adaptive_plot), @@ -1925,6 +1965,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_hyp_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_hyp_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_hyp_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_hyp_plot), NULL, /* adaptive_plot */ @@ -1970,6 +2011,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ NULL, /* uv */ NULL, /* curve */ + NULL, /* classify */ NULL, /* free */ NULL, /* plot */ NULL, /* adaptive_plot */ @@ -2015,6 +2057,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_revolve_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_revolve_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_revolve_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_revolve_plot), NULL, /* adaptive_plot */ @@ -2060,6 +2103,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ NULL, /* uv */ NULL, /* curve */ + NULL, /* class */ NULL, /* free */ RTFUNCTAB_FUNC_PLOT_CAST(rt_pnts_plot), NULL, /* adaptive_plot */ @@ -2105,6 +2149,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_annot_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_annot_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_annot_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_annot_plot), NULL, /* adaptive_plot */ @@ -2150,6 +2195,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ NULL, /* uv */ NULL, /* curve */ + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_hrt_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_hrt_plot), NULL, /* adaptive_plot */ @@ -2196,6 +2242,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ RTFUNCTAB_FUNC_UV_CAST(rt_datum_uv), RTFUNCTAB_FUNC_CURVE_CAST(rt_datum_curve), + NULL, /* class */ RTFUNCTAB_FUNC_FREE_CAST(rt_datum_free), RTFUNCTAB_FUNC_PLOT_CAST(rt_datum_plot), NULL, /* adaptive_plot */ @@ -2241,6 +2288,7 @@ const struct rt_functab OBJ[] = { NULL, /* piece_hitsegs */ NULL, /* uv */ NULL, /* curve */ + NULL, /* classify */ NULL, /* free */ NULL, /* plot */ NULL, /* adaptive_plot */