Revision: 68974
          http://sourceforge.net/p/brlcad/code/68974
Author:   starseeker
Date:     2016-10-03 21:39:41 +0000 (Mon, 03 Oct 2016)
Log Message:
-----------
Well, that was amazingly painful.  Get all rt_vlblock_init calls up out of the 
nmg code.  Removing RTG.rtg_vlfree as a global variable access flowed up 
through a lot of calling functions, which in turn required updating code 
calling them.

Modified Paths:
--------------
    brlcad/trunk/include/nmg.h
    brlcad/trunk/include/rt/nmg.h
    brlcad/trunk/src/adrt/load_g.c
    brlcad/trunk/src/conv/dxf/g-dxf.c
    brlcad/trunk/src/conv/euclid/euclid-g.c
    brlcad/trunk/src/conv/euclid/g-euclid.c
    brlcad/trunk/src/conv/euclid/g-euclid1.c
    brlcad/trunk/src/conv/g-acad.c
    brlcad/trunk/src/conv/g-egg.c
    brlcad/trunk/src/conv/g-nff.c
    brlcad/trunk/src/conv/g-obj.c
    brlcad/trunk/src/conv/g-shell-rect.c
    brlcad/trunk/src/conv/g-vrml.c
    brlcad/trunk/src/conv/g-x3d.c
    brlcad/trunk/src/conv/g-xxx_facets.c
    brlcad/trunk/src/conv/iges/add_inner_shell.c
    brlcad/trunk/src/conv/iges/brep.c
    brlcad/trunk/src/conv/iges/extrude.c
    brlcad/trunk/src/conv/iges/g-iges.c
    brlcad/trunk/src/conv/iges/get_outer_shell.c
    brlcad/trunk/src/conv/iges/iges.c
    brlcad/trunk/src/conv/iges/make_face.c
    brlcad/trunk/src/conv/iges/orient_loops.c
    brlcad/trunk/src/conv/iges/trimsurf.c
    brlcad/trunk/src/conv/jack/g-jack.c
    brlcad/trunk/src/conv/jack/jack-g.c
    brlcad/trunk/src/conv/nastran-g.c
    brlcad/trunk/src/conv/nmg/asc-nmg.c
    brlcad/trunk/src/conv/nmg/g-nmg.c
    brlcad/trunk/src/conv/nmg/nmg-rib.c
    brlcad/trunk/src/conv/nmg/nmg-sgp.c
    brlcad/trunk/src/conv/obj-g.c
    brlcad/trunk/src/conv/off/g-off.c
    brlcad/trunk/src/conv/off/off-g.c
    brlcad/trunk/src/conv/patch/patch-g.c
    brlcad/trunk/src/conv/ply/g-ply.c
    brlcad/trunk/src/conv/raw/g-raw.c
    brlcad/trunk/src/conv/stl/g-stl.c
    brlcad/trunk/src/conv/tankill/g-tankill.c
    brlcad/trunk/src/conv/tankill/tankill-g.c
    brlcad/trunk/src/conv/viewpoint-g.c
    brlcad/trunk/src/libgcv/bottess.c
    brlcad/trunk/src/libgcv/facetize.c
    brlcad/trunk/src/libgcv/plugins/fastgen4/fastgen4_write.cpp
    brlcad/trunk/src/libgcv/plugins/obj/obj_read.c
    brlcad/trunk/src/libgcv/plugins/obj/obj_write.c
    brlcad/trunk/src/libgcv/plugins/obj/tri_face.c
    brlcad/trunk/src/libgcv/plugins/stl/stl_write.c
    brlcad/trunk/src/libgcv/plugins/vrml/vrml_write.c
    brlcad/trunk/src/libged/bev.c
    brlcad/trunk/src/libged/bigE.c
    brlcad/trunk/src/libged/bot_fuse.c
    brlcad/trunk/src/libged/decompose.c
    brlcad/trunk/src/libged/draw.c
    brlcad/trunk/src/libged/facetize.c
    brlcad/trunk/src/libged/inside.c
    brlcad/trunk/src/libged/nmg_cmface.c
    brlcad/trunk/src/libged/nmg_collapse.c
    brlcad/trunk/src/libged/nmg_fix_normals.c
    brlcad/trunk/src/libged/nmg_simplify.c
    brlcad/trunk/src/libged/shells.c
    brlcad/trunk/src/librt/primitives/arb8/arb8.c
    brlcad/trunk/src/librt/primitives/arbn/arbn.c
    brlcad/trunk/src/librt/primitives/ars/ars.c
    brlcad/trunk/src/librt/primitives/bot/bot.c
    brlcad/trunk/src/librt/primitives/cline/cline.c
    brlcad/trunk/src/librt/primitives/dsp/dsp.c
    brlcad/trunk/src/librt/primitives/ebm/ebm.c
    brlcad/trunk/src/librt/primitives/ehy/ehy.c
    brlcad/trunk/src/librt/primitives/epa/epa.c
    brlcad/trunk/src/librt/primitives/extrude/extrude.c
    brlcad/trunk/src/librt/primitives/hyp/hyp.c
    brlcad/trunk/src/librt/primitives/metaball/metaball_tri.c
    brlcad/trunk/src/librt/primitives/nmg/nmg.c
    brlcad/trunk/src/librt/primitives/nmg/nmg_bool.c
    brlcad/trunk/src/librt/primitives/nmg/nmg_ck.c
    brlcad/trunk/src/librt/primitives/nmg/nmg_class.c
    brlcad/trunk/src/librt/primitives/nmg/nmg_eval.c
    brlcad/trunk/src/librt/primitives/nmg/nmg_extrude.c
    brlcad/trunk/src/librt/primitives/nmg/nmg_fcut.c
    brlcad/trunk/src/librt/primitives/nmg/nmg_fuse.c
    brlcad/trunk/src/librt/primitives/nmg/nmg_info.c
    brlcad/trunk/src/librt/primitives/nmg/nmg_inter.c
    brlcad/trunk/src/librt/primitives/nmg/nmg_mesh.c
    brlcad/trunk/src/librt/primitives/nmg/nmg_mirror.c
    brlcad/trunk/src/librt/primitives/nmg/nmg_misc.c
    brlcad/trunk/src/librt/primitives/nmg/nmg_mod.c
    brlcad/trunk/src/librt/primitives/nmg/nmg_plot.c
    brlcad/trunk/src/librt/primitives/nmg/nmg_pr.c
    brlcad/trunk/src/librt/primitives/nmg/nmg_pt_fu.c
    brlcad/trunk/src/librt/primitives/nmg/nmg_rt_isect.c
    brlcad/trunk/src/librt/primitives/nmg/nmg_rt_segs.c
    brlcad/trunk/src/librt/primitives/nmg/nmg_tri.c
    brlcad/trunk/src/librt/primitives/nmg/nmg_tri_mc.c
    brlcad/trunk/src/librt/primitives/nmg/nmg_visit.c
    brlcad/trunk/src/librt/primitives/pipe/pipe.c
    brlcad/trunk/src/librt/primitives/poly/poly.c
    brlcad/trunk/src/librt/primitives/rhc/rhc.c
    brlcad/trunk/src/librt/primitives/rpc/rpc.c
    brlcad/trunk/src/librt/primitives/tgc/tgc.c
    brlcad/trunk/src/librt/primitives/vol/vol.c
    brlcad/trunk/src/libwdb/nmg.c
    brlcad/trunk/src/mged/edsol.c
    brlcad/trunk/src/mged/wdb_obj.c
    brlcad/trunk/src/proc-db/nmgmodel.c
    brlcad/trunk/src/proc-db/tea_nmg.c
    brlcad/trunk/src/util/fix_polysolids.c

Modified: brlcad/trunk/include/nmg.h
===================================================================
--- brlcad/trunk/include/nmg.h  2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/include/nmg.h  2016-10-03 21:39:41 UTC (rev 68974)
@@ -754,7 +754,7 @@
     void (*vis_shell_a)(uint32_t *, void *, int);
 
     void (*bef_faceuse)(uint32_t *, void *, int);
-    void (*aft_faceuse)(uint32_t *, void *, int);
+    void (*aft_faceuse)(uint32_t *, void *, int, struct bu_list *);
 
     void (*vis_face)(uint32_t *, void *, int);
     void (*vis_face_g)(uint32_t *, void *, int);

Modified: brlcad/trunk/include/rt/nmg.h
===================================================================
--- brlcad/trunk/include/rt/nmg.h       2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/include/rt/nmg.h       2016-10-03 21:39:41 UTC (rev 68974)
@@ -228,16 +228,16 @@
 
 
 #ifdef NO_BOMBING_MACROS
-#  define nmg_bu_bomb(rd, str) (void)(rd)
+#  define nmg_bu_bomb(rd, vlfree, str) (void)(rd)
 #else
-#  define nmg_bu_bomb(rd, str) { \
+#  define nmg_bu_bomb(rd, vlfree, str) { \
         bu_log("%s", str); \
         if (RTG.NMG_debug & DEBUG_NMGRT) bu_bomb("End of diagnostics"); \
         BU_LIST_INIT(&rd->rd_hit); \
         BU_LIST_INIT(&rd->rd_miss); \
         RTG.NMG_debug |= DEBUG_NMGRT; \
-        nmg_isect_ray_model(rd); \
-        (void) nmg_ray_segs(rd); \
+        nmg_isect_ray_model(rd,vlfree); \
+        (void) nmg_ray_segs(rd,vlfree); \
         bu_bomb("Should have bombed before this\n"); \
     }
 #endif
@@ -283,14 +283,17 @@
 /* nmg_class.c */
 RT_EXPORT extern int nmg_classify_pt_loop(const point_t pt,
                                           const struct loopuse *lu,
+                                         struct bu_list *vlfree,
                                           const struct bn_tol *tol);
 
 RT_EXPORT extern int nmg_classify_s_vs_s(struct shell *s,
                                          struct shell *s2,
+                                        struct bu_list *vlfree,
                                          const struct bn_tol *tol);
 
 RT_EXPORT extern int nmg_classify_lu_lu(const struct loopuse *lu1,
                                         const struct loopuse *lu2,
+                                       struct bu_list *vlfree,
                                         const struct bn_tol *tol);
 
 RT_EXPORT extern int nmg_class_pt_f(const point_t pt,
@@ -299,6 +302,7 @@
 RT_EXPORT extern int nmg_class_pt_s(const point_t pt,
                                     const struct shell *s,
                                     const int in_or_out_only,
+                                   struct bu_list *vlfree,
                                     const struct bn_tol *tol);
 
 /* From nmg_pt_fu.c */
@@ -307,6 +311,7 @@
 RT_EXPORT extern int nmg_class_pt_lu_except(point_t             pt,
                                             const struct loopuse        *lu,
                                             const struct edge           *e_p,
+                                           struct bu_list *vlfree,
                                             const struct bn_tol *tol);
 
 RT_EXPORT extern int nmg_class_pt_fu_except(const point_t pt,
@@ -317,12 +322,14 @@
                                             const char *priv,
                                             const int call_on_hits,
                                             const int in_or_out_only,
+                                           struct bu_list *vlfree,
                                             const struct bn_tol *tol);
 
 /* From nmg_plot.c */
 RT_EXPORT extern void nmg_pl_shell(FILE *fp,
                                    const struct shell *s,
-                                   int fancy);
+                                   int fancy,
+                                  struct bu_list *vlfree);
 
 RT_EXPORT extern void nmg_vu_to_vlist(struct bu_list *vhead,
                                       const struct vertexuse    *vu);
@@ -369,19 +376,24 @@
                                 long *b,
                                 int red,
                                 int green,
-                                int blue);
+                                int blue,
+                               struct bu_list *vlfree);
 RT_EXPORT extern void nmg_pl_fu(FILE *fp,
                                 const struct faceuse *fu,
                                 long *b,
                                 int red,
                                 int green,
-                                int blue);
+                                int blue,
+                               struct bu_list *vlfree);
 RT_EXPORT extern void nmg_pl_s(FILE *fp,
-                               const struct shell *s);
+                               const struct shell *s,
+                              struct bu_list *vlfree);
 RT_EXPORT extern void nmg_pl_r(FILE *fp,
-                               const struct nmgregion *r);
+                               const struct nmgregion *r,
+                              struct bu_list *vlfree);
 RT_EXPORT extern void nmg_pl_m(FILE *fp,
-                               const struct model *m);
+                               const struct model *m,
+                              struct bu_list *vlfree);
 RT_EXPORT extern void nmg_vlblock_v(struct bn_vlblock *vbp,
                                     const struct vertex *v,
                                     long *tab);
@@ -439,36 +451,45 @@
                                                const struct bn_tol      *tol);
 RT_EXPORT extern void nmg_pl_isect(const char           *filename,
                                    const struct shell   *s,
+                                  struct bu_list *vlfree,
                                    const struct bn_tol  *tol);
 RT_EXPORT extern void nmg_pl_comb_fu(int num1,
                                      int num2,
-                                     const struct faceuse *fu1);
+                                     const struct faceuse *fu1,
+                                    struct bu_list *vlfree);
 RT_EXPORT extern void nmg_pl_2fu(const char *str,
                                  const struct faceuse *fu1,
                                  const struct faceuse *fu2,
-                                 int show_mates);
+                                 int show_mates,
+                                struct bu_list *vlfree);
 /* graphical display of classifier results */
 RT_EXPORT extern void nmg_show_broken_classifier_stuff(uint32_t *p,
                                                        char     **classlist,
                                                        int      all_new,
                                                        int      fancy,
-                                                       const char       
*a_string);
-RT_EXPORT extern void nmg_face_plot(const struct faceuse *fu);
+                                                       const char       
*a_string,
+                                                      struct bu_list *vlfree);
+RT_EXPORT extern void nmg_face_plot(const struct faceuse *fu, struct bu_list 
*vlfree);
 RT_EXPORT extern void nmg_2face_plot(const struct faceuse *fu1,
-                                     const struct faceuse *fu2);
+                                     const struct faceuse *fu2,
+                                    struct bu_list *vlfree);
 RT_EXPORT extern void nmg_face_lu_plot(const struct loopuse *lu,
                                        const struct vertexuse *vu1,
-                                       const struct vertexuse *vu2);
+                                       const struct vertexuse *vu2,
+                                      struct bu_list *vlfree);
 RT_EXPORT extern void nmg_plot_lu_ray(const struct loopuse              *lu,
                                       const struct vertexuse            *vu1,
                                       const struct vertexuse            *vu2,
-                                      const vect_t                      left);
+                                      const vect_t                      left,
+                                     struct bu_list *vlfree);
 RT_EXPORT extern void nmg_plot_ray_face(const char *fname,
                                         point_t pt,
                                         const vect_t dir,
-                                        const struct faceuse *fu);
+                                        const struct faceuse *fu,
+                                       struct bu_list *vlfree);
 RT_EXPORT extern void nmg_plot_lu_around_eu(const char          *prefix,
                                             const struct edgeuse        *eu,
+                                           struct bu_list *vlfree,
                                             const struct bn_tol *tol);
 RT_EXPORT extern int nmg_snurb_to_vlist(struct bu_list          *vhead,
                                         const struct face_g_snurb       *fg,
@@ -508,12 +529,14 @@
                                          const struct bn_tol *tol);
 RT_EXPORT extern void nmg_mesh_faces(struct faceuse *fu1,
                                      struct faceuse *fu2,
-                                     const struct bn_tol *tol);
+                                    struct bu_list *vlfree,
+                                    const struct bn_tol *tol);
 RT_EXPORT extern int nmg_mesh_face_shell(struct faceuse *fu1,
                                          struct shell *s,
                                          const struct bn_tol *tol);
 RT_EXPORT extern int nmg_mesh_shell_shell(struct shell *s1,
                                           struct shell *s2,
+                                         struct bu_list *vlfree,
                                           const struct bn_tol *tol);
 RT_EXPORT extern double nmg_measure_fu_angle(const struct edgeuse *eu,
                                              const vect_t xvec,
@@ -524,9 +547,6 @@
 RT_EXPORT extern struct nmgregion *nmg_do_bool(struct nmgregion *s1,
                                                struct nmgregion *s2,
                                                const int oper, struct bu_list 
*vlfree, const struct bn_tol *tol);
-RT_EXPORT extern void nmg_shell_coplanar_face_merge(struct shell *s,
-                                                    const struct bn_tol *tol,
-                                                    const int simplify);
 RT_EXPORT extern int nmg_two_region_vertex_fuse(struct nmgregion *r1,
                                                 struct nmgregion *r2,
                                                 const struct bn_tol *tol);
@@ -556,6 +576,7 @@
 RT_EXPORT extern void nmg_class_shells(struct shell *sA,
                                        struct shell *sB,
                                        char **classlist,
+                                      struct bu_list *vlfree,
                                        const struct bn_tol *tol);
 
 /* from nmg_fcut.c */
@@ -583,12 +604,14 @@
                                                       point_t pt,
                                                       vect_t dir,
                                                       struct edge_g_lseg *eg,
+                                                     struct bu_list *vlfree,
                                                       const struct bn_tol 
*tol);
 RT_EXPORT extern void nmg_fcut_face_2d(struct bu_ptbl *vu_list,
                                        fastf_t *mag,
                                        struct faceuse *fu1,
                                        struct faceuse *fu2,
-                                       struct bn_tol *tol);
+                                      struct bu_list *vlfree,
+                                      struct bn_tol *tol);
 RT_EXPORT extern int nmg_insert_vu_if_on_edge(struct vertexuse *vu1,
                                               struct vertexuse *vu2,
                                               struct edgeuse *new_eu,
@@ -624,9 +647,10 @@
 RT_EXPORT extern int nmg_class_ray_vs_shell(struct xray *rp,
                                             const struct shell *s,
                                             const int in_or_out_only,
+                                           struct bu_list *vlfree,
                                             const struct bn_tol *tol);
 
-RT_EXPORT extern void nmg_isect_ray_model(struct ray_data *rd);
+RT_EXPORT extern void nmg_isect_ray_model(struct ray_data *rd, struct bu_list 
*vlfree);
 
 /* From nmg_ck.c */
 RT_EXPORT extern void nmg_vvg(const struct vertex_g *vg);
@@ -689,6 +713,7 @@
 RT_EXPORT extern int nmg_ck_eg_verts(const struct edge_g_lseg *eg,
                                      const struct bn_tol *tol);
 RT_EXPORT extern size_t nmg_ck_geometry(const struct model *m,
+                                       struct bu_list *vlfree,
                                        const struct bn_tol *tol);
 RT_EXPORT extern int nmg_ck_face_worthless_edges(const struct faceuse *fu);
 RT_EXPORT extern void nmg_ck_lueu(const struct loopuse *lu, const char *s);
@@ -706,6 +731,7 @@
                                        const struct faceuse *fu2,
                                        const struct bn_tol *tol);
 RT_EXPORT extern void nmg_ck_vs_in_region(const struct nmgregion *r,
+                                         struct bu_list *vlfree,
                                           const struct bn_tol *tol);
 
 
