Revision: 76415
          http://sourceforge.net/p/brlcad/code/76415
Author:   starseeker
Date:     2020-07-22 14:18:04 +0000 (Wed, 22 Jul 2020)
Log Message:
-----------
Work on fixing distcheck

Modified Paths:
--------------
    brlcad/branches/gedplugins/src/libged/3ptarb/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/adc/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/adjust/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/ae2dir/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/analyze/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/annotate/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/arb/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/arced/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/arot/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/attr/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/autoview/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/bb/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/bev/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/bigE/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/blast/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/bo/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/bot/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/brep/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/cat/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/cc/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/check/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/clone/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/coil/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/color/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/comb/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/comb_color/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/comb_std/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/combmem/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/concat/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/constraint/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/copy/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/copyeval/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/copymat/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/cpi/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/dag/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/dbip/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/debug/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/debugbu/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/debugdir/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/debuglib/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/debugnmg/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/decompose/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/delay/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/dir2ae/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/draw/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/dsp/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/dump/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/dup/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/eac/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/echo/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/edarb/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/edcodes/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/edcomb/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/edit/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/editit/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/edmater/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/env/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/erase/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/exists/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/expand/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/eye_pos/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/facetize/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/fb2pix/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/fbclear/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/find/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/form/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/fracture/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/gdiff/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/get/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/get_autoview/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/get_comb/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/get_eyemodel/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/get_type/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/glob/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/gqa/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/grid/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/grid2model_lu/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/grid2view_lu/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/group/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/heal/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/help/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/hide/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/how/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/human/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/illum/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/importFg4Section/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/inside/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/instance/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/isize/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/item/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/joint/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/joint2/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/keep/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/keypoint/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/kill/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/killall/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/killrefs/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/killtree/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/label/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/lc/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/lint/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/list/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/lod/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/log/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/lookat/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/ls/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/lt/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/m2v_point/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/make/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/make_name/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/match/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/mater/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/mirror/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/model2grid_lu/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/model2view/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/model2view_lu/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/move/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/move_all/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/move_arb_edge/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/move_arb_face/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/mrot/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/nirt/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/nmg/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/ocenter/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/open/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/orient/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/orotate/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/oscale/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/otranslate/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/overlay/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/pathlist/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/pathsum/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/perspective/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/pix2fb/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/plot/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/pmat/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/pmodel2view/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/png/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/png2fb/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/pnts/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/prcolor/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/prefix/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/process/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/protate/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/ps/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/pscale/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/pset/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/ptranslate/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/pull/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/push/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/put/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/put_comb/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/putmat/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/qray/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/qvrot/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/rcodes/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/rect/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/red/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/regdef/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/region/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/remove/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/rfarb/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/rmap/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/rmat/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/rmater/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/rot/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/rot_point/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/rrt/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/rt/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/rtabort/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/rtcheck/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/rtwizard/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/savekey/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/saveview/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/scale/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/screengrab/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/search/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/select/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/set_output_script/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/set_transparency/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/set_uplotOutputMode/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/setview/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/shaded_mode/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/shader/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/shells/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/showmats/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/simulate/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/slew/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/solid_report/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/solids_on_ray/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/sphgroup/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/summary/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/sync/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/tables/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/tire/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/title/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/tol/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/tops/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/tra/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/track/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/tree/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/typein/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/unhide/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/units/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/v2m_point/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/vdraw/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/version/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/view/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/view2grid_lu/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/view2model/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/view2model_lu/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/view2model_vec/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/viewdir/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/voxelize/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/vrot/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/wcodes/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/whatid/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/which/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/which_shader/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/who/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/wmater/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/xpush/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/zap/CMakeLists.txt
    brlcad/branches/gedplugins/src/libged/zoom/CMakeLists.txt

Added Paths:
-----------
    brlcad/branches/gedplugins/src/libged/edbot.c
    brlcad/branches/gedplugins/src/libged/edit_metaball.c
    brlcad/branches/gedplugins/src/libged/edpipe.c
    brlcad/branches/gedplugins/src/libged/facedef.c

Removed Paths:
-------------
    brlcad/branches/gedplugins/src/libged/edbot/
    brlcad/branches/gedplugins/src/libged/edit_metaball/
    brlcad/branches/gedplugins/src/libged/edpipe/
    brlcad/branches/gedplugins/src/libged/facedef/

Modified: brlcad/branches/gedplugins/src/libged/3ptarb/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/3ptarb/CMakeLists.txt 2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/3ptarb/CMakeLists.txt 2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-3ptarb 3ptarb.c)
 PLUGIN_SETUP(ged-3ptarb ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  3ptarb.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/CMakeLists.txt        2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/CMakeLists.txt        2020-07-22 
14:18:04 UTC (rev 76415)
@@ -54,10 +54,10 @@
   columns.c
   display_list.c
   draw_calc.cpp
-  edbot/edbot.c
-  edit_metaball/edit_metaball.c
-  edpipe/edpipe.c
-  facedef/facedef.c
+  edbot.c
+  edit_metaball.c
+  edpipe.c
+  facedef.c
   ged.c
   ged_util.c
   get_obj_bounds.c

Modified: brlcad/branches/gedplugins/src/libged/adc/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/adc/CMakeLists.txt    2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/adc/CMakeLists.txt    2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-adc adc.c)
 PLUGIN_SETUP(ged-adc ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  adc.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/adjust/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/adjust/CMakeLists.txt 2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/adjust/CMakeLists.txt 2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-adjust adjust.c)
 PLUGIN_SETUP(ged-adjust ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  adjust.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/ae2dir/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/ae2dir/CMakeLists.txt 2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/ae2dir/CMakeLists.txt 2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-ae2dir ae2dir.c)
 PLUGIN_SETUP(ged-ae2dir ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  ae2dir.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/analyze/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/analyze/CMakeLists.txt        
2020-07-22 13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/analyze/CMakeLists.txt        
2020-07-22 14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-analyze analyze.c)
 PLUGIN_SETUP(ged-analyze ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  analyze.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/annotate/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/annotate/CMakeLists.txt       
2020-07-22 13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/annotate/CMakeLists.txt       
2020-07-22 14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-annotate annotate.c)
 PLUGIN_SETUP(ged-annotate ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  annotate.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/arb/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/arb/CMakeLists.txt    2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/arb/CMakeLists.txt    2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-arb arb.c)
 PLUGIN_SETUP(ged-arb ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  arb.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/arced/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/arced/CMakeLists.txt  2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/arced/CMakeLists.txt  2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-arced arced.c)
 PLUGIN_SETUP(ged-arced ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  arced.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/arot/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/arot/CMakeLists.txt   2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/arot/CMakeLists.txt   2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-arot arot.c)
 PLUGIN_SETUP(ged-arot ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  arot.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/attr/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/attr/CMakeLists.txt   2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/attr/CMakeLists.txt   2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-attr attr.cpp)
 PLUGIN_SETUP(ged-attr ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  attr.cpp
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/autoview/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/autoview/CMakeLists.txt       
2020-07-22 13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/autoview/CMakeLists.txt       
2020-07-22 14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-autoview autoview.c)
 PLUGIN_SETUP(ged-autoview ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  autoview.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/bb/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/bb/CMakeLists.txt     2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/bb/CMakeLists.txt     2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-bb bb.c)
 PLUGIN_SETUP(ged-bb ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  bb.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/bev/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/bev/CMakeLists.txt    2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/bev/CMakeLists.txt    2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-bev bev.c)
 PLUGIN_SETUP(ged-bev ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  bev.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/bigE/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/bigE/CMakeLists.txt   2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/bigE/CMakeLists.txt   2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-bigE bigE.c)
 PLUGIN_SETUP(ged-bigE ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  bigE.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/blast/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/blast/CMakeLists.txt  2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/blast/CMakeLists.txt  2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-blast blast.c)
 PLUGIN_SETUP(ged-blast ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  blast.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/bo/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/bo/CMakeLists.txt     2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/bo/CMakeLists.txt     2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-bo bo.c)
 PLUGIN_SETUP(ged-bo ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  bo.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/bot/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/bot/CMakeLists.txt    2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/bot/CMakeLists.txt    2020-07-22 
14:18:04 UTC (rev 76415)
@@ -32,6 +32,11 @@
 VALIDATE_STYLE(ged-bot ${BOT_SRCS})
 PLUGIN_SETUP(ged-bot ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  ${BOT_SRCS}
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/brep/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/brep/CMakeLists.txt   2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/brep/CMakeLists.txt   2020-07-22 
14:18:04 UTC (rev 76415)
@@ -7,16 +7,16 @@
   )
 
 set(BREP_SRCS
-       brep.cpp
-       conversion.cpp
-       csg.cpp
-       info.cpp
-       intersect.cpp
-       pick.cpp
-       plot.cpp
-       tikz.cpp
-       valid.cpp
-       )
+  brep.cpp
+  conversion.cpp
+  csg.cpp
+  info.cpp
+  intersect.cpp
+  pick.cpp
+  plot.cpp
+  tikz.cpp
+  valid.cpp
+  )
 
 add_definitions(-DGED_PLUGIN)
 add_library(ged-brep SHARED ${BREP_SRCS})
