Revision: 76344
          http://sourceforge.net/p/brlcad/code/76344
Author:   starseeker
Date:     2020-07-15 00:45:22 +0000 (Wed, 15 Jul 2020)
Log Message:
-----------
Break down view logic more specifically.

Modified Paths:
--------------
    brlcad/trunk/src/libtclcad/CMakeLists.txt
    brlcad/trunk/src/libtclcad/tclcad_obj.c
    brlcad/trunk/src/libtclcad/view/tclcad_views.c

Added Paths:
-----------
    brlcad/trunk/src/libtclcad/view/arrows.c
    brlcad/trunk/src/libtclcad/view/autoview.c
    brlcad/trunk/src/libtclcad/view/axes.c
    brlcad/trunk/src/libtclcad/view/view.h

Modified: brlcad/trunk/src/libtclcad/CMakeLists.txt
===================================================================
--- brlcad/trunk/src/libtclcad/CMakeLists.txt   2020-07-15 00:24:11 UTC (rev 
76343)
+++ brlcad/trunk/src/libtclcad/CMakeLists.txt   2020-07-15 00:45:22 UTC (rev 
76344)
@@ -15,6 +15,9 @@
   tclcad_obj_wrapper.c
   tclcad_polygons.c
   view/tclcad_views.c
+  view/arrows.c
+  view/autoview.c
+  view/axes.c
   tkImgFmtPIX.c
   )
 

Modified: brlcad/trunk/src/libtclcad/tclcad_obj.c
===================================================================
--- brlcad/trunk/src/libtclcad/tclcad_obj.c     2020-07-15 00:24:11 UTC (rev 
76343)
+++ brlcad/trunk/src/libtclcad/tclcad_obj.c     2020-07-15 00:45:22 UTC (rev 
76344)
@@ -84,6 +84,7 @@
 
 /* Private headers */
 #include "tclcad_private.h"
+#include "./view/view.h"
 
 #include "brlcad_version.h"
 
@@ -94,12 +95,6 @@
                       ged_func_ptr func,
                       const char *usage,
                       int maxargs);
-HIDDEN int to_axes(struct ged *gedp,
-                  struct ged_dm_view *gdvp,
-                  struct bview_axes_state *gasp,
-                  int argc,
-                  const char *argv[],
-                  const char *usage);
 HIDDEN int to_base2local(struct ged *gedp,
                         int argc,
                         const char *argv[],
@@ -148,28 +143,6 @@
                   ged_func_ptr func,
                   const char *usage,
                   int maxargs);
-HIDDEN int to_data_arrows(struct ged *gedp,
-                         int argc,
-                         const char *argv[],
-                         ged_func_ptr func,
-                         const char *usage,
-                         int maxargs);
-HIDDEN int to_data_arrows_func(Tcl_Interp *interp,
-                              struct ged *gedp,
-                              struct ged_dm_view *gdvp,
-                              int argc,
-                              const char *argv[]);
-HIDDEN int to_data_axes(struct ged *gedp,
-                       int argc,
-                       const char *argv[],
-                       ged_func_ptr func,
-                       const char *usage,
-                       int maxargs);
-HIDDEN int to_data_axes_func(Tcl_Interp *interp,
-                            struct ged *gedp,
-                            struct ged_dm_view *gdvp,
-                            int argc,
-                            const char *argv[]);
 HIDDEN int to_data_labels(struct ged *gedp,
                          int argc,
                          const char *argv[],
@@ -342,12 +315,6 @@
                     ged_func_ptr func,
                     const char *usage,
                     int maxargs);
-HIDDEN int to_model_axes(struct ged *gedp,
-                        int argc,
-                        const char *argv[],
-                        ged_func_ptr func,
-                        const char *usage,
-                        int maxargs);
 HIDDEN int to_edit_motion_delta_callback(struct ged *gedp,
                                         int argc,
                                         const char *argv[],
@@ -584,12 +551,6 @@
                           ged_func_ptr func,
                           const char *usage,
                           int maxargs);
-HIDDEN int to_view_axes(struct ged *gedp,
-                       int argc,
-                       const char *argv[],
-                       ged_func_ptr func,
-                       const char *usage,
-                       int maxargs);
 HIDDEN int to_view_callback(struct ged *gedp,
                            int argc,
                            const char *argv[],
@@ -1537,417 +1498,7 @@
     return GED_OK;
 }
 
-
 HIDDEN int