@@ -766,6 +792,7 @@
 RT_EXPORT extern struct edge_g_lseg     *nmg_find_eg_on_line(const uint32_t 
*magic_p,
                                                              const point_t     
         pt,
                                                              const vect_t      
         dir,
+                                                            struct bu_list 
*vlfree,
                                                              const struct 
bn_tol        *tol);
 RT_EXPORT extern int nmg_k0eu(struct vertex     *v);
 RT_EXPORT extern struct vertex *nmg_repair_v_near_v(struct vertex              
 *hit_v,
@@ -786,7 +813,8 @@
 RT_EXPORT extern int nmg_is_vertex_on_inter(struct vertex *v,
                                             struct faceuse *fu1,
                                             struct faceuse *fu2,
-                                            struct nmg_inter_struct *is);
+                                            struct nmg_inter_struct *is,
+                                           struct bu_list *vlfree);
 RT_EXPORT extern void nmg_isect_eu_verts(struct edgeuse *eu,
                                          struct vertex_g *vg1,
                                          struct vertex_g *vg2,
@@ -804,22 +832,26 @@
 RT_EXPORT extern void nmg_isect_eu_fu(struct nmg_inter_struct *is,
                                       struct bu_ptbl            *verts,
                                       struct edgeuse            *eu,
-                                      struct faceuse          *fu);
+                                      struct faceuse          *fu,
+                                     struct bu_list *vlfree);
 RT_EXPORT extern void nmg_isect_fu_jra(struct nmg_inter_struct  *is,
                                        struct faceuse           *fu1,
                                        struct faceuse           *fu2,
                                        struct bu_ptbl           *eu1_list,
-                                       struct bu_ptbl           *eu2_list);
+                                       struct bu_ptbl           *eu2_list,
+                                      struct bu_list *vlfree);
 RT_EXPORT extern void nmg_isect_line2_face2pNEW(struct nmg_inter_struct *is,
                                                 struct faceuse *fu1, struct 
faceuse *fu2,
                                                 struct bu_ptbl *eu1_list,
-                                                struct bu_ptbl *eu2_list);
+                                                struct bu_ptbl *eu2_list,
+                                               struct bu_list *vlfree);
 RT_EXPORT extern int    nmg_is_eu_on_line3(const struct edgeuse *eu,
                                            const point_t                pt,
                                            const vect_t         dir,
                                            const struct bn_tol  *tol);
 RT_EXPORT extern struct edge_g_lseg     *nmg_find_eg_between_2fg(const struct 
faceuse   *ofu1,
                                                                  const struct 
faceuse   *fu2,
+                                                                struct bu_list 
*vlfree,
                                                                  const struct 
bn_tol    *tol);
 RT_EXPORT extern struct edgeuse *nmg_does_fu_use_eg(const struct faceuse       
 *fu1,
                                                     const uint32_t      *eg);
@@ -829,20 +861,25 @@
                                       const struct bn_tol       *tol);
 RT_EXPORT extern void nmg_cut_lu_into_coplanar_and_non(struct loopuse *lu,
                                                        plane_t pl,
-                                                       struct nmg_inter_struct 
*is);
+                                                       struct nmg_inter_struct 
*is,
+                                                      struct bu_list *vlfree);
 RT_EXPORT extern void nmg_check_radial_angles(char *str,
                                               struct shell *s,
+                                             struct bu_list *vlfree,
                                               const struct bn_tol *tol);
 RT_EXPORT extern int nmg_faces_can_be_intersected(struct nmg_inter_struct *bs,
                                                   const struct faceuse *fu1,
                                                   const struct faceuse *fu2,
+                                                 struct bu_list *vlfree,
                                                   const struct bn_tol *tol);
 RT_EXPORT extern void nmg_isect_two_generic_faces(struct faceuse               
 *fu1,
                                                   struct faceuse               
 *fu2,
+                                                 struct bu_list *vlfree,
                                                   const struct bn_tol   *tol);
 RT_EXPORT extern void nmg_crackshells(struct shell *s1,
                                       struct shell *s2,
-                                      const struct bn_tol *tol);
+                                     struct bu_list *vlfree,
+                                     const struct bn_tol *tol);
 RT_EXPORT extern int nmg_fu_touchingloops(const struct faceuse *fu);
 
 
@@ -965,9 +1002,11 @@
 /*      SHELL Routines */
 RT_EXPORT extern void nmg_shell_coplanar_face_merge(struct shell *s,
                                                     const struct bn_tol *tol,
-                                                    const int simplify);
-RT_EXPORT extern int nmg_simplify_shell(struct shell *s);
+                                                    const int simplify,
+                                                   struct bu_list *vlfree);
+RT_EXPORT extern int nmg_simplify_shell(struct shell *s, struct bu_list 
*vlfree);
 RT_EXPORT extern void nmg_rm_redundancies(struct shell *s,
+                                          struct bu_list *vlfree,
                                           const struct bn_tol *tol);
 RT_EXPORT extern void nmg_sanitize_s_lv(struct shell *s,
                                         int orient);
@@ -977,6 +1016,7 @@
                                                const struct bn_tol      *tol);
 RT_EXPORT extern void nmg_js(struct shell       *s1,
                              struct shell       *s2,
+                            struct bu_list *vlfree,
                              const struct bn_tol        *tol);
 RT_EXPORT extern void nmg_invert_shell(struct shell             *s);
 
@@ -996,8 +1036,9 @@
                                      const struct bn_tol *tol);
 RT_EXPORT extern void nmg_gluefaces(struct faceuse *fulist[],
                                     int n,
+                                   struct bu_list *vlfree,
                                     const struct bn_tol *tol);
-RT_EXPORT extern int nmg_simplify_face(struct faceuse *fu);
+RT_EXPORT extern int nmg_simplify_face(struct faceuse *fu, struct bu_list 
*vlfree);
 RT_EXPORT extern void nmg_reverse_face(struct faceuse *fu);
 RT_EXPORT extern void nmg_mv_fu_between_shells(struct shell *dest,
                                                struct shell *src,
@@ -1016,7 +1057,8 @@
 RT_EXPORT extern struct vertexuse *nmg_join_2singvu_loops(struct vertexuse 
*vu1,
                                                           struct vertexuse 
*vu2);
 RT_EXPORT extern struct loopuse *nmg_cut_loop(struct vertexuse *vu1,
-                                              struct vertexuse *vu2);
+                                              struct vertexuse *vu2,
+                                             struct bu_list *vlfree);
 RT_EXPORT extern struct loopuse *nmg_split_lu_at_vu(struct loopuse *lu,
                                                     struct vertexuse *vu);
 RT_EXPORT extern struct vertexuse *nmg_find_repeated_v_in_lu(struct vertexuse 
*vu);
@@ -1029,8 +1071,8 @@
 RT_EXPORT extern void nmg_kill_accordions(struct loopuse *lu);
 RT_EXPORT extern int nmg_loop_split_at_touching_jaunt(struct loopuse           
 *lu,
                                                       const struct bn_tol      
 *tol);
-RT_EXPORT extern void nmg_simplify_loop(struct loopuse *lu);
-RT_EXPORT extern int nmg_kill_snakes(struct loopuse *lu);
+RT_EXPORT extern void nmg_simplify_loop(struct loopuse *lu, struct bu_list 
*vlfree);
+RT_EXPORT extern int nmg_kill_snakes(struct loopuse *lu, struct bu_list 
*vlfree);
 RT_EXPORT extern void nmg_mv_lu_between_shells(struct shell *dest,
                                                struct shell *src,
                                                struct loopuse *lu);
@@ -1127,10 +1169,12 @@
 RT_EXPORT extern const struct edgeuse *nmg_radial_face_edge_in_shell(const 
struct edgeuse *eu);
 RT_EXPORT extern const struct edgeuse *nmg_find_edge_between_2fu(const struct 
faceuse *fu1,
                                                                  const struct 
faceuse *fu2,
+                                                                struct bu_list 
*vlfree,
                                                                  const struct 
bn_tol *tol);
 RT_EXPORT extern struct edge *nmg_find_e_nearest_pt2(uint32_t *magic_p,
                                                      const point_t pt2,
                                                      const mat_t mat,
+                                                    struct bu_list *vlfree,
                                                      const struct bn_tol *tol);
 RT_EXPORT extern struct edgeuse *nmg_find_matching_eu_in_s(const struct 
edgeuse *eu1,
                                                            const struct shell 
*s2);
@@ -1185,40 +1229,48 @@
 
 /* Tabulation routines */
 RT_EXPORT extern void nmg_vertex_tabulate(struct bu_ptbl *tab,
-                                          const uint32_t *magic_p);
+                                          const uint32_t *magic_p,
+                                         struct bu_list *vlfree);
 RT_EXPORT extern void nmg_vertexuse_normal_tabulate(struct bu_ptbl *tab,
-                                                    const uint32_t *magic_p);
+                                                    const uint32_t *magic_p,
+                                                   struct bu_list *vlfree);
 RT_EXPORT extern void nmg_edgeuse_tabulate(struct bu_ptbl *tab,
-                                           const uint32_t *magic_p);
+                                           const uint32_t *magic_p,
+                                          struct bu_list *vlfree);
 RT_EXPORT extern void nmg_edge_tabulate(struct bu_ptbl *tab,
-                                        const uint32_t *magic_p);
+                                        const uint32_t *magic_p,
+                                       struct bu_list *vlfree);
 RT_EXPORT extern void nmg_edge_g_tabulate(struct bu_ptbl *tab,
-                                          const uint32_t *magic_p);
+                                          const uint32_t *magic_p,
+                                         struct bu_list *vlfree);
 RT_EXPORT extern void nmg_face_tabulate(struct bu_ptbl *tab,
-                                        const uint32_t *magic_p);
+                                        const uint32_t *magic_p,
+                                       struct bu_list *vlfree);
 RT_EXPORT extern void nmg_edgeuse_with_eg_tabulate(struct bu_ptbl *tab,
                                                    const struct edge_g_lseg 
*eg);
 RT_EXPORT extern void nmg_edgeuse_on_line_tabulate(struct bu_ptbl *tab,
                                                    const uint32_t *magic_p,
                                                    const point_t pt,
                                                    const vect_t dir,
+                                                  struct bu_list *vlfree,
                                                    const struct bn_tol *tol);
 RT_EXPORT extern void nmg_e_and_v_tabulate(struct bu_ptbl *eutab,
                                            struct bu_ptbl *vtab,
-                                           const uint32_t *magic_p);
+                                           const uint32_t *magic_p,
+                                          struct bu_list *vlfree);
 RT_EXPORT extern int nmg_2edgeuse_g_coincident(const struct edgeuse     *eu1,
                                                const struct edgeuse     *eu2,
                                                const struct bn_tol      *tol);
 
 /* From nmg_extrude.c */
-RT_EXPORT extern void nmg_translate_face(struct faceuse *fu, const vect_t Vec);
-RT_EXPORT extern int nmg_extrude_face(struct faceuse *fu, const vect_t Vec, 
const struct bn_tol *tol);
+RT_EXPORT extern void nmg_translate_face(struct faceuse *fu, const vect_t Vec, 
struct bu_list *vlfree);
+RT_EXPORT extern int nmg_extrude_face(struct faceuse *fu, const vect_t Vec, 
struct bu_list *vlfree, const struct bn_tol *tol);
 RT_EXPORT extern struct vertexuse *nmg_find_vertex_in_lu(const struct vertex 
*v, const struct loopuse *lu);
-RT_EXPORT extern void nmg_fix_overlapping_loops(struct shell *s, const struct 
bn_tol *tol);
+RT_EXPORT extern void nmg_fix_overlapping_loops(struct shell *s, struct 
bu_list *vlfree, const struct bn_tol *tol);
 RT_EXPORT extern void nmg_break_crossed_loops(struct shell *is, const struct 
bn_tol *tol);
-RT_EXPORT extern struct shell *nmg_extrude_cleanup(struct shell *is, const int 
is_void, const struct bn_tol *tol);
-RT_EXPORT extern void nmg_hollow_shell(struct shell *s, const fastf_t thick, 
const int approximate, const struct bn_tol *tol);
-RT_EXPORT extern struct shell *nmg_extrude_shell(struct shell *s, const 
fastf_t dist, const int normal_ward, const int approximate, const struct bn_tol 
*tol);
+RT_EXPORT extern struct shell *nmg_extrude_cleanup(struct shell *is, const int 
is_void, struct bu_list *vlfree, const struct bn_tol *tol);
+RT_EXPORT extern void nmg_hollow_shell(struct shell *s, const fastf_t thick, 
const int approximate, struct bu_list *vlfree, const struct bn_tol *tol);
+RT_EXPORT extern struct shell *nmg_extrude_shell(struct shell *s, const 
fastf_t dist, const int normal_ward, const int approximate, struct bu_list 
*vlfree, const struct bn_tol *tol);
 
 /* From nmg_pr.c */
 RT_EXPORT extern char *nmg_orientation(int orientation);
@@ -1289,7 +1341,7 @@
                                                const struct bn_tol *tol);
 RT_EXPORT extern void nmg_pr_fu_around_eu(const struct edgeuse *eu,
                                           const struct bn_tol *tol);
-RT_EXPORT extern void nmg_pl_lu_around_eu(const struct edgeuse *eu);
+RT_EXPORT extern void nmg_pl_lu_around_eu(const struct edgeuse *eu, struct 
bu_list *vlfree);
 RT_EXPORT extern void nmg_pr_fus_in_fg(const uint32_t *fg_magic);
 
 /* From nmg_misc.c */
@@ -1305,7 +1357,7 @@
 RT_EXPORT extern void nmg_snurb_fu_get_norm_at_vu(const struct faceuse *fu,
                                                   const struct vertexuse *vu,
                                                   vect_t norm);