@@ -25,6 +25,11 @@
 VALIDATE_STYLE(ged-brep ${BREP_SRCS})
 PLUGIN_SETUP(ged-brep ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  ${BREP_SRCS}
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/cat/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/cat/CMakeLists.txt    2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/cat/CMakeLists.txt    2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-cat cat.c)
 PLUGIN_SETUP(ged-cat ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  cat.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/cc/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/cc/CMakeLists.txt     2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/cc/CMakeLists.txt     2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-cc cc.c)
 PLUGIN_SETUP(ged-cc ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  cc.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/check/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/check/CMakeLists.txt  2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/check/CMakeLists.txt  2020-07-22 
14:18:04 UTC (rev 76415)
@@ -27,6 +27,11 @@
 VALIDATE_STYLE(ged-check ${CHECK_SRCS})
 PLUGIN_SETUP(ged-check ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  ${CHECK_SRCS}
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/clone/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/clone/CMakeLists.txt  2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/clone/CMakeLists.txt  2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-clone clone.c)
 PLUGIN_SETUP(ged-clone ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  clone.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/coil/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/coil/CMakeLists.txt   2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/coil/CMakeLists.txt   2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-coil coil.c)
 PLUGIN_SETUP(ged-coil ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  coil.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/color/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/color/CMakeLists.txt  2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/color/CMakeLists.txt  2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-color color.c)
 PLUGIN_SETUP(ged-color ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  color.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/comb/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/comb/CMakeLists.txt   2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/comb/CMakeLists.txt   2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-comb comb.c)
 PLUGIN_SETUP(ged-comb ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  comb.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/comb_color/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/comb_color/CMakeLists.txt     
2020-07-22 13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/comb_color/CMakeLists.txt     
2020-07-22 14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-comb_color comb_color.c)
 PLUGIN_SETUP(ged-comb_color ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  comb_color.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/comb_std/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/comb_std/CMakeLists.txt       
2020-07-22 13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/comb_std/CMakeLists.txt       
2020-07-22 14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-comb_std comb_std.c)
 PLUGIN_SETUP(ged-comb_std ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  comb_std.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/combmem/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/combmem/CMakeLists.txt        
2020-07-22 13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/combmem/CMakeLists.txt        
2020-07-22 14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-combmem combmem.c)
 PLUGIN_SETUP(ged-combmem ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  combmem.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/concat/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/concat/CMakeLists.txt 2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/concat/CMakeLists.txt 2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-concat concat.cpp)
 PLUGIN_SETUP(ged-concat ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  concat.cpp
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/constraint/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/constraint/CMakeLists.txt     
2020-07-22 13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/constraint/CMakeLists.txt     
2020-07-22 14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-constraint constraint.c)
 PLUGIN_SETUP(ged-constraint ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  constraint.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/copy/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/copy/CMakeLists.txt   2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/copy/CMakeLists.txt   2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-copy copy.c)
 PLUGIN_SETUP(ged-copy ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  copy.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/copyeval/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/copyeval/CMakeLists.txt       
2020-07-22 13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/copyeval/CMakeLists.txt       
2020-07-22 14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-copyeval copyeval.c)
 PLUGIN_SETUP(ged-copyeval ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  copyeval.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/copymat/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/copymat/CMakeLists.txt        
2020-07-22 13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/copymat/CMakeLists.txt        
2020-07-22 14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-copymat copymat.c)
 PLUGIN_SETUP(ged-copymat ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  copymat.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/cpi/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/cpi/CMakeLists.txt    2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/cpi/CMakeLists.txt    2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-cpi cpi.c)
 PLUGIN_SETUP(ged-cpi ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  cpi.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/dag/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/dag/CMakeLists.txt    2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/dag/CMakeLists.txt    2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-dag dag.cpp)
 PLUGIN_SETUP(ged-dag ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  dag.cpp
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/dbip/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/dbip/CMakeLists.txt   2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/dbip/CMakeLists.txt   2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-dbip dbip.c)
 PLUGIN_SETUP(ged-dbip ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  dbip.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/debug/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/debug/CMakeLists.txt  2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/debug/CMakeLists.txt  2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-debug debug.cpp)
 PLUGIN_SETUP(ged-debug ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  debug.cpp
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/debugbu/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/debugbu/CMakeLists.txt        
2020-07-22 13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/debugbu/CMakeLists.txt        
2020-07-22 14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-debugbu debugbu.c)
 PLUGIN_SETUP(ged-debugbu ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  debugbu.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/debugdir/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/debugdir/CMakeLists.txt       
2020-07-22 13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/debugdir/CMakeLists.txt       
2020-07-22 14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-debugdir debugdir.c)
 PLUGIN_SETUP(ged-debugdir ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  debugdir.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/debuglib/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/debuglib/CMakeLists.txt       
2020-07-22 13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/debuglib/CMakeLists.txt       
2020-07-22 14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-debuglib debuglib.c)
 PLUGIN_SETUP(ged-debuglib ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  debuglib.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/debugnmg/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/debugnmg/CMakeLists.txt       
2020-07-22 13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/debugnmg/CMakeLists.txt       
2020-07-22 14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-debugnmg debugnmg.c)
 PLUGIN_SETUP(ged-debugnmg ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  debugnmg.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/decompose/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/decompose/CMakeLists.txt      
2020-07-22 13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/decompose/CMakeLists.txt      
2020-07-22 14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-decompose decompose.c)
 PLUGIN_SETUP(ged-decompose ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  decompose.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/delay/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/delay/CMakeLists.txt  2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/delay/CMakeLists.txt  2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-delay delay.c)
 PLUGIN_SETUP(ged-delay ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  delay.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/dir2ae/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/dir2ae/CMakeLists.txt 2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/dir2ae/CMakeLists.txt 2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-dir2ae dir2ae.c)
 PLUGIN_SETUP(ged-dir2ae ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  dir2ae.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/draw/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/draw/CMakeLists.txt   2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/draw/CMakeLists.txt   2020-07-22 
14:18:04 UTC (rev 76415)
@@ -19,6 +19,11 @@
 VALIDATE_STYLE(ged-draw ${DRAW_SRCS})
 PLUGIN_SETUP(ged-draw ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  ${DRAW_SRCS}
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/dsp/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/dsp/CMakeLists.txt    2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/dsp/CMakeLists.txt    2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-dsp dsp.c)
 PLUGIN_SETUP(ged-dsp ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  dsp.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/dump/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/dump/CMakeLists.txt   2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/dump/CMakeLists.txt   2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-dump dump.c)
 PLUGIN_SETUP(ged-dump ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  dump.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/dup/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/dup/CMakeLists.txt    2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/dup/CMakeLists.txt    2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-dup dup.c)
 PLUGIN_SETUP(ged-dup ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  dup.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/eac/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/eac/CMakeLists.txt    2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/eac/CMakeLists.txt    2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-eac eac.c)
 PLUGIN_SETUP(ged-eac ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  eac.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/echo/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/echo/CMakeLists.txt   2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/echo/CMakeLists.txt   2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-echo echo.c)
 PLUGIN_SETUP(ged-echo ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  echo.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/edarb/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/edarb/CMakeLists.txt  2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/edarb/CMakeLists.txt  2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-edarb edarb.c)
 PLUGIN_SETUP(ged-edarb ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  edarb.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Copied: brlcad/branches/gedplugins/src/libged/edbot.c (from rev 76414, 
brlcad/branches/gedplugins/src/libged/edbot/edbot.c)
===================================================================
--- brlcad/branches/gedplugins/src/libged/edbot.c                               
(rev 0)
+++ brlcad/branches/gedplugins/src/libged/edbot.c       2020-07-22 14:18:04 UTC 
(rev 76415)
@@ -0,0 +1,769 @@
+/*                        E D B O T . C
+ * BRL-CAD
+ *
+ * Copyright (c) 1995-2020 United States Government as represented by
+ * the U.S. Army Research Laboratory.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * version 2.1 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this file; see the file named COPYING for more
+ * information.
+ */
+/** @file libged/edbot.c
+ *
+ */
+
+#include "common.h"
+
+#include <math.h>
+#include <string.h>
+
+#include "vmath.h"
+#include "nmg.h"
+#include "rt/geom.h"
+#include "ged.h"
+#include "wdb.h"
+
+#include "./ged_private.h"
+
+int
+ged_bot_edge_split(struct ged *gedp, int argc, const char *argv[])
+{
+    static const char *usage = "bot edge";
+    struct directory *dp;
+    struct rt_db_internal intern;
+    struct rt_bot_internal *botip;
+    mat_t mat;
+    char *last;
+    size_t v1_i;
+    size_t v2_i;
+    size_t last_fi;
+    size_t last_vi;
+    size_t save_vi;
+    size_t i;
+    point_t new_pt;
+
+    GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
+    GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR);
+
+    /* initialize result */
+    bu_vls_trunc(gedp->ged_result_str, 0);
+
+    /* must be wanting help */
+    if (argc == 1) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_HELP;
+    }
+
+    if (argc != 3) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    if ((last = strrchr(argv[1], '/')) == NULL)
+       last = (char *)argv[1];
+    else
+       ++last;
+
+    if (last[0] == '\0') {
+       bu_vls_printf(gedp->ged_result_str, "%s: illegal input - %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    dp = db_lookup(gedp->ged_wdbp->dbip, last, LOOKUP_QUIET);
+    if (dp == RT_DIR_NULL) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to find %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    if (bu_sscanf(argv[2], "%zu %zu", &v1_i, &v2_i) != 2) {
+       bu_vls_printf(gedp->ged_result_str, "%s: bad bot edge - %s", argv[0], 
argv[2]);
+       return GED_ERROR;
+    }
+
+    if (wdb_import_from_path2(gedp->ged_result_str, &intern, last, 
gedp->ged_wdbp, mat) == GED_ERROR) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to find %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD ||
+       intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_BOT) {
+       bu_vls_printf(gedp->ged_result_str, "Object is not a BOT");
+       rt_db_free_internal(&intern);
+
+       return GED_ERROR;
+    }
+
+    botip = (struct rt_bot_internal *)intern.idb_ptr;
+    last_fi = botip->num_faces;
+    last_vi = botip->num_vertices;
+
+    if (v1_i >= botip->num_vertices || v2_i >= botip->num_vertices) {
+       bu_vls_printf(gedp->ged_result_str, "%s: bad bot edge - %s", argv[0], 
argv[2]);
+       rt_db_free_internal(&intern);
+       return GED_ERROR;
+    }
+
+    /*
+     * Create the new point, modify all faces (should only be two)
+     * that share the specified edge and hook in the two extra faces.
+     */
+
+    /* First, create some space */
+    botip->num_vertices++;
+    botip->num_faces += 2;
+    botip->vertices = (fastf_t *)bu_realloc((void *)botip->vertices, 
botip->num_vertices*3*sizeof(fastf_t), "realloc bot vertices");
+    botip->faces = (int *)bu_realloc((void *)botip->faces, 
botip->num_faces*3*sizeof(int), "realloc bot faces");
+
+    /* Create the new point. We're using the average of the edge's points */
+    VADD2(new_pt, &botip->vertices[v1_i*3], &botip->vertices[v2_i*3]);
+    VSCALE(new_pt, new_pt, 0.5);
+
+    /* Add the new point to the last position in the list of vertices. */
+    VMOVE(&botip->vertices[last_vi*3], new_pt);
+
+    /* Update faces associated with the specified edge */
+    for (i = 0; i < last_fi; ++i) {
+       if (((size_t)botip->faces[i*3] == v1_i && (size_t)botip->faces[i*3+1] 
== v2_i) ||
+           ((size_t)botip->faces[i*3] == v2_i && (size_t)botip->faces[i*3+1] 
== v1_i)) {
+
+           save_vi = botip->faces[i*3+1];
+           botip->faces[i*3+1] = last_vi;
+
+           /* Initialize a new face */
+           botip->faces[last_fi*3] = last_vi;
+           botip->faces[last_fi*3+1] = save_vi;
+           botip->faces[last_fi*3+2] = botip->faces[i*3+2];
+
+           ++last_fi;
+       } else if (((size_t)botip->faces[i*3] == v1_i && 
(size_t)botip->faces[i*3+2] == v2_i) ||
+                  ((size_t)botip->faces[i*3] == v2_i && 
(size_t)botip->faces[i*3+2] == v1_i)) {
+           save_vi = botip->faces[i*3];
+           botip->faces[i*3] = last_vi;
+
+           /* Initialize a new face */
+           botip->faces[last_fi*3] = last_vi;
+           botip->faces[last_fi*3+1] = save_vi;
+           botip->faces[last_fi*3+2] = botip->faces[i*3+1];
+
+           ++last_fi;
+       } else if (((size_t)botip->faces[i*3+1] == v1_i && 
(size_t)botip->faces[i*3+2] == v2_i) ||
+                  ((size_t)botip->faces[i*3+1] == v2_i && 
(size_t)botip->faces[i*3+2] == v1_i)) {
+           save_vi = botip->faces[i*3+2];
+           botip->faces[i*3+2] = last_vi;
+
+           /* Initialize a new face */
+           botip->faces[last_fi*3] = botip->faces[i*3];
+           botip->faces[last_fi*3+1] = last_vi;
+           botip->faces[last_fi*3+2] = save_vi;
+
+           ++last_fi;
+       }
+
+       if (last_fi >= botip->num_faces)
+           break;
+    }
+
+    GED_DB_PUT_INTERNAL(gedp, dp, &intern, &rt_uniresource, GED_ERROR);
+    rt_db_free_internal(&intern);
+    return GED_OK;
+}
+
+
+int
+ged_bot_face_split(struct ged *gedp, int argc, const char *argv[])
+{
+    static const char *usage = "bot face";
+    struct directory *dp;
+    static fastf_t sf = 1.0 / 3.0;
+    struct rt_db_internal intern;
+    struct rt_bot_internal *botip;
+    mat_t mat;
+    char *last;
+    size_t face_i;
+    size_t last_vi;
+    size_t save_vi;
+    point_t new_pt;
+
+    GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
+    GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR);
+
+    /* initialize result */
+    bu_vls_trunc(gedp->ged_result_str, 0);
+
+    /* must be wanting help */
+    if (argc == 1) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_HELP;
+    }
+
+    if (argc != 3) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    if ((last = strrchr(argv[1], '/')) == NULL)
+       last = (char *)argv[1];
+    else
+       ++last;
+
+    if (last[0] == '\0') {
+       bu_vls_printf(gedp->ged_result_str, "%s: illegal input - %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    dp = db_lookup(gedp->ged_wdbp->dbip, last, LOOKUP_QUIET);
+    if (dp == RT_DIR_NULL) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to find %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    if (bu_sscanf(argv[2], "%zu", &face_i) != 1) {
+       bu_vls_printf(gedp->ged_result_str, "%s: bad bot vertex index - %s", 
argv[0], argv[2]);
+       return GED_ERROR;
+    }
+
+    if (wdb_import_from_path2(gedp->ged_result_str, &intern, last, 
gedp->ged_wdbp, mat) == GED_ERROR) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to find %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD ||
+       intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_BOT) {
+       bu_vls_printf(gedp->ged_result_str, "Object is not a BOT");
+       rt_db_free_internal(&intern);
+
+       return GED_ERROR;
+    }
+
+    botip = (struct rt_bot_internal *)intern.idb_ptr;
+    last_vi = botip->num_vertices;
+
+    if (face_i >= botip->num_faces) {
+       bu_vls_printf(gedp->ged_result_str, "%s: bad bot face index - %s", 
argv[0], argv[2]);
+       rt_db_free_internal(&intern);
+       return GED_ERROR;
+    }
+
+    /* Create the new point, modify face_i and hook in the two extra faces */
+    /* First, create some space */
+    botip->num_vertices++;
+    botip->num_faces += 2;
+    botip->vertices = (fastf_t *)bu_realloc((void *)botip->vertices, 
botip->num_vertices*3*sizeof(fastf_t), "realloc bot vertices");
+    botip->faces = (int *)bu_realloc((void *)botip->faces, 
botip->num_faces*3*sizeof(int), "realloc bot faces");
+
+    /* Create the new point. For the moment, we're using the average of the 
face_i's points */
+    VADD3(new_pt,
+         &botip->vertices[botip->faces[face_i*3]*3],
+         &botip->vertices[botip->faces[face_i*3+1]*3],
+         &botip->vertices[botip->faces[face_i*3+2]*3]);
+    VSCALE(new_pt, new_pt, sf);
+
+    /* Add the new point to the last position in the list of vertices. */
+    VMOVE(&botip->vertices[last_vi*3], new_pt);
+
+    /* Update face_i */
+    save_vi = botip->faces[face_i*3+2];
+    botip->faces[face_i*3+2] = last_vi;
+
+    /* Initialize the two new faces */
+    botip->faces[(botip->num_faces-2)*3] = botip->faces[face_i*3+1];
+    botip->faces[(botip->num_faces-2)*3+1] = save_vi;
+    botip->faces[(botip->num_faces-2)*3+2] = last_vi;
+    botip->faces[(botip->num_faces-1)*3] = save_vi;
+    botip->faces[(botip->num_faces-1)*3+1] = botip->faces[face_i*3];
+    botip->faces[(botip->num_faces-1)*3+2] = last_vi;
+
+    bu_vls_printf(gedp->ged_result_str, "%zu", last_vi);
+
+    GED_DB_PUT_INTERNAL(gedp, dp, &intern, &rt_uniresource, GED_ERROR);
+    rt_db_free_internal(&intern);
+    return GED_OK;
+}
+
+
+int
+ged_find_bot_edge_nearest_pnt(struct ged *gedp, int argc, const char *argv[])
+{
+    static const char *usage = "bot view_xyz";
+    struct rt_db_internal intern;
+    struct rt_bot_internal *botip;
+    mat_t mat;
+    int vi1, vi2;
+    vect_t view;
+
+    /* must be double for scanf */
+    double scan[ELEMENTS_PER_VECT];
+
+    GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
+    GED_CHECK_VIEW(gedp, GED_ERROR);
+    GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR);
+
+    /* initialize result */
+    bu_vls_trunc(gedp->ged_result_str, 0);
+
+    /* must be wanting help */
+    if (argc == 1) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_HELP;
+    }
+
+    if (argc != 3) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    if (bu_sscanf(argv[2], "%lf %lf %lf", &scan[X], &scan[Y], &scan[Z]) != 3) {
+       bu_vls_printf(gedp->ged_result_str, "%s: bad view location - %s", 
argv[0], argv[2]);
+       return GED_ERROR;
+    }
+    VMOVE(view, scan); /* convert double to fastf_t */
+
+    if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1], 
gedp->ged_wdbp, mat) == GED_ERROR) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to find %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD ||
+       intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_BOT) {
+       bu_vls_printf(gedp->ged_result_str, "Object is not a BOT");
+       rt_db_free_internal(&intern);
+
+       return GED_ERROR;
+    }
+
+    botip = (struct rt_bot_internal *)intern.idb_ptr;
+    (void)rt_bot_find_e_nearest_pt2(&vi1, &vi2, botip, view, 
gedp->ged_gvp->gv_model2view);
+    bu_vls_printf(gedp->ged_result_str, "%d %d", vi1, vi2);
+
+    rt_db_free_internal(&intern);
+    return GED_OK;
+}
+
+
+int
+ged_find_bot_pnt_nearest_pnt(struct ged *gedp, int argc, const char *argv[])
+{
+    static const char *usage = "bot view_xyz";
+    struct rt_db_internal intern;
+    struct rt_bot_internal *botip;
+    mat_t mat;
+    int nearest_pt;
+    vect_t view;
+
+    /* must be double for scanf */
+    double scan[ELEMENTS_PER_VECT];
+
+    GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
+    GED_CHECK_VIEW(gedp, GED_ERROR);
+    GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR);
+
+    /* initialize result */
+    bu_vls_trunc(gedp->ged_result_str, 0);
+
+    /* must be wanting help */
+    if (argc == 1) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_HELP;
+    }
+
+    if (argc != 3) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    if (bu_sscanf(argv[2], "%lf %lf %lf", &scan[X], &scan[Y], &scan[Z]) != 3) {
+       bu_vls_printf(gedp->ged_result_str, "%s: bad view location - %s", 
argv[0], argv[2]);
+       return GED_ERROR;
+    }
+
+    if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1], 
gedp->ged_wdbp, mat) == GED_ERROR) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to find %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD ||
+       intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_BOT) {
+       bu_vls_printf(gedp->ged_result_str, "Object is not a BOT");
+       rt_db_free_internal(&intern);
+
+       return GED_ERROR;
+    }
+
+    botip = (struct rt_bot_internal *)intern.idb_ptr;
+    VMOVE(view, scan); /* convert double to fastf_t */
+
+    nearest_pt = rt_bot_find_v_nearest_pt2(botip, view, 
gedp->ged_gvp->gv_model2view);
+    bu_vls_printf(gedp->ged_result_str, "%d", nearest_pt);
+
+    rt_db_free_internal(&intern);
+    return GED_OK;
+}
+
+
+int
+ged_get_bot_edges(struct ged *gedp, int argc, const char *argv[])
+{
+    static const char *usage = "bot";
+    struct rt_db_internal intern;
+    struct rt_bot_internal *botip;
+    mat_t mat;
+    size_t edge_count;
+    size_t *edge_list;
+
+    GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
+    GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR);
+
+    /* initialize result */
+    bu_vls_trunc(gedp->ged_result_str, 0);
+
+    /* must be wanting help */
+    if (argc == 1) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_HELP;
+    }
+
+    if (argc != 2) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1], 
gedp->ged_wdbp, mat) == GED_ERROR) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to find %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD ||
+       intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_BOT) {
+       bu_vls_printf(gedp->ged_result_str, "Object is not a BOT");
+       rt_db_free_internal(&intern);
+
+       return GED_ERROR;
+    }
+
+    botip = (struct rt_bot_internal *)intern.idb_ptr;
+    if ((edge_count = rt_bot_get_edge_list(botip, &edge_list)) > 0) {
+       size_t i;
+
+       for (i = 0; i < edge_count; i++)
+           bu_vls_printf(gedp->ged_result_str, "{%zu %zu} ", edge_list[i*2], 
edge_list[i*2+1]);
+
+       bu_free(edge_list, "bot edge list");
+    }
+
+    rt_db_free_internal(&intern);
+    return GED_OK;
+}
+
+
+int
+ged_bot_move_pnt(struct ged *gedp, int argc, const char *argv[])
+{
+    static const char *usage = "[-r] bot vertex_i pt";
+    struct directory *dp;
+    struct rt_db_internal intern;
+    struct rt_bot_internal *botip;
+    mat_t mat;
+    size_t vertex_i;
+    int rflag = 0;
+    char *last;
+
+    /* must be double for scanf */
+    double pt[ELEMENTS_PER_POINT];
+
+    GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
+    GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR);
+
+    /* initialize result */
+    bu_vls_trunc(gedp->ged_result_str, 0);
+
+    /* must be wanting help */
+    if (argc == 1) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_HELP;
+    }
+
+    if (argc < 4 || 5 < argc) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    if (argc == 5) {
+       if (argv[1][0] != '-' || argv[1][1] != 'r' || argv[1][2] != '\0') {
+           bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+           return GED_ERROR;
+       }
+
+       rflag = 1;
+       --argc;
+       ++argv;
+    }
+
+    if ((last = strrchr(argv[1], '/')) == NULL)
+       last = (char *)argv[1];
+    else
+       ++last;
+
+    if (last[0] == '\0') {
+       bu_vls_printf(gedp->ged_result_str, "%s: illegal input - %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    dp = db_lookup(gedp->ged_wdbp->dbip, last, LOOKUP_QUIET);
+    if (dp == RT_DIR_NULL) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to find %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    if (bu_sscanf(argv[2], "%zu", &vertex_i) != 1) {
+       bu_vls_printf(gedp->ged_result_str, "%s: bad bot vertex index - %s", 
argv[0], argv[2]);
+       return GED_ERROR;
+    }
+
+    if (bu_sscanf(argv[3], "%lf %lf %lf", &pt[X], &pt[Y], &pt[Z]) != 3) {
+       bu_vls_printf(gedp->ged_result_str, "%s: bad point - %s", argv[0], 
argv[3]);
+       return GED_ERROR;
+    }
+
+    VSCALE(pt, pt, gedp->ged_wdbp->dbip->dbi_local2base);
+
+    if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1], 
gedp->ged_wdbp, mat) == GED_ERROR) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to find %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD ||
+       intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_BOT) {
+       bu_vls_printf(gedp->ged_result_str, "Object is not a BOT");
+       rt_db_free_internal(&intern);
+
+       return GED_ERROR;
+    }
+
+    botip = (struct rt_bot_internal *)intern.idb_ptr;
+
+    if (vertex_i >= botip->num_vertices) {
+       bu_vls_printf(gedp->ged_result_str, "%s: bad bot vertex index - %s", 
argv[0], argv[2]);
+       rt_db_free_internal(&intern);
+       return GED_ERROR;
+    }
+
+    if (rflag) {
+       VADD2(&botip->vertices[vertex_i*3], pt, &botip->vertices[vertex_i*3]);
+    } else {
+       VMOVE(&botip->vertices[vertex_i*3], pt);
+    }
+
+    {
+       mat_t invmat;
+       point_t curr_pt;
+       size_t idx;
+
+       bn_mat_inv(invmat, mat);
+       for (idx = 0; idx < botip->num_vertices; idx++) {
+           MAT4X3PNT(curr_pt, invmat, &botip->vertices[idx*3]);
+           VMOVE(&botip->vertices[idx*3], curr_pt);
+       }
+    }
+
+    GED_DB_PUT_INTERNAL(gedp, dp, &intern, &rt_uniresource, GED_ERROR);
+    rt_db_free_internal(&intern);
+
+    return GED_OK;
+}
+
+
+int
+ged_bot_move_pnts(struct ged *gedp, int argc, const char *argv[])
+{
+    static const char *usage = "bot vec vertex_1 [vertex_2 ... vertex_n]";
+    struct directory *dp;
+    struct rt_db_internal intern;
+    struct rt_bot_internal *botip;
+    mat_t mat;
+    register int i;
+    size_t vertex_i;
+    char *last;
+
+    /* must be double for scanf */
+    double vec[ELEMENTS_PER_VECT];
+
+    GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
+    GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR);
+
+    /* initialize result */
+    bu_vls_trunc(gedp->ged_result_str, 0);
+
+    /* must be wanting help */
+    if (argc == 1) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_HELP;
+    }
+
+    if (argc < 4) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    if ((last = strrchr(argv[1], '/')) == NULL)
+       last = (char *)argv[1];
+    else
+       ++last;
+
+    if (last[0] == '\0') {
+       bu_vls_printf(gedp->ged_result_str, "%s: illegal input - %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    dp = db_lookup(gedp->ged_wdbp->dbip, last, LOOKUP_QUIET);
+    if (dp == RT_DIR_NULL) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to find %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    if (bu_sscanf(argv[2], "%lf %lf %lf", &vec[X], &vec[Y], &vec[Z]) != 3) {
+       bu_vls_printf(gedp->ged_result_str, "%s: bad vector - %s", argv[0], 
argv[2]);
+       return GED_ERROR;
+    }
+
+    VSCALE(vec, vec, gedp->ged_wdbp->dbip->dbi_local2base);
+
+    if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1], 
gedp->ged_wdbp, mat) == GED_ERROR) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to find %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD ||
+       intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_BOT) {
+       bu_vls_printf(gedp->ged_result_str, "Object is not a BOT");
+       rt_db_free_internal(&intern);
+
+       return GED_ERROR;
+    }
+
+    botip = (struct rt_bot_internal *)intern.idb_ptr;
+
+    for (i = 3; i < argc; ++i) {
+       if (bu_sscanf(argv[i], "%zu", &vertex_i) != 1) {
+           bu_vls_printf(gedp->ged_result_str, "%s: bad bot vertex index - 
%s\n", argv[0], argv[i]);
+           continue;
+       }
+
+       if (vertex_i >= botip->num_vertices) {
+           bu_vls_printf(gedp->ged_result_str, "%s: bad bot vertex index - 
%s\n", argv[0], argv[i]);
+           continue;
+       }
+
+       VADD2(&botip->vertices[vertex_i*3], vec, &botip->vertices[vertex_i*3]);
+    }
+
+    {
+       mat_t invmat;
+       point_t curr_pt;
+       size_t idx;
+
+       bn_mat_inv(invmat, mat);
+       for (idx = 0; idx < botip->num_vertices; idx++) {
+           MAT4X3PNT(curr_pt, invmat, &botip->vertices[idx*3]);
+           VMOVE(&botip->vertices[idx*3], curr_pt);
+       }
+    }
+
+    GED_DB_PUT_INTERNAL(gedp, dp, &intern, &rt_uniresource, GED_ERROR);
+    rt_db_free_internal(&intern);
+
+    return GED_OK;
+}
+
+
+int
+_ged_select_botpts(struct ged *gedp, struct rt_bot_internal *botip, double vx, 
double vy, double vwidth, double vheight, double vminz, int rflag)
+{
+    size_t i;
+    fastf_t vr = 0.0;
+    fastf_t vmin_x = 0.0;
+    fastf_t vmin_y = 0.0;
+    fastf_t vmax_x = 0.0;
+    fastf_t vmax_y = 0.0;
+
+    GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
+    GED_CHECK_VIEW(gedp, GED_ERROR);
+
+    if (rflag) {
+       vr = vwidth;
+    } else {
+       vmin_x = vx;
+       vmin_y = vy;
+
+       if (vwidth > 0)
+           vmax_x = vx + vwidth;
+       else {
+           vmin_x = vx + vwidth;
+           vmax_x = vx;
+       }
+
+       if (vheight > 0)
+           vmax_y = vy + vheight;
+       else {
+           vmin_y = vy + vheight;
+           vmax_y = vy;
+       }
+    }
+
+    if (rflag) {
+       for (i = 0; i < botip->num_vertices; i++) {
+           point_t vloc;
+           point_t vpt;
+           vect_t diff;
+           fastf_t mag;
+
+           MAT4X3PNT(vpt, gedp->ged_gvp->gv_model2view, &botip->vertices[i*3]);
+
+           if (vpt[Z] < vminz)
+               continue;
+
+           VSET(vloc, vx, vy, vpt[Z]);
+           VSUB2(diff, vpt, vloc);
+           mag = MAGNITUDE(diff);
+
+           if (mag > vr)
+               continue;
+
+           bu_vls_printf(gedp->ged_result_str, "%zu ", i);
+       }
+    } else {
+       for (i = 0; i < botip->num_vertices; i++) {
+           point_t vpt;
+
+           MAT4X3PNT(vpt, gedp->ged_gvp->gv_model2view, &botip->vertices[i*3]);
+
+           if (vpt[Z] < vminz)
+               continue;
+
+           if (vmin_x <= vpt[X] && vpt[X] <= vmax_x &&
+               vmin_y <= vpt[Y] && vpt[Y] <= vmax_y) {
+               bu_vls_printf(gedp->ged_result_str, "%zu ", i);
+           }
+       }
+    }
+
+    return GED_OK;
+}
+
+/*
+ * Local Variables:
+ * mode: C
+ * tab-width: 8
+ * indent-tabs-mode: t
+ * c-file-style: "stroustrup"
+ * End:
+ * ex: shiftwidth=4 tabstop=8
+ */

Modified: brlcad/branches/gedplugins/src/libged/edcodes/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/edcodes/CMakeLists.txt        
2020-07-22 13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/edcodes/CMakeLists.txt        
2020-07-22 14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-edcodes edcodes.c)
 PLUGIN_SETUP(ged-edcodes ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  edcodes.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/edcomb/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/edcomb/CMakeLists.txt 2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/edcomb/CMakeLists.txt 2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-edcomb edcomb.c)
 PLUGIN_SETUP(ged-edcomb ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  edcomb.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/edit/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/edit/CMakeLists.txt   2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/edit/CMakeLists.txt   2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-edit edit.c)
 PLUGIN_SETUP(ged-edit ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  edit.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Copied: brlcad/branches/gedplugins/src/libged/edit_metaball.c (from rev 76414, 
brlcad/branches/gedplugins/src/libged/edit_metaball/edit_metaball.c)
===================================================================
--- brlcad/branches/gedplugins/src/libged/edit_metaball.c                       
        (rev 0)
+++ brlcad/branches/gedplugins/src/libged/edit_metaball.c       2020-07-22 
14:18:04 UTC (rev 76415)
@@ -0,0 +1,662 @@
+/*                         E D I T _ M E T A B A L L . C
+ * BRL-CAD
+ *
+ * Copyright (c) 2008-2020 United States Government as represented by
+ * the U.S. Army Research Laboratory.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this file; see the file named COPYING for more
+ * information.
+ */
+/** @file libged/edit_metaball.c
+ *
+ * Functions -
+ *
+ *
+ */
+
+#include "common.h"
+
+#include <string.h>
+
+#include "bu/cmd.h"
+#include "rt/geom.h"
+#include "raytrace.h"
+#include "wdb.h"
+
+#include "./ged_private.h"
+
+
+#define GED_METABALL_SCALE(_d, _scale) \
+    if ((_scale) < 0.0) \
+       (_d) = -(_scale); \
+    else                 \
+       (_d) *= (_scale);
+
+
+/*
+ * Returns the index for the metaball point matching mbpp.
+ */
+int
+_ged_get_metaball_i_pnt(struct rt_metaball_internal *mbip, struct 
wdb_metaball_pnt *mbpp)
+{
+    struct wdb_metaball_pnt *curr_mbpp;
+    int mbp_i = 0;
+
+    for (BU_LIST_FOR(curr_mbpp, wdb_metaball_pnt, &mbip->metaball_ctrl_head)) {
+       if (curr_mbpp == mbpp)
+           return mbp_i;
+
+       ++mbp_i;
+    }
+
+    return -1;
+}
+
+
+/*
+ * Returns point mbp_i.
+ */
+struct wdb_metaball_pnt *
+_ged_get_metaball_pt_i(struct rt_metaball_internal *mbip, int mbp_i)
+{
+    int i = 0;
+    struct wdb_metaball_pnt *curr_mbpp;
+
+    for (BU_LIST_FOR(curr_mbpp, wdb_metaball_pnt, &mbip->metaball_ctrl_head)) {
+       if (i == mbp_i)
+           return curr_mbpp;
+
+       ++i;
+    }
+
+    return (struct wdb_metaball_pnt *)NULL;
+}
+
+
+int
+_ged_set_metaball(struct ged *gedp, struct rt_metaball_internal *mbip, const 
char *attribute, fastf_t sf)
+{
+    RT_METABALL_CK_MAGIC(mbip);
+
+    switch (attribute[0]) {
+       case 'm':
+       case 'M':
+           if (sf <= METABALL_METABALL)
+               mbip->method = METABALL_METABALL;
+           else if (sf >= METABALL_BLOB)
+               mbip->method = METABALL_BLOB;
+           else
+               mbip->method = (int)sf;
+
+           break;
+       case 't':
+       case 'T':
+           if (sf < 0)
+               mbip->threshold = -sf;
+           else
+               mbip->threshold = sf;
+
+           break;
+       default:
+           bu_vls_printf(gedp->ged_result_str, "bad metaball attribute - %s", 
attribute);
+           return GED_ERROR;
+    }
+
+    return GED_OK;
+}
+
+
+int
+_ged_scale_metaball(struct ged *gedp, struct rt_metaball_internal *mbip, const 
char *attribute, fastf_t sf, int rflag)
+{
+    int mbp_i;
+    struct wdb_metaball_pnt *mbpp;
+
+    RT_METABALL_CK_MAGIC(mbip);
+
+    if (!rflag && sf > 0)
+       sf = -sf;
+
+    switch (attribute[0]) {
+       case 'f':
+       case 'F':
+           if (sscanf(attribute+1, "%d", &mbp_i) != 1)
+               mbp_i = 0;
+
+           if ((mbpp = _ged_get_metaball_pt_i(mbip, mbp_i)) == (struct 
wdb_metaball_pnt *)NULL)
+               return GED_ERROR;
+
+           BU_CKMAG(mbpp, WDB_METABALLPT_MAGIC, "wdb_metaball_pnt");
+           GED_METABALL_SCALE(mbpp->fldstr, sf);
+
+           break;
+       case 's':
+       case 'S':
+           if (sscanf(attribute+1, "%d", &mbp_i) != 1)
+               mbp_i = 0;
+
+           if ((mbpp = _ged_get_metaball_pt_i(mbip, mbp_i)) == (struct 
wdb_metaball_pnt *)NULL)
+               return GED_ERROR;
+
+           BU_CKMAG(mbpp, WDB_METABALLPT_MAGIC, "wdb_metaball_pnt");
+           GED_METABALL_SCALE(mbpp->sweat, sf);
+
+           break;
+       default:
+           bu_vls_printf(gedp->ged_result_str, "bad metaball attribute - %s", 
attribute);
+           return GED_ERROR;
+    }
+
+    return GED_OK;
+}
+
+
+struct wdb_metaball_pnt *
+find_metaball_pnt_nearest_pnt(const struct bu_list *metaball_hd, const point_t 
model_pt, matp_t view2model)
+{
+    struct wdb_metaball_pnt *mbpp;
+    struct wdb_metaball_pnt *nearest=(struct wdb_metaball_pnt *)NULL;
+    struct bn_tol tmp_tol;
+    fastf_t min_dist = MAX_FASTF;
+    vect_t dir, work;
+
+    tmp_tol.magic = BN_TOL_MAGIC;
+    tmp_tol.dist = 0.0;
+    tmp_tol.dist_sq = tmp_tol.dist * tmp_tol.dist;
+    tmp_tol.perp = 0.0;
+    tmp_tol.para = 1.0 - tmp_tol.perp;
+
+    /* get a direction vector in model space corresponding to z-direction in 
view */
+    VSET(work, 0.0, 0.0, 1.0);
+    MAT4X3VEC(dir, view2model, work);
+
+    for (BU_LIST_FOR(mbpp, wdb_metaball_pnt, metaball_hd)) {
+       fastf_t dist;
+
+       dist = bn_dist_line3_pnt3(model_pt, dir, mbpp->coord);
+       if (dist < min_dist) {
+           min_dist = dist;
+           nearest = mbpp;
+       }
+    }
+
+    return nearest;
+}
+
+
+int
+ged_find_metaball_pnt_nearest_pnt(struct ged *gedp, int argc, const char 
*argv[])
+{
+    struct directory *dp;
+    static const char *usage = "metaball x y z";
+    struct rt_db_internal intern;
+    struct wdb_metaball_pnt *nearest;
+    point_t model_pt;
+    double scan[3];
+    mat_t mat;
+    int pt_i;
+    const char *last;
+
+    GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
+    GED_CHECK_VIEW(gedp, GED_ERROR);
+    GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR);
+
+    /* initialize result */
+    bu_vls_trunc(gedp->ged_result_str, 0);
+
+    /* must be wanting help */
+    if (argc == 1) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_HELP;
+    }
+
+    if (argc != 3 && argc != 5) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    if ((last = strrchr(argv[1], '/')) == NULL)
+       last = argv[1];
+    else
+       ++last;
+
+    if (last[0] == '\0') {
+       bu_vls_printf(gedp->ged_result_str, "%s: illegal input - %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    dp = db_lookup(gedp->ged_wdbp->dbip, last, LOOKUP_QUIET);
+    if (dp == RT_DIR_NULL) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to find %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    if (argc == 3) {
+       if (sscanf(argv[2], "%lf %lf %lf", &scan[X], &scan[Y], &scan[Z]) != 3) {
+           bu_vls_printf(gedp->ged_result_str, "%s: bad point - %s", argv[0], 
argv[2]);
+           return GED_ERROR;
+       }
+    } else if (sscanf(argv[2], "%lf", &scan[X]) != 1 ||
+              sscanf(argv[3], "%lf", &scan[Y]) != 1 ||
+              sscanf(argv[4], "%lf", &scan[Z]) != 1) {
+       bu_vls_printf(gedp->ged_result_str, "%s: bad X, Y or Z", argv[0]);
+       return GED_ERROR;
+    }
+    /* convert from double to fastf_t */
+    VMOVE(model_pt, scan);
+
+    if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1], 
gedp->ged_wdbp, mat) == GED_ERROR)
+       return GED_ERROR;
+
+    nearest = find_metaball_pnt_nearest_pnt(&((struct rt_metaball_internal 
*)intern.idb_ptr)->metaball_ctrl_head,
+                                           model_pt, 
gedp->ged_gvp->gv_view2model);
+    pt_i = _ged_get_metaball_i_pnt((struct rt_metaball_internal 
*)intern.idb_ptr, nearest);
+    rt_db_free_internal(&intern);
+
+    if (pt_i < 0) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to find point for %s", 
argv[0], argv[1]);
+       return GED_ERROR;
+    }
+
+    bu_vls_printf(gedp->ged_result_str, "%d", pt_i);
+    return GED_OK;
+}
+
+
+struct wdb_metaball_pnt *
+_ged_metaball_add_pnt(struct rt_metaball_internal *mbip, struct 
wdb_metaball_pnt *mbp, const point_t new_pt)
+{
+    struct wdb_metaball_pnt *last;
+    struct wdb_metaball_pnt *newmbp;
+
+    RT_METABALL_CK_MAGIC(mbip);
+
+    if (mbp) {
+       BU_CKMAG(mbp, WDB_METABALLPT_MAGIC, "metaball point");
+       last = mbp;
+    } else {
+       /* add new point to end of metaball solid */
+       last = BU_LIST_LAST(wdb_metaball_pnt, &mbip->metaball_ctrl_head);
+
+       if (last->l.magic == BU_LIST_HEAD_MAGIC) {
+           BU_GET(newmbp, struct wdb_metaball_pnt);
+           newmbp->l.magic = WDB_METABALLPT_MAGIC;
+           newmbp->fldstr = 1.0;
+           newmbp->sweat = 1.0;
+           VMOVE(newmbp->coord, new_pt);
+           BU_LIST_INSERT(&mbip->metaball_ctrl_head, &newmbp->l);
+           return newmbp;
+       }
+    }
+
+    /* build new point */
+    BU_GET(newmbp, struct wdb_metaball_pnt);
+    newmbp->l.magic = WDB_METABALLPT_MAGIC;
+    newmbp->fldstr = 1.0;
+    newmbp->sweat = 1.0;
+    VMOVE(newmbp->coord, new_pt);
+
+    if (mbp) {
+       /* append after current point */
+       BU_LIST_APPEND(&mbp->l, &newmbp->l);
+    } else {
+       /* add to end of metaball solid */
+       BU_LIST_INSERT(&mbip->metaball_ctrl_head, &newmbp->l);
+    }
+
+    return newmbp;
+}
+
+
+int
+ged_metaball_add_pnt(struct ged *gedp, int argc, const char *argv[])
+{
+    struct directory *dp;
+    static const char *usage = "metaball pt";
+    struct rt_db_internal intern;
+    struct rt_metaball_internal *mbip;
+    mat_t mat;
+    point_t view_mb_pt;
+    point_t view_coord;
+    point_t mb_pt;
+    struct wdb_metaball_pnt *lastmbp;
+    double scan[3];
+    const char *last;
+
+    GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
+    GED_CHECK_VIEW(gedp, GED_ERROR);
+    GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR);
+
+    /* initialize result */
+    bu_vls_trunc(gedp->ged_result_str, 0);
+
+    /* must be wanting help */
+    if (argc == 1) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_HELP;
+    }
+
+    if (argc != 3) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    if ((last = strrchr(argv[1], '/')) == NULL)
+       last = argv[1];
+    else
+       ++last;
+
+    if (last[0] == '\0') {
+       bu_vls_printf(gedp->ged_result_str, "%s: illegal input - %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    dp = db_lookup(gedp->ged_wdbp->dbip, last, LOOKUP_QUIET);
+    if (dp == RT_DIR_NULL) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to find %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    if (sscanf(argv[2], "%lf %lf %lf", &scan[X], &scan[Y], &scan[Z]) != 3) {
+       bu_vls_printf(gedp->ged_result_str, "%s: bad point - %s", argv[0], 
argv[2]);
+       return GED_ERROR;
+    }
+    /* convert from double to fastf_t */
+    VMOVE(view_mb_pt, scan);
+
+    if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1], 
gedp->ged_wdbp, mat) == GED_ERROR)
+       return GED_ERROR;
+
+    if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD ||
+       intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_METABALL) {
+       bu_vls_printf(gedp->ged_result_str, "Object not a METABALL");
+       rt_db_free_internal(&intern);
+
+       return GED_ERROR;
+    }
+
+    mbip = (struct rt_metaball_internal *)intern.idb_ptr;
+
+    /* use the view z from the last metaball point */
+    lastmbp = BU_LIST_LAST(wdb_metaball_pnt, &mbip->metaball_ctrl_head);
+
+    MAT4X3PNT(view_coord, gedp->ged_gvp->gv_model2view, lastmbp->coord);
+    view_mb_pt[Z] = view_coord[Z];
+    MAT4X3PNT(mb_pt, gedp->ged_gvp->gv_view2model, view_mb_pt);
+
+    if (_ged_metaball_add_pnt(mbip, (struct wdb_metaball_pnt *)NULL, mb_pt) == 
(struct wdb_metaball_pnt *)NULL) {
+       rt_db_free_internal(&intern);
+       bu_vls_printf(gedp->ged_result_str, "%s: cannot move point there", 
argv[0]);
+       return GED_ERROR;
+    }
+
+    {
+       mat_t invmat;
+       struct wdb_metaball_pnt *curr_mbp;
+       point_t curr_pt;
+
+       bn_mat_inv(invmat, mat);
+       for (BU_LIST_FOR(curr_mbp, wdb_metaball_pnt, 
&mbip->metaball_ctrl_head)) {
+           MAT4X3PNT(curr_pt, invmat, curr_mbp->coord);
+           VMOVE(curr_mbp->coord, curr_pt);
+       }
+
+       GED_DB_PUT_INTERNAL(gedp, dp, &intern, &rt_uniresource, GED_ERROR);
+    }
+
+    rt_db_free_internal(&intern);
+    return GED_OK;
+}
+
+
+struct wdb_metaball_pnt *
+_ged_metaball_delete_pnt(struct wdb_metaball_pnt *mbp)
+{
+    struct wdb_metaball_pnt *next;
+    struct wdb_metaball_pnt *prev;
+    struct wdb_metaball_pnt *head;
+
+    BU_CKMAG(mbp, WDB_METABALLPT_MAGIC, "metaball point");
+
+    /* Find the head */
+    head = mbp;
+    while (head->l.magic != BU_LIST_HEAD_MAGIC)
+       head = BU_LIST_NEXT(wdb_metaball_pnt, &head->l);
+
+    next = BU_LIST_NEXT(wdb_metaball_pnt, &mbp->l);
+    if (next->l.magic == BU_LIST_HEAD_MAGIC)
+       next = (struct wdb_metaball_pnt *)NULL;
+
+    prev = BU_LIST_PREV(wdb_metaball_pnt, &mbp->l);
+    if (prev->l.magic == BU_LIST_HEAD_MAGIC)
+       prev = (struct wdb_metaball_pnt *)NULL;
+
+    if (!prev && !next) {
+       return mbp;
+    }
+
+    BU_LIST_DEQUEUE(&mbp->l);
+
+    BU_PUT(mbp, struct wdb_metaball_pnt);
+
+    if (prev)
+       return prev;
+    else
+       return next;
+
+}
+
+
+int
+ged_metaball_delete_pnt(struct ged *gedp, int argc, const char *argv[])
+{
+    struct directory *dp;
+    static const char *usage = "metaball pt_i";
+    struct rt_db_internal intern;
+    struct wdb_metaball_pnt *mbp;
+    struct rt_metaball_internal *mbip;
+    int pt_i;
+    const char *last;
+
+    GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
+    GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR);
+
+    /* initialize result */
+    bu_vls_trunc(gedp->ged_result_str, 0);
+
+    /* must be wanting help */
+    if (argc == 1) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_HELP;
+    }
+
+    if (argc != 3) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    if ((last = strrchr(argv[1], '/')) == NULL)
+       last = argv[1];
+    else
+       ++last;
+
+    if (last[0] == '\0') {
+       bu_vls_printf(gedp->ged_result_str, "%s: illegal input - %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    dp = db_lookup(gedp->ged_wdbp->dbip, last, LOOKUP_QUIET);
+    if (dp == RT_DIR_NULL) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to find %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    if (sscanf(argv[2], "%d", &pt_i) != 1) {
+       bu_vls_printf(gedp->ged_result_str, "%s: bad metaball point index - 
%s", argv[0], argv[3]);
+       return GED_ERROR;
+    }
+
+    if (rt_db_get_internal(&intern, dp, gedp->ged_wdbp->dbip, (fastf_t *)NULL, 
&rt_uniresource) < 0) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to get internal for 
%s", argv[0], argv[1]);
+       return GED_ERROR;
+    }
+
+    if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD ||
+       intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_METABALL) {
+       bu_vls_printf(gedp->ged_result_str, "%s is not a METABALL", argv[1]);
+       rt_db_free_internal(&intern);
+
+       return GED_ERROR;
+    }
+
+    mbip = (struct rt_metaball_internal *)intern.idb_ptr;
+    if ((mbp = _ged_get_metaball_pt_i(mbip, pt_i)) == (struct wdb_metaball_pnt 
*)NULL) {
+       rt_db_free_internal(&intern);
+       bu_vls_printf(gedp->ged_result_str, "%s: bad metaball point index - 
%s", argv[0], argv[2]);
+       return GED_ERROR;
+    }
+
+    if (_ged_metaball_delete_pnt(mbp) == mbp) {
+       rt_db_free_internal(&intern);
+       bu_vls_printf(gedp->ged_result_str, "%s: cannot delete last metaball 
point %d", argv[0], pt_i);
+       return GED_ERROR;
+    }
+
+    GED_DB_PUT_INTERNAL(gedp, dp, &intern, &rt_uniresource, GED_ERROR);
+
+    rt_db_free_internal(&intern);
+    return GED_OK;
+}
+
+
+int
+ged_metaball_move_pnt(struct ged *gedp, int argc, const char *argv[])
+{
+    struct directory *dp;
+    static const char *usage = "[-r] metaball seg_i pt";
+    struct rt_db_internal intern;
+    struct wdb_metaball_pnt *mbp;
+    struct rt_metaball_internal *mbip;
+    mat_t mat;
+    point_t mb_pt;
+    double scan[3];
+    int seg_i;
+    int rflag = 0;
+    const char *last;
+
+    GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
+    GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR);
+
+    /* initialize result */
+    bu_vls_trunc(gedp->ged_result_str, 0);
+
+    /* must be wanting help */
+    if (argc == 1) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_HELP;
+    }
+
+    if (argc < 4 || 5 < argc) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    if (argc == 5) {
+       if (argv[1][0] != '-' || argv[1][1] != 'r' || argv[1][2] != '\0') {
+           bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+           return GED_ERROR;
+       }
+
+       rflag = 1;
+       --argc;
+       ++argv;
+    }
+
+    if ((last = strrchr(argv[1], '/')) == NULL)
+       last = argv[1];
+    else
+       ++last;
+
+    if (last[0] == '\0') {
+       bu_vls_printf(gedp->ged_result_str, "%s: illegal input - %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    dp = db_lookup(gedp->ged_wdbp->dbip, last, LOOKUP_QUIET);
+    if (dp == RT_DIR_NULL) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to find %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    if (sscanf(argv[2], "%d", &seg_i) != 1) {
+       bu_vls_printf(gedp->ged_result_str, "%s: bad metaball point index - 
%s", argv[0], argv[2]);
+       return GED_ERROR;
+    }
+
+    if (sscanf(argv[3], "%lf %lf %lf", &scan[X], &scan[Y], &scan[Z]) != 3) {
+       bu_vls_printf(gedp->ged_result_str, "%s: bad point - %s", argv[0], 
argv[3]);
+       return GED_ERROR;
+    }
+    VSCALE(mb_pt, scan, gedp->ged_wdbp->dbip->dbi_local2base);
+
+    if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1], 
gedp->ged_wdbp, mat) == GED_ERROR)
+       return GED_ERROR;
+
+    if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD ||
+       intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_METABALL) {
+       bu_vls_printf(gedp->ged_result_str, "Object not a METABALL");
+       rt_db_free_internal(&intern);
+
+       return GED_ERROR;
+    }
+
+    mbip = (struct rt_metaball_internal *)intern.idb_ptr;
+    if ((mbp = _ged_get_metaball_pt_i(mbip, seg_i)) == (struct 
wdb_metaball_pnt *)NULL) {
+       rt_db_free_internal(&intern);
+       bu_vls_printf(gedp->ged_result_str, "%s: bad metaball point index - 
%s", argv[0], argv[2]);
+       return GED_ERROR;
+    }
+
+    if (rflag) {
+       VADD2(mb_pt, mb_pt, mbp->coord);
+    }
+
+    VMOVE(mbp->coord, mb_pt);
+
+    {
+       mat_t invmat;
+       struct wdb_metaball_pnt *curr_mbp;
+       point_t curr_pt;
+
+       bn_mat_inv(invmat, mat);
+       for (BU_LIST_FOR(curr_mbp, wdb_metaball_pnt, 
&mbip->metaball_ctrl_head)) {
+           MAT4X3PNT(curr_pt, invmat, curr_mbp->coord);
+           VMOVE(curr_mbp->coord, curr_pt);
+       }
+
+       GED_DB_PUT_INTERNAL(gedp, dp, &intern, &rt_uniresource, GED_ERROR);
+    }
+
+    rt_db_free_internal(&intern);
+    return GED_OK;
+}
+
+/*
+ * Local Variables:
+ * mode: C
+ * tab-width: 8
+ * indent-tabs-mode: t
+ * c-file-style: "stroustrup"
+ * End:
+ * ex: shiftwidth=4 tabstop=8
+ */