-to_axes(struct ged *gedp,
-       struct ged_dm_view *gdvp,
-       struct bview_axes_state *gasp,
-       int argc,
-       const char *argv[],
-       const char *usage)
-{
-
-    if (BU_STR_EQUAL(argv[2], "draw")) {
-       if (argc == 3) {
-           bu_vls_printf(gedp->ged_result_str, "%d", gasp->draw);
-           return GED_OK;
-       }
-
-       if (argc == 4) {
-           int i;
-
-           if (bu_sscanf(argv[3], "%d", &i) != 1)
-               goto bad;
-
-           if (i)
-               gasp->draw = 1;
-           else
-               gasp->draw = 0;
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[2], "axes_size")) {
-       if (argc == 3) {
-           bu_vls_printf(gedp->ged_result_str, "%lf", gasp->axes_size);
-           return GED_OK;
-       }
-
-       if (argc == 4) {
-           double size; /* must be double for scanf */
-
-           if (bu_sscanf(argv[3], "%lf", &size) != 1)
-               goto bad;
-
-           gasp->axes_size = size;
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[2], "axes_pos")) {
-       if (argc == 3) {
-           bu_vls_printf(gedp->ged_result_str, "%lf %lf %lf",
-                         V3ARGS(gasp->axes_pos));
-           return GED_OK;
-       }
-
-       if (argc == 6) {
-           double x, y, z; /* must be double for scanf */
-
-           if (bu_sscanf(argv[3], "%lf", &x) != 1 ||
-               bu_sscanf(argv[4], "%lf", &y) != 1 ||
-               bu_sscanf(argv[5], "%lf", &z) != 1)
-               goto bad;
-
-           VSET(gasp->axes_pos, x, y, z);
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[2], "axes_color")) {
-       if (argc == 3) {
-           bu_vls_printf(gedp->ged_result_str, "%d %d %d",
-                         V3ARGS(gasp->axes_color));
-           return GED_OK;
-       }
-
-       if (argc == 6) {
-           int r, g, b;
-
-           /* set background color */
-           if (bu_sscanf(argv[3], "%d", &r) != 1 ||
-               bu_sscanf(argv[4], "%d", &g) != 1 ||
-               bu_sscanf(argv[5], "%d", &b) != 1)
-               goto bad;
-
-           /* validate color */
-           if (r < 0 || 255 < r ||
-               g < 0 || 255 < g ||
-               b < 0 || 255 < b)
-               goto bad;
-
-           VSET(gasp->axes_color, r, g, b);
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[2], "label_color")) {
-       if (argc == 3) {
-           bu_vls_printf(gedp->ged_result_str, "%d %d %d",
-                         V3ARGS(gasp->label_color));
-           return GED_OK;
-       }
-
-       if (argc == 6) {
-           int r, g, b;
-
-           /* set background color */
-           if (bu_sscanf(argv[3], "%d", &r) != 1 ||
-               bu_sscanf(argv[4], "%d", &g) != 1 ||
-               bu_sscanf(argv[5], "%d", &b) != 1)
-               goto bad;
-
-           /* validate color */
-           if (r < 0 || 255 < r ||
-               g < 0 || 255 < g ||
-               b < 0 || 255 < b)
-               goto bad;
-
-           VSET(gasp->label_color, r, g, b);
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[2], "line_width")) {
-       if (argc == 3) {
-           bu_vls_printf(gedp->ged_result_str, "%d", gasp->line_width);
-           return GED_OK;
-       }
-
-       if (argc == 4) {
-           int line_width;
-
-           if (bu_sscanf(argv[3], "%d", &line_width) != 1)
-               goto bad;
-
-           gasp->line_width = line_width;
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[2], "pos_only")) {
-       if (argc == 3) {
-           bu_vls_printf(gedp->ged_result_str, "%d", gasp->pos_only);
-           return GED_OK;
-       }
-
-       if (argc == 4) {
-           int i;
-
-           if (bu_sscanf(argv[3], "%d", &i) != 1)
-               goto bad;
-
-           if (i)
-               gasp->pos_only = 1;
-           else
-               gasp->pos_only = 0;
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[2], "tick_color")) {
-       if (argc == 3) {
-           bu_vls_printf(gedp->ged_result_str, "%d %d %d",
-                         V3ARGS(gasp->tick_color));
-           return GED_OK;
-       }
-
-       if (argc == 6) {
-           int r, g, b;
-
-           /* set background color */
-           if (bu_sscanf(argv[3], "%d", &r) != 1 ||
-               bu_sscanf(argv[4], "%d", &g) != 1 ||
-               bu_sscanf(argv[5], "%d", &b) != 1)
-               goto bad;
-
-           /* validate color */
-           if (r < 0 || 255 < r ||
-               g < 0 || 255 < g ||
-               b < 0 || 255 < b)
-               goto bad;
-
-           VSET(gasp->tick_color, r, g, b);
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[2], "tick_enable")) {
-       if (argc == 3) {
-           bu_vls_printf(gedp->ged_result_str, "%d", gasp->tick_enabled);
-           return GED_OK;
-       }
-
-       if (argc == 4) {
-           int i;
-
-           if (bu_sscanf(argv[3], "%d", &i) != 1)
-               goto bad;
-
-           if (i)
-               gasp->tick_enabled = 1;
-           else
-               gasp->tick_enabled = 0;
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[2], "tick_interval")) {
-       if (argc == 3) {
-           bu_vls_printf(gedp->ged_result_str, "%f", gasp->tick_interval);
-           return GED_OK;
-       }
-
-       if (argc == 4) {
-           int tick_interval;
-
-           if (bu_sscanf(argv[3], "%d", &tick_interval) != 1)
-               goto bad;
-
-           gasp->tick_interval = tick_interval;
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[2], "tick_length")) {
-       if (argc == 3) {
-           bu_vls_printf(gedp->ged_result_str, "%d", gasp->tick_length);
-           return GED_OK;
-       }
-
-       if (argc == 4) {
-           int tick_length;
-
-           if (bu_sscanf(argv[3], "%d", &tick_length) != 1)
-               goto bad;
-
-           gasp->tick_length = tick_length;
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[2], "tick_major_color")) {
-       if (argc == 3) {
-           bu_vls_printf(gedp->ged_result_str, "%d %d %d",
-                         V3ARGS(gasp->tick_major_color));
-           return GED_OK;
-       }
-
-       if (argc == 6) {
-           int r, g, b;
-
-           /* set background color */
-           if (bu_sscanf(argv[3], "%d", &r) != 1 ||
-               bu_sscanf(argv[4], "%d", &g) != 1 ||
-               bu_sscanf(argv[5], "%d", &b) != 1)
-               goto bad;
-
-           /* validate color */
-           if (r < 0 || 255 < r ||
-               g < 0 || 255 < g ||
-               b < 0 || 255 < b)
-               goto bad;
-
-           VSET(gasp->tick_major_color, r, g, b);
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[2], "tick_major_length")) {
-       if (argc == 3) {
-           bu_vls_printf(gedp->ged_result_str, "%d", gasp->tick_major_length);
-           return GED_OK;
-       }
-
-       if (argc == 4) {
-           int tick_major_length;
-
-           if (bu_sscanf(argv[3], "%d", &tick_major_length) != 1)
-               goto bad;
-
-           gasp->tick_major_length = tick_major_length;
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[2], "ticks_per_major")) {
-       if (argc == 3) {
-           bu_vls_printf(gedp->ged_result_str, "%d", gasp->ticks_per_major);
-           return GED_OK;
-       }
-
-       if (argc == 4) {
-           int ticks_per_major;
-
-           if (bu_sscanf(argv[3], "%d", &ticks_per_major) != 1)
-               goto bad;
-
-           gasp->ticks_per_major = ticks_per_major;
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[2], "tick_threshold")) {
-       if (argc == 3) {
-           bu_vls_printf(gedp->ged_result_str, "%d", gasp->tick_threshold);
-           return GED_OK;
-       }
-
-       if (argc == 4) {
-           int tick_threshold;
-
-           if (bu_sscanf(argv[3], "%d", &tick_threshold) != 1)
-               goto bad;
-
-           if (tick_threshold < 1)
-               tick_threshold = 1;
-
-           gasp->tick_threshold = tick_threshold;
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[2], "triple_color")) {
-       if (argc == 3) {
-           bu_vls_printf(gedp->ged_result_str, "%d", gasp->triple_color);
-           return GED_OK;
-       }
-
-       if (argc == 4) {
-           int i;
-
-           if (bu_sscanf(argv[3], "%d", &i) != 1)
-               goto bad;
-
-           if (i)
-               gasp->triple_color = 1;
-           else
-               gasp->triple_color = 0;
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-bad:
-    bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
-    return GED_ERROR;
-}
-
-
-HIDDEN int
 to_base2local(struct ged *gedp,
              int UNUSED(argc),
              const char *UNUSED(argv[]),
@@ -2461,547 +2012,7 @@
     return ret;
 }
 
-
 int
-go_data_arrows(Tcl_Interp *interp,
-              struct ged *gedp,
-              struct ged_dm_view *gdvp,
-              int argc,
-              const char *argv[],
-              const char *usage)
-{
-    int ret;
-
-    /* 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 || 5 < argc) {
-       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
-       return GED_ERROR;
-    }
-
-    /* Don't allow go_refresh() to be called */
-    if (current_top != NULL)
-       current_top->to_gop->go_refresh_on = 0;
-
-    ret = to_data_arrows_func(interp, gedp, gdvp, argc, argv);
-    if (ret == GED_ERROR)
-       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
-
-    return ret;
-}
-
-
-HIDDEN int
-to_data_arrows(struct ged *gedp,
-              int argc,
-              const char *argv[],
-              ged_func_ptr UNUSED(func),
-              const char *usage,
-              int UNUSED(maxargs))
-{
-    struct ged_dm_view *gdvp;
-    int ret;
-
-    /* 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 || 6 < argc) {
-       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
-       return GED_ERROR;
-    }
-
-    for (BU_LIST_FOR(gdvp, ged_dm_view, 
&current_top->to_gop->go_head_views.l)) {
-       if (BU_STR_EQUAL(bu_vls_addr(&gdvp->gdv_name), argv[1]))
-           break;
-    }
-
-    if (BU_LIST_IS_HEAD(&gdvp->l, &current_top->to_gop->go_head_views.l)) {
-       bu_vls_printf(gedp->ged_result_str, "View not found - %s", argv[1]);
-       return GED_ERROR;
-    }
-
-    /* shift the command name to argv[1] before calling to_data_arrows_func */
-    argv[1] = argv[0];
-    ret = to_data_arrows_func(current_top->to_interp, gedp, gdvp, argc-1, 
argv+1);
-    if (ret == GED_ERROR)
-       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
-
-    return ret;
-}
-
-
-HIDDEN int
-to_data_arrows_func(Tcl_Interp *interp,
-                   struct ged *gedp,
-                   struct ged_dm_view *gdvp,
-                   int argc,
-                   const char *argv[])
-{
-    struct bview_data_arrow_state *gdasp;
-
-    if (argv[0][0] == 's')
-       gdasp = &gdvp->gdv_view->gv_sdata_arrows;
-    else
-       gdasp = &gdvp->gdv_view->gv_data_arrows;
-
-    if (BU_STR_EQUAL(argv[1], "draw")) {
-       if (argc == 2) {
-           bu_vls_printf(gedp->ged_result_str, "%d", gdasp->gdas_draw);
-           return GED_OK;
-       }
-
-       if (argc == 3) {
-           int i;
-
-           if (bu_sscanf(argv[2], "%d", &i) != 1)
-               goto bad;
-
-           if (i)
-               gdasp->gdas_draw = 1;
-           else
-               gdasp->gdas_draw = 0;
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[1], "color")) {
-       if (argc == 2) {
-           bu_vls_printf(gedp->ged_result_str, "%d %d %d",
-                         V3ARGS(gdasp->gdas_color));
-           return GED_OK;
-       }
-
-       if (argc == 5) {
-           int r, g, b;
-
-           /* set background color */
-           if (bu_sscanf(argv[2], "%d", &r) != 1 ||
-               bu_sscanf(argv[3], "%d", &g) != 1 ||
-               bu_sscanf(argv[4], "%d", &b) != 1)
-               goto bad;
-
-           /* validate color */
-           if (r < 0 || 255 < r ||
-               g < 0 || 255 < g ||
-               b < 0 || 255 < b)
-               goto bad;
-
-           VSET(gdasp->gdas_color, r, g, b);
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[1], "line_width")) {
-       if (argc == 2) {
-           bu_vls_printf(gedp->ged_result_str, "%d", gdasp->gdas_line_width);
-           return GED_OK;
-       }
-
-       if (argc == 3) {
-           int line_width;
-
-           if (bu_sscanf(argv[2], "%d", &line_width) != 1)
-               goto bad;
-
-           gdasp->gdas_line_width = line_width;
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[1], "points")) {
-       register int i;
-
-       if (argc == 2) {
-           for (i = 0; i < gdasp->gdas_num_points; ++i) {
-               bu_vls_printf(gedp->ged_result_str, " {%lf %lf %lf} ",
-                             V3ARGS(gdasp->gdas_points[i]));
-           }
-           return GED_OK;
-       }
-
-       if (argc == 3) {
-           int ac;
-           const char **av;
-
-           if (Tcl_SplitList(interp, argv[2], &ac, &av) != TCL_OK) {
-               bu_vls_printf(gedp->ged_result_str, "%s", 
Tcl_GetStringResult(interp));
-               return GED_ERROR;
-           }
-
-           if (ac % 2) {
-               bu_vls_printf(gedp->ged_result_str, "%s: must be an even number 
of points", argv[0]);
-               return GED_ERROR;
-           }
-
-           if (gdasp->gdas_num_points) {
-               bu_free((void *)gdasp->gdas_points, "data points");
-               gdasp->gdas_points = (point_t *)0;
-               gdasp->gdas_num_points = 0;
-           }
-
-           /* Clear out data points */
-           if (ac < 1) {
-               to_refresh_view(gdvp);
-               Tcl_Free((char *)av);
-               return GED_OK;
-           }
-
-           gdasp->gdas_num_points = ac;
-           gdasp->gdas_points = (point_t *)bu_calloc(ac, sizeof(point_t), 
"data points");
-           for (i = 0; i < ac; ++i) {
-               double scan[ELEMENTS_PER_VECT];
-
-               if (bu_sscanf(av[i], "%lf %lf %lf", &scan[X], &scan[Y], 
&scan[Z]) != 3) {
-
-                   bu_vls_printf(gedp->ged_result_str, "bad data point - 
%s\n", av[i]);
-
-                   bu_free((void *)gdasp->gdas_points, "data points");
-                   gdasp->gdas_points = (point_t *)0;
-                   gdasp->gdas_num_points = 0;
-
-                   to_refresh_view(gdvp);
-                   Tcl_Free((char *)av);
-                   return GED_ERROR;
-               }
-               /* convert double to fastf_t */
-               VMOVE(gdasp->gdas_points[i], scan);
-           }
-
-           to_refresh_view(gdvp);
-           Tcl_Free((char *)av);
-           return GED_OK;
-       }
-    }
-
-    if (BU_STR_EQUAL(argv[1], "tip_length")) {
-       if (argc == 2) {
-           bu_vls_printf(gedp->ged_result_str, "%d", gdasp->gdas_tip_length);
-           return GED_OK;
-       }
-
-       if (argc == 3) {
-           int tip_length;
-
-           if (bu_sscanf(argv[2], "%d", &tip_length) != 1)
-               goto bad;
-
-           gdasp->gdas_tip_length = tip_length;
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[1], "tip_width")) {
-       if (argc == 2) {
-           bu_vls_printf(gedp->ged_result_str, "%d", gdasp->gdas_tip_width);
-           return GED_OK;
-       }
-
-       if (argc == 3) {
-           int tip_width;
-
-           if (bu_sscanf(argv[2], "%d", &tip_width) != 1)
-               goto bad;
-
-           gdasp->gdas_tip_width = tip_width;
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-bad:
-    return GED_ERROR;
-}
-
-
-int
-go_data_axes(Tcl_Interp *interp,
-            struct ged *gedp,
-            struct ged_dm_view *gdvp,
-            int argc,
-            const char *argv[],
-            const char *usage)
-{
-    int ret;
-
-    /* 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 || 5 < argc) {
-       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
-       return GED_ERROR;
-    }
-
-    /* Don't allow go_refresh() to be called */
-    if (current_top != NULL)
-       current_top->to_gop->go_refresh_on = 0;
-
-    ret = to_data_axes_func(interp, gedp, gdvp, argc, argv);
-    if (ret == GED_ERROR)
-       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
-
-    return ret;
-}
-
-
-HIDDEN int
-to_data_axes(struct ged *gedp,
-            int argc,
-            const char *argv[],
-            ged_func_ptr UNUSED(func),
-            const char *usage,
-            int UNUSED(maxargs))
-{
-    struct ged_dm_view *gdvp;
-    int ret;
-
-    /* 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 || 6 < argc) {
-       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
-       return GED_ERROR;
-    }
-
-    for (BU_LIST_FOR(gdvp, ged_dm_view, 
&current_top->to_gop->go_head_views.l)) {
-       if (BU_STR_EQUAL(bu_vls_addr(&gdvp->gdv_name), argv[1]))
-           break;
-    }
-
-    if (BU_LIST_IS_HEAD(&gdvp->l, &current_top->to_gop->go_head_views.l)) {
-       bu_vls_printf(gedp->ged_result_str, "View not found - %s", argv[1]);
-       return GED_ERROR;
-    }
-
-    /* shift the command name to argv[1] before calling to_data_axes_func */
-    argv[1] = argv[0];
-    ret = to_data_axes_func(current_top->to_interp, gedp, gdvp, argc-1, 
argv+1);
-    if (ret == GED_ERROR)
-       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
-
-    return ret;
-}
-
-
-HIDDEN int
-to_data_axes_func(Tcl_Interp *interp,
-                 struct ged *gedp,
-                 struct ged_dm_view *gdvp,
-                 int argc,
-                 const char *argv[])
-{
-    struct bview_data_axes_state *gdasp;
-
-    if (argv[0][0] == 's')
-       gdasp = &gdvp->gdv_view->gv_sdata_axes;
-    else
-       gdasp = &gdvp->gdv_view->gv_data_axes;
-
-    if (BU_STR_EQUAL(argv[1], "draw")) {
-       if (argc == 2) {
-           bu_vls_printf(gedp->ged_result_str, "%d", gdasp->draw);
-           return GED_OK;
-       }
-
-       if (argc == 3) {
-           int i;
-
-           if (bu_sscanf(argv[2], "%d", &i) != 1)
-               goto bad;
-
-           if (0 <= i && i <= 2)
-               gdasp->draw = i;
-           else
-               gdasp->draw = 0;
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[1], "color")) {
-       if (argc == 2) {
-           bu_vls_printf(gedp->ged_result_str, "%d %d %d",
-                         V3ARGS(gdasp->color));
-           return GED_OK;
-       }
-
-       if (argc == 5) {
-           int r, g, b;
-
-           /* set background color */
-           if (bu_sscanf(argv[2], "%d", &r) != 1 ||
-               bu_sscanf(argv[3], "%d", &g) != 1 ||
-               bu_sscanf(argv[4], "%d", &b) != 1)
-               goto bad;
-
-           /* validate color */
-           if (r < 0 || 255 < r ||
-               g < 0 || 255 < g ||
-               b < 0 || 255 < b)
-               goto bad;
-
-           VSET(gdasp->color, r, g, b);
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[1], "line_width")) {
-       if (argc == 2) {
-           bu_vls_printf(gedp->ged_result_str, "%d", gdasp->line_width);
-           return GED_OK;
-       }
-
-       if (argc == 3) {
-           int line_width;
-
-           if (bu_sscanf(argv[2], "%d", &line_width) != 1)
-               goto bad;
-
-           gdasp->line_width = line_width;
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[1], "size")) {
-       if (argc == 2) {
-           bu_vls_printf(gedp->ged_result_str, "%lf", gdasp->size);
-           return GED_OK;
-       }
-
-       if (argc == 3) {
-           double size; /* must be double for scanf */
-
-           if (bu_sscanf(argv[2], "%lf", &size) != 1)
-               goto bad;
-
-           gdasp->size = size;
-
-           to_refresh_view(gdvp);
-           return GED_OK;
-       }
-
-       goto bad;
-    }
-
-    if (BU_STR_EQUAL(argv[1], "points")) {
-       register int i;
-
-       if (argc == 2) {
-           for (i = 0; i < gdasp->num_points; ++i) {
-               bu_vls_printf(gedp->ged_result_str, " {%lf %lf %lf} ",
-                             V3ARGS(gdasp->points[i]));
-           }
-           return GED_OK;
-       }
-
-       if (argc == 3) {
-           int ac;
-           const char **av;
-
-           if (Tcl_SplitList(interp, argv[2], &ac, &av) != TCL_OK) {
-               bu_vls_printf(gedp->ged_result_str, "%s", 
Tcl_GetStringResult(interp));
-               return GED_ERROR;
-           }
-
-           if (gdasp->num_points) {
-               bu_free((void *)gdasp->points, "data points");
-               gdasp->points = (point_t *)0;
-               gdasp->num_points = 0;
-           }
-
-           /* Clear out data points */
-           if (ac < 1) {
-               to_refresh_view(gdvp);
-               Tcl_Free((char *)av);
-               return GED_OK;
-           }
-
-           gdasp->num_points = ac;
-           gdasp->points = (point_t *)bu_calloc(ac, sizeof(point_t), "data 
points");
-           for (i = 0; i < ac; ++i) {
-               double scan[3];
-
-               if (bu_sscanf(av[i], "%lf %lf %lf", &scan[X], &scan[Y], 
&scan[Z]) != 3) {
-                   bu_vls_printf(gedp->ged_result_str, "bad data point - 
%s\n", av[i]);
-
-                   bu_free((void *)gdasp->points, "data points");
-                   gdasp->points = (point_t *)0;
-                   gdasp->num_points = 0;
-
-                   to_refresh_view(gdvp);
-                   Tcl_Free((char *)av);
-                   return GED_ERROR;
-               }
-               /* convert double to fastf_t */
-               VMOVE(gdasp->points[i], scan);
-           }
-
-           to_refresh_view(gdvp);
-           Tcl_Free((char *)av);
-           return GED_OK;
-       }
-    }
-
-bad:
-    return GED_ERROR;
-}
-
-
-int
 go_data_labels(Tcl_Interp *interp,
               struct ged *gedp,
               struct ged_dm_view *gdvp,
@@ -5689,44 +4700,7 @@
 }
 
 
-HIDDEN int
-to_model_axes(struct ged *gedp,
-             int argc,
-             const char *argv[],
-             ged_func_ptr UNUSED(func),
-             const char *usage,
-             int UNUSED(maxargs))
-{
-    struct ged_dm_view *gdvp;
 
-    /* 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 || 6 < argc) {
-       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
-       return GED_ERROR;
-    }
-
-    for (BU_LIST_FOR(gdvp, ged_dm_view, 
&current_top->to_gop->go_head_views.l)) {
-       if (BU_STR_EQUAL(bu_vls_addr(&gdvp->gdv_name), argv[1]))
-           break;
-    }
-
-    if (BU_LIST_IS_HEAD(&gdvp->l, &current_top->to_gop->go_head_views.l)) {
-       bu_vls_printf(gedp->ged_result_str, "View not found - %s", argv[1]);
-       return GED_ERROR;
-    }
-
-    return to_axes(gedp, gdvp, &gdvp->gdv_view->gv_model_axes, argc, argv, 
usage);
-}
-
-
 HIDDEN int
 to_edit_motion_delta_callback(struct ged *gedp,
                              int argc,
@@ -8042,70 +7016,8 @@
 }
 
 
-int
-go_view_axes(struct ged_obj *gop,
-            struct ged_dm_view *gdvp,
-            int argc,
-            const char *argv[],
-            const char *usage)
-{
-    /* initialize result */
-    bu_vls_trunc(gop->go_gedp->ged_result_str, 0);
 
-    /* must be wanting help */
-    if (argc == 1) {
-       bu_vls_printf(gop->go_gedp->ged_result_str, "Usage: %s %s", argv[0], 
usage);
-       return GED_HELP;
-    }
-
-    if (argc < 3 || 6 < argc) {
-       bu_vls_printf(gop->go_gedp->ged_result_str, "Usage: %s %s", argv[0], 
usage);
-       return GED_ERROR;
-    }
-
-    return to_axes(gop->go_gedp, gdvp, &gdvp->gdv_view->gv_view_axes, argc, 
argv, usage);
-}
-
-
 HIDDEN int
-to_view_axes(struct ged *gedp,
-            int argc,
-            const char *argv[],
-            ged_func_ptr UNUSED(func),
-            const char *usage,
-            int UNUSED(maxargs))
-{
-    struct ged_dm_view *gdvp;
-
-    /* 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 || 6 < argc) {
-       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
-       return GED_ERROR;
-    }
-
-    for (BU_LIST_FOR(gdvp, ged_dm_view, 
&current_top->to_gop->go_head_views.l)) {
-       if (BU_STR_EQUAL(bu_vls_addr(&gdvp->gdv_name), argv[1]))
-           break;
-    }
-
-    if (BU_LIST_IS_HEAD(&gdvp->l, &current_top->to_gop->go_head_views.l)) {
-       bu_vls_printf(gedp->ged_result_str, "View not found - %s", argv[1]);
-       return GED_ERROR;
-    }
-
-    return to_axes(gedp, gdvp, &gdvp->gdv_view->gv_view_axes, argc, argv, 
usage);
-}
-
-
-HIDDEN int
 to_view_callback(struct ged *gedp,
                 int argc,
                 const char *argv[],

Added: brlcad/trunk/src/libtclcad/view/arrows.c
===================================================================
--- brlcad/trunk/src/libtclcad/view/arrows.c                            (rev 0)
+++ brlcad/trunk/src/libtclcad/view/arrows.c    2020-07-15 00:45:22 UTC (rev 
76344)
@@ -0,0 +1,408 @@
+/*                       A R R O W S . C
+ * BRL-CAD
+ *
+ * Copyright (c) 2000-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.
+ */
+/** @addtogroup libtclcad */
+/** @{ */
+/** @file libtclcad/view/arrows.c
+ *
+ */
+/** @} */
+
+#include "common.h"
+#include "bu/units.h"
+#include "ged.h"
+#include "tclcad.h"
+
+/* Private headers */
+#include "../tclcad_private.h"
+#include "../view/view.h"
+
+int
+go_data_arrows(Tcl_Interp *interp,
+              struct ged *gedp,
+              struct ged_dm_view *gdvp,
+              int argc,
+              const char *argv[],
+              const char *usage)
+{
+    int ret;
+
+    /* 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 || 5 < argc) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    /* Don't allow go_refresh() to be called */
+    if (current_top != NULL)
+       current_top->to_gop->go_refresh_on = 0;
+
+    ret = to_data_arrows_func(interp, gedp, gdvp, argc, argv);
+    if (ret == GED_ERROR)
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+
+    return ret;
+}
+
+
+int
+to_data_arrows(struct ged *gedp,
+              int argc,
+              const char *argv[],
+              ged_func_ptr UNUSED(func),
+              const char *usage,
+              int UNUSED(maxargs))
+{
+    struct ged_dm_view *gdvp;
+    int ret;
+
+    /* 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 || 6 < argc) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    for (BU_LIST_FOR(gdvp, ged_dm_view, 
&current_top->to_gop->go_head_views.l)) {
+       if (BU_STR_EQUAL(bu_vls_addr(&gdvp->gdv_name), argv[1]))
+           break;
+    }
+
+    if (BU_LIST_IS_HEAD(&gdvp->l, &current_top->to_gop->go_head_views.l)) {
+       bu_vls_printf(gedp->ged_result_str, "View not found - %s", argv[1]);
+       return GED_ERROR;
+    }
+
+    /* shift the command name to argv[1] before calling to_data_arrows_func */
+    argv[1] = argv[0];
+    ret = to_data_arrows_func(current_top->to_interp, gedp, gdvp, argc-1, 
argv+1);
+    if (ret == GED_ERROR)
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+
+    return ret;
+}
+
+
+int
+to_data_arrows_func(Tcl_Interp *interp,
+                   struct ged *gedp,
+                   struct ged_dm_view *gdvp,
+                   int argc,
+                   const char *argv[])
+{
+    struct bview_data_arrow_state *gdasp;
+
+    if (argv[0][0] == 's')
+       gdasp = &gdvp->gdv_view->gv_sdata_arrows;
+    else
+       gdasp = &gdvp->gdv_view->gv_data_arrows;
+
+    if (BU_STR_EQUAL(argv[1], "draw")) {
+       if (argc == 2) {
+           bu_vls_printf(gedp->ged_result_str, "%d", gdasp->gdas_draw);
+           return GED_OK;
+       }
+
+       if (argc == 3) {
+           int i;
+
+           if (bu_sscanf(argv[2], "%d", &i) != 1)
+               goto bad;
+
+           if (i)
+               gdasp->gdas_draw = 1;
+           else
+               gdasp->gdas_draw = 0;
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[1], "color")) {
+       if (argc == 2) {
+           bu_vls_printf(gedp->ged_result_str, "%d %d %d",
+                         V3ARGS(gdasp->gdas_color));
+           return GED_OK;
+       }
+
+       if (argc == 5) {
+           int r, g, b;
+
+           /* set background color */
+           if (bu_sscanf(argv[2], "%d", &r) != 1 ||
+               bu_sscanf(argv[3], "%d", &g) != 1 ||
+               bu_sscanf(argv[4], "%d", &b) != 1)
+               goto bad;
+
+           /* validate color */
+           if (r < 0 || 255 < r ||
+               g < 0 || 255 < g ||
+               b < 0 || 255 < b)
+               goto bad;
+
+           VSET(gdasp->gdas_color, r, g, b);
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[1], "line_width")) {
+       if (argc == 2) {
+           bu_vls_printf(gedp->ged_result_str, "%d", gdasp->gdas_line_width);
+           return GED_OK;
+       }
+
+       if (argc == 3) {
+           int line_width;
+
+           if (bu_sscanf(argv[2], "%d", &line_width) != 1)
+               goto bad;
+
+           gdasp->gdas_line_width = line_width;
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[1], "points")) {
+       register int i;
+
+       if (argc == 2) {
+           for (i = 0; i < gdasp->gdas_num_points; ++i) {
+               bu_vls_printf(gedp->ged_result_str, " {%lf %lf %lf} ",
+                             V3ARGS(gdasp->gdas_points[i]));
+           }
+           return GED_OK;
+       }
+
+       if (argc == 3) {
+           int ac;
+           const char **av;
+
+           if (Tcl_SplitList(interp, argv[2], &ac, &av) != TCL_OK) {
+               bu_vls_printf(gedp->ged_result_str, "%s", 
Tcl_GetStringResult(interp));
+               return GED_ERROR;
+           }
+
+           if (ac % 2) {
+               bu_vls_printf(gedp->ged_result_str, "%s: must be an even number 
of points", argv[0]);
+               return GED_ERROR;
+           }
+
+           if (gdasp->gdas_num_points) {
+               bu_free((void *)gdasp->gdas_points, "data points");
+               gdasp->gdas_points = (point_t *)0;
+               gdasp->gdas_num_points = 0;
+           }
+
+           /* Clear out data points */
+           if (ac < 1) {
+               to_refresh_view(gdvp);
+               Tcl_Free((char *)av);
+               return GED_OK;
+           }
+
+           gdasp->gdas_num_points = ac;
+           gdasp->gdas_points = (point_t *)bu_calloc(ac, sizeof(point_t), 
"data points");
+           for (i = 0; i < ac; ++i) {
+               double scan[ELEMENTS_PER_VECT];
+
+               if (bu_sscanf(av[i], "%lf %lf %lf", &scan[X], &scan[Y], 
&scan[Z]) != 3) {
+
+                   bu_vls_printf(gedp->ged_result_str, "bad data point - 
%s\n", av[i]);
+
+                   bu_free((void *)gdasp->gdas_points, "data points");
+                   gdasp->gdas_points = (point_t *)0;
+                   gdasp->gdas_num_points = 0;
+
+                   to_refresh_view(gdvp);
+                   Tcl_Free((char *)av);
+                   return GED_ERROR;
+               }
+               /* convert double to fastf_t */
+               VMOVE(gdasp->gdas_points[i], scan);
+           }
+
+           to_refresh_view(gdvp);
+           Tcl_Free((char *)av);
+           return GED_OK;
+       }
+    }
+
+    if (BU_STR_EQUAL(argv[1], "tip_length")) {
+       if (argc == 2) {
+           bu_vls_printf(gedp->ged_result_str, "%d", gdasp->gdas_tip_length);
+           return GED_OK;
+       }
+
+       if (argc == 3) {
+           int tip_length;
+
+           if (bu_sscanf(argv[2], "%d", &tip_length) != 1)
+               goto bad;
+
+           gdasp->gdas_tip_length = tip_length;
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[1], "tip_width")) {
+       if (argc == 2) {
+           bu_vls_printf(gedp->ged_result_str, "%d", gdasp->gdas_tip_width);
+           return GED_OK;
+       }
+
+       if (argc == 3) {
+           int tip_width;
+
+           if (bu_sscanf(argv[2], "%d", &tip_width) != 1)
+               goto bad;
+
+           gdasp->gdas_tip_width = tip_width;
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+bad:
+    return GED_ERROR;
+}
+
+
+void
+go_dm_draw_arrows(struct dm *dmp, struct bview_data_arrow_state *gdasp, 
fastf_t sf)
+{
+    register int i;
+    int saveLineWidth;
+    int saveLineStyle;
+
+    if (gdasp->gdas_num_points < 1)
+       return;
+
+    saveLineWidth = dm_get_linewidth(dmp);
+    saveLineStyle = dm_get_linestyle(dmp);
+
+    /* set color */
+    (void)dm_set_fg(dmp,
+                   gdasp->gdas_color[0],
+                   gdasp->gdas_color[1],
+                   gdasp->gdas_color[2], 1, 1.0);
+
+    /* set linewidth */
+    (void)dm_set_line_attr(dmp, gdasp->gdas_line_width, 0);  /* solid lines */
+
+    (void)dm_draw_lines_3d(dmp,
+                          gdasp->gdas_num_points,
+                          gdasp->gdas_points, 0);
+
+    for (i = 0; i < gdasp->gdas_num_points; i += 2) {
+       point_t points[16];
+       point_t A, B;
+       point_t BmA;
+       point_t offset;
+       point_t perp1, perp2;
+       point_t a_base;
+       point_t a_pt1, a_pt2, a_pt3, a_pt4;
+
+       VMOVE(A, gdasp->gdas_points[i]);
+       VMOVE(B, gdasp->gdas_points[i+1]);
+       VSUB2(BmA, B, A);
+
+       VUNITIZE(BmA);
+       VSCALE(offset, BmA, -gdasp->gdas_tip_length * sf);
+
+       bn_vec_perp(perp1, BmA);
+       VUNITIZE(perp1);
+
+       VCROSS(perp2, BmA, perp1);
+       VUNITIZE(perp2);
+
+       VSCALE(perp1, perp1, gdasp->gdas_tip_width * sf);
+       VSCALE(perp2, perp2, gdasp->gdas_tip_width * sf);
+
+       VADD2(a_base, B, offset);
+       VADD2(a_pt1, a_base, perp1);
+       VADD2(a_pt2, a_base, perp2);
+       VSUB2(a_pt3, a_base, perp1);
+       VSUB2(a_pt4, a_base, perp2);
+
+       VMOVE(points[0], B);
+       VMOVE(points[1], a_pt1);
+       VMOVE(points[2], B);
+       VMOVE(points[3], a_pt2);
+       VMOVE(points[4], B);
+       VMOVE(points[5], a_pt3);
+       VMOVE(points[6], B);
+       VMOVE(points[7], a_pt4);
+       VMOVE(points[8], a_pt1);
+       VMOVE(points[9], a_pt2);
+       VMOVE(points[10], a_pt2);
+       VMOVE(points[11], a_pt3);
+       VMOVE(points[12], a_pt3);
+       VMOVE(points[13], a_pt4);
+       VMOVE(points[14], a_pt4);
+       VMOVE(points[15], a_pt1);
+
+       (void)dm_draw_lines_3d(dmp, 16, points, 0);
+    }
+
+    /* Restore the line attributes */
+    (void)dm_set_line_attr(dmp, saveLineWidth, saveLineStyle);
+}
+
+/*
+ * Local Variables:
+ * mode: C
+ * tab-width: 8
+ * indent-tabs-mode: t
+ * c-file-style: "stroustrup"
+ * End:
+ * ex: shiftwidth=4 tabstop=8
+ */


Property changes on: brlcad/trunk/src/libtclcad/view/arrows.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: brlcad/trunk/src/libtclcad/view/autoview.c
===================================================================
--- brlcad/trunk/src/libtclcad/view/autoview.c                          (rev 0)
+++ brlcad/trunk/src/libtclcad/view/autoview.c  2020-07-15 00:45:22 UTC (rev 
76344)
@@ -0,0 +1,81 @@
+/*                        A U T O V I E W . C
+ * BRL-CAD
+ *
+ * Copyright (c) 2000-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.
+ */
+/** @addtogroup libtclcad */
+/** @{ */
+/** @file libtclcad/view/autoview.c
+ *
+ */
+/** @} */
+
+#include "common.h"
+#include "bu/units.h"
+#include "ged.h"
+#include "tclcad.h"
+
+/* Private headers */
+#include "../tclcad_private.h"
+#include "../view/view.h"
+
+void
+to_autoview_view(struct ged_dm_view *gdvp, const char *scale)
+{
+    int ret;
+    const char *av[3];
+
+    gdvp->gdv_gop->go_gedp->ged_gvp = gdvp->gdv_view;
+    av[0] = "autoview";
+    av[1] = scale;
+    av[2] = NULL;
+
+    if (scale)
+       ret = ged_autoview(gdvp->gdv_gop->go_gedp, 2, (const char **)av);
+    else
+       ret = ged_autoview(gdvp->gdv_gop->go_gedp, 1, (const char **)av);
+
+    if (ret == GED_OK) {
+       if (0 < bu_vls_strlen(&gdvp->gdv_callback)) {
+           Tcl_Eval(current_top->to_interp, bu_vls_addr(&gdvp->gdv_callback));
+       }
+
+       to_refresh_view(gdvp);
+    }
+}
+
+void
+to_autoview_all_views(struct tclcad_obj *top)
+{
+    struct ged_dm_view *gdvp;
+
+    for (BU_LIST_FOR(gdvp, ged_dm_view, &top->to_gop->go_head_views.l)) {
+       to_autoview_view(gdvp, NULL);
+    }
+}
+
+
+
+/*
+ * Local Variables:
+ * mode: C
+ * tab-width: 8
+ * indent-tabs-mode: t
+ * c-file-style: "stroustrup"
+ * End:
+ * ex: shiftwidth=4 tabstop=8
+ */


Property changes on: brlcad/trunk/src/libtclcad/view/autoview.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: brlcad/trunk/src/libtclcad/view/axes.c
===================================================================
--- brlcad/trunk/src/libtclcad/view/axes.c                              (rev 0)
+++ brlcad/trunk/src/libtclcad/view/axes.c      2020-07-15 00:45:22 UTC (rev 
76344)
@@ -0,0 +1,806 @@
+/*                           A X E S . C
+ * BRL-CAD
+ *
+ * Copyright (c) 2000-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.
+ */
+/** @addtogroup libtclcad */
+/** @{ */
+/** @file libtclcad/view/axes.c
+ *
+ */
+/** @} */
+
+#include "common.h"
+#include "bu/units.h"
+#include "ged.h"
+#include "tclcad.h"
+
+/* Private headers */
+#include "../tclcad_private.h"
+#include "../view/view.h"
+
+int
+to_axes(struct ged *gedp,
+       struct ged_dm_view *gdvp,
+       struct bview_axes_state *gasp,
+       int argc,
+       const char *argv[],
+       const char *usage)
+{
+
+    if (BU_STR_EQUAL(argv[2], "draw")) {
+       if (argc == 3) {
+           bu_vls_printf(gedp->ged_result_str, "%d", gasp->draw);
+           return GED_OK;
+       }
+
+       if (argc == 4) {
+           int i;
+
+           if (bu_sscanf(argv[3], "%d", &i) != 1)
+               goto bad;
+
+           if (i)
+               gasp->draw = 1;
+           else
+               gasp->draw = 0;
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[2], "axes_size")) {
+       if (argc == 3) {
+           bu_vls_printf(gedp->ged_result_str, "%lf", gasp->axes_size);
+           return GED_OK;
+       }
+
+       if (argc == 4) {
+           double size; /* must be double for scanf */
+
+           if (bu_sscanf(argv[3], "%lf", &size) != 1)
+               goto bad;
+
+           gasp->axes_size = size;
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[2], "axes_pos")) {
+       if (argc == 3) {
+           bu_vls_printf(gedp->ged_result_str, "%lf %lf %lf",
+                         V3ARGS(gasp->axes_pos));
+           return GED_OK;
+       }
+
+       if (argc == 6) {
+           double x, y, z; /* must be double for scanf */
+
+           if (bu_sscanf(argv[3], "%lf", &x) != 1 ||
+               bu_sscanf(argv[4], "%lf", &y) != 1 ||
+               bu_sscanf(argv[5], "%lf", &z) != 1)
+               goto bad;
+
+           VSET(gasp->axes_pos, x, y, z);
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[2], "axes_color")) {
+       if (argc == 3) {
+           bu_vls_printf(gedp->ged_result_str, "%d %d %d",
+                         V3ARGS(gasp->axes_color));
+           return GED_OK;
+       }
+
+       if (argc == 6) {
+           int r, g, b;
+
+           /* set background color */
+           if (bu_sscanf(argv[3], "%d", &r) != 1 ||
+               bu_sscanf(argv[4], "%d", &g) != 1 ||
+               bu_sscanf(argv[5], "%d", &b) != 1)
+               goto bad;
+
+           /* validate color */
+           if (r < 0 || 255 < r ||
+               g < 0 || 255 < g ||
+               b < 0 || 255 < b)
+               goto bad;
+
+           VSET(gasp->axes_color, r, g, b);
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[2], "label_color")) {
+       if (argc == 3) {
+           bu_vls_printf(gedp->ged_result_str, "%d %d %d",
+                         V3ARGS(gasp->label_color));
+           return GED_OK;
+       }
+
+       if (argc == 6) {
+           int r, g, b;
+
+           /* set background color */
+           if (bu_sscanf(argv[3], "%d", &r) != 1 ||
+               bu_sscanf(argv[4], "%d", &g) != 1 ||
+               bu_sscanf(argv[5], "%d", &b) != 1)
+               goto bad;
+
+           /* validate color */
+           if (r < 0 || 255 < r ||
+               g < 0 || 255 < g ||
+               b < 0 || 255 < b)
+               goto bad;
+
+           VSET(gasp->label_color, r, g, b);
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[2], "line_width")) {
+       if (argc == 3) {
+           bu_vls_printf(gedp->ged_result_str, "%d", gasp->line_width);
+           return GED_OK;
+       }
+
+       if (argc == 4) {
+           int line_width;
+
+           if (bu_sscanf(argv[3], "%d", &line_width) != 1)
+               goto bad;
+
+           gasp->line_width = line_width;
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[2], "pos_only")) {
+       if (argc == 3) {
+           bu_vls_printf(gedp->ged_result_str, "%d", gasp->pos_only);
+           return GED_OK;
+       }
+
+       if (argc == 4) {
+           int i;
+
+           if (bu_sscanf(argv[3], "%d", &i) != 1)
+               goto bad;
+
+           if (i)
+               gasp->pos_only = 1;
+           else
+               gasp->pos_only = 0;
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[2], "tick_color")) {
+       if (argc == 3) {
+           bu_vls_printf(gedp->ged_result_str, "%d %d %d",
+                         V3ARGS(gasp->tick_color));
+           return GED_OK;
+       }
+
+       if (argc == 6) {
+           int r, g, b;
+
+           /* set background color */
+           if (bu_sscanf(argv[3], "%d", &r) != 1 ||
+               bu_sscanf(argv[4], "%d", &g) != 1 ||
+               bu_sscanf(argv[5], "%d", &b) != 1)
+               goto bad;
+
+           /* validate color */
+           if (r < 0 || 255 < r ||
+               g < 0 || 255 < g ||
+               b < 0 || 255 < b)
+               goto bad;
+
+           VSET(gasp->tick_color, r, g, b);
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[2], "tick_enable")) {
+       if (argc == 3) {
+           bu_vls_printf(gedp->ged_result_str, "%d", gasp->tick_enabled);
+           return GED_OK;
+       }
+
+       if (argc == 4) {
+           int i;
+
+           if (bu_sscanf(argv[3], "%d", &i) != 1)
+               goto bad;
+
+           if (i)
+               gasp->tick_enabled = 1;
+           else
+               gasp->tick_enabled = 0;
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[2], "tick_interval")) {
+       if (argc == 3) {
+           bu_vls_printf(gedp->ged_result_str, "%f", gasp->tick_interval);
+           return GED_OK;
+       }
+
+       if (argc == 4) {
+           int tick_interval;
+
+           if (bu_sscanf(argv[3], "%d", &tick_interval) != 1)
+               goto bad;
+
+           gasp->tick_interval = tick_interval;
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[2], "tick_length")) {
+       if (argc == 3) {
+           bu_vls_printf(gedp->ged_result_str, "%d", gasp->tick_length);
+           return GED_OK;
+       }
+
+       if (argc == 4) {
+           int tick_length;
+
+           if (bu_sscanf(argv[3], "%d", &tick_length) != 1)
+               goto bad;
+
+           gasp->tick_length = tick_length;
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[2], "tick_major_color")) {
+       if (argc == 3) {
+           bu_vls_printf(gedp->ged_result_str, "%d %d %d",
+                         V3ARGS(gasp->tick_major_color));
+           return GED_OK;
+       }
+
+       if (argc == 6) {
+           int r, g, b;
+
+           /* set background color */
+           if (bu_sscanf(argv[3], "%d", &r) != 1 ||
+               bu_sscanf(argv[4], "%d", &g) != 1 ||
+               bu_sscanf(argv[5], "%d", &b) != 1)
+               goto bad;
+
+           /* validate color */
+           if (r < 0 || 255 < r ||
+               g < 0 || 255 < g ||
+               b < 0 || 255 < b)
+               goto bad;
+
+           VSET(gasp->tick_major_color, r, g, b);
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[2], "tick_major_length")) {
+       if (argc == 3) {
+           bu_vls_printf(gedp->ged_result_str, "%d", gasp->tick_major_length);
+           return GED_OK;
+       }
+
+       if (argc == 4) {
+           int tick_major_length;
+
+           if (bu_sscanf(argv[3], "%d", &tick_major_length) != 1)
+               goto bad;
+
+           gasp->tick_major_length = tick_major_length;
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[2], "ticks_per_major")) {
+       if (argc == 3) {
+           bu_vls_printf(gedp->ged_result_str, "%d", gasp->ticks_per_major);
+           return GED_OK;
+       }
+
+       if (argc == 4) {
+           int ticks_per_major;
+
+           if (bu_sscanf(argv[3], "%d", &ticks_per_major) != 1)
+               goto bad;
+
+           gasp->ticks_per_major = ticks_per_major;
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[2], "tick_threshold")) {
+       if (argc == 3) {
+           bu_vls_printf(gedp->ged_result_str, "%d", gasp->tick_threshold);
+           return GED_OK;
+       }
+
+       if (argc == 4) {
+           int tick_threshold;
+
+           if (bu_sscanf(argv[3], "%d", &tick_threshold) != 1)
+               goto bad;
+
+           if (tick_threshold < 1)
+               tick_threshold = 1;
+
+           gasp->tick_threshold = tick_threshold;
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[2], "triple_color")) {
+       if (argc == 3) {
+           bu_vls_printf(gedp->ged_result_str, "%d", gasp->triple_color);
+           return GED_OK;
+       }
+
+       if (argc == 4) {
+           int i;
+
+           if (bu_sscanf(argv[3], "%d", &i) != 1)
+               goto bad;
+
+           if (i)
+               gasp->triple_color = 1;
+           else
+               gasp->triple_color = 0;
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+bad:
+    bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+    return GED_ERROR;
+}
+
+int
+go_data_axes(Tcl_Interp *interp,
+            struct ged *gedp,
+            struct ged_dm_view *gdvp,
+            int argc,
+            const char *argv[],
+            const char *usage)
+{
+    int ret;
+
+    /* 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 || 5 < argc) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    /* Don't allow go_refresh() to be called */
+    if (current_top != NULL)
+       current_top->to_gop->go_refresh_on = 0;
+
+    ret = to_data_axes_func(interp, gedp, gdvp, argc, argv);
+    if (ret == GED_ERROR)
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+
+    return ret;
+}
+
+int
+to_data_axes(struct ged *gedp,
+            int argc,
+            const char *argv[],
+            ged_func_ptr UNUSED(func),
+            const char *usage,
+            int UNUSED(maxargs))
+{
+    struct ged_dm_view *gdvp;
+    int ret;
+
+    /* 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 || 6 < argc) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    for (BU_LIST_FOR(gdvp, ged_dm_view, 
&current_top->to_gop->go_head_views.l)) {
+       if (BU_STR_EQUAL(bu_vls_addr(&gdvp->gdv_name), argv[1]))
+           break;
+    }
+
+    if (BU_LIST_IS_HEAD(&gdvp->l, &current_top->to_gop->go_head_views.l)) {
+       bu_vls_printf(gedp->ged_result_str, "View not found - %s", argv[1]);
+       return GED_ERROR;
+    }
+
+    /* shift the command name to argv[1] before calling to_data_axes_func */
+    argv[1] = argv[0];
+    ret = to_data_axes_func(current_top->to_interp, gedp, gdvp, argc-1, 
argv+1);
+    if (ret == GED_ERROR)
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+
+    return ret;
+}
+
+int
+to_data_axes_func(Tcl_Interp *interp,
+                 struct ged *gedp,
+                 struct ged_dm_view *gdvp,
+                 int argc,
+                 const char *argv[])
+{
+    struct bview_data_axes_state *gdasp;
+
+    if (argv[0][0] == 's')
+       gdasp = &gdvp->gdv_view->gv_sdata_axes;
+    else
+       gdasp = &gdvp->gdv_view->gv_data_axes;
+
+    if (BU_STR_EQUAL(argv[1], "draw")) {
+       if (argc == 2) {
+           bu_vls_printf(gedp->ged_result_str, "%d", gdasp->draw);
+           return GED_OK;
+       }
+
+       if (argc == 3) {
+           int i;
+
+           if (bu_sscanf(argv[2], "%d", &i) != 1)
+               goto bad;
+
+           if (0 <= i && i <= 2)
+               gdasp->draw = i;
+           else
+               gdasp->draw = 0;
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[1], "color")) {
+       if (argc == 2) {
+           bu_vls_printf(gedp->ged_result_str, "%d %d %d",
+                         V3ARGS(gdasp->color));
+           return GED_OK;
+       }
+
+       if (argc == 5) {
+           int r, g, b;
+
+           /* set background color */
+           if (bu_sscanf(argv[2], "%d", &r) != 1 ||
+               bu_sscanf(argv[3], "%d", &g) != 1 ||
+               bu_sscanf(argv[4], "%d", &b) != 1)
+               goto bad;
+
+           /* validate color */
+           if (r < 0 || 255 < r ||
+               g < 0 || 255 < g ||
+               b < 0 || 255 < b)
+               goto bad;
+
+           VSET(gdasp->color, r, g, b);
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[1], "line_width")) {
+       if (argc == 2) {
+           bu_vls_printf(gedp->ged_result_str, "%d", gdasp->line_width);
+           return GED_OK;
+       }
+
+       if (argc == 3) {
+           int line_width;
+
+           if (bu_sscanf(argv[2], "%d", &line_width) != 1)
+               goto bad;
+
+           gdasp->line_width = line_width;
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[1], "size")) {
+       if (argc == 2) {
+           bu_vls_printf(gedp->ged_result_str, "%lf", gdasp->size);
+           return GED_OK;
+       }
+
+       if (argc == 3) {
+           double size; /* must be double for scanf */
+
+           if (bu_sscanf(argv[2], "%lf", &size) != 1)
+               goto bad;
+
+           gdasp->size = size;
+
+           to_refresh_view(gdvp);
+           return GED_OK;
+       }
+
+       goto bad;
+    }
+
+    if (BU_STR_EQUAL(argv[1], "points")) {
+       register int i;
+
+       if (argc == 2) {
+           for (i = 0; i < gdasp->num_points; ++i) {
+               bu_vls_printf(gedp->ged_result_str, " {%lf %lf %lf} ",
+                             V3ARGS(gdasp->points[i]));
+           }
+           return GED_OK;
+       }
+
+       if (argc == 3) {
+           int ac;
+           const char **av;
+
+           if (Tcl_SplitList(interp, argv[2], &ac, &av) != TCL_OK) {
+               bu_vls_printf(gedp->ged_result_str, "%s", 
Tcl_GetStringResult(interp));
+               return GED_ERROR;
+           }
+
+           if (gdasp->num_points) {
+               bu_free((void *)gdasp->points, "data points");
+               gdasp->points = (point_t *)0;
+               gdasp->num_points = 0;
+           }
+
+           /* Clear out data points */
+           if (ac < 1) {
+               to_refresh_view(gdvp);
+               Tcl_Free((char *)av);
+               return GED_OK;
+           }
+
+           gdasp->num_points = ac;
+           gdasp->points = (point_t *)bu_calloc(ac, sizeof(point_t), "data 
points");
+           for (i = 0; i < ac; ++i) {
+               double scan[3];
+
+               if (bu_sscanf(av[i], "%lf %lf %lf", &scan[X], &scan[Y], 
&scan[Z]) != 3) {
+                   bu_vls_printf(gedp->ged_result_str, "bad data point - 
%s\n", av[i]);
+
+                   bu_free((void *)gdasp->points, "data points");
+                   gdasp->points = (point_t *)0;
+                   gdasp->num_points = 0;
+
+                   to_refresh_view(gdvp);
+                   Tcl_Free((char *)av);
+                   return GED_ERROR;
+               }
+               /* convert double to fastf_t */
+               VMOVE(gdasp->points[i], scan);
+           }
+
+           to_refresh_view(gdvp);
+           Tcl_Free((char *)av);
+           return GED_OK;
+       }
+    }
+
+bad:
+    return GED_ERROR;
+}
+
+int
+to_model_axes(struct ged *gedp,
+             int argc,
+             const char *argv[],
+             ged_func_ptr UNUSED(func),
+             const char *usage,
+             int UNUSED(maxargs))
+{
+    struct ged_dm_view *gdvp;
+
+    /* 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 || 6 < argc) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    for (BU_LIST_FOR(gdvp, ged_dm_view, 
&current_top->to_gop->go_head_views.l)) {
+       if (BU_STR_EQUAL(bu_vls_addr(&gdvp->gdv_name), argv[1]))
+           break;
+    }
+
+    if (BU_LIST_IS_HEAD(&gdvp->l, &current_top->to_gop->go_head_views.l)) {
+       bu_vls_printf(gedp->ged_result_str, "View not found - %s", argv[1]);
+       return GED_ERROR;
+    }
+
+    return to_axes(gedp, gdvp, &gdvp->gdv_view->gv_model_axes, argc, argv, 
usage);
+}
+
+int
+go_view_axes(struct ged_obj *gop,
+            struct ged_dm_view *gdvp,
+            int argc,
+            const char *argv[],
+            const char *usage)
+{
+    /* initialize result */
+    bu_vls_trunc(gop->go_gedp->ged_result_str, 0);
+
+    /* must be wanting help */
+    if (argc == 1) {
+       bu_vls_printf(gop->go_gedp->ged_result_str, "Usage: %s %s", argv[0], 
usage);
+       return GED_HELP;
+    }
+
+    if (argc < 3 || 6 < argc) {
+       bu_vls_printf(gop->go_gedp->ged_result_str, "Usage: %s %s", argv[0], 
usage);
+       return GED_ERROR;
+    }
+
+    return to_axes(gop->go_gedp, gdvp, &gdvp->gdv_view->gv_view_axes, argc, 
argv, usage);
+}
+
+
+int
+to_view_axes(struct ged *gedp,
+            int argc,
+            const char *argv[],
+            ged_func_ptr UNUSED(func),
+            const char *usage,
+            int UNUSED(maxargs))
+{
+    struct ged_dm_view *gdvp;
+
+    /* 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 || 6 < argc) {
+       bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    for (BU_LIST_FOR(gdvp, ged_dm_view, 
&current_top->to_gop->go_head_views.l)) {
+       if (BU_STR_EQUAL(bu_vls_addr(&gdvp->gdv_name), argv[1]))
+           break;
+    }
+
+    if (BU_LIST_IS_HEAD(&gdvp->l, &current_top->to_gop->go_head_views.l)) {
+       bu_vls_printf(gedp->ged_result_str, "View not found - %s", argv[1]);
+       return GED_ERROR;
+    }
+
+    return to_axes(gedp, gdvp, &gdvp->gdv_view->gv_view_axes, argc, argv, 
usage);
+}
+
+
+
+/*
+ * Local Variables:
+ * mode: C
+ * tab-width: 8
+ * indent-tabs-mode: t
+ * c-file-style: "stroustrup"
+ * End:
+ * ex: shiftwidth=4 tabstop=8
+ */


Property changes on: brlcad/trunk/src/libtclcad/view/axes.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Modified: brlcad/trunk/src/libtclcad/view/tclcad_views.c
===================================================================
--- brlcad/trunk/src/libtclcad/view/tclcad_views.c      2020-07-15 00:24:11 UTC 
(rev 76343)
+++ brlcad/trunk/src/libtclcad/view/tclcad_views.c      2020-07-15 00:45:22 UTC 
(rev 76344)
@@ -36,6 +36,7 @@
 
 /* Private headers */
 #include "../tclcad_private.h"
+#include "../view/view.h"
 
 
 struct path_match_data {
@@ -468,88 +469,6 @@
 }
 
 static void
-go_dm_draw_arrows(struct dm *dmp, struct bview_data_arrow_state *gdasp, 
fastf_t sf)
-{
-    register int i;
-    int saveLineWidth;
-    int saveLineStyle;
-
-    if (gdasp->gdas_num_points < 1)
-       return;
-
-    saveLineWidth = dm_get_linewidth(dmp);
-    saveLineStyle = dm_get_linestyle(dmp);
-
-    /* set color */
-    (void)dm_set_fg(dmp,
-                   gdasp->gdas_color[0],
-                   gdasp->gdas_color[1],
-                   gdasp->gdas_color[2], 1, 1.0);
-
-    /* set linewidth */
-    (void)dm_set_line_attr(dmp, gdasp->gdas_line_width, 0);  /* solid lines */
-
-    (void)dm_draw_lines_3d(dmp,
-                          gdasp->gdas_num_points,
-                          gdasp->gdas_points, 0);
-
-    for (i = 0; i < gdasp->gdas_num_points; i += 2) {
-       point_t points[16];
-       point_t A, B;
-       point_t BmA;
-       point_t offset;
-       point_t perp1, perp2;
-       point_t a_base;
-       point_t a_pt1, a_pt2, a_pt3, a_pt4;
-
-       VMOVE(A, gdasp->gdas_points[i]);
-       VMOVE(B, gdasp->gdas_points[i+1]);
-       VSUB2(BmA, B, A);
-
-       VUNITIZE(BmA);
-       VSCALE(offset, BmA, -gdasp->gdas_tip_length * sf);
-
-       bn_vec_perp(perp1, BmA);
-       VUNITIZE(perp1);
-
-       VCROSS(perp2, BmA, perp1);
-       VUNITIZE(perp2);
-
-       VSCALE(perp1, perp1, gdasp->gdas_tip_width * sf);
-       VSCALE(perp2, perp2, gdasp->gdas_tip_width * sf);
-
-       VADD2(a_base, B, offset);
-       VADD2(a_pt1, a_base, perp1);
-       VADD2(a_pt2, a_base, perp2);
-       VSUB2(a_pt3, a_base, perp1);
-       VSUB2(a_pt4, a_base, perp2);
-
-       VMOVE(points[0], B);
-       VMOVE(points[1], a_pt1);
-       VMOVE(points[2], B);
-       VMOVE(points[3], a_pt2);
-       VMOVE(points[4], B);
-       VMOVE(points[5], a_pt3);
-       VMOVE(points[6], B);
-       VMOVE(points[7], a_pt4);
-       VMOVE(points[8], a_pt1);
-       VMOVE(points[9], a_pt2);
-       VMOVE(points[10], a_pt2);
-       VMOVE(points[11], a_pt3);
-       VMOVE(points[12], a_pt3);
-       VMOVE(points[13], a_pt4);
-       VMOVE(points[14], a_pt4);
-       VMOVE(points[15], a_pt1);
-
-       (void)dm_draw_lines_3d(dmp, 16, points, 0);
-    }
-
-    /* Restore the line attributes */
-    (void)dm_set_line_attr(dmp, saveLineWidth, saveLineStyle);
-}
-
-
-static void
 go_draw_other(struct ged_obj *gop, struct ged_dm_view *gdvp)
 {
     int width = dm_get_width(gdvp->gdv_dmp);
@@ -728,41 +647,6 @@
     }
 }
 
-void
-to_autoview_view(struct ged_dm_view *gdvp, const char *scale)
-{
-    int ret;
-    const char *av[3];
-
-    gdvp->gdv_gop->go_gedp->ged_gvp = gdvp->gdv_view;
-    av[0] = "autoview";
-    av[1] = scale;
-    av[2] = NULL;
-
-    if (scale)
-       ret = ged_autoview(gdvp->gdv_gop->go_gedp, 2, (const char **)av);
-    else
-       ret = ged_autoview(gdvp->gdv_gop->go_gedp, 1, (const char **)av);
-
-    if (ret == GED_OK) {
-       if (0 < bu_vls_strlen(&gdvp->gdv_callback)) {
-           Tcl_Eval(current_top->to_interp, bu_vls_addr(&gdvp->gdv_callback));
-       }
-
-       to_refresh_view(gdvp);
-    }
-}
-
-void
-to_autoview_all_views(struct tclcad_obj *top)
-{
-    struct ged_dm_view *gdvp;
-
-    for (BU_LIST_FOR(gdvp, ged_dm_view, &top->to_gop->go_head_views.l)) {
-       to_autoview_view(gdvp, NULL);
-    }
-}
-
 /*
  * Local Variables:
  * mode: C

Added: brlcad/trunk/src/libtclcad/view/view.h
===================================================================
--- brlcad/trunk/src/libtclcad/view/view.h                              (rev 0)
+++ brlcad/trunk/src/libtclcad/view/view.h      2020-07-15 00:45:22 UTC (rev 
76344)
@@ -0,0 +1,85 @@
+/*                          V I E W . H
+ * BRL-CAD
+ *
+ * Copyright (c) 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 view.h
+ *
+ * Brief description
+ *
+ */
+
+#include "common.h"
+#include "ged.h"
+#include "tclcad.h"
+
+/* Arrows */
+extern void go_dm_draw_arrows(struct dm *dmp, struct bview_data_arrow_state 
*gdasp, fastf_t sf);
+
+extern int to_data_arrows(struct ged *gedp,
+                         int argc,
+                         const char *argv[],
+                         ged_func_ptr func,
+                         const char *usage,
+                         int maxargs);
+extern int to_data_arrows_func(Tcl_Interp *interp,
+                              struct ged *gedp,
+                              struct ged_dm_view *gdvp,
+                              int argc,
+                              const char *argv[]);
+
+/* Axes */
+extern int to_axes(struct ged *gedp,
+                  struct ged_dm_view *gdvp,
+                  struct bview_axes_state *gasp,
+                  int argc,
+                  const char *argv[],
+                  const char *usage);
+extern int to_data_axes(struct ged *gedp,
+                       int argc,
+                       const char *argv[],
+                       ged_func_ptr func,
+                       const char *usage,
+                       int maxargs);
+extern int to_data_axes_func(Tcl_Interp *interp,
+                            struct ged *gedp,
+                            struct ged_dm_view *gdvp,
+                            int argc,
+                            const char *argv[]);
+extern int to_model_axes(struct ged *gedp,
+                        int argc,
+                        const char *argv[],
+                        ged_func_ptr func,
+                        const char *usage,
+                        int maxargs);
+extern int to_view_axes(struct ged *gedp,
+                       int argc,
+                       const char *argv[],
+                       ged_func_ptr func,
+                       const char *usage,
+                       int maxargs);
+
+
+/*
+ * Local Variables:
+ * tab-width: 8
+ * mode: C
+ * indent-tabs-mode: t
+ * c-file-style: "stroustrup"
+ * End:
+ * ex: shiftwidth=4 tabstop=8
+ */


Property changes on: brlcad/trunk/src/libtclcad/view/view.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
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