-RT_EXPORT extern void nmg_find_zero_length_edges(const struct model *m);
+RT_EXPORT extern void nmg_find_zero_length_edges(const struct model *m, struct 
bu_list *vlfree);
 RT_EXPORT extern struct face *nmg_find_top_face_in_dir(const struct shell *s,
                                                        int dir, long *flags);
 RT_EXPORT extern struct face *nmg_find_top_face(const struct shell *s,
@@ -1313,11 +1365,13 @@
                                                 long *flags);
 RT_EXPORT extern int nmg_find_outer_and_void_shells(struct nmgregion *r,
                                                     struct bu_ptbl ***shells,
+                                                   struct bu_list *vlfree,
                                                     const struct bn_tol *tol);
-RT_EXPORT extern int nmg_mark_edges_real(const uint32_t *magic_p);
+RT_EXPORT extern int nmg_mark_edges_real(const uint32_t *magic_p, struct 
bu_list *vlfree);
 RT_EXPORT extern void nmg_tabulate_face_g_verts(struct bu_ptbl *tab,
                                                 const struct face_g_plane *fg);
 RT_EXPORT extern void nmg_isect_shell_self(struct shell *s,
+                                          struct bu_list *vlfree,
                                            const struct bn_tol *tol);
 RT_EXPORT extern struct edgeuse *nmg_next_radial_eu(const struct edgeuse *eu,
                                                     const struct shell *s,
@@ -1340,8 +1394,8 @@
                                               plane_t pl,
                                               const struct bn_tol *tol);
 RT_EXPORT extern int nmg_calc_face_plane(struct faceuse *fu_in,
-                                         plane_t pl);
-RT_EXPORT extern int nmg_calc_face_g(struct faceuse *fu);
+                                         plane_t pl, struct bu_list *vlfree);
+RT_EXPORT extern int nmg_calc_face_g(struct faceuse *fu, struct bu_list 
*vlfree);
 RT_EXPORT extern fastf_t nmg_faceuse_area(const struct faceuse *fu);
 RT_EXPORT extern fastf_t nmg_shell_area(const struct shell *s);
 RT_EXPORT extern fastf_t nmg_region_area(const struct nmgregion *r);
@@ -1359,10 +1413,11 @@
                                            size_t *total_wires,
                                            size_t *total_faces,
                                            size_t *total_points);