Modified: brlcad/branches/gedplugins/src/libged/editit/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/editit/CMakeLists.txt 2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/editit/CMakeLists.txt 2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-editit editit.c)
 PLUGIN_SETUP(ged-editit ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  editit.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/edmater/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/edmater/CMakeLists.txt        
2020-07-22 13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/edmater/CMakeLists.txt        
2020-07-22 14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-edmater edmater.c)
 PLUGIN_SETUP(ged-edmater ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  edmater.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Copied: brlcad/branches/gedplugins/src/libged/edpipe.c (from rev 76414, 
brlcad/branches/gedplugins/src/libged/edpipe/edpipe.c)
===================================================================
--- brlcad/branches/gedplugins/src/libged/edpipe.c                              
(rev 0)
+++ brlcad/branches/gedplugins/src/libged/edpipe.c      2020-07-22 14:18:04 UTC 
(rev 76415)
@@ -0,0 +1,978 @@
+/*                        E D P I P E . C
+ * BRL-CAD
+ *
+ * Copyright (c) 1995-2020 United States Government as represented by
+ * the U.S. Army Research Laboratory.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * version 2.1 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this file; see the file named COPYING for more
+ * information.
+ */
+/** @file libged/edpipe.c
+ *
+ * Functions -
+ *
+ * pipe_split_pnt - split a pipe segment at a given point
+ *
+ * find_pipe_pnt_nearest_pnt - find which segment of a pipe is nearest
+ * the ray from "pt" in the viewing direction (for segment selection
+ * in MGED)
+ */
+
+#include "common.h"
+
+#include <math.h>
+#include <string.h>
+
+#include "vmath.h"
+#include "nmg.h"
+#include "rt/geom.h"
+#include "ged.h"
+#include "wdb.h"
+
+#include "./ged_private.h"
+
+/*
+ * Returns the index for the pipe segment matching ps.
+ */
+int
+_ged_get_pipe_i_seg(struct rt_pipe_internal *pipeip, struct wdb_pipe_pnt *ps)
+{
+    struct wdb_pipe_pnt *curr_ps;
+    int seg_i = 0;
+
+    for (BU_LIST_FOR(curr_ps, wdb_pipe_pnt, &pipeip->pipe_segs_head)) {
+       if (curr_ps == ps)
+           return seg_i;
+
+       ++seg_i;
+    }
+
+    return -1;
+}
+
+
+/*
+ * Returns segment seg_i.
+ */
+struct wdb_pipe_pnt *
+_ged_get_pipe_seg_i(struct rt_pipe_internal *pipeip, int seg_i)
+{
+    int i = 0;
+    struct wdb_pipe_pnt *curr_ps;
+
+    for (BU_LIST_FOR(curr_ps, wdb_pipe_pnt, &pipeip->pipe_segs_head)) {
+       if (i == seg_i)
+           return curr_ps;
+
+       ++i;
+    }
+
+    return (struct wdb_pipe_pnt *)NULL;
+}
+
+
+void
+pipe_split_pnt(struct bu_list *UNUSED(pipe_hd), struct wdb_pipe_pnt 
*UNUSED(ps), fastf_t *UNUSED(new_pt))
+{
+    bu_log("WARNING: pipe splitting unimplemented\n");
+}
+
+
+static fastf_t
+edpipe_scale(fastf_t d, fastf_t scale)
+{
+    if (scale < 0.0) {
+       /* negative value sets the scale */
+       return (-scale);
+    }
+
+    /* positive value gets multiplied */
+    return (d * scale);
+}
+
+
+void
+pipe_scale_od(struct rt_pipe_internal *pipeip, fastf_t scale)
+{
+    struct wdb_pipe_pnt *ps;
+
+    RT_PIPE_CK_MAGIC(pipeip);
+
+    /* check that this can be done */
+    for (BU_LIST_FOR(ps, wdb_pipe_pnt, &pipeip->pipe_segs_head)) {
+       fastf_t tmp_od;
+
+       tmp_od = edpipe_scale(ps->pp_od, scale);
+
+       if (ps->pp_id > tmp_od) {
+           /* Silently ignore */
+           return;
+       }
+       if (tmp_od > 2.0*ps->pp_bendradius) {
+           /* Silently ignore */
+           return;
+       }
+    }
+
+    for (BU_LIST_FOR(ps, wdb_pipe_pnt, &pipeip->pipe_segs_head)) {
+       ps->pp_od = edpipe_scale(ps->pp_od, scale);
+    }
+}
+
+
+void
+pipe_scale_id(struct rt_pipe_internal *pipeip, fastf_t scale)
+{
+    struct wdb_pipe_pnt *ps;
+
+    RT_PIPE_CK_MAGIC(pipeip);
+
+    /* check that this can be done */
+    for (BU_LIST_FOR(ps, wdb_pipe_pnt, &pipeip->pipe_segs_head)) {
+       fastf_t tmp_id;
+
+       tmp_id = edpipe_scale(ps->pp_id, scale);
+
+       if (ps->pp_od < tmp_id) {
+           /* Silently ignore */
+           return;
+       }
+       if (tmp_id > 2.0*ps->pp_bendradius) {
+           /* Silently ignore */
+           return;
+       }
+    }
+
+    for (BU_LIST_FOR(ps, wdb_pipe_pnt, &pipeip->pipe_segs_head)) {
+       ps->pp_id = edpipe_scale(ps->pp_id, scale);
+    }
+}
+
+
+void
+pipe_seg_scale_od(struct wdb_pipe_pnt *ps, fastf_t scale)
+{
+    fastf_t tmp_od;
+
+    BU_CKMAG(ps, WDB_PIPESEG_MAGIC, "pipe segment");
+
+    tmp_od = edpipe_scale(ps->pp_od, scale);
+
+    /* need to check that the new OD is not less than ID
+     * of any affected segment.
+     */
+    if (ps->pp_id > tmp_od) {
+       bu_log("Cannot make OD smaller than ID\n");
+       return;
+    }
+    if (tmp_od > 2.0*ps->pp_bendradius) {
+       bu_log("Cannot make outer radius greater than bend radius\n");
+       return;
+    }
+
+    ps->pp_od = edpipe_scale(ps->pp_od, scale);
+}
+
+
+void
+pipe_seg_scale_id(struct wdb_pipe_pnt *ps, fastf_t scale)
+{
+    fastf_t tmp_id;
+
+    BU_CKMAG(ps, WDB_PIPESEG_MAGIC, "pipe segment");
+
+    tmp_id = edpipe_scale(ps->pp_id, scale);
+
+    /* need to check that the new ID is not greater than OD */
+    if (ps->pp_od < tmp_id) {
+       bu_log( "Cannot make ID greater than OD\n");
+       return;
+    }
+    if (tmp_id > 2.0*ps->pp_bendradius) {
+       bu_log("Cannot make inner radius greater than bend radius\n");
+       return;
+    }
+
+    ps->pp_id = edpipe_scale(ps->pp_id, scale);
+}
+
+
+void
+pipe_seg_scale_radius(struct wdb_pipe_pnt *ps, fastf_t scale)
+{
+    fastf_t old_radius;
+    struct wdb_pipe_pnt *head;
+
+    BU_CKMAG(ps, WDB_PIPESEG_MAGIC, "pipe point");
+
+    head = ps;
+    while (head->l.magic != BU_LIST_HEAD_MAGIC)
+       head = BU_LIST_NEXT(wdb_pipe_pnt, &head->l);
+
+    /* make sure we can make this change */
+    old_radius = ps->pp_bendradius;
+
+    ps->pp_bendradius = edpipe_scale(ps->pp_bendradius, scale);
+
+    if (ps->pp_bendradius < ps->pp_od * 0.5) {
+       bu_log("Cannot make bend radius less than pipe outer radius\n");
+       ps->pp_bendradius = old_radius;
+       return;
+    }
+
+    if (rt_pipe_ck(&head->l)) {
+       /* won't work, go back to original radius */
+       ps->pp_bendradius = old_radius;
+       return;
+    }
+}
+
+
+void
+pipe_scale_radius(struct rt_pipe_internal *pipeip, fastf_t scale)
+{
+    struct bu_list head;
+    struct wdb_pipe_pnt *old_ps, *new_ps;
+
+    RT_PIPE_CK_MAGIC(pipeip);
+
+    /* make a quick check for minimum bend radius */
+    for (BU_LIST_FOR(old_ps, wdb_pipe_pnt, &pipeip->pipe_segs_head)) {
+       if (scale < 0.0) {
+           if ((-scale) < old_ps->pp_od * 0.5) {
+               bu_log("Cannot make bend radius less than pipe outer radius\n");
+               return;
+           }
+       } else {
+           if (old_ps->pp_bendradius * scale < old_ps->pp_od * 0.5) {
+               bu_log("Cannot make bend radius less than pipe outer radius\n");
+               return;
+           }
+       }
+    }
+
+    /* make temporary copy of this pipe solid */
+    BU_LIST_INIT(&head);
+    for (BU_LIST_FOR(old_ps, wdb_pipe_pnt, &pipeip->pipe_segs_head)) {
+       BU_GET(new_ps, struct wdb_pipe_pnt);
+       *new_ps = (*old_ps);
+       BU_LIST_APPEND(&head, &new_ps->l);
+    }
+
+    /* make the desired editing changes to the copy */
+    for (BU_LIST_FOR(new_ps, wdb_pipe_pnt, &head)) {
+       new_ps->pp_bendradius = edpipe_scale(new_ps->pp_bendradius, scale);
+    }
+
+    /* check if the copy is O.K. */
+    if (rt_pipe_ck(&head)) {
+       /* won't work, go back to original */
+       while (BU_LIST_NON_EMPTY(&head)) {
+           new_ps = BU_LIST_FIRST(wdb_pipe_pnt, &head);
+           BU_LIST_DEQUEUE(&new_ps->l);
+           BU_PUT(new_ps, struct wdb_pipe_pnt);
+       }
+       return;
+    }
+
+    /* free temporary pipe solid */
+    while (BU_LIST_NON_EMPTY(&head)) {
+       new_ps = BU_LIST_FIRST(wdb_pipe_pnt, &head);
+       BU_LIST_DEQUEUE(&new_ps->l);
+       BU_PUT(new_ps, struct wdb_pipe_pnt);
+    }
+
+    /* make changes to the original */
+    for (BU_LIST_FOR(old_ps, wdb_pipe_pnt, &pipeip->pipe_segs_head)) {
+       old_ps->pp_bendradius = edpipe_scale(old_ps->pp_bendradius, scale);
+    }
+}
+
+
+struct wdb_pipe_pnt *
+find_pipe_pnt_nearest_pnt(const struct bu_list *pipe_hd, const point_t 
model_pt, matp_t view2model)
+{
+    struct wdb_pipe_pnt *ps;
+    struct wdb_pipe_pnt *nearest=(struct wdb_pipe_pnt *)NULL;
+    struct bn_tol tmp_tol;
+    fastf_t min_dist = MAX_FASTF;
+    vect_t dir, work;
+
+    tmp_tol.magic = BN_TOL_MAGIC;
+    tmp_tol.dist = 0.0;
+    tmp_tol.dist_sq = tmp_tol.dist * tmp_tol.dist;
+    tmp_tol.perp = 0.0;
+    tmp_tol.para = 1.0 - tmp_tol.perp;
+
+    /* get a direction vector in model space corresponding to z-direction in 
view */
+    VSET(work, 0.0, 0.0, 1.0);
+    MAT4X3VEC(dir, view2model, work);
+
+    for (BU_LIST_FOR(ps, wdb_pipe_pnt, pipe_hd)) {
+       fastf_t dist;
+
+       dist = bn_dist_line3_pnt3(model_pt, dir, ps->pp_coord);
+       if (dist < min_dist) {
+           min_dist = dist;
+           nearest = ps;
+       }
+    }
+
+    return nearest;
+}
+
+
+struct wdb_pipe_pnt *
+_ged_pipe_add_pnt(struct rt_pipe_internal *pipeip, struct wdb_pipe_pnt *pp, 
const point_t new_pt)
+{
+    struct wdb_pipe_pnt *last;
+    struct wdb_pipe_pnt *newpp;
+
+    RT_PIPE_CK_MAGIC(pipeip);
+
+    if (pp) {
+       BU_CKMAG(pp, WDB_PIPESEG_MAGIC, "pipe point");
+       last = pp;
+    } else {
+       /* add new point to end of pipe solid */
+       last = BU_LIST_LAST(wdb_pipe_pnt, &pipeip->pipe_segs_head);
+
+       if (last->l.magic == BU_LIST_HEAD_MAGIC) {
+           BU_GET(newpp, struct wdb_pipe_pnt);
+           newpp->l.magic = WDB_PIPESEG_MAGIC;
+           newpp->pp_od = 30.0;
+           newpp->pp_id = 0.0;
+           newpp->pp_bendradius = 40.0;
+           VMOVE(newpp->pp_coord, new_pt);
+           BU_LIST_INSERT(&pipeip->pipe_segs_head, &newpp->l);
+           return newpp;
+       }
+    }
+
+    /* build new point */
+    BU_GET(newpp, struct wdb_pipe_pnt);
+    newpp->l.magic = WDB_PIPESEG_MAGIC;
+    newpp->pp_od = last->pp_od;
+    newpp->pp_id = last->pp_id;
+    newpp->pp_bendradius = last->pp_bendradius;
+    VMOVE(newpp->pp_coord, new_pt);
+
+    if (pp) {
+       /* append after current point */
+       BU_LIST_APPEND(&pp->l, &newpp->l);
+    } else {
+       /* add to end of pipe solid */
+       BU_LIST_INSERT(&pipeip->pipe_segs_head, &newpp->l);
+    }
+
+    if (rt_pipe_ck(&pipeip->pipe_segs_head)) {
+       /* won't work here, so refuse to do it */
+       BU_LIST_DEQUEUE(&newpp->l);
+       BU_PUT(newpp, struct wdb_pipe_pnt);
+       return pp;
+    }
+
+    return newpp;
+}
+
+
+struct wdb_pipe_pnt *
+_ged_pipe_ins_pnt(struct rt_pipe_internal *pipeip, struct wdb_pipe_pnt *pp, 
const point_t new_pt)
+{
+    struct wdb_pipe_pnt *first;
+    struct wdb_pipe_pnt *newpp;
+
+    RT_PIPE_CK_MAGIC(pipeip);
+
+    if (pp) {
+       BU_CKMAG(pp, WDB_PIPESEG_MAGIC, "pipe point");
+       first = pp;
+    } else {
+       /* insert new point at start of pipe solid */
+       first = BU_LIST_FIRST(wdb_pipe_pnt, &pipeip->pipe_segs_head);
+
+       if (first->l.magic == BU_LIST_HEAD_MAGIC) {
+           BU_GET(newpp, struct wdb_pipe_pnt);
+           newpp->l.magic = WDB_PIPESEG_MAGIC;
+           newpp->pp_od = 30.0;
+           newpp->pp_id = 0.0;
+           newpp->pp_bendradius = 40.0;
+           VMOVE(newpp->pp_coord, new_pt);
+           BU_LIST_APPEND(&pipeip->pipe_segs_head, &newpp->l);
+           return newpp;
+       }
+    }
+
+    /* build new point */
+    BU_GET(newpp, struct wdb_pipe_pnt);
+    newpp->l.magic = WDB_PIPESEG_MAGIC;
+    newpp->pp_od = first->pp_od;
+    newpp->pp_id = first->pp_id;
+    newpp->pp_bendradius = first->pp_bendradius;
+    VMOVE(newpp->pp_coord, new_pt);
+
+    if (pp) {
+       /* insert before current point */
+       BU_LIST_INSERT(&pp->l, &newpp->l);
+    } else {
+       /* add to start of pipe */
+       BU_LIST_APPEND(&pipeip->pipe_segs_head, &newpp->l);
+    }
+
+    if (rt_pipe_ck(&pipeip->pipe_segs_head)) {
+       /* won't work here, so refuse to do it */
+       BU_LIST_DEQUEUE(&newpp->l);
+       BU_PUT(newpp, struct wdb_pipe_pnt);
+       return pp;
+    }
+
+    return newpp;
+}
+
+
+struct wdb_pipe_pnt *
+_ged_pipe_delete_pnt(struct wdb_pipe_pnt *ps)
+{
+    struct wdb_pipe_pnt *next;
+    struct wdb_pipe_pnt *prev;
+    struct wdb_pipe_pnt *head;
+
+    BU_CKMAG(ps, WDB_PIPESEG_MAGIC, "pipe segment");
+
+    head = ps;
+    while (head->l.magic != BU_LIST_HEAD_MAGIC)
+       head = BU_LIST_NEXT(wdb_pipe_pnt, &head->l);
+
+    next = BU_LIST_NEXT(wdb_pipe_pnt, &ps->l);
+    if (next->l.magic == BU_LIST_HEAD_MAGIC)
+       next = (struct wdb_pipe_pnt *)NULL;
+
+    prev = BU_LIST_PREV(wdb_pipe_pnt, &ps->l);
+    if (prev->l.magic == BU_LIST_HEAD_MAGIC)
+       prev = (struct wdb_pipe_pnt *)NULL;
+
+    if (!prev && !next) {
+       bu_log("Cannot delete last point in pipe\n");
+       return ps;
+    }
+
+    BU_LIST_DEQUEUE(&ps->l);
+
+    if (rt_pipe_ck(&head->l)) {
+       bu_log("Cannot delete this point, it will result in an illegal pipe\n");
+       if (next) {
+           BU_LIST_INSERT(&next->l, &ps->l);
+       } else if (prev) {
+           BU_LIST_APPEND(&prev->l, &ps->l);
+       } else {
+           BU_LIST_INSERT(&head->l, &ps->l);
+       }
+
+       return ps;
+    } else {
+       BU_PUT(ps, struct wdb_pipe_pnt);
+    }
+
+    if (prev)
+       return prev;
+    else
+       return next;
+
+}
+
+
+int
+_ged_pipe_move_pnt(struct rt_pipe_internal *pipeip, struct wdb_pipe_pnt *ps, 
const point_t new_pt)
+{
+    point_t old_pt;
+
+    RT_PIPE_CK_MAGIC(pipeip);
+    BU_CKMAG(ps, WDB_PIPESEG_MAGIC, "pipe segment");
+
+    VMOVE(old_pt, ps->pp_coord);
+
+    VMOVE(ps->pp_coord, new_pt);
+    if (rt_pipe_ck(&pipeip->pipe_segs_head)) {
+       bu_log("Cannot move point there\n");
+       VMOVE(ps->pp_coord, old_pt);
+       return 1;
+    }
+
+    return 0;
+}
+
+
+int
+_ged_scale_pipe(struct ged *gedp, struct rt_pipe_internal *pipeip, const char 
*attribute, fastf_t sf, int rflag)
+{
+    int seg_i;
+    struct wdb_pipe_pnt *ps;
+
+    RT_PIPE_CK_MAGIC(pipeip);
+
+    /* encode rflag as a negative scale so we don't have to pass it */
+    if (!rflag && sf > 0)
+       sf = -sf;
+
+    switch (attribute[0]) {
+       case 'b':
+       case 'r':
+           if (sscanf(attribute+1, "%d", &seg_i) != 1)
+               seg_i = 0;
+
+           if ((ps = _ged_get_pipe_seg_i(pipeip, seg_i)) == (struct 
wdb_pipe_pnt *)NULL)
+               return GED_ERROR;
+
+           pipe_seg_scale_radius(ps, sf);
+           break;
+       case 'B':
+       case 'R':
+           pipe_scale_radius(pipeip, sf);
+           break;
+       case 'i':
+           if (sscanf(attribute+1, "%d", &seg_i) != 1)
+               seg_i = 0;
+
+           if ((ps = _ged_get_pipe_seg_i(pipeip, seg_i)) == (struct 
wdb_pipe_pnt *)NULL)
+               return GED_ERROR;
+
+           pipe_seg_scale_id(ps, sf);
+           break;
+       case 'I':
+           pipe_scale_id(pipeip, sf);
+           break;
+       case 'o':
+           if (sscanf(attribute+1, "%d", &seg_i) != 1)
+               seg_i = 0;
+
+           if ((ps = _ged_get_pipe_seg_i(pipeip, seg_i)) == (struct 
wdb_pipe_pnt *)NULL)
+               return GED_ERROR;
+
+           pipe_seg_scale_od(ps, sf);
+           break;
+       case 'O':
+           pipe_scale_od(pipeip, sf);
+           break;
+       default:
+           bu_vls_printf(gedp->ged_result_str, "bad pipe attribute - %s", 
attribute);
+           return GED_ERROR;
+    }
+
+    return GED_OK;
+}
+
+
+int
+_ged_pipe_append_pnt_common(struct ged *gedp, int argc, const char *argv[], 
struct wdb_pipe_pnt *(*func)(struct rt_pipe_internal *, struct wdb_pipe_pnt *, 
const point_t))
+{
+    struct directory *dp;
+    static const char *usage = "pipe pt";
+    struct rt_db_internal intern;
+    struct rt_pipe_internal *pipeip;
+    mat_t mat;
+    point_t view_ps_pt;
+    point_t view_pp_coord;
+    point_t ps_pt;
+    struct wdb_pipe_pnt *prevpp;
+    double scan[3];
+    char *last;
+
+    GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
+    GED_CHECK_VIEW(gedp, GED_ERROR);
+    GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR);
+
+    /* initialize result */
+    bu_vls_trunc(gedp->ged_result_str, 0);
+
+    /* must be wanting help */
+    if (argc == 1) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_HELP;
+    }
+
+    if (argc != 3) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    if ((last = strrchr(argv[1], '/')) == NULL)
+       last = (char *)argv[1];
+    else
+       ++last;
+
+    if (last[0] == '\0') {
+       bu_vls_printf(gedp->ged_result_str, "%s: illegal input - %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    dp = db_lookup(gedp->ged_wdbp->dbip, last, LOOKUP_QUIET);
+    if (dp == RT_DIR_NULL) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to find %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    if (sscanf(argv[2], "%lf %lf %lf", &scan[X], &scan[Y], &scan[Z]) != 3) {
+       bu_vls_printf(gedp->ged_result_str, "%s: bad point - %s", argv[0], 
argv[2]);
+       return GED_ERROR;
+    }
+    /* convert from double to fastf_t */
+    VMOVE(view_ps_pt, scan);
+
+    if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1], 
gedp->ged_wdbp, mat) == GED_ERROR)
+       return GED_ERROR;
+
+    if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD ||
+       intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_PIPE) {
+       bu_vls_printf(gedp->ged_result_str, "Object not a PIPE");
+       rt_db_free_internal(&intern);
+
+       return GED_ERROR;
+    }
+
+    pipeip = (struct rt_pipe_internal *)intern.idb_ptr;
+
+    /* use the view z from the first or last pipe point, depending on whether 
we're appending or prepending */
+    if (func == _ged_pipe_add_pnt)
+       prevpp = BU_LIST_LAST(wdb_pipe_pnt, &pipeip->pipe_segs_head);
+    else
+       prevpp = BU_LIST_FIRST(wdb_pipe_pnt, &pipeip->pipe_segs_head);
+
+    MAT4X3PNT(view_pp_coord, gedp->ged_gvp->gv_model2view, prevpp->pp_coord);
+    view_ps_pt[Z] = view_pp_coord[Z];
+    MAT4X3PNT(ps_pt, gedp->ged_gvp->gv_view2model, view_ps_pt);
+
+    if ((*func)(pipeip, (struct wdb_pipe_pnt *)NULL, ps_pt) == (struct 
wdb_pipe_pnt *)NULL) {
+       rt_db_free_internal(&intern);
+       bu_vls_printf(gedp->ged_result_str, "%s: cannot move point there", 
argv[0]);
+       return GED_ERROR;
+    }
+
+    {
+       mat_t invmat;
+       struct wdb_pipe_pnt *curr_ps;
+       point_t curr_pt;
+
+       bn_mat_inv(invmat, mat);
+       for (BU_LIST_FOR(curr_ps, wdb_pipe_pnt, &pipeip->pipe_segs_head)) {
+           MAT4X3PNT(curr_pt, invmat, curr_ps->pp_coord);
+           VMOVE(curr_ps->pp_coord, curr_pt);
+       }
+
+       GED_DB_PUT_INTERNAL(gedp, dp, &intern, &rt_uniresource, GED_ERROR);
+    }
+
+    rt_db_free_internal(&intern);
+    return GED_OK;
+}
+
+
+int
+ged_pipe_append_pnt(struct ged *gedp, int argc, const char *argv[])
+{
+    return _ged_pipe_append_pnt_common(gedp, argc, argv, _ged_pipe_add_pnt);
+}
+
+
+int
+ged_pipe_delete_pnt(struct ged *gedp, int argc, const char *argv[])
+{
+    struct directory *dp;
+    static const char *usage = "pipe seg_i";
+    struct rt_db_internal intern;
+    struct wdb_pipe_pnt *ps;
+    struct rt_pipe_internal *pipeip;
+    int seg_i;
+    char *last;
+
+    GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
+    GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR);
+
+    /* initialize result */
+    bu_vls_trunc(gedp->ged_result_str, 0);
+
+    /* must be wanting help */
+    if (argc == 1) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_HELP;
+    }
+
+    if (argc != 3) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    if ((last = strrchr(argv[1], '/')) == NULL)
+       last = (char *)argv[1];
+    else
+       ++last;
+
+    if (last[0] == '\0') {
+       bu_vls_printf(gedp->ged_result_str, "%s: illegal input - %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    dp = db_lookup(gedp->ged_wdbp->dbip, last, LOOKUP_QUIET);
+    if (dp == RT_DIR_NULL) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to find %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    if (sscanf(argv[2], "%d", &seg_i) != 1) {
+       bu_vls_printf(gedp->ged_result_str, "%s: bad pipe segment index - %s", 
argv[0], argv[3]);
+       return GED_ERROR;
+    }
+
+    if (rt_db_get_internal(&intern, dp, gedp->ged_wdbp->dbip, (fastf_t *)NULL, 
&rt_uniresource) < 0) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to get internal for 
%s", argv[0], argv[1]);
+       return GED_ERROR;
+    }
+
+    if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD ||
+       intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_PIPE) {
+       bu_vls_printf(gedp->ged_result_str, "%s is not a PIPE", argv[1]);
+       rt_db_free_internal(&intern);
+
+       return GED_ERROR;
+    }
+
+    pipeip = (struct rt_pipe_internal *)intern.idb_ptr;
+    if ((ps = _ged_get_pipe_seg_i(pipeip, seg_i)) == (struct wdb_pipe_pnt 
*)NULL) {
+       rt_db_free_internal(&intern);
+       bu_vls_printf(gedp->ged_result_str, "%s: bad pipe segment index - %s", 
argv[0], argv[2]);
+       return GED_ERROR;
+    }
+
+    if (_ged_pipe_delete_pnt(ps) == ps) {
+       rt_db_free_internal(&intern);
+       bu_vls_printf(gedp->ged_result_str, "%s: cannot delete pipe segment 
%d", argv[0], seg_i);
+       return GED_ERROR;
+    }
+
+    GED_DB_PUT_INTERNAL(gedp, dp, &intern, &rt_uniresource, GED_ERROR);
+
+    rt_db_free_internal(&intern);
+    return GED_OK;
+}
+
+
+int
+ged_find_pipe_pnt_nearest_pnt(struct ged *gedp, int argc, const char *argv[])
+{
+    struct directory *dp;
+    static const char *usage = "pipe x y z";
+    struct rt_db_internal intern;
+    struct wdb_pipe_pnt *nearest;
+    point_t model_pt;
+    double scan[3];
+    mat_t mat;
+    int seg_i;
+    char *last;
+
+    GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
+    GED_CHECK_VIEW(gedp, GED_ERROR);
+    GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR);
+
+    /* initialize result */
+    bu_vls_trunc(gedp->ged_result_str, 0);
+
+    /* must be wanting help */
+    if (argc == 1) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_HELP;
+    }
+
+    if (argc != 3 && argc != 5) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    if ((last = strrchr(argv[1], '/')) == NULL)
+       last = (char *)argv[1];
+    else
+       ++last;
+
+    if (last[0] == '\0') {
+       bu_vls_printf(gedp->ged_result_str, "%s: illegal input - %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    dp = db_lookup(gedp->ged_wdbp->dbip, last, LOOKUP_QUIET);
+    if (dp == RT_DIR_NULL) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to find %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    if (argc == 3) {
+       if (sscanf(argv[2], "%lf %lf %lf", &scan[X], &scan[Y], &scan[Z]) != 3) {
+           bu_vls_printf(gedp->ged_result_str, "%s: bad point - %s", argv[0], 
argv[2]);
+           return GED_ERROR;
+       }
+    } else if (sscanf(argv[2], "%lf", &scan[X]) != 1 ||
+              sscanf(argv[3], "%lf", &scan[Y]) != 1 ||
+              sscanf(argv[4], "%lf", &scan[Z]) != 1) {
+       bu_vls_printf(gedp->ged_result_str, "%s: bad X, Y or Z", argv[0]);
+       return GED_ERROR;
+    }
+    /* convert from double to fastf_t */
+    VMOVE(model_pt, scan);
+
+    if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1], 
gedp->ged_wdbp, mat) == GED_ERROR)
+       return GED_ERROR;
+
+    nearest = find_pipe_pnt_nearest_pnt(&((struct rt_pipe_internal 
*)intern.idb_ptr)->pipe_segs_head,
+                                    model_pt, gedp->ged_gvp->gv_view2model);
+    seg_i = _ged_get_pipe_i_seg((struct rt_pipe_internal *)intern.idb_ptr, 
nearest);
+    rt_db_free_internal(&intern);
+
+    if (seg_i < 0) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to find segment for 
%s", argv[0], argv[1]);
+       return GED_ERROR;
+    }
+
+    bu_vls_printf(gedp->ged_result_str, "%d", seg_i);
+    return GED_OK;
+}
+
+
+int
+ged_pipe_move_pnt(struct ged *gedp, int argc, const char *argv[])
+{
+    struct directory *dp;
+    static const char *usage = "[-r] pipe seg_i pt";
+    struct rt_db_internal intern;
+    struct wdb_pipe_pnt *ps;
+    struct rt_pipe_internal *pipeip;
+    mat_t mat;
+    point_t ps_pt;
+    double scan[3];
+    int seg_i;
+    int rflag = 0;
+    char *last;
+
+    GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
+    GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR);
+
+    /* initialize result */
+    bu_vls_trunc(gedp->ged_result_str, 0);
+
+    /* must be wanting help */
+    if (argc == 1) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_HELP;
+    }
+
+    if (argc < 4 || 5 < argc) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    if (argc == 5) {
+       if (argv[1][0] != '-' || argv[1][1] != 'r' || argv[1][2] != '\0') {
+           bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+           return GED_ERROR;
+       }
+
+       rflag = 1;
+       --argc;
+       ++argv;
+    }
+
+    if ((last = strrchr(argv[1], '/')) == NULL)
+       last = (char *)argv[1];
+    else
+       ++last;
+
+    if (last[0] == '\0') {
+       bu_vls_printf(gedp->ged_result_str, "%s: illegal input - %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    dp = db_lookup(gedp->ged_wdbp->dbip, last, LOOKUP_QUIET);
+    if (dp == RT_DIR_NULL) {
+       bu_vls_printf(gedp->ged_result_str, "%s: failed to find %s", argv[0], 
argv[1]);
+       return GED_ERROR;
+    }
+
+    if (sscanf(argv[2], "%d", &seg_i) != 1) {
+       bu_vls_printf(gedp->ged_result_str, "%s: bad pipe segment index - %s", 
argv[0], argv[2]);
+       return GED_ERROR;
+    }
+
+    if (sscanf(argv[3], "%lf %lf %lf", &scan[X], &scan[Y], &scan[Z]) != 3) {
+       bu_vls_printf(gedp->ged_result_str, "%s: bad point - %s", argv[0], 
argv[3]);
+       return GED_ERROR;
+    }
+    VSCALE(ps_pt, scan, gedp->ged_wdbp->dbip->dbi_local2base);
+
+    if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1], 
gedp->ged_wdbp, mat) == GED_ERROR)
+       return GED_ERROR;
+
+    if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD ||
+       intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_PIPE) {
+       bu_vls_printf(gedp->ged_result_str, "Object not a PIPE");
+       rt_db_free_internal(&intern);
+
+       return GED_ERROR;
+    }
+
+    pipeip = (struct rt_pipe_internal *)intern.idb_ptr;
+    if ((ps = _ged_get_pipe_seg_i(pipeip, seg_i)) == (struct wdb_pipe_pnt 
*)NULL) {
+       rt_db_free_internal(&intern);
+       bu_vls_printf(gedp->ged_result_str, "%s: bad pipe segment index - %s", 
argv[0], argv[2]);
+       return GED_ERROR;
+    }
+
+    if (rflag) {
+       VADD2(ps_pt, ps_pt, ps->pp_coord);
+    }
+
+    if (_ged_pipe_move_pnt(pipeip, ps, ps_pt)) {
+       rt_db_free_internal(&intern);
+       bu_vls_printf(gedp->ged_result_str, "%s: cannot move point there", 
argv[0]);
+       return GED_ERROR;
+    }
+
+    {
+       mat_t invmat;
+       struct wdb_pipe_pnt *curr_ps;
+       point_t curr_pt;
+
+       bn_mat_inv(invmat, mat);
+       for (BU_LIST_FOR(curr_ps, wdb_pipe_pnt, &pipeip->pipe_segs_head)) {
+           MAT4X3PNT(curr_pt, invmat, curr_ps->pp_coord);
+           VMOVE(curr_ps->pp_coord, curr_pt);
+       }
+
+       GED_DB_PUT_INTERNAL(gedp, dp, &intern, &rt_uniresource, GED_ERROR);
+    }
+
+    rt_db_free_internal(&intern);
+    return GED_OK;
+}
+
+
+int
+ged_pipe_prepend_pnt(struct ged *gedp, int argc, const char *argv[])
+{
+    return _ged_pipe_append_pnt_common(gedp, argc, argv, _ged_pipe_ins_pnt);
+}
+
+/*
+ * Local Variables:
+ * mode: C
+ * tab-width: 8
+ * indent-tabs-mode: t
+ * c-file-style: "stroustrup"
+ * End:
+ * ex: shiftwidth=4 tabstop=8
+ */

