Revision: 76180
http://sourceforge.net/p/brlcad/code/76180
Author: starseeker
Date: 2020-06-22 18:56:37 +0000 (Mon, 22 Jun 2020)
Log Message:
-----------
Initial stab at shifting libtclcad to calling libged function - eventually will
need to stage this properly through the view command
Modified Paths:
--------------
brlcad/trunk/src/libged/ged_private.h
brlcad/trunk/src/libtclcad/tclcad_obj.c
Modified: brlcad/trunk/src/libged/ged_private.h
===================================================================
--- brlcad/trunk/src/libged/ged_private.h 2020-06-22 17:27:21 UTC (rev
76179)
+++ brlcad/trunk/src/libged/ged_private.h 2020-06-22 18:56:37 UTC (rev
76180)
@@ -667,7 +667,7 @@
extern int ged_view_snap(struct ged *gedp, int argc, const char *argv[]);
-extern int ged_view_data_lines(struct ged *gedp, int argc, const char *argv[]);
+GED_EXPORT extern int ged_view_data_lines(struct ged *gedp, int argc, const
char *argv[]);
__END_DECLS
Modified: brlcad/trunk/src/libtclcad/tclcad_obj.c
===================================================================
--- brlcad/trunk/src/libtclcad/tclcad_obj.c 2020-06-22 17:27:21 UTC (rev
76179)
+++ brlcad/trunk/src/libtclcad/tclcad_obj.c 2020-06-22 18:56:37 UTC (rev
76180)
@@ -68,6 +68,10 @@
#include "dm/dm_xvars.h"
+/* For the moment call internal libged functions - a cleaner
+ * solution will be needed eventually */
+#include "../libged/ged_private.h"
+
#ifdef DM_X
# ifdef WITH_TK
# include "tk.h"
@@ -218,11 +222,6 @@
ged_func_ptr func,
const char *usage,
int maxargs);
-HIDDEN int to_data_lines_func(Tcl_Interp *interp,
- struct ged *gedp,
- struct ged_dm_view *gdvp,
- int argc,
- const char *argv[]);
HIDDEN int to_data_polygons(struct ged *gedp,
int argc,
const char *argv[],
@@ -3642,7 +3641,7 @@
int
-go_data_lines(Tcl_Interp *interp,
+go_data_lines(Tcl_Interp *UNUSED(interp),
struct ged *gedp,
struct ged_dm_view *gdvp,
int argc,
@@ -3669,7 +3668,18 @@
if (current_top != NULL)
current_top->to_gop->go_refresh_on = 0;
- ret = to_data_lines_func(interp, gedp, gdvp, argc, argv);
+
+ struct bview *btmp = gedp->ged_gvp;
+ gedp->ged_gvp = gdvp->gdv_view;
+
+ ret = ged_view_data_lines(gedp, argc, argv);
+
+ gedp->ged_gvp = btmp;
+
+ if (gdvp->gdv_view->gv_refresh) {
+ to_refresh_view(gdvp);
+ gdvp->gdv_view->gv_refresh = 0;
+ }
if (ret == GED_ERROR)
bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
@@ -3712,175 +3722,27 @@
return GED_ERROR;
}
- /* shift the command name to argv[1] before calling to_data_lines_func */
+ /* shift the command name to argv[1] before calling ged_view_data_lines */
argv[1] = argv[0];
- ret = to_data_lines_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;
-}
+ struct bview *btmp = gedp->ged_gvp;
+ gedp->ged_gvp = gdvp->gdv_view;
+ ret = ged_view_data_lines(gedp, argc, argv);
-HIDDEN int
-to_data_lines_func(Tcl_Interp *interp,
- struct ged *gedp,
- struct ged_dm_view *gdvp,
- int argc,
- const char *argv[])
-{
- struct bview_data_line_state *gdlsp;
+ gedp->ged_gvp = btmp;
- if (argv[0][0] == 's')
- gdlsp = &gdvp->gdv_view->gv_sdata_lines;
- else
- gdlsp = &gdvp->gdv_view->gv_data_lines;
-
- if (BU_STR_EQUAL(argv[1], "draw")) {
- if (argc == 2) {
- bu_vls_printf(gedp->ged_result_str, "%d", gdlsp->gdls_draw);
- return GED_OK;
- }
-
- if (argc == 3) {
- int i;
-
- if (bu_sscanf(argv[2], "%d", &i) != 1)
- goto bad;
-
- if (i)
- gdlsp->gdls_draw = 1;
- else
- gdlsp->gdls_draw = 0;
-
- to_refresh_view(gdvp);
- return GED_OK;
- }
-
- goto bad;
+ if (gdvp->gdv_view->gv_refresh) {
+ to_refresh_view(gdvp);
+ gdvp->gdv_view->gv_refresh = 0;
}
- if (BU_STR_EQUAL(argv[1], "color")) {
- if (argc == 2) {
- bu_vls_printf(gedp->ged_result_str, "%d %d %d",
- V3ARGS(gdlsp->gdls_color));
- return GED_OK;
- }
+ if (ret == GED_ERROR)
+ bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- 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(gdlsp->gdls_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", gdlsp->gdls_line_width);
- return GED_OK;
- }
-
- if (argc == 3) {
- int line_width;
-
- if (bu_sscanf(argv[2], "%d", &line_width) != 1)
- goto bad;
-
- gdlsp->gdls_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 < gdlsp->gdls_num_points; ++i) {
- bu_vls_printf(gedp->ged_result_str, " {%lf %lf %lf} ",
- V3ARGS(gdlsp->gdls_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 (gdlsp->gdls_num_points) {
- bu_free((void *)gdlsp->gdls_points, "data points");
- gdlsp->gdls_points = (point_t *)0;
- gdlsp->gdls_num_points = 0;
- }
-
- /* Clear out data points */
- if (ac < 1) {
- to_refresh_view(gdvp);
- Tcl_Free((char *)av);
- return GED_OK;
- }
-
- gdlsp->gdls_num_points = ac;
- gdlsp->gdls_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 *)gdlsp->gdls_points, "data points");
- gdlsp->gdls_points = (point_t *)0;
- gdlsp->gdls_num_points = 0;
-
- to_refresh_view(gdvp);
- Tcl_Free((char *)av);
- return GED_ERROR;
- }
- /* convert double to fastf_t */
- VMOVE(gdlsp->gdls_points[i], scan);
- }
-
- to_refresh_view(gdvp);
- Tcl_Free((char *)av);
- return GED_OK;
- }
- }
-
-bad:
- return GED_ERROR;
+ return ret;
}
-
/* These functions should be macros */
HIDDEN void
to_polygon_free(bview_polygon *gpp)
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