-RT_EXPORT extern void nmg_close_shell(struct shell *s,
+RT_EXPORT extern void nmg_close_shell(struct shell *s, struct bu_list *vlfree,
                                       const struct bn_tol *tol);
 RT_EXPORT extern struct shell *nmg_dup_shell(struct shell *s,
                                              long ***copy_tbl,
+                                            struct bu_list *vlfree,
                                              const struct bn_tol *tol);
 RT_EXPORT extern struct edgeuse *nmg_pop_eu(struct bu_ptbl *stack);
 RT_EXPORT extern void nmg_reverse_radials(struct faceuse *fu,
@@ -1377,20 +1432,21 @@
 RT_EXPORT extern void nmg_fix_decomposed_shell_normals(struct shell *s,
                                                        const struct bn_tol 
*tol);
 RT_EXPORT extern struct model *nmg_mk_model_from_region(struct nmgregion *r,
-                                                        int reindex);
+                                                        int reindex, struct 
bu_list *vlfree);
 RT_EXPORT extern void nmg_fix_normals(struct shell *s_orig,
+                                     struct bu_list *vlfree,
                                       const struct bn_tol *tol);
 RT_EXPORT extern int nmg_break_long_edges(struct shell *s,
                                           const struct bn_tol *tol);
 RT_EXPORT extern struct faceuse *nmg_mk_new_face_from_loop(struct loopuse *lu);
-RT_EXPORT extern int nmg_split_loops_into_faces(uint32_t *magic_p,
+RT_EXPORT extern int nmg_split_loops_into_faces(uint32_t *magic_p, struct 
bu_list *vlfree,
                                                 const struct bn_tol *tol);
-RT_EXPORT extern int nmg_decompose_shell(struct shell *s,
+RT_EXPORT extern int nmg_decompose_shell(struct shell *s, struct bu_list 
*vlfree,
                                          const struct bn_tol *tol);
 RT_EXPORT extern void nmg_stash_model_to_file(const char *filename,
                                               const struct model *m,
                                               const char *title);
-RT_EXPORT extern int nmg_unbreak_region_edges(uint32_t *magic_p);
+RT_EXPORT extern int nmg_unbreak_region_edges(uint32_t *magic_p, struct 
bu_list *vlfree);
 RT_EXPORT extern void nmg_vlist_to_eu(struct bu_list *vlist,
                                       struct shell *s);
 RT_EXPORT extern int nmg_mv_shell_to_region(struct shell *s,
@@ -1406,12 +1462,14 @@
                                         const struct bn_tol *tol);
 RT_EXPORT extern void nmg_make_faces_at_vert(struct vertex *new_v,
                                              struct bu_ptbl *int_faces,
+                                            struct bu_list *vlfree,
                                              const struct bn_tol *tol);
 RT_EXPORT extern void nmg_kill_cracks_at_vertex(const struct vertex *vp);
 RT_EXPORT extern int nmg_complex_vertex_solve(struct vertex *new_v,
                                               const struct bu_ptbl *faces,
                                               const int free_edges,
                                               const int approximate,
+                                             struct bu_list *vlfree,
                                               const struct bn_tol *tol);
 RT_EXPORT extern int nmg_bad_face_normals(const struct shell *s,
                                           const struct bn_tol *tol);
@@ -1435,14 +1493,17 @@
 RT_EXPORT extern int nmg_open_shells_connect(struct shell *dst,
                                              struct shell *src,
                                              const long **copy_tbl,
+                                            struct bu_list *vlfree,
                                              const struct bn_tol *tol);
 RT_EXPORT extern int nmg_in_vert(struct vertex *new_v,
                                  const int approximate,
+                                struct bu_list *vlfree,
                                  const struct bn_tol *tol);
-RT_EXPORT extern void nmg_mirror_model(struct model *m);
+RT_EXPORT extern void nmg_mirror_model(struct model *m, struct bu_list 
*vlfree);
 RT_EXPORT extern int nmg_kill_cracks(struct shell *s);
 RT_EXPORT extern int nmg_kill_zero_length_edgeuses(struct model *m);
 RT_EXPORT extern void nmg_make_faces_within_tol(struct shell *s,
+                                               struct bu_list *vlfree,
                                                 const struct bn_tol *tol);
 RT_EXPORT extern void nmg_intersect_loops_self(struct shell *s,
                                                const struct bn_tol *tol);
@@ -1455,13 +1516,12 @@
 RT_EXPORT extern int nmg_break_edge_at_verts(struct edge *e,
                                              struct bu_ptbl *verts,
                                              const struct bn_tol *tol);
-RT_EXPORT extern void nmg_isect_shell_self(struct shell *s,
-                                           const struct bn_tol *tol);
 RT_EXPORT extern fastf_t nmg_loop_plane_area(const struct loopuse *lu,
                                              plane_t pl);
-RT_EXPORT extern int nmg_break_edges(uint32_t *magic_p,
+RT_EXPORT extern int nmg_break_edges(uint32_t *magic_p, struct bu_list *vlfree,
                                      const struct bn_tol *tol);
 RT_EXPORT extern int nmg_lu_is_convex(struct loopuse *lu,
+                                     struct bu_list *vlfree,
                                       const struct bn_tol *tol);
 RT_EXPORT extern int nmg_to_arb(const struct model *m,
                                 struct rt_arb_internal *arb_int);
@@ -1470,8 +1530,10 @@
                                 const struct bn_tol *tol);
 RT_EXPORT extern int nmg_to_poly(const struct model *m,
                                  struct rt_pg_internal *poly_int,
+                                struct bu_list *vlfree,
                                  const struct bn_tol *tol);
 RT_EXPORT extern struct rt_bot_internal *nmg_bot(struct shell *s,
+                                                struct bu_list *vlfree,
                                                  const struct bn_tol *tol);
 
 RT_EXPORT extern int nmg_simplify_shell_edges(struct shell *s,
@@ -1479,19 +1541,23 @@
 RT_EXPORT extern int nmg_edge_collapse(struct model *m,
                                        const struct bn_tol *tol,
                                        const fastf_t tol_coll,
-                                       const fastf_t min_angle);
+                                       const fastf_t min_angle,
+                                      struct bu_list *vlfree);
 
 /* From nmg_copy.c */
 RT_EXPORT extern struct model *nmg_clone_model(const struct model *original);
 
 /* From nmg_tri.c */
 RT_EXPORT extern void nmg_triangulate_shell(struct shell *s,
+                                           struct bu_list *vlfree,
                                             const struct bn_tol  *tol);
 
 
 RT_EXPORT extern void nmg_triangulate_model(struct model *m,
+                                           struct bu_list *vlfree,
                                             const struct bn_tol *tol);
 RT_EXPORT extern int nmg_triangulate_fu(struct faceuse *fu,
+                                       struct bu_list *vlfree,
                                         const struct bn_tol *tol);
 RT_EXPORT extern void nmg_dump_model(struct model *m);
 
@@ -1520,13 +1586,13 @@
 RT_EXPORT extern char *nmg_manifolds(struct model *m);
 
 /* nmg.c */
-RT_EXPORT extern int nmg_ray_segs(struct ray_data       *rd);
+RT_EXPORT extern int nmg_ray_segs(struct ray_data       *rd, struct bu_list 
*vlfree);
 
 
 /* From nmg_fuse.c */
 RT_EXPORT extern int nmg_is_common_bigloop(const struct face *f1,
                                           const struct face *f2);
-RT_EXPORT extern void nmg_region_v_unique(struct nmgregion *r1,
+RT_EXPORT extern void nmg_region_v_unique(struct nmgregion *r1, struct bu_list 
*vlfree,
                                          const struct bn_tol *tol);
 RT_EXPORT extern int nmg_ptbl_vfuse(struct bu_ptbl *t,
                                    const struct bn_tol *tol);
@@ -1534,7 +1600,7 @@
                                              struct bu_ptbl *t2,
                                              const struct bn_tol *tol);
 /* nmg_two_region_vertex_fuse replaced with nmg_vertex_fuse */
-RT_EXPORT extern int nmg_vertex_fuse(const uint32_t *magic_p,
+RT_EXPORT extern int nmg_vertex_fuse(const uint32_t *magic_p,struct bu_list 
*vlfree,
                                     const struct bn_tol *tol);
 RT_EXPORT extern int nmg_cnurb_is_linear(const struct edge_g_cnurb *cnrb);
 RT_EXPORT extern int nmg_snurb_is_planar(const struct face_g_snurb *srf,
@@ -1570,9 +1636,9 @@
                                            const struct face_g_snurb *snrb,
                                            const struct bu_list *head,
                                            const struct bn_tol *tol);
-RT_EXPORT extern int nmg_edge_fuse(const uint32_t *magic_p,
+RT_EXPORT extern int nmg_edge_fuse(const uint32_t *magic_p,struct bu_list 
*vlfree,
                                   const struct bn_tol *tol);
-RT_EXPORT extern int nmg_edge_g_fuse(const uint32_t *magic_p,
+RT_EXPORT extern int nmg_edge_g_fuse(const uint32_t *magic_p,struct bu_list 
*vlfree,
                                           const struct bn_tol  *tol);
 RT_EXPORT extern int nmg_ck_fu_verts(struct faceuse *fu1,
                                     struct face *f2,
@@ -1583,17 +1649,19 @@
 RT_EXPORT extern int   nmg_two_face_fuse(struct face   *f1,
                                          struct face *f2,
                                          const struct bn_tol *tol);
-RT_EXPORT extern int nmg_model_face_fuse(struct model *m,
+RT_EXPORT extern int nmg_model_face_fuse(struct model *m,struct bu_list 
*vlfree,
                                         const struct bn_tol *tol);
 RT_EXPORT extern int nmg_break_all_es_on_v(uint32_t *magic_p,
-                                          struct vertex *v,
+                                          struct vertex *v,struct bu_list 
*vlfree,
                                           const struct bn_tol *tol);
-RT_EXPORT extern int nmg_break_e_on_v(const uint32_t *magic_p,
+RT_EXPORT extern int nmg_break_e_on_v(const uint32_t *magic_p,struct bu_list 
*vlfree,
                                      const struct bn_tol *tol);
 /* DEPRECATED: use nmg_break_e_on_v */
 RT_EXPORT extern int nmg_model_break_e_on_v(const uint32_t *magic_p,
+                                           struct bu_list *vlfree,
                                            const struct bn_tol *tol);
 RT_EXPORT extern int nmg_model_fuse(struct model *m,
+                                   struct bu_list *vlfree,
                                    const struct bn_tol *tol);
 
 /* radial routines */
@@ -1617,6 +1685,7 @@
                                             struct bu_list             *src,
                                             const struct bn_tol        *tol);
 RT_EXPORT extern int    nmg_is_crack_outie(const struct edgeuse        *eu,
+                                           struct bu_list *vlfree,
                                            const struct bn_tol *tol);
 RT_EXPORT extern struct nmg_radial     *nmg_find_radial_eu(const struct 
bu_list *hd,
                                                            const struct 
edgeuse *eu);
@@ -1626,6 +1695,7 @@
 RT_EXPORT extern void nmg_radial_mark_cracks(struct bu_list    *hd,
                                             const struct edge  *e1,
                                             const struct edge  *e2,
+                                            struct bu_list *vlfree,
                                             const struct bn_tol        *tol);
 RT_EXPORT extern struct nmg_radial *nmg_radial_find_an_original(const struct 
bu_list   *hd,
                                                                const struct 
shell      *s,
@@ -1657,10 +1727,13 @@
 RT_EXPORT extern void nmg_radial_exchange_marked(struct bu_list                
*hd,
                                                 const struct bn_tol    *tol);
 RT_EXPORT extern void nmg_s_radial_harmonize(struct shell              *s,
+                                            struct bu_list *vlfree,
                                             const struct bn_tol        *tol);
 RT_EXPORT extern void nmg_s_radial_check(struct shell          *s,
+                                        struct bu_list *vlfree,
                                         const struct bn_tol    *tol);
 RT_EXPORT extern void nmg_r_radial_check(const struct nmgregion        *r,
+                                        struct bu_list *vlfree,
                                         const struct bn_tol    *tol);
 
 
@@ -1692,19 +1765,24 @@
                                     void *                     state);
 RT_EXPORT extern void nmg_visit_faceuse(struct faceuse                 *fu,
                                        const struct nmg_visit_handlers *htab,
-                                       void *                  state);
+                                       void *                  state,
+                                       struct bu_list *vlfree);
 RT_EXPORT extern void nmg_visit_shell(struct shell                     *s,
                                      const struct nmg_visit_handlers   *htab,
-                                     void *                    state);
+                                     void *                    state,
+                                     struct bu_list *vlfree);
 RT_EXPORT extern void nmg_visit_region(struct nmgregion                *r,
                                       const struct nmg_visit_handlers  *htab,
-                                      void *                   state);
+                                      void *                   state,
+                                      struct bu_list *vlfree);
 RT_EXPORT extern void nmg_visit_model(struct model                     *model,
                                      const struct nmg_visit_handlers   *htab,
-                                     void *                    state);
+                                     void *                    state,
+                                     struct bu_list *vlfree);
 RT_EXPORT extern void nmg_visit(const uint32_t         *magicp,
                                const struct nmg_visit_handlers *htab,
-                               void *                  state);
+                               void *                  state,
+                               struct bu_list *vlfree);
 
 
 #endif

Modified: brlcad/trunk/src/adrt/load_g.c
===================================================================
--- brlcad/trunk/src/adrt/load_g.c      2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/adrt/load_g.c      2016-10-03 21:39:41 UTC (rev 68974)
@@ -219,7 +219,7 @@
     NMG_CK_MODEL(m);
 
     /* triangulate model */
-    nmg_triangulate_model(m, &tol);
+    nmg_triangulate_model(m, &RTG.rtg_vlfree, &tol);
 
     /* FIXME: where is this released? */
     BU_ALLOC(mesh, struct adrt_mesh_s);

Modified: brlcad/trunk/src/conv/dxf/g-dxf.c
===================================================================
--- brlcad/trunk/src/conv/dxf/g-dxf.c   2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/dxf/g-dxf.c   2016-10-03 21:39:41 UTC (rev 68974)
@@ -192,7 +192,7 @@
  triangulate:
     if (do_triangulate) {
        /* triangulate model */
-       nmg_triangulate_model(m, &tol);
+       nmg_triangulate_model(m, &RTG.rtg_vlfree, &tol);
 
        /* Count triangles */
        tri_count = 0;
@@ -215,7 +215,7 @@
        }
     }
 
-    nmg_vertex_tabulate(&verts, &r->l.magic);
+    nmg_vertex_tabulate(&verts, &r->l.magic, &RTG.rtg_vlfree);
 
     color_num = find_closest_color(color);
 

Modified: brlcad/trunk/src/conv/euclid/euclid-g.c
===================================================================
--- brlcad/trunk/src/conv/euclid/euclid-g.c     2016-10-03 15:05:00 UTC (rev 
68973)
+++ brlcad/trunk/src/conv/euclid/euclid-g.c     2016-10-03 21:39:41 UTC (rev 
68974)
@@ -225,7 +225,7 @@
            struct shell *next_s;
 
            next_s = BU_LIST_PNEXT(shell, &s->l);
-           if (nmg_simplify_shell(s)) {
+           if (nmg_simplify_shell(s, &RTG.rtg_vlfree)) {
                if (nmg_ks(s)) {
                    /* we killed it all! */
                    something_left = 0;
@@ -504,12 +504,12 @@
 
     if (debug)
        bu_log("Calling nmg_vertex_fuse()\n");
-    (void)nmg_vertex_fuse(&m->magic, &tol);
+    (void)nmg_vertex_fuse(&m->magic, &RTG.rtg_vlfree, &tol);
 
     /* Break edges on vertices */
     if (debug)
        bu_log("Calling nmg_break_e_on_v()\n");
-    (void)nmg_break_e_on_v(&m->magic, &tol);
+    (void)nmg_break_e_on_v(&m->magic, &RTG.rtg_vlfree, &tol);
 
     /* kill zero length edgeuses */
     if (nmg_kill_zero_length_edgeuses(m)) {
@@ -535,7 +535,7 @@
            continue;
 
        /* calculate plane for this faceuse */
-       if (nmg_calc_face_g(outfaceuses[i])) {
+       if (nmg_calc_face_g(outfaceuses[i], &RTG.rtg_vlfree)) {
            bu_log("nmg_calc_face_g failed\n");
            nmg_pr_fu_briefly(outfaceuses[i], "");
        }
@@ -552,7 +552,7 @@
     /* Glue faceuses together. */
     if (debug)
        bu_log("Glueing faces\n");
-    (void)nmg_edge_fuse(&m->magic, &tol);
+    (void)nmg_edge_fuse(&m->magic, &RTG.rtg_vlfree, &tol);
 
     /* Compute "geometry" for model, region, and shell */
     if (debug)
@@ -562,7 +562,7 @@
     /* fix the normals */
     if (debug)
        bu_log("Fix normals\n");
-    nmg_fix_normals(s, &tol);
+    nmg_fix_normals(s, &RTG.rtg_vlfree, &tol);
 
     if (RT_G_DEBUG&DEBUG_MEM_FULL)
        bu_prmem("After fixing normals:\n");
@@ -594,7 +594,7 @@
     if (RT_G_DEBUG&DEBUG_MEM_FULL)
        bu_prmem("Before nmg_make_faces_within_tol():\n");
 
-    nmg_make_faces_within_tol(s, &tol);
+    nmg_make_faces_within_tol(s, &RTG.rtg_vlfree, &tol);
 
     if (RT_G_DEBUG&DEBUG_MEM_FULL)
        bu_prmem("After nmg_make_faces_within_tol():\n");
@@ -643,7 +643,7 @@
     }
 
     if (debug)
-       bu_log("%d vertices out of tolerance after fixing out of tolerance 
faces\n", nmg_ck_geometry(m, &tol));
+       bu_log("%d vertices out of tolerance after fixing out of tolerance 
faces\n", nmg_ck_geometry(m, &RTG.rtg_vlfree, &tol));
 
     nmg_s_join_touchingloops(s, &tol);
     nmg_s_split_touchingloops(s, &tol);

Modified: brlcad/trunk/src/conv/euclid/g-euclid.c
===================================================================
--- brlcad/trunk/src/conv/euclid/g-euclid.c     2016-10-03 15:05:00 UTC (rev 
68973)
+++ brlcad/trunk/src/conv/euclid/g-euclid.c     2016-10-03 21:39:41 UTC (rev 
68974)
@@ -342,7 +342,7 @@
                            continue;
 
                        nmg_class = nmg_classify_lu_lu(faces[loop1].lu,
-                                                      faces[loop2].lu, &tol);
+                                                      faces[loop2].lu, 
&RTG.rtg_vlfree, &tol);
 
                        if (nmg_class != NMG_CLASS_AinB)
                            continue;
@@ -366,7 +366,7 @@
                                    continue;
 
                                if (nmg_classify_lu_lu(faces[i].lu,
-                                                      faces[loop2].lu, &tol)) {
+                                                      faces[loop2].lu, 
&RTG.rtg_vlfree, &tol)) {
                                    if (faces[i].facet_type != (-2))
                                        continue;
 
@@ -619,7 +619,7 @@
     if (!BU_SETJUMP) {
        /* try */
 
-       (void)nmg_model_fuse(*tsp->ts_m, tsp->ts_tol);
+       (void)nmg_model_fuse(*tsp->ts_m, &RTG.rtg_vlfree, tsp->ts_tol);
        ret_tree = nmg_booltree_evaluate(curtree, &RTG.rtg_vlfree, tsp->ts_tol, 
&rt_uniresource);
 
     } else {

Modified: brlcad/trunk/src/conv/euclid/g-euclid1.c
===================================================================
--- brlcad/trunk/src/conv/euclid/g-euclid1.c    2016-10-03 15:05:00 UTC (rev 
68973)
+++ brlcad/trunk/src/conv/euclid/g-euclid1.c    2016-10-03 21:39:41 UTC (rev 
68974)
@@ -284,7 +284,7 @@
                            continue;
 
                        nmg_class = nmg_classify_lu_lu(faces[loop1].lu,
-                                                      faces[loop2].lu, &tol);
+                                                      faces[loop2].lu, 
&RTG.rtg_vlfree, &tol);
 
                        if (nmg_class != NMG_CLASS_AinB)
                            continue;
@@ -308,7 +308,7 @@
                                    continue;
 
                                if (nmg_classify_lu_lu(faces[i].lu,
-                                                      faces[loop2].lu, &tol)) {
+                                                      faces[loop2].lu, 
&RTG.rtg_vlfree, &tol)) {
                                    if (faces[i].facet_type != (-2))
                                        continue;
 
@@ -396,7 +396,7 @@
     if (!BU_SETJUMP) {
        /* try */
 
-       (void)nmg_model_fuse(*tsp->ts_m, tsp->ts_tol);
+       (void)nmg_model_fuse(*tsp->ts_m, &RTG.rtg_vlfree, tsp->ts_tol);
        ret_tree = nmg_booltree_evaluate(curtree, &RTG.rtg_vlfree, tsp->ts_tol, 
&rt_uniresource);
 
     } else {

Modified: brlcad/trunk/src/conv/g-acad.c
===================================================================
--- brlcad/trunk/src/conv/g-acad.c      2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/g-acad.c      2016-10-03 21:39:41 UTC (rev 68974)
@@ -101,11 +101,11 @@
     NMG_CK_MODEL(m);
 
     /* triangulate model */
-    nmg_triangulate_model(m, &tol);
+    nmg_triangulate_model(m, &RTG.rtg_vlfree, &tol);
 
 
     /* list all vertices in result */
-    nmg_vertex_tabulate(&verts, &r->l.magic);
+    nmg_vertex_tabulate(&verts, &r->l.magic, &RTG.rtg_vlfree);
 
     /* Get number of vertices */
 

Modified: brlcad/trunk/src/conv/g-egg.c
===================================================================
--- brlcad/trunk/src/conv/g-egg.c       2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/g-egg.c       2016-10-03 21:39:41 UTC (rev 68974)
@@ -84,7 +84,7 @@
     NMG_CK_MODEL(m);
 
     /* triangulate model */
-    nmg_triangulate_model(m, &conv_data->tol);
+    nmg_triangulate_model(m, &RTG.rtg_vlfree, &conv_data->tol);
 
     /* Write pertinent info for this region */
     fprintf(conv_data->fp, "  <VertexPool> %s {\n", (region_name+1));

Modified: brlcad/trunk/src/conv/g-nff.c
===================================================================
--- brlcad/trunk/src/conv/g-nff.c       2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/g-nff.c       2016-10-03 21:39:41 UTC (rev 68974)
@@ -90,7 +90,7 @@
     NMG_CK_MODEL(m);
 
     /* triangulate model */
-    nmg_triangulate_model(m, &tol);
+    nmg_triangulate_model(m, &RTG.rtg_vlfree, &tol);
 
     /* output triangles */
     for (BU_LIST_FOR(s, shell, &r->s_hd)) {
@@ -182,7 +182,7 @@
     if (!BU_SETJUMP) {
        /* try */
 
-       (void)nmg_model_fuse(*tsp->ts_m, tsp->ts_tol);
+       (void)nmg_model_fuse(*tsp->ts_m, &RTG.rtg_vlfree, tsp->ts_tol);
        ret_tree = nmg_booltree_evaluate(curtree, &RTG.rtg_vlfree, tsp->ts_tol, 
&rt_uniresource);
 
     } else {

Modified: brlcad/trunk/src/conv/g-obj.c
===================================================================
--- brlcad/trunk/src/conv/g-obj.c       2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/g-obj.c       2016-10-03 21:39:41 UTC (rev 68974)
@@ -304,17 +304,17 @@
     NMG_CK_MODEL(m);
 
     /* triangulate model */
-    nmg_triangulate_model(m, &tol);
+    nmg_triangulate_model(m, &RTG.rtg_vlfree, &tol);
 
     /* list all vertices in result */
-    nmg_vertex_tabulate(&verts, &r->l.magic);
+    nmg_vertex_tabulate(&verts, &r->l.magic, &RTG.rtg_vlfree);
 
     /* Get number of vertices */
     numverts = BU_PTBL_LEN(&verts);
 
     /* get list of vertexuse normals */
     if (do_normals)
-       nmg_vertexuse_normal_tabulate(&norms, &r->l.magic);
+       nmg_vertexuse_normal_tabulate(&norms, &r->l.magic, &RTG.rtg_vlfree);
 
     /* BEGIN CHECK SECTION */
     /* Check vertices */
@@ -552,7 +552,7 @@
     if (!BU_SETJUMP) {
        /* try */
 
-       (void)nmg_model_fuse(*tsp->ts_m, tsp->ts_tol);
+       (void)nmg_model_fuse(*tsp->ts_m, &RTG.rtg_vlfree, tsp->ts_tol);
        ret_tree = nmg_booltree_evaluate(curtree, &RTG.rtg_vlfree, tsp->ts_tol, 
&rt_uniresource);
 
     } else {

Modified: brlcad/trunk/src/conv/g-shell-rect.c
===================================================================
--- brlcad/trunk/src/conv/g-shell-rect.c        2016-10-03 15:05:00 UTC (rev 
68973)
+++ brlcad/trunk/src/conv/g-shell-rect.c        2016-10-03 21:39:41 UTC (rev 
68974)
@@ -163,7 +163,7 @@
            nmg_vertex_gv(*_v[1], _ep1->pt); \
        if (!(*_v[2])->vg_p) \
            nmg_vertex_gv(*_v[2], _ep2->pt); \
-       if (nmg_calc_face_g(_fu)) { \
+       if (nmg_calc_face_g(_fu,&RTG.rtg_vlfree)) { \
            if (debug > 3) \
                bu_log("Killing degenerate face\n"); \
            (void)nmg_kfu(_fu); \
@@ -198,7 +198,7 @@
            nmg_vertex_gv(*_v[2], _ep2->pt); \
        if (!(*_v[3])->vg_p) \
            nmg_vertex_gv(*_v[3], _ep3->pt); \
-       if (nmg_calc_face_g(_fu)) { \
+       if (nmg_calc_face_g(_fu,&RTG.rtg_vlfree)) { \
            if (debug > 3) \
                bu_log("Killing degenerate face\n"); \
            (void)nmg_kfu(_fu); \
@@ -447,7 +447,7 @@
     }
     rd.magic = NMG_RAY_DATA_MAGIC;
 
-    nmg_isect_ray_model(&rd);
+    nmg_isect_ray_model(&rd,&RTG.rtg_vlfree);
 
     if (BU_LIST_IS_EMPTY(&rd.rd_hit))
        ret = 0;
@@ -690,7 +690,7 @@
            if (fu->orientation != OT_SAME)
                continue;
 
-           nmg_calc_face_g(fu);
+           nmg_calc_face_g(fu,&RTG.rtg_vlfree);
            f = fu->f_p;
            nmg_face_bb(f, &tol);
 
@@ -735,7 +735,7 @@
            if (fu->orientation != OT_SAME)
                continue;
 
-           nmg_calc_face_g(fu);
+           nmg_calc_face_g(fu,&RTG.rtg_vlfree);
            f = fu->f_p;
            nmg_face_bb(f, &tol);
 
@@ -954,7 +954,7 @@
                if (vu1_cut->v_p == eu1->eumate_p->vu_p->v_p)
                    eu1 = BU_LIST_PNEXT_CIRC(edgeuse, &eu1->l);
                /* cut loop */
-               new_lu = nmg_cut_loop(vu1_cut, vu2_cut);
+               new_lu = nmg_cut_loop(vu1_cut, vu2_cut, &RTG.rtg_vlfree);
                lu->orientation = OT_SAME;
                lu->lumate_p->orientation = OT_SAME;
                new_lu->orientation = OT_SAME;
@@ -988,9 +988,9 @@
     bu_ptbl_init(&verts, 128, "verts");
     Split_side_faces(s, &verts);
 
-    nmg_triangulate_shell(s, &tol);
+    nmg_triangulate_shell(s, &RTG.rtg_vlfree, &tol);
 
-    nmg_split_loops_into_faces(&s->l.magic, &tol);
+    nmg_split_loops_into_faces(&s->l.magic, &RTG.rtg_vlfree, &tol);
 
     sd.s = s;
     sd.manifolds = nmg_manifolds(m);
@@ -1182,8 +1182,8 @@
     }
     if (!new_vu2)
        bu_exit(1, "ERROR: Cannot find VU in lu2\n");
-    new_lu1 = nmg_cut_loop(new_vu1, vu1);
-    new_lu2 = nmg_cut_loop(new_vu2, vu2);
+    new_lu1 = nmg_cut_loop(new_vu1, vu1, &RTG.rtg_vlfree);
+    new_lu2 = nmg_cut_loop(new_vu2, vu2, &RTG.rtg_vlfree);
     ref_data->lu1->orientation = OT_SAME;
     ref_data->lu2->orientation = OT_SAME;
     new_lu1->orientation = OT_SAME;
@@ -1226,8 +1226,8 @@
        }
     }
 
-    (void)nmg_split_loops_into_faces(&ref_data->fu1->l.magic, &tol);
-    (void)nmg_split_loops_into_faces(&ref_data->fu2->l.magic, &tol);
+    (void)nmg_split_loops_into_faces(&ref_data->fu1->l.magic, &RTG.rtg_vlfree, 
&tol);
+    (void)nmg_split_loops_into_faces(&ref_data->fu2->l.magic, &RTG.rtg_vlfree, 
&tol);
 
     for (BU_LIST_FOR(vu, vertexuse, &new_vu->v_p->vu_hd)) {
        struct faceuse *fu;
@@ -1246,7 +1246,7 @@
 
        bu_ptbl_ins(ref_data->new_edges, (long *)eu->e_p);
 
-       nmg_calc_face_g(fu);
+       nmg_calc_face_g(fu,&RTG.rtg_vlfree);
     }
 
     return 1;
@@ -1269,7 +1269,7 @@
 
     m = nmg_find_model(&s->l.magic);
 
-    nmg_edge_tabulate(&edges_1, &s->l.magic);
+    nmg_edge_tabulate(&edges_1, &s->l.magic, &RTG.rtg_vlfree);
     cur = &edges_1;
     bu_ptbl_init(&edges_2, 64, "edges_2");
     next = &edges_2;
@@ -1557,7 +1557,7 @@
 
     if (decimation_tol > 0.0) {
        bu_log("%d edges eliminated by decimation to tolerance of %gmm\n",
-              nmg_edge_collapse(m, &tol, decimation_tol, min_angle), 
decimation_tol);
+              nmg_edge_collapse(m, &tol, decimation_tol, min_angle, 
&RTG.rtg_vlfree), decimation_tol);
     }
 
     if (do_extra_rays || edge_tol > 0.0 || decimation_tol > 0.0)

Modified: brlcad/trunk/src/conv/g-vrml.c
===================================================================
--- brlcad/trunk/src/conv/g-vrml.c      2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/g-vrml.c      2016-10-03 21:39:41 UTC (rev 68974)
@@ -1024,14 +1024,14 @@
     }
 
     if (!is_light) {
-       nmg_triangulate_model(m, tol2);
+       nmg_triangulate_model(m, &RTG.rtg_vlfree, tol2);
        fprintf(fp_out, "\t\t\t}\n");
        fprintf(fp_out, "\t\t\tgeometry IndexedFaceSet {\n");
        fprintf(fp_out, "\t\t\t\tcoord Coordinate {\n");
     }
 
     /* get list of vertices */
-    nmg_vertex_tabulate(&verts, &m->magic);
+    nmg_vertex_tabulate(&verts, &m->magic, &RTG.rtg_vlfree);
     if (!is_light) {
        fprintf(fp_out, "\t\t\t\t\tpoint [");
     } else {

Modified: brlcad/trunk/src/conv/g-x3d.c
===================================================================
--- brlcad/trunk/src/conv/g-x3d.c       2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/g-x3d.c       2016-10-03 21:39:41 UTC (rev 68974)
@@ -575,7 +575,7 @@
                         */
                        if (!BU_SETJUMP) {
                            /* try */
-                           if (nmg_triangulate_fu(fu, &tol)) {
+                           if (nmg_triangulate_fu(fu, &RTG.rtg_vlfree, &tol)) {
                                if (nmg_kfu(fu)) {
                                    (void) nmg_ks(s);
                                    shell_is_dead = 1;
@@ -740,7 +740,7 @@
     /* FIXME: need code to handle light */
 
     /* get list of vertices */
-    nmg_vertex_tabulate(&verts, &m->magic);
+    nmg_vertex_tabulate(&verts, &m->magic, &RTG.rtg_vlfree);
 
     fprintf(fp, "\t\t<IndexedFaceSet coordIndex=\"\n");
     first = 1;

Modified: brlcad/trunk/src/conv/g-xxx_facets.c
===================================================================
--- brlcad/trunk/src/conv/g-xxx_facets.c        2016-10-03 15:05:00 UTC (rev 
68973)
+++ brlcad/trunk/src/conv/g-xxx_facets.c        2016-10-03 21:39:41 UTC (rev 
68974)
@@ -244,7 +244,7 @@
     NMG_CK_MODEL(m);
 
     /* triangulate model */
-    nmg_triangulate_model(m, &tol);
+    nmg_triangulate_model(m, &RTG.rtg_vlfree, &tol);
 
     /* Output triangles */
     if (verbose) {
@@ -349,7 +349,7 @@
     if (!BU_SETJUMP) {
        /* try */
 
-       (void)nmg_model_fuse(*tsp->ts_m, tsp->ts_tol);
+       (void)nmg_model_fuse(*tsp->ts_m, &RTG.rtg_vlfree, tsp->ts_tol);
        ret_tree = nmg_booltree_evaluate(curtree, &RTG.rtg_vlfree, tsp->ts_tol, 
&rt_uniresource);
 
     } else {

Modified: brlcad/trunk/src/conv/iges/add_inner_shell.c
===================================================================
--- brlcad/trunk/src/conv/iges/add_inner_shell.c        2016-10-03 15:05:00 UTC 
(rev 68973)
+++ brlcad/trunk/src/conv/iges/add_inner_shell.c        2016-10-03 21:39:41 UTC 
(rev 68974)
@@ -62,7 +62,7 @@
            face_count++;
     }
 
-    nmg_gluefaces(fu, face_count, &tol);
+    nmg_gluefaces(fu, face_count, &RTG.rtg_vlfree, &tol);
 
     bu_free((char *)fu, "Add_inner_shell: faceuse list");
     bu_free((char *)face_de, "Add_inner_shell: face DE's");

Modified: brlcad/trunk/src/conv/iges/brep.c
===================================================================
--- brlcad/trunk/src/conv/iges/brep.c   2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/iges/brep.c   2016-10-03 21:39:41 UTC (rev 68974)
@@ -89,16 +89,16 @@
     Orient_loops(r);
 
     /* orient shells */
-    nmg_fix_normals(s_outer, &tol);
+    nmg_fix_normals(s_outer, &RTG.rtg_vlfree, &tol);
     for (i = 0; i < num_of_voids; i++) {
-       nmg_fix_normals(void_shells[i], &tol);
+       nmg_fix_normals(void_shells[i], &RTG.rtg_vlfree, &tol);
        nmg_invert_shell(void_shells[i]);
     }
 
     if (do_bots) {
        /* Merge all shells into one */
        for (i = 0; i < num_of_voids; i++)
-           nmg_js(s_outer, void_shells[i], &tol);
+           nmg_js(s_outer, void_shells[i], &RTG.rtg_vlfree, &tol);
 
        /* write out BOT */
        if (mk_bot_from_nmg(fdout, dir[entityno]->name, s_outer))

Modified: brlcad/trunk/src/conv/iges/extrude.c
===================================================================
--- brlcad/trunk/src/conv/iges/extrude.c        2016-10-03 15:05:00 UTC (rev 
68973)
+++ brlcad/trunk/src/conv/iges/extrude.c        2016-10-03 21:39:41 UTC (rev 
68974)
@@ -118,14 +118,14 @@
                pt_ptr = pt_ptr->next;
            }
 
-           if (nmg_calc_face_g(fu)) {
+           if (nmg_calc_face_g(fu, &RTG.rtg_vlfree)) {
                bu_log("Extrude: Failed to calculate face geometry\n");
                nmg_km(m);
                bu_free((char *)curv_pts, "curve_pts");
                return 0;
            }
 
-           if (nmg_extrude_face(fu, evect, &tol)) {
+           if (nmg_extrude_face(fu, evect, &RTG.rtg_vlfree, &tol)) {
                bu_log("Extrude: extrusion failed\n");
                nmg_km(m);
                bu_free((char *)curv_pts, "curve_pts");

Modified: brlcad/trunk/src/conv/iges/g-iges.c
===================================================================
--- brlcad/trunk/src/conv/iges/g-iges.c 2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/iges/g-iges.c 2016-10-03 21:39:41 UTC (rev 68974)
@@ -450,7 +450,7 @@
     if (!BU_SETJUMP) {
        /* try */
 
-       (void)nmg_model_fuse(*tsp->ts_m, tsp->ts_tol);
+       (void)nmg_model_fuse(*tsp->ts_m, &RTG.rtg_vlfree, tsp->ts_tol);
        result = nmg_booltree_evaluate(curtree, &RTG.rtg_vlfree, tsp->ts_tol, 
&rt_uniresource);
 
     } else {

Modified: brlcad/trunk/src/conv/iges/get_outer_shell.c
===================================================================
--- brlcad/trunk/src/conv/iges/get_outer_shell.c        2016-10-03 15:05:00 UTC 
(rev 68973)
+++ brlcad/trunk/src/conv/iges/get_outer_shell.c        2016-10-03 21:39:41 UTC 
(rev 68974)
@@ -63,7 +63,7 @@
            face_count++;
     }
 
-    nmg_gluefaces(fu, face_count, &tol);
+    nmg_gluefaces(fu, face_count, &RTG.rtg_vlfree, &tol);
 
     bu_free((char *)fu, "Get_outer_shell: faceuse list");
     bu_free((char *)face_de, "Get_outer_shell: face DE's");

Modified: brlcad/trunk/src/conv/iges/iges.c
===================================================================
--- brlcad/trunk/src/conv/iges/iges.c   2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/iges/iges.c   2016-10-03 21:39:41 UTC (rev 68974)
@@ -774,7 +774,7 @@
        return 0;
 
     /* Find outer shells and void shells and their associations */
-    outer_shell_count = nmg_find_outer_and_void_shells(r, &shells, &tol);
+    outer_shell_count = nmg_find_outer_and_void_shells(r, &shells, 
&RTG.rtg_vlfree, &tol);
 
     brep_de = (int *)bu_calloc(outer_shell_count, sizeof(int), 
"nmgregion_to_iges: brep_de");
 
@@ -1094,7 +1094,7 @@
        dir_entry[i] = DEFAULT;
 
     /* Built list of vertex structs */
-    nmg_vertex_tabulate(vtab, &r->l.magic);
+    nmg_vertex_tabulate(vtab, &r->l.magic, &RTG.rtg_vlfree);
 
     /* write parameter data for vertex list entity */
     bu_vls_printf(&str, "502,%ld", (long int)BU_PTBL_LEN(vtab));
@@ -1244,7 +1244,7 @@
        dir_entry[i] = DEFAULT;
 
     /* Build list of edge structures */
-    nmg_edge_tabulate(etab, &r->l.magic);
+    nmg_edge_tabulate(etab, &r->l.magic, &RTG.rtg_vlfree);
 
     bu_vls_printf(&str, "504,%ld", (long int)BU_PTBL_LEN(etab));
 

Modified: brlcad/trunk/src/conv/iges/make_face.c
===================================================================
--- brlcad/trunk/src/conv/iges/make_face.c      2016-10-03 15:05:00 UTC (rev 
68973)
+++ brlcad/trunk/src/conv/iges/make_face.c      2016-10-03 21:39:41 UTC (rev 
68974)
@@ -166,7 +166,7 @@
        dist = DIST_PT_PLANE(outside_pt, pl);
        VJOIN1(outside_pt, outside_pt, -dist, pl);
 
-       if (nmg_class_pt_lu_except(outside_pt, lu, (struct edge *)NULL, &tol) 
!= NMG_CLASS_AoutB) {
+       if (nmg_class_pt_lu_except(outside_pt, lu, (struct edge *)NULL, 
&RTG.rtg_vlfree, &tol) != NMG_CLASS_AoutB) {
            nmg_reverse_face(fu);
            if (fu->orientation != OT_SAME) {
                fu = fu->fumate_p;

Modified: brlcad/trunk/src/conv/iges/orient_loops.c
===================================================================
--- brlcad/trunk/src/conv/iges/orient_loops.c   2016-10-03 15:05:00 UTC (rev 
68973)
+++ brlcad/trunk/src/conv/iges/orient_loops.c   2016-10-03 21:39:41 UTC (rev 
68974)
@@ -45,7 +45,7 @@
        if (lu == lptr->lu)
            continue;
 
-       if (nmg_classify_lu_lu(lu, lptr->lu, &tol) == NMG_CLASS_AinB) {
+       if (nmg_classify_lu_lu(lu, lptr->lu, &RTG.rtg_vlfree, &tol) == 
NMG_CLASS_AinB) {
 
            if (lptr->inner_loops == (struct loop_list *)NULL) {
                BU_ALLOC(lptr->inner_loops, struct loop_list);
@@ -74,7 +74,7 @@
        prev = (struct loop_list *)NULL;
        while (inner1) {
            if (inner->lu != inner1->lu) {
-               if (nmg_classify_lu_lu(inner1->lu, inner->lu, &tol) == 
NMG_CLASS_AinB) {
+               if (nmg_classify_lu_lu(inner1->lu, inner->lu, &RTG.rtg_vlfree, 
&tol) == NMG_CLASS_AinB) {
                    struct loop_list *tmp;
 
                    /* inner1->lu is inside inner->lu,
@@ -138,7 +138,7 @@
        for (BU_LIST_FOR(lu1, loopuse, &fu->lu_hd)) {
            if (lu1 == lu)
                continue;
-           if (nmg_classify_lu_lu(lu, lu1, &tol) == NMG_CLASS_AinB) {
+           if (nmg_classify_lu_lu(lu, lu1, &RTG.rtg_vlfree, &tol) == 
NMG_CLASS_AinB) {
                outer = 0;
                break;
            }

Modified: brlcad/trunk/src/conv/iges/trimsurf.c
===================================================================
--- brlcad/trunk/src/conv/iges/trimsurf.c       2016-10-03 15:05:00 UTC (rev 
68973)
+++ brlcad/trunk/src/conv/iges/trimsurf.c       2016-10-03 21:39:41 UTC (rev 
68974)
@@ -1441,7 +1441,7 @@
        bu_mem_barriercheck();
 
     if (convsurf) {
-       (void)nmg_vertex_fuse(&m->magic, &tol);
+       (void)nmg_vertex_fuse(&m->magic, &RTG.rtg_vlfree, &tol);
 
        if (!BU_STR_EMPTY(curr_file->obj_name))
            mk_nmg(fdout, curr_file->obj_name, m);

Modified: brlcad/trunk/src/conv/jack/g-jack.c
===================================================================
--- brlcad/trunk/src/conv/jack/g-jack.c 2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/jack/g-jack.c 2016-10-03 21:39:41 UTC (rev 68974)
@@ -201,7 +201,7 @@
     map = (int *)bu_calloc(r->m_p->maxindex, sizeof(int), "Jack vert map");
 
     /* Built list of vertex structs */
-    nmg_vertex_tabulate(&vtab, &r->l.magic);
+    nmg_vertex_tabulate(&vtab, &r->l.magic, &RTG.rtg_vlfree);
 
     /* FIXME: What to do if 0 vertices?  */
 
@@ -237,7 +237,7 @@
     if (!BU_SETJUMP) {
        /* try */
 
-       (void)nmg_model_fuse(*tsp->ts_m, tsp->ts_tol);
+       (void)nmg_model_fuse(*tsp->ts_m, &RTG.rtg_vlfree, tsp->ts_tol);
        ret_tree = nmg_booltree_evaluate(curtree, &RTG.rtg_vlfree, tsp->ts_tol, 
&rt_uniresource);
 
     } else  {

Modified: brlcad/trunk/src/conv/jack/jack-g.c
===================================================================
--- brlcad/trunk/src/conv/jack/jack-g.c 2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/jack/jack-g.c 2016-10-03 21:39:41 UTC (rev 68974)
@@ -277,7 +277,7 @@
                        jfile, i+1);
     }
 
-    nmg_vertex_fuse(&m->magic, &tol);
+    nmg_vertex_fuse(&m->magic, &RTG.rtg_vlfree, &tol);
 
     /* Associate the face geometry. */
     for (i = 0, fail = 0; i < face; i++)
@@ -306,11 +306,11 @@
          /* Compute "geometry" for region and shell */
          nmg_region_a(r, &tol);
 
-         nmg_break_e_on_v(&m->magic, &tol);
+         nmg_break_e_on_v(&m->magic, &RTG.rtg_vlfree, &tol);
          empty_model = nmg_kill_zero_length_edgeuses(m);
 
          /* Glue edges of outward pointing face uses together. */
-         if (!empty_model) nmg_edge_fuse(&m->magic, &tol);
+         if (!empty_model) nmg_edge_fuse(&m->magic, &RTG.rtg_vlfree, &tol);
        }
     }
 

Modified: brlcad/trunk/src/conv/nastran-g.c
===================================================================
--- brlcad/trunk/src/conv/nastran-g.c   2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/nastran-g.c   2016-10-03 21:39:41 UTC (rev 68974)
@@ -951,7 +951,7 @@
        nmg_vertex_gv(g_pts[gin2].v[pid_index], pt2);
     if (!g_pts[gin3].v[pid_index]->vg_p)
        nmg_vertex_gv(g_pts[gin3].v[pid_index], pt3);
-    nmg_calc_face_g(fu);
+    nmg_calc_face_g(fu, &RTG.rtg_vlfree);
 
     v[0] = &g_pts[gin1].v[pid_index];
     v[1] = &g_pts[gin3].v[pid_index];
@@ -961,7 +961,7 @@
 
     if (!g_pts[gin4].v[pid_index]->vg_p)
        nmg_vertex_gv(g_pts[gin4].v[pid_index], pt4);
-    nmg_calc_face_g(fu);
+    nmg_calc_face_g(fu, &RTG.rtg_vlfree);
 }
 
 
@@ -1049,7 +1049,7 @@
     if (!g_pts[gin3].v[pid_index]->vg_p)
        nmg_vertex_gv(g_pts[gin3].v[pid_index], pt3);
 
-    nmg_calc_face_g(fu);
+    nmg_calc_face_g(fu, &RTG.rtg_vlfree);
 }
 
 
@@ -1338,10 +1338,10 @@
 
        m = nmg_find_model(&psh->s->l.magic);
        nmg_rebound(m, &tol);
-       nmg_fix_normals(psh->s, &tol);
+       nmg_fix_normals(psh->s, &RTG.rtg_vlfree, &tol);
        if (psh->thick > tol.dist) {
-           nmg_model_face_fuse(m, &tol);
-           nmg_hollow_shell(psh->s, psh->thick*conv[units], 1, &tol);
+           nmg_model_face_fuse(m, &RTG.rtg_vlfree, &tol);
+           nmg_hollow_shell(psh->s, psh->thick*conv[units], 1, 
&RTG.rtg_vlfree, &tol);
        }
        sprintf(name, "pshell.%d", psh->pid);
        if (polysolids)

Modified: brlcad/trunk/src/conv/nmg/asc-nmg.c
===================================================================
--- brlcad/trunk/src/conv/nmg/asc-nmg.c 2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/nmg/asc-nmg.c 2016-10-03 21:39:41 UTC (rev 68974)
@@ -161,11 +161,11 @@
        nmg_face_g( fu, pl );
 
     if (!NEAR_ZERO(MAGNITUDE(Ext), 0.001))
-       nmg_extrude_face(BU_LIST_FIRST(faceuse, &s->fu_hd), Ext, &tol);
+       nmg_extrude_face(BU_LIST_FIRST(faceuse, &s->fu_hd), Ext, 
&RTG.rtg_vlfree, &tol);
 
     nmg_region_a(r, &tol);     /* Calculate geometry for region and shell. */
 
-    nmg_fix_normals( s, &tol ); /* insure that faces have outward pointing 
normals */
+    nmg_fix_normals( s, &RTG.rtg_vlfree, &tol ); /* insure that faces have 
outward pointing normals */
 
     create_brlcad_db(fpout, m, reg_name, grp_name);
 

Modified: brlcad/trunk/src/conv/nmg/g-nmg.c
===================================================================
--- brlcad/trunk/src/conv/nmg/g-nmg.c   2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/nmg/g-nmg.c   2016-10-03 21:39:41 UTC (rev 68974)
@@ -165,7 +165,7 @@
     if (ret_tree) {
        r = ret_tree->tr_d.td_r;
        if (do_bots && r) {
-           bot = nmg_bot(BU_LIST_FIRST(shell, &r->s_hd), tsp->ts_tol);
+           bot = nmg_bot(BU_LIST_FIRST(shell, &r->s_hd), &RTG.rtg_vlfree, 
tsp->ts_tol);
        }
     } else {
        if (verbose) {

Modified: brlcad/trunk/src/conv/nmg/nmg-rib.c
===================================================================
--- brlcad/trunk/src/conv/nmg/nmg-rib.c 2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/nmg/nmg-rib.c 2016-10-03 21:39:41 UTC (rev 68974)
@@ -143,7 +143,7 @@
 
 
     if (triangulate)
-       nmg_triangulate_model(m, &tol);
+       nmg_triangulate_model(m, &RTG.rtg_vlfree, &tol);
 
     for (BU_LIST_FOR(r, nmgregion, &m->r_hd))
        for (BU_LIST_FOR(s, shell, &r->s_hd))

Modified: brlcad/trunk/src/conv/nmg/nmg-sgp.c
===================================================================
--- brlcad/trunk/src/conv/nmg/nmg-sgp.c 2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/nmg/nmg-sgp.c 2016-10-03 21:39:41 UTC (rev 68974)
@@ -64,7 +64,7 @@
 
     NMG_CK_FACEUSE( fu );
 
-    if (nmg_triangulate_fu( fu, &tol )) {
+    if (nmg_triangulate_fu( fu, &RTG.rtg_vlfree, &tol )) {
        return 1;
     }
 

Modified: brlcad/trunk/src/conv/obj-g.c
===================================================================
--- brlcad/trunk/src/conv/obj-g.c       2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/obj-g.c       2016-10-03 21:39:41 UTC (rev 68974)
@@ -1354,7 +1354,7 @@
     if (fu != NULL) {
 
        /* do simple or robust triangulation based on whether face is concave 
or convex */
-       if (nmg_lu_is_convex(BU_LIST_FIRST(loopuse, &fu->lu_hd), tol)) {
+       if (nmg_lu_is_convex(BU_LIST_FIRST(loopuse, &fu->lu_hd), 
&RTG.rtg_vlfree, tol)) {
 
            /* compute number of new triangles to create */
            if (gfi->num_vertices_arr[face_idx] > 3) {
@@ -2877,7 +2877,7 @@
        if ((verbose > 1) || debug) {
            bu_log("Running nmg_model_fuse on (%ld) faces from obj file face 
grouping name (%s), obj file face grouping index (%zu)\n", BU_PTBL_LEN(&faces), 
bu_vls_addr(gfi->raw_grouping_name), gfi->grouping_index + 1);
        }
-       num_entities_fused = nmg_model_fuse(m, tol);
+       num_entities_fused = nmg_model_fuse(m, &RTG.rtg_vlfree, tol);
        if ((verbose > 1) || debug) {
            bu_log("Completed nmg_model_fuse for obj file face grouping name 
(%s), obj file face grouping index (%zu)\n", 
bu_vls_addr(gfi->raw_grouping_name), gfi->grouping_index + 1);
            bu_log("Fused (%d) entities in obj file face grouping name (%s), 
obj file face grouping index (%zu)\n",
@@ -2888,7 +2888,7 @@
        if ((verbose > 1) || debug) {
            bu_log("Running nmg_gluefaces on (%ld) faces from obj file face 
grouping name (%s), obj file face grouping index (%zu)\n", BU_PTBL_LEN(&faces), 
bu_vls_addr(gfi->raw_grouping_name), gfi->grouping_index + 1);
        }
-       nmg_gluefaces((struct faceuse **)BU_PTBL_BASEADDR(&faces), 
BU_PTBL_LEN(&faces), tol);
+       nmg_gluefaces((struct faceuse **)BU_PTBL_BASEADDR(&faces), 
BU_PTBL_LEN(&faces), &RTG.rtg_vlfree, tol);
        if ((verbose > 1) || debug) {
            bu_log("Completed nmg_gluefaces for obj file face grouping name 
(%s), obj file face grouping index (%zu)\n", 
bu_vls_addr(gfi->raw_grouping_name), gfi->grouping_index + 1);
        }
@@ -2897,7 +2897,7 @@
        if ((verbose > 1) || debug) {
            bu_log("Running nmg_mark_edges_real with approx (%ld) faces from 
obj file face grouping name (%s), obj file face grouping index (%zu)\n", 
BU_PTBL_LEN(&faces), bu_vls_addr(gfi->raw_grouping_name), gfi->grouping_index + 
1);
        }
-       (void)nmg_mark_edges_real(&s->l.magic);
+       (void)nmg_mark_edges_real(&s->l.magic, &RTG.rtg_vlfree);
        if ((verbose > 1) || debug) {
            bu_log("Completed nmg_mark_edges_real for obj file face grouping 
name (%s), obj file face grouping index (%zu)\n", 
bu_vls_addr(gfi->raw_grouping_name), gfi->grouping_index + 1);
        }
@@ -2940,7 +2940,7 @@
                if ((verbose > 1) || debug) {
                    bu_log("Running nmg_fix_normals with approx (%ld) faces 
from obj file face grouping name (%s), obj file face grouping index (%zu)\n", 
BU_PTBL_LEN(&faces), bu_vls_addr(gfi->raw_grouping_name), gfi->grouping_index + 
1);
                }
-               nmg_fix_normals(s, tol);
+               nmg_fix_normals(s, &RTG.rtg_vlfree, tol);
                if ((verbose > 1) || debug) {
                    bu_log("Completed nmg_fix_normals for obj file face 
grouping name (%s), obj file face grouping index (%zu)\n", 
bu_vls_addr(gfi->raw_grouping_name), gfi->grouping_index + 1);
                }

Modified: brlcad/trunk/src/conv/off/g-off.c
===================================================================
--- brlcad/trunk/src/conv/off/g-off.c   2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/off/g-off.c   2016-10-03 21:39:41 UTC (rev 68974)
@@ -211,7 +211,7 @@
     if ( !BU_SETJUMP ) {
        /* try */
 
-       (void)nmg_model_fuse(*tsp->ts_m, tsp->ts_tol);
+       (void)nmg_model_fuse(*tsp->ts_m, &RTG.rtg_vlfree, tsp->ts_tol);
        ret_tree = nmg_booltree_evaluate(curtree, &RTG.rtg_vlfree, tsp->ts_tol, 
&rt_uniresource);
 
     } else  {
@@ -404,7 +404,7 @@
     map = (int *)bu_calloc(r->m_p->maxindex, sizeof(int), "Jack vert map");
 
     /* Built list of vertex structs */
-    nmg_vertex_tabulate( &vtab, &r->l.magic );
+    nmg_vertex_tabulate( &vtab, &r->l.magic, &RTG.rtg_vlfree );
 
     /* FIXME: What to do if 0 vertices?  */
 

Modified: brlcad/trunk/src/conv/off/off-g.c
===================================================================
--- brlcad/trunk/src/conv/off/off-g.c   2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/off/off-g.c   2016-10-03 21:39:41 UTC (rev 68974)
@@ -140,7 +140,7 @@
 
     if (fail) return -1;
 
-    nmg_gluefaces(outfaceuses, nfaces, &tol);
+    nmg_gluefaces(outfaceuses, nfaces, &RTG.rtg_vlfree, &tol);
     nmg_region_a(r, &tol);
 
     bu_free((char *)pts, "points list");

Modified: brlcad/trunk/src/conv/patch/patch-g.c
===================================================================
--- brlcad/trunk/src/conv/patch/patch-g.c       2016-10-03 15:05:00 UTC (rev 
68973)
+++ brlcad/trunk/src/conv/patch/patch-g.c       2016-10-03 21:39:41 UTC (rev 
68974)
@@ -388,7 +388,7 @@
                struct loopuse *lu;
 
                for (BU_LIST_FOR (lu, loopuse, &fu1->lu_hd))
-                   nmg_simplify_loop(lu);
+                   nmg_simplify_loop(lu, &RTG.rtg_vlfree);
            }
        }
     }
@@ -636,29 +636,29 @@
     bu_free((char *)verts, "build_solid: verts");
 
     /* fuse vertices */
-    (void)nmg_vertex_fuse(&m->magic, tol);
+    (void)nmg_vertex_fuse(&m->magic, &RTG.rtg_vlfree, tol);
 
     /* FASTGEN targets may have vertices that should be part of an
      * adjoining edge. Use nmg_break_long_edges to fix this
      */
-    i = nmg_break_edges(&m->magic, tol);
+    i = nmg_break_edges(&m->magic, &RTG.rtg_vlfree, tol);
     if (debug > 2)
        bu_log("nmg_break_edges broke %d edges\n", i);
 
     /* glue all the faces together */
-    nmg_gluefaces((struct faceuse **)BU_PTBL_BASEADDR(&faces), 
BU_PTBL_LEN(&faces), tol);
+    nmg_gluefaces((struct faceuse **)BU_PTBL_BASEADDR(&faces), 
BU_PTBL_LEN(&faces), &RTG.rtg_vlfree, tol);
 
     for (BU_LIST_FOR (s, shell, &r->s_hd))
-       nmg_make_faces_within_tol(s, tol);
+       nmg_make_faces_within_tol(s, &RTG.rtg_vlfree, tol);
 
     if (!plate_mode) {
        /* make sure the normals are correct */
        for (BU_LIST_FOR (s, shell, &r->s_hd))
-           nmg_fix_normals(s, tol);
+           nmg_fix_normals(s, &RTG.rtg_vlfree, tol);
 
        /* make sure we are dealing with closed shells */
        for (BU_LIST_FOR (s, shell, &r->s_hd))
-           nmg_close_shell(s, tol);
+           nmg_close_shell(s, &RTG.rtg_vlfree, tol);
 
        /* free the memory for the face list */
        bu_ptbl_free(&faces);
@@ -675,8 +675,8 @@
        if (polysolid) {
            mk_bot_from_nmg(outfp, name, s);
        } else {
-           nmg_shell_coplanar_face_merge(s, tol, 0);
-           if (!nmg_simplify_shell(s)) {
+           nmg_shell_coplanar_face_merge(s, tol, 0, &RTG.rtg_vlfree);
+           if (!nmg_simplify_shell(s, &RTG.rtg_vlfree)) {
                struct model *m_copy = nmg_clone_model(m);
                mk_nmg(outfp, name, m_copy); /* frees m_copy */
            }
@@ -684,7 +684,7 @@
 
        /* if this solid is mirrored, don't go through the entire process again 
*/
        if (mirror_name[0]) {
-           nmg_mirror_model(m);
+           nmg_mirror_model(m, &RTG.rtg_vlfree);
 
            if (polysolid) {
                mk_bot_from_nmg(outfp, mirror_name, s);
@@ -802,7 +802,7 @@
 
     nmg_patch_coplanar_face_merge(s, &face_count, p_faces, tol, 0);
 
-    if (nmg_simplify_shell(s))
+    if (nmg_simplify_shell(s, &RTG.rtg_vlfree))
        return 1;
 
     /* Calculate bounding boxes */
@@ -817,7 +817,7 @@
     }
 
     /* Duplicate shell */
-    is = nmg_dup_shell(s, &copy_tbl, tol);
+    is = nmg_dup_shell(s, &copy_tbl, &RTG.rtg_vlfree, tol);
 
     /* make a new flags array */
     bu_free((char *)flags, "build_solid: flags");
@@ -866,10 +866,10 @@
        if (fu->orientation == OT_SAME)
            bu_ptbl_ins(&faces, (long *)fu);
     }
-    nmg_gluefaces((struct faceuse **)BU_PTBL_BASEADDR(&faces), 
BU_PTBL_LEN(&faces), tol);
+    nmg_gluefaces((struct faceuse **)BU_PTBL_BASEADDR(&faces), 
BU_PTBL_LEN(&faces), &RTG.rtg_vlfree, tol);
     bu_ptbl_reset(&faces);
 
-    nmg_shell_coplanar_face_merge(is, tol, 0);
+    nmg_shell_coplanar_face_merge(is, tol, 0, &RTG.rtg_vlfree);
     nmg_shell_a(is, tol);
 
     /* make yet another version of the flags array */
@@ -917,7 +917,7 @@
        /* Adjust the vertices of new_v */
        if (debug > 2)
            bu_log("Moving (%f %f %f)", V3ARGS(new_v->vg_p->coord));
-       if (nmg_in_vert(new_v, 1, tol)) {
+       if (nmg_in_vert(new_v, 1, &RTG.rtg_vlfree, tol)) {
            /* FAILURE, kill the model and shell and return a failure 
notification */
            bu_log("nmg_in_vert failed on %s!\n", name);
            if (!nmg_ks(is)) {
@@ -951,12 +951,12 @@
        mk_nmg(outfp, tmp_name, m_copy); /* frees m_copy */
     }
 
-    nmg_make_faces_within_tol(is, tol);
+    nmg_make_faces_within_tol(is, &RTG.rtg_vlfree, tol);
 
     /* Close shell */
     if (debug)
        bu_log("Close shell\n");
-    if (nmg_open_shells_connect(s, is, (const long **)copy_tbl, tol)) {
+    if (nmg_open_shells_connect(s, is, (const long **)copy_tbl, 
&RTG.rtg_vlfree, tol)) {
        /* debugging: write an NMG of the outer shell named "name.BAD" */
        char bad[NAMESIZE+5];
 
@@ -982,7 +982,7 @@
     }
     if (debug)
        bu_log("Re-glue faces\n");
-    nmg_gluefaces((struct faceuse **)BU_PTBL_BASEADDR(&faces), 
BU_PTBL_LEN(&faces), tol);
+    nmg_gluefaces((struct faceuse **)BU_PTBL_BASEADDR(&faces), 
BU_PTBL_LEN(&faces), &RTG.rtg_vlfree, tol);
     bu_ptbl_free(&faces);
 
     /* Calculate bounding boxes */
@@ -999,8 +999,8 @@
     if (polysolid) {
        mk_bot_from_nmg(outfp, name, s);
     } else {
-       nmg_shell_coplanar_face_merge(s, tol, 0);
-       if (!nmg_simplify_shell(s)) {
+       nmg_shell_coplanar_face_merge(s, tol, 0, &RTG.rtg_vlfree);
+       if (!nmg_simplify_shell(s, &RTG.rtg_vlfree)) {
            struct model *m_copy = nmg_clone_model(m);
            mk_nmg(outfp, name, m_copy); /* frees m_copy */
        }
@@ -1010,7 +1010,7 @@
     if (mirror_name[0]) {
        if (debug)
            bu_log("Mirror model\n");
-       nmg_mirror_model(m);
+       nmg_mirror_model(m, &RTG.rtg_vlfree);
 
        if (debug)
            bu_log("writing  %s (mirrored) to BRL-CAD DB\n", mirror_name);

Modified: brlcad/trunk/src/conv/ply/g-ply.c
===================================================================
--- brlcad/trunk/src/conv/ply/g-ply.c   2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/ply/g-ply.c   2016-10-03 21:39:41 UTC (rev 68974)
@@ -190,7 +190,7 @@
     NMG_CK_MODEL(m);
 
     /* triangulate model */
-    nmg_triangulate_model(m, &tol);
+    nmg_triangulate_model(m, &RTG.rtg_vlfree, &tol);
 
     /* Output triangles */
     if (verbose)
@@ -414,7 +414,7 @@
     if (!BU_SETJUMP) {
        /* try */
 
-       (void)nmg_model_fuse(*tsp->ts_m, tsp->ts_tol);
+       (void)nmg_model_fuse(*tsp->ts_m, &RTG.rtg_vlfree, tsp->ts_tol);
        ret_tree = nmg_booltree_evaluate(curtree, &RTG.rtg_vlfree, tsp->ts_tol, 
&rt_uniresource);
 
     } else  {

Modified: brlcad/trunk/src/conv/raw/g-raw.c
===================================================================
--- brlcad/trunk/src/conv/raw/g-raw.c   2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/raw/g-raw.c   2016-10-03 21:39:41 UTC (rev 68974)
@@ -141,7 +141,7 @@
     fprintf(fp, "%s\n", (region_name+1));
 
     /* triangulate model */
-    nmg_triangulate_model(m, &tol);
+    nmg_triangulate_model(m, &RTG.rtg_vlfree, &tol);
 
     /* Check triangles */
     for (BU_LIST_FOR (s, shell, &r->s_hd))

Modified: brlcad/trunk/src/conv/stl/g-stl.c
===================================================================
--- brlcad/trunk/src/conv/stl/g-stl.c   2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/stl/g-stl.c   2016-10-03 21:39:41 UTC (rev 68974)
@@ -176,7 +176,7 @@
        fprintf(fp, "solid %s\n", (region_name+1));
 
     /* triangulate model */
-    nmg_triangulate_model(m, &tol);
+    nmg_triangulate_model(m, &RTG.rtg_vlfree, &tol);
 
     /* Check triangles */
     for (BU_LIST_FOR (s, shell, &r->s_hd))

Modified: brlcad/trunk/src/conv/tankill/g-tankill.c
===================================================================
--- brlcad/trunk/src/conv/tankill/g-tankill.c   2016-10-03 15:05:00 UTC (rev 
68973)
+++ brlcad/trunk/src/conv/tankill/g-tankill.c   2016-10-03 21:39:41 UTC (rev 
68974)
@@ -183,7 +183,7 @@
        }
     }
     /* Now triangulate the entire model */
-    nmg_triangulate_model( m, &tol );
+    nmg_triangulate_model( m, &RTG.rtg_vlfree, &tol );
 
     /* Need a flag array to insure that no loops are missed */
     flags = (long *)bu_calloc( m->maxindex, sizeof( long ), "g-tankill: flags" 
);
@@ -622,7 +622,7 @@
     if ( !BU_SETJUMP ) {
        /* try */
 
-       (void)nmg_model_fuse(*tsp->ts_m, tsp->ts_tol);
+       (void)nmg_model_fuse(*tsp->ts_m, &RTG.rtg_vlfree, tsp->ts_tol);
        ret_tree = nmg_booltree_evaluate(curtree, &RTG.rtg_vlfree, tsp->ts_tol, 
&rt_uniresource);
 
     } else  {

Modified: brlcad/trunk/src/conv/tankill/tankill-g.c
===================================================================
--- brlcad/trunk/src/conv/tankill/tankill-g.c   2016-10-03 15:05:00 UTC (rev 
68973)
+++ brlcad/trunk/src/conv/tankill/tankill-g.c   2016-10-03 21:39:41 UTC (rev 
68974)
@@ -341,7 +341,7 @@
                NMG_CK_FACEUSE( fu );
                if ( fu->orientation == OT_SAME )
                {
-                   if ( nmg_calc_face_g( fu ) )
+                   if ( nmg_calc_face_g( fu, &RTG.rtg_vlfree ) )
                        bu_log( "Failed to calculate plane eqn\n" );
 
                    /* save the face in a table */
@@ -364,7 +364,7 @@
        nmg_break_long_edges( s, &tol );
 
        /* glue all the faces together */
-       nmg_gluefaces( (struct faceuse **)BU_PTBL_BASEADDR( &faces), 
BU_PTBL_LEN( &faces ), &tol );
+       nmg_gluefaces( (struct faceuse **)BU_PTBL_BASEADDR( &faces), 
BU_PTBL_LEN( &faces ), &RTG.rtg_vlfree, &tol );
 
        /* re-initialize the face list */
        bu_ptbl_reset( &faces );
@@ -375,7 +375,7 @@
        /* fix the normals */
        s = BU_LIST_FIRST( shell, &r->s_hd );
 
-       nmg_fix_normals( s, &tol );
+       nmg_fix_normals( s, &RTG.rtg_vlfree, &tol );
 
        /* make a name for this solid */
        sprintf( name, "s.%d.%d", comp_code, Add_solid( comp_code ) );

Modified: brlcad/trunk/src/conv/viewpoint-g.c
===================================================================
--- brlcad/trunk/src/conv/viewpoint-g.c 2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/conv/viewpoint-g.c 2016-10-03 21:39:41 UTC (rev 68974)
@@ -329,7 +329,7 @@
            }
        }
 
-       (void)nmg_vertex_fuse(&m->magic, &tol);
+       (void)nmg_vertex_fuse(&m->magic, &RTG.rtg_vlfree, &tol);
 
        /* calculate plane equations for faces */
        NMG_CK_SHELL(s);
@@ -376,12 +376,12 @@
 
        if (BU_PTBL_LEN(&faces)) {
            /* glue faces together */
-           nmg_gluefaces((struct faceuse **)BU_PTBL_BASEADDR(&faces), 
BU_PTBL_LEN(&faces), &tol);
+           nmg_gluefaces((struct faceuse **)BU_PTBL_BASEADDR(&faces), 
BU_PTBL_LEN(&faces), &RTG.rtg_vlfree, &tol);
 
            nmg_rebound(m, &tol);
-           nmg_fix_normals(s, &tol);
+           nmg_fix_normals(s, &RTG.rtg_vlfree, &tol);
 
-           nmg_shell_coplanar_face_merge(s, &tol, 1);
+           nmg_shell_coplanar_face_merge(s, &tol, 1, &RTG.rtg_vlfree);
 
            nmg_rebound(m, &tol);
 

Modified: brlcad/trunk/src/libgcv/bottess.c
===================================================================
--- brlcad/trunk/src/libgcv/bottess.c   2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/libgcv/bottess.c   2016-10-03 21:39:41 UTC (rev 68974)
@@ -422,7 +422,7 @@
                struct nmgregion *nmgr = BU_LIST_FIRST(nmgregion, 
&tr->tr_d.td_r->m_p->r_hd);
                /* the bot temporary format may be unnecessary if we can walk
                 * the nmg shells and generate soup from them directly. */
-               struct rt_bot_internal *bot = nmg_bot(BU_LIST_FIRST(shell, 
&nmgr->s_hd), tol);
+               struct rt_bot_internal *bot = nmg_bot(BU_LIST_FIRST(shell, 
&nmgr->s_hd), &RTG.rtg_vlfree, tol);
 
                /* causes a crash.
                   nmg_kr(nmgr);

Modified: brlcad/trunk/src/libgcv/facetize.c
===================================================================
--- brlcad/trunk/src/libgcv/facetize.c  2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/libgcv/facetize.c  2016-10-03 21:39:41 UTC (rev 68974)
@@ -201,11 +201,11 @@
            if (!BU_SETJUMP) {
                /* try */
                if (!result)
-                   result = nmg_bot(current_shell, tol);
+                   result = nmg_bot(current_shell, &RTG.rtg_vlfree, tol);
                else {
                    struct rt_bot_internal *bots[2];
                    bots[0] = result;
-                   bots[1] = nmg_bot(current_shell, tol);
+                   bots[1] = nmg_bot(current_shell, &RTG.rtg_vlfree, tol);
                    result = rt_bot_merge(sizeof(bots) / sizeof(bots[0]),
                                          (const struct rt_bot_internal * const 
*)bots);
                    _gcv_facetize_free_bot(bots[0]);

Modified: brlcad/trunk/src/libgcv/plugins/fastgen4/fastgen4_write.cpp
===================================================================
--- brlcad/trunk/src/libgcv/plugins/fastgen4/fastgen4_write.cpp 2016-10-03 
15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/libgcv/plugins/fastgen4/fastgen4_write.cpp 2016-10-03 
21:39:41 UTC (rev 68974)
@@ -2406,7 +2406,7 @@
     for (BU_LIST_FOR(current_shell, shell, &nmg_region->s_hd)) {
        NMG_CK_SHELL(current_shell);
 
-       rt_bot_internal * const bot = nmg_bot(current_shell, &data.m_tol);
+       rt_bot_internal * const bot = nmg_bot(current_shell, &RTG.rtg_vlfree, 
&data.m_tol);
 
        // fill in an rt_db_internal with our new bot so we can free it
        rt_db_internal internal;

Modified: brlcad/trunk/src/libgcv/plugins/obj/obj_read.c
===================================================================
--- brlcad/trunk/src/libgcv/plugins/obj/obj_read.c      2016-10-03 15:05:00 UTC 
(rev 68973)
+++ brlcad/trunk/src/libgcv/plugins/obj/obj_read.c      2016-10-03 21:39:41 UTC 
(rev 68974)
@@ -1275,7 +1275,7 @@
     if (fu != NULL) {
 
        /* do simple or robust triangulation based on whether face is concave 
or convex */
-       if (nmg_lu_is_convex(BU_LIST_FIRST(loopuse, &fu->lu_hd), tol)) {
+       if (nmg_lu_is_convex(BU_LIST_FIRST(loopuse, &fu->lu_hd), 
&RTG.rtg_vlfree, tol)) {
 
            /* compute number of new triangles to create */
            if (gfi->num_vertices_arr[face_idx] > 3) {
@@ -2798,7 +2798,7 @@
        if ((ga->gcv_options->verbosity_level > 1) || 
ga->gcv_options->debug_mode) {
            bu_log("Running nmg_model_fuse on (%ld) faces from obj file face 
grouping name (%s), obj file face grouping index (%zu)\n", BU_PTBL_LEN(&faces), 
bu_vls_addr(gfi->raw_grouping_name), gfi->grouping_index + 1);
        }
-       num_entities_fused = nmg_model_fuse(m, tol);
+       num_entities_fused = nmg_model_fuse(m, &RTG.rtg_vlfree, tol);
        if ((ga->gcv_options->verbosity_level > 1) || 
ga->gcv_options->debug_mode) {
            bu_log("Completed nmg_model_fuse for obj file face grouping name 
(%s), obj file face grouping index (%zu)\n", 
bu_vls_addr(gfi->raw_grouping_name), gfi->grouping_index + 1);
            bu_log("Fused (%d) entities in obj file face grouping name (%s), 
obj file face grouping index (%zu)\n",
@@ -2809,7 +2809,7 @@
        if ((ga->gcv_options->verbosity_level > 1) || 
ga->gcv_options->debug_mode) {
            bu_log("Running nmg_gluefaces on (%ld) faces from obj file face 
grouping name (%s), obj file face grouping index (%zu)\n", BU_PTBL_LEN(&faces), 
bu_vls_addr(gfi->raw_grouping_name), gfi->grouping_index + 1);
        }
-       nmg_gluefaces((struct faceuse **)BU_PTBL_BASEADDR(&faces), 
BU_PTBL_LEN(&faces), tol);
+       nmg_gluefaces((struct faceuse **)BU_PTBL_BASEADDR(&faces), 
BU_PTBL_LEN(&faces), &RTG.rtg_vlfree, tol);
        if ((ga->gcv_options->verbosity_level > 1) || 
ga->gcv_options->debug_mode) {
            bu_log("Completed nmg_gluefaces for obj file face grouping name 
(%s), obj file face grouping index (%zu)\n", 
bu_vls_addr(gfi->raw_grouping_name), gfi->grouping_index + 1);
        }
@@ -2818,7 +2818,7 @@
        if ((ga->gcv_options->verbosity_level > 1) || 
ga->gcv_options->debug_mode) {
            bu_log("Running nmg_mark_edges_real with approx (%ld) faces from 
obj file face grouping name (%s), obj file face grouping index (%zu)\n", 
BU_PTBL_LEN(&faces), bu_vls_addr(gfi->raw_grouping_name), gfi->grouping_index + 
1);
        }
-       (void)nmg_mark_edges_real(&s->l.magic);
+       (void)nmg_mark_edges_real(&s->l.magic,&RTG.rtg_vlfree);
        if ((ga->gcv_options->verbosity_level > 1) || 
ga->gcv_options->debug_mode) {
            bu_log("Completed nmg_mark_edges_real for obj file face grouping 
name (%s), obj file face grouping index (%zu)\n", 
bu_vls_addr(gfi->raw_grouping_name), gfi->grouping_index + 1);
        }
@@ -2861,7 +2861,7 @@
                if ((ga->gcv_options->verbosity_level > 1) || 
ga->gcv_options->debug_mode) {
                    bu_log("Running nmg_fix_normals with approx (%ld) faces 
from obj file face grouping name (%s), obj file face grouping index (%zu)\n", 
BU_PTBL_LEN(&faces), bu_vls_addr(gfi->raw_grouping_name), gfi->grouping_index + 
1);
                }
-               nmg_fix_normals(s, tol);
+               nmg_fix_normals(s, &RTG.rtg_vlfree, tol);
                if ((ga->gcv_options->verbosity_level > 1) || 
ga->gcv_options->debug_mode) {
                    bu_log("Completed nmg_fix_normals for obj file face 
grouping name (%s), obj file face grouping index (%zu)\n", 
bu_vls_addr(gfi->raw_grouping_name), gfi->grouping_index + 1);
                }

Modified: brlcad/trunk/src/libgcv/plugins/obj/obj_write.c
===================================================================
--- brlcad/trunk/src/libgcv/plugins/obj/obj_write.c     2016-10-03 15:05:00 UTC 
(rev 68973)
+++ brlcad/trunk/src/libgcv/plugins/obj/obj_write.c     2016-10-03 21:39:41 UTC 
(rev 68974)
@@ -89,17 +89,17 @@
     NMG_CK_MODEL(m);
 
     /* triangulate model */
-    nmg_triangulate_model(m, &pstate->gcv_options->calculational_tolerance);
+    nmg_triangulate_model(m, &RTG.rtg_vlfree, 
&pstate->gcv_options->calculational_tolerance);
 
     /* list all vertices in result */
-    nmg_vertex_tabulate(&verts, &r->l.magic);
+    nmg_vertex_tabulate(&verts, &r->l.magic, &RTG.rtg_vlfree);
 
     /* Get number of vertices */
     numverts = BU_PTBL_LEN(&verts);
 
     /* get list of vertexuse normals */
     if (pstate->obj_write_options->do_normals)
-       nmg_vertexuse_normal_tabulate(&norms, &r->l.magic);
+       nmg_vertexuse_normal_tabulate(&norms, &r->l.magic, &RTG.rtg_vlfree);
 
     /* BEGIN CHECK SECTION */
     /* Check vertices */
@@ -332,7 +332,7 @@
     if (!BU_SETJUMP) {
        /* try */
 
-       (void)nmg_model_fuse(*tsp->ts_m, tsp->ts_tol);
+       (void)nmg_model_fuse(*tsp->ts_m, &RTG.rtg_vlfree, tsp->ts_tol);
        ret_tree = nmg_booltree_evaluate(curtree, &RTG.rtg_vlfree, tsp->ts_tol, 
&rt_uniresource);
 
     } else {

Modified: brlcad/trunk/src/libgcv/plugins/obj/tri_face.c
===================================================================
--- brlcad/trunk/src/libgcv/plugins/obj/tri_face.c      2016-10-03 15:05:00 UTC 
(rev 68973)
+++ brlcad/trunk/src/libgcv/plugins/obj/tri_face.c      2016-10-03 21:39:41 UTC 
(rev 68974)
@@ -137,7 +137,7 @@
     /* add geometry to face */
     fu = BU_LIST_FIRST(faceuse, &shell->fu_hd);
     attach_face_g_plane(model, fu->f_p);
-    if (nmg_calc_face_plane(fu, fu->f_p->g.plane_p->N)) {
+    if (nmg_calc_face_plane(fu, fu->f_p->g.plane_p->N, &RTG.rtg_vlfree)) {
        nmg_km(model);
        model = NULL;
     } else {
@@ -230,7 +230,7 @@
     }
 
     /* triangulate face */
-    if (nmg_triangulate_fu(fu, &tol)) {
+    if (nmg_triangulate_fu(fu, &RTG.rtg_vlfree, &tol)) {
        *faces = NULL;
        *numFaces = 0;
        return;

Modified: brlcad/trunk/src/libgcv/plugins/stl/stl_write.c
===================================================================
--- brlcad/trunk/src/libgcv/plugins/stl/stl_write.c     2016-10-03 15:05:00 UTC 
(rev 68973)
+++ brlcad/trunk/src/libgcv/plugins/stl/stl_write.c     2016-10-03 21:39:41 UTC 
(rev 68974)
@@ -200,7 +200,7 @@
        fprintf(pstate->fp, "solid %s\n", (region_name+1));
 
     /* triangulate model */
-    nmg_triangulate_model(m, &pstate->gcv_options->calculational_tolerance);
+    nmg_triangulate_model(m, &RTG.rtg_vlfree, 
&pstate->gcv_options->calculational_tolerance);
 
     /* Check triangles */
     for (BU_LIST_FOR (s, shell, &r->s_hd))

Modified: brlcad/trunk/src/libgcv/plugins/vrml/vrml_write.c
===================================================================
--- brlcad/trunk/src/libgcv/plugins/vrml/vrml_write.c   2016-10-03 15:05:00 UTC 
(rev 68973)
+++ brlcad/trunk/src/libgcv/plugins/vrml/vrml_write.c   2016-10-03 21:39:41 UTC 
(rev 68974)
@@ -789,14 +789,14 @@
     }
 
     if (!is_light) {
-       nmg_triangulate_model(m, tol2);
+       nmg_triangulate_model(m, &RTG.rtg_vlfree, tol2);
        fprintf(pstate->fp_out, "\t\t\t}\n");
        fprintf(pstate->fp_out, "\t\t\tgeometry IndexedFaceSet {\n");
        fprintf(pstate->fp_out, "\t\t\t\tcoord Coordinate {\n");
     }
 
     /* get list of vertices */
-    nmg_vertex_tabulate(&verts, &m->magic);
+    nmg_vertex_tabulate(&verts, &m->magic, &RTG.rtg_vlfree);
     if (!is_light) {
        fprintf(pstate->fp_out, "\t\t\t\t\tpoint [");
     } else {

Modified: brlcad/trunk/src/libged/bev.c
===================================================================
--- brlcad/trunk/src/libged/bev.c       2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/libged/bev.c       2016-10-03 21:39:41 UTC (rev 68974)
@@ -282,7 +282,7 @@
            bev_nmg_model = (struct model *)NULL;
            return GED_ERROR;
        }
-       nmg_triangulate_model(bev_nmg_model, &gedp->ged_wdbp->wdb_tol);
+       nmg_triangulate_model(bev_nmg_model, &RTG.rtg_vlfree, 
&gedp->ged_wdbp->wdb_tol);
        BU_UNSETJUMP;
     }
 

Modified: brlcad/trunk/src/libged/bigE.c
===================================================================
--- brlcad/trunk/src/libged/bigE.c      2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/libged/bigE.c      2016-10-03 21:39:41 UTC (rev 68974)
@@ -182,7 +182,7 @@
 
            if (solid_is_plate_mode_bot
                || !eptr->l.m
-               || (bot=nmg_bot(s, &dgcdp->gedp->ged_wdbp->wdb_tol)) == (struct 
rt_bot_internal *)NULL)
+               || (bot=nmg_bot(s, &RTG.rtg_vlfree, 
&dgcdp->gedp->ged_wdbp->wdb_tol)) == (struct rt_bot_internal *)NULL)
            {
                eptr->l.stp->st_id = id;
                eptr->l.stp->st_meth = &OBJ[id];
@@ -1375,7 +1375,7 @@
        }
 
        if (leaf_ptr->l.m)
-           nmg_edge_tabulate(&leaf_ptr->l.edge_list, &leaf_ptr->l.m->magic);
+           nmg_edge_tabulate(&leaf_ptr->l.edge_list, &leaf_ptr->l.m->magic, 
&RTG.rtg_vlfree);
        else
            bu_ptbl_init(&leaf_ptr->l.edge_list, 1, "edge_list");
     }
@@ -1820,7 +1820,7 @@
        nmg_vertex_g(v[1], max[X], max[Y], min[Z]);
        nmg_vertex_g(v[2], max[X], max[Y], max[Z]);
        nmg_vertex_g(v[3], max[X], min[Y], max[Z]);
-       nmg_calc_face_g(fu);
+       nmg_calc_face_g(fu, &RTG.rtg_vlfree);
 
        vp[0] = &v[4];
        vp[1] = &v[5];
@@ -1831,35 +1831,35 @@
        nmg_vertex_g(v[5], min[X], min[Y], max[Z]);
        nmg_vertex_g(v[6], min[X], max[Y], max[Z]);
        nmg_vertex_g(v[7], min[X], max[Y], min[Z]);
-       nmg_calc_face_g(fu);
+       nmg_calc_face_g(fu, &RTG.rtg_vlfree);
 
        vp[0] = &v[0];
        vp[1] = &v[3];
        vp[2] = &v[5];
        vp[3] = &v[4];
        fu = nmg_cmface(s, vp, 4);
-       nmg_calc_face_g(fu);
+       nmg_calc_face_g(fu, &RTG.rtg_vlfree);
 
        vp[0] = &v[1];
        vp[1] = &v[7];
        vp[2] = &v[6];
        vp[3] = &v[2];
        fu = nmg_cmface(s, vp, 4);
-       nmg_calc_face_g(fu);
+       nmg_calc_face_g(fu, &RTG.rtg_vlfree);
 
        vp[0] = &v[3];
        vp[1] = &v[2];
        vp[2] = &v[6];
        vp[3] = &v[5];
        fu = nmg_cmface(s, vp, 4);
-       nmg_calc_face_g(fu);
+       nmg_calc_face_g(fu, &RTG.rtg_vlfree);
 
        vp[0] = &v[1];
        vp[1] = &v[0];
        vp[2] = &v[4];
        vp[3] = &v[7];
        fu = nmg_cmface(s, vp, 4);
-       nmg_calc_face_g(fu);
+       nmg_calc_face_g(fu, &RTG.rtg_vlfree);
 
        nmg_region_a(r, tol);
 
@@ -1917,7 +1917,7 @@
            vcut[1] = new_eu->vu_p;
            nmg_vertex_gv(vcut[1]->v_p, pt[1]);
 
-           new_lu = nmg_cut_loop(vcut[0], vcut[1]);
+           new_lu = nmg_cut_loop(vcut[0], vcut[1], &RTG.rtg_vlfree);
            nmg_lu_reorient(lu);
            nmg_lu_reorient(new_lu);
 
@@ -1989,13 +1989,13 @@
        }
 
        nmg_rebound(tp->l.m, tol);
-       nmg_model_fuse(tp->l.m, tol);
-       nmg_close_shell(s, tol);
+       nmg_model_fuse(tp->l.m, &RTG.rtg_vlfree, tol);
+       nmg_close_shell(s, &RTG.rtg_vlfree, tol);
        nmg_rebound(tp->l.m, tol);
 
        BU_ALLOC(pg, struct rt_pg_internal);
 
-       if (!nmg_to_poly(tp->l.m, pg, tol)) {
+       if (!nmg_to_poly(tp->l.m, pg, &RTG.rtg_vlfree, tol)) {
            bu_free((char *)pg, "rt_pg_internal");
            bu_vls_printf(dgcdp->gedp->ged_result_str, "Prep failure for solid 
'%s'\n", tp->l.stp->st_dp->d_namep);
        } else {

Modified: brlcad/trunk/src/libged/bot_fuse.c
===================================================================
--- brlcad/trunk/src/libged/bot_fuse.c  2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/libged/bot_fuse.c  2016-10-03 21:39:41 UTC (rev 68974)
@@ -68,7 +68,7 @@
     }
 
     bu_ptbl_init(&faces, 64, "faces buffer");
-    nmg_face_tabulate(&faces, magic_p);
+    nmg_face_tabulate(&faces, magic_p, &RTG.rtg_vlfree);
 
     cnt = 0;
     for (i = 0; i < (size_t)BU_PTBL_LEN(&faces) ; i++) {
@@ -234,13 +234,13 @@
 
     /* Step 1 -- the vertices. */
     bu_log("%s: running nmg_vertex_fuse\n", argv[0]);
-    count = nmg_vertex_fuse(&m->magic, tol);
+    count = nmg_vertex_fuse(&m->magic, &RTG.rtg_vlfree, tol);
     total += count;
     bu_log("%s: %s, %d vertex fused\n", argv[0], argv[i+1], count);
 
     /* Step 1.5 -- break edges on vertices, before fusing edges */
     bu_log("%s: running nmg_break_e_on_v\n", argv[0]);
-    count = nmg_break_e_on_v(&m->magic, tol);
+    count = nmg_break_e_on_v(&m->magic, &RTG.rtg_vlfree, tol);
     total += count;
     bu_log("%s: %s, %d broke 'e' on 'v'\n", argv[0], argv[i+1], count);
 
@@ -256,19 +256,19 @@
 
        for (BU_LIST_FOR(r2, nmgregion, &m->r_hd)) {
            for (BU_LIST_FOR(s, shell, &r2->s_hd))
-               nmg_make_faces_within_tol(s, tol);
+               nmg_make_faces_within_tol(s, &RTG.rtg_vlfree, tol);
        }
     }
 
     /* Step 2 -- the face geometry */
     bu_log("%s: running nmg_model_face_fuse\n", argv[0]);
-    count = nmg_model_face_fuse(m, tol);
+    count = nmg_model_face_fuse(m, &RTG.rtg_vlfree, tol);
     total += count;
     bu_log("%s: %s, %d faces fused\n", argv[0], argv[i+1], count);
 
     /* Step 3 -- edges */
     bu_log("%s: running nmg_edge_fuse\n", argv[0]);
-    count = nmg_edge_fuse(&m->magic, tol);
+    count = nmg_edge_fuse(&m->magic, &RTG.rtg_vlfree, tol);
     total += count;
 
     bu_log("%s: %s, %d edges fused\n", argv[0], argv[i+1], count);
@@ -279,7 +279,7 @@
        /* try */
 
        /* convert the nmg model back into a bot */
-       bot = nmg_bot(BU_LIST_FIRST(shell, &r->s_hd), tol);
+       bot = nmg_bot(BU_LIST_FIRST(shell, &r->s_hd), &RTG.rtg_vlfree, tol);
 
        bu_vls_sprintf(&name_prefix, "open_edges.%s", argv[i]);
        bu_log("%s: running show_dangling_edges\n", argv[0]);

Modified: brlcad/trunk/src/libged/decompose.c
===================================================================
--- brlcad/trunk/src/libged/decompose.c 2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/libged/decompose.c 2016-10-03 21:39:41 UTC (rev 68974)
@@ -112,14 +112,14 @@
            long **trans_tbl;
 
            /* duplicate shell */
-           tmp_s = (struct shell *)nmg_dup_shell(s, &trans_tbl, 
&gedp->ged_wdbp->wdb_tol);
+           tmp_s = (struct shell *)nmg_dup_shell(s, &trans_tbl, 
&RTG.rtg_vlfree, &gedp->ged_wdbp->wdb_tol);
            bu_free((char *)trans_tbl, "trans_tbl");
 
            /* move duplicate to temp region */
            (void) nmg_mv_shell_to_region(tmp_s, tmp_r);
 
            /* decompose this shell */
-           (void) nmg_decompose_shell(tmp_s, &gedp->ged_wdbp->wdb_tol);
+           (void) nmg_decompose_shell(tmp_s, &RTG.rtg_vlfree, 
&gedp->ged_wdbp->wdb_tol);
 
            /* move each decomposed shell to yet another region */
            decomp_s = BU_LIST_FIRST(shell, &tmp_r->s_hd);
@@ -138,11 +138,11 @@
                kill_s = BU_LIST_FIRST(shell, &decomp_r->s_hd);
                (void)nmg_ks(kill_s);
                nmg_shell_a(decomp_s, &gedp->ged_wdbp->wdb_tol);
-               new_s = (struct shell *)nmg_dup_shell(decomp_s, &trans_tbl, 
&gedp->ged_wdbp->wdb_tol);
+               new_s = (struct shell *)nmg_dup_shell(decomp_s, &trans_tbl, 
&RTG.rtg_vlfree, &gedp->ged_wdbp->wdb_tol);
                (void)nmg_mv_shell_to_region(new_s, decomp_r);
 
                /* move this region to a different model */
-               new_m = (struct model *)nmg_mk_model_from_region(decomp_r, 1);
+               new_m = (struct model *)nmg_mk_model_from_region(decomp_r, 1, 
&RTG.rtg_vlfree);
                (void)nmg_rebound(new_m, &gedp->ged_wdbp->wdb_tol);
 
                /* create name for this shell */

Modified: brlcad/trunk/src/libged/draw.c
===================================================================
--- brlcad/trunk/src/libged/draw.c      2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/libged/draw.c      2016-10-03 21:39:41 UTC (rev 68974)
@@ -443,7 +443,7 @@
     if (!BU_SETJUMP) {
        /* try */
 
-       nmg_triangulate_model(*tsp->ts_m, tsp->ts_tol);
+       nmg_triangulate_model(*tsp->ts_m, &RTG.rtg_vlfree, tsp->ts_tol);
        result = 0;
 
     } else {

Modified: brlcad/trunk/src/libged/facetize.c
===================================================================
--- brlcad/trunk/src/libged/facetize.c  2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/libged/facetize.c  2016-10-03 21:39:41 UTC (rev 68974)
@@ -287,7 +287,7 @@
                if (marching_cube == 1)
                    nmg_triangulate_model_mc(nmg_model, 
&gedp->ged_wdbp->wdb_tol);
                else
-                   nmg_triangulate_model(nmg_model, &gedp->ged_wdbp->wdb_tol);
+                   nmg_triangulate_model(nmg_model, &RTG.rtg_vlfree, 
&gedp->ged_wdbp->wdb_tol);
            } else {
                /* catch */
                BU_UNSETJUMP;
@@ -319,7 +319,7 @@
 
            if (!BU_SETJUMP) {
                /* try */
-               bot = (struct rt_bot_internal *)nmg_bot(s, 
&gedp->ged_wdbp->wdb_tol);
+               bot = (struct rt_bot_internal *)nmg_bot(s, &RTG.rtg_vlfree, 
&gedp->ged_wdbp->wdb_tol);
            } else {
                /* catch */
                BU_UNSETJUMP;

Modified: brlcad/trunk/src/libged/inside.c
===================================================================
--- brlcad/trunk/src/libged/inside.c    2016-10-03 15:05:00 UTC (rev 68973)
+++ brlcad/trunk/src/libged/inside.c    2016-10-03 21:39:41 UTC (rev 68974)
@@ -326,14 +326,14 @@
         * This does all the vertices
         */
        bu_ptbl_init(&vert_tab, 64, "vert_tab");
-       nmg_vertex_tabulate(&vert_tab, &m->magic);
+       nmg_vertex_tabulate(&vert_tab, &m->magic, &RTG.rtg_vlfree);
        for (i = 0; i < BU_PTBL_LEN(&vert_tab); i++) {
            struct vertex *v;
 
            v = (struct vertex *)BU_PTBL_GET(&vert_tab, i);
            NMG_CK_VERTEX(v);
 
-           if (nmg_in_vert(v, 0, &gedp->ged_wdbp->wdb_tol)) {
+           if (nmg_in_vert(v, 0, &RTG.rtg_vlfree, &gedp->ged_wdbp->wdb_tol)) {
                bu_vls_printf(gedp->ged_result_str, "Could not find coordinates 
for inside arb7\n");
                nmg_km(m);
                bu_ptbl_free(&vert_tab);

@@ Diff output truncated at 100000 characters. @@
This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to