Modified: brlcad/branches/gedplugins/src/libged/env/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/env/CMakeLists.txt    2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/env/CMakeLists.txt    2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-env env.c)
 PLUGIN_SETUP(ged-env ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  env.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/erase/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/erase/CMakeLists.txt  2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/erase/CMakeLists.txt  2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-erase erase.c)
 PLUGIN_SETUP(ged-erase ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  erase.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/exists/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/exists/CMakeLists.txt 2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/exists/CMakeLists.txt 2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-exists exists.c)
 PLUGIN_SETUP(ged-exists ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  exists.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/expand/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/expand/CMakeLists.txt 2020-07-22 
13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/expand/CMakeLists.txt 2020-07-22 
14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-expand expand.c)
 PLUGIN_SETUP(ged-expand ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  expand.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/branches/gedplugins/src/libged/eye_pos/CMakeLists.txt
===================================================================
--- brlcad/branches/gedplugins/src/libged/eye_pos/CMakeLists.txt        
2020-07-22 13:13:48 UTC (rev 76414)
+++ brlcad/branches/gedplugins/src/libged/eye_pos/CMakeLists.txt        
2020-07-22 14:18:04 UTC (rev 76415)
@@ -13,6 +13,11 @@
 VALIDATE_STYLE(ged-eye_pos eye_pos.c)
 PLUGIN_SETUP(ged-eye_pos ged)
 
+CMAKEFILES(
+  CMakeLists.txt
+  eye_pos.c
+  )
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Copied: brlcad/branches/gedplugins/src/libged/facedef.c (from rev 76414, 
brlcad/branches/gedplugins/src/libged/facedef/facedef.c)
===================================================================
--- brlcad/branches/gedplugins/src/libged/facedef.c                             
(rev 0)
+++ brlcad/branches/gedplugins/src/libged/facedef.c     2020-07-22 14:18:04 UTC 
(rev 76415)
@@ -0,0 +1,387 @@
+/*                       F A C E D E F . C
+ * BRL-CAD
+ *
+ * Copyright (c) 1986-2020 United States Government as represented by
+ * the U.S. Army Research Laboratory.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * version 2.1 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this file; see the file named COPYING for more
+ * information.
+ */
+/** @file libged/facedef.c
+ *
+ */
+
+#include "common.h"
+
+#include <stdlib.h>
+#include <math.h>
+#include <signal.h>
+
+
+#include "vmath.h"
+#include "rt/geom.h"
+#include "raytrace.h"
+#include "./ged_private.h"
+
+
+char *p_rotfb[] = {
+    "Enter rot, fb angles: ",
+    "Enter fb angle: ",
+    "Enter fixed vertex(v#) or point(X Y Z): ",
+    "Enter Y, Z of point: ",
+    "Enter Z of point: "
+};
+
+
+char *p_3pts[] = {
+    "Enter X, Y, Z of point",
+    "Enter Y, Z of point",
+    "Enter Z of point"
+};
+
+
+char *p_pleqn[] = {
+    "Enter A, B, C, D of plane equation: ",
+    "Enter B, C, D of plane equation: ",
+    "Enter C, D of plane equation: ",
+    "Enter D of plane equation: "
+};
+
+
+char *p_nupnt[] = {
+    "Enter X, Y, Z of fixed point: ",
+    "Enter Y, Z of fixed point: ",
+    "Enter Z of fixed point: "
+};
+
+
+/*
+ * Gets the planar equation from the array argv[] and puts the result
+ * into 'plane'.
+ */
+static void
+get_pleqn(struct ged *gedp, fastf_t *plane, const char *argv[])
+{
+    int i;
+
+    for (i=0; i<4; i++)
+       plane[i]= atof(argv[i]);
+    VUNITIZE(&plane[0]);
+    plane[W] *= gedp->ged_wdbp->dbip->dbi_local2base;
+    return;
+}
+
+
+/*
+ * Gets three definite points from the array argv[] and finds the
+ * planar equation from these points.  The resulting plane equation is
+ * stored in 'plane'.
+ *
+ * Returns -
+ * 0 success
+ * -1 failure
+ */
+static int
+get_3pts(struct ged *gedp, fastf_t *plane, const char *argv[], const struct 
bn_tol *tol)
+{
+    int i;
+    point_t a, b, c;
+
+    for (i=0; i<3; i++)
+       a[i] = atof(argv[0+i]) * gedp->ged_wdbp->dbip->dbi_local2base;
+    for (i=0; i<3; i++)
+       b[i] = atof(argv[3+i]) * gedp->ged_wdbp->dbip->dbi_local2base;
+    for (i=0; i<3; i++)
+       c[i] = atof(argv[6+i]) * gedp->ged_wdbp->dbip->dbi_local2base;
+
+    if (bn_make_plane_3pnts(plane, a, b, c, tol) < 0) {
+       bu_vls_printf(gedp->ged_result_str, "facedef: not a plane\n");
+       return -1;              /* failure */
+    }
+    return 0;                  /* success */
+}
+
+
+/*
+ * Gets information from the array argv[].  Finds the planar equation
+ * given rotation and fallback angles, plus a fixed point. Result is

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



_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to