Revision: 76175
http://sourceforge.net/p/brlcad/code/76175
Author: starseeker
Date: 2020-06-22 14:24:45 +0000 (Mon, 22 Jun 2020)
Log Message:
-----------
Start trying to figure out how to exercise the data_lines code. Right now this
is an Archer/libtclcad only functionality from the looks of things... see if it
can be factored down into libged so we can test it in MGED.
Modified Paths:
--------------
brlcad/trunk/include/dm/bview.h
brlcad/trunk/src/libged/CMakeLists.txt
brlcad/trunk/src/libged/ged_private.h
brlcad/trunk/src/libged/view/view.c
Added Paths:
-----------
brlcad/trunk/src/libged/view/data_lines.c
Modified: brlcad/trunk/include/dm/bview.h
===================================================================
--- brlcad/trunk/include/dm/bview.h 2020-06-22 02:33:25 UTC (rev 76174)
+++ brlcad/trunk/include/dm/bview.h 2020-06-22 14:24:45 UTC (rev 76175)
@@ -268,6 +268,7 @@
fastf_t gv_curve_scale;
fastf_t gv_data_vZ;
size_t gv_bot_threshold;
+ int gv_refresh;
};
Modified: brlcad/trunk/src/libged/CMakeLists.txt
===================================================================
--- brlcad/trunk/src/libged/CMakeLists.txt 2020-06-22 02:33:25 UTC (rev
76174)
+++ brlcad/trunk/src/libged/CMakeLists.txt 2020-06-22 14:24:45 UTC (rev
76175)
@@ -343,6 +343,7 @@
version.c
view/aet.c
view/center.cpp
+ view/data_lines.c
view/eye.c
view/quat.c
view/size.c
Modified: brlcad/trunk/src/libged/ged_private.h
===================================================================
--- brlcad/trunk/src/libged/ged_private.h 2020-06-22 02:33:25 UTC (rev
76174)
+++ brlcad/trunk/src/libged/ged_private.h 2020-06-22 14:24:45 UTC (rev
76175)
@@ -667,6 +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[]);
__END_DECLS
Added: brlcad/trunk/src/libged/view/data_lines.c
===================================================================
--- brlcad/trunk/src/libged/view/data_lines.c (rev 0)
+++ brlcad/trunk/src/libged/view/data_lines.c 2020-06-22 14:24:45 UTC (rev
76175)
@@ -0,0 +1,259 @@
+/* D A T A _ L I N E S . 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/data_lines.c
+ *
+ * Logic for drawing arbitary lines not associated with geometry.
+ *
+ */
+
+#include "common.h"
+
+#include <stdlib.h>
+#include <ctype.h>
+#include <string.h>
+
+#include "bu/cmd.h"
+#include "bu/opt.h"
+#include "bu/str.h"
+#include "bu/vls.h"
+#include "../ged_private.h"
+
+struct view_dlines_state {
+ struct ged *gedp;
+ struct bview_data_line_state *gdlsp;
+};
+
+static int
+_view_dlines_cmd_draw(void *bs, int argc, const char **argv)
+{
+ struct view_dlines_state *vs = (struct view_dlines_state *)bs;
+ struct ged *gedp = vs->gedp;
+ struct bview_data_line_state *gdlsp = vs->gdlsp;
+ 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) return GED_ERROR;
+
+ gdlsp->gdls_draw = (i) ? 1 : 0;
+
+ gedp->ged_gvp->gv_refresh = 1;
+ return GED_OK;
+ }
+
+ return GED_ERROR;
+}
+
+static int
+_view_dlines_cmd_color(void *bs, int argc, const char **argv)
+{
+ struct view_dlines_state *vs = (struct view_dlines_state *)bs;
+ struct ged *gedp = vs->gedp;
+ struct bview_data_line_state *gdlsp = vs->gdlsp;
+
+ if (argc == 2) {
+ bu_vls_printf(gedp->ged_result_str, "%d %d %d",
V3ARGS(gdlsp->gdls_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)
+ return GED_ERROR;
+
+ /* validate color */
+ if (r < 0 || 255 < r ||
+ g < 0 || 255 < g ||
+ b < 0 || 255 < b)
+ return GED_ERROR;
+
+ VSET(gdlsp->gdls_color, r, g, b);
+
+ gedp->ged_gvp->gv_refresh = 1;
+ return GED_OK;
+ }
+
+ return GED_ERROR;
+}
+
+static int
+_view_dlines_cmd_line_width(void *bs, int argc, const char **argv)
+{
+ struct view_dlines_state *vs = (struct view_dlines_state *)bs;
+ struct ged *gedp = vs->gedp;
+ struct bview_data_line_state *gdlsp = vs->gdlsp;
+
+ 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)
+ return GED_ERROR;
+
+ gdlsp->gdls_line_width = line_width;
+
+ gedp->ged_gvp->gv_refresh = 1;
+ return GED_OK;
+ }
+
+ return GED_ERROR;
+}
+
+static int
+_view_dlines_cmd_points(void *bs, int argc, const char **argv)
+{
+ struct view_dlines_state *vs = (struct view_dlines_state *)bs;
+ struct ged *gedp = vs->gedp;
+ struct bview_data_line_state *gdlsp = vs->gdlsp;
+ 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 (bu_argv_from_tcl_list(argv[2], &ac, &av)) {
+ bu_vls_printf(gedp->ged_result_str, "failed to parse list");
+ 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) {
+ gedp->ged_gvp->gv_refresh = 1;
+ bu_free((char *)av, "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;
+
+ gedp->ged_gvp->gv_refresh = 1;
+ bu_free((char *)av, "av");
+ return GED_ERROR;
+ }
+ /* convert double to fastf_t */
+ VMOVE(gdlsp->gdls_points[i], scan);
+ }
+
+ gedp->ged_gvp->gv_refresh = 1;
+ bu_free((char *)av, "av");
+ return GED_OK;
+ }
+
+ return GED_ERROR;
+}
+
+const struct bu_cmdtab _view_dline_cmds[] = {
+ { "draw", _view_dlines_cmd_draw},
+ { "color", _view_dlines_cmd_color},
+ { "line_width", _view_dlines_cmd_line_width},
+ { "points", _view_dlines_cmd_points},
+ { (char *)NULL, NULL}
+};
+
+int
+ged_view_data_lines(struct ged *gedp, int argc, const char *argv[])
+{
+ struct view_dlines_state vs;
+ const char *usage = "view [s]data_lines [subcommand]";
+
+ vs.gedp = gedp;
+
+ /* 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 (6 < argc) {
+ bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+ return GED_ERROR;
+ }
+
+ if (argv[0][0] == 's') {
+ vs.gdlsp = &gedp->ged_gvp->gv_sdata_lines;
+ } else {
+ vs.gdlsp = &gedp->ged_gvp->gv_data_lines;
+ }
+
+ if (bu_cmd_valid(_view_dline_cmds, argv[1]) != BRLCAD_OK) {
+ bu_vls_printf(gedp->ged_result_str, "invalid subcommand: %s", argv[1]);
+ return GED_ERROR;
+ }
+
+ int ret;
+ if (bu_cmd(_view_dline_cmds, argc, argv, 0, (void *)&vs, &ret) ==
BRLCAD_OK) {
+ return GED_OK;
+ }
+
+ return GED_ERROR;
+}
+
+
+/*
+ * 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/libged/view/data_lines.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/libged/view/view.c
===================================================================
--- brlcad/trunk/src/libged/view/view.c 2020-06-22 02:33:25 UTC (rev 76174)
+++ brlcad/trunk/src/libged/view/view.c 2020-06-22 14:24:45 UTC (rev 76175)
@@ -79,6 +79,10 @@
return ged_size(gedp, argc-1, argv+1);
}
+ if (BU_STR_EQUAL(argv[1], "data_lines") || BU_STR_EQUAL(argv[1],
"sdata_lines")) {
+ return ged_view_data_lines(gedp, argc-1, argv+1);
+ }
+
if (BU_STR_EQUAL(argv[1], "snap")) {
return ged_view_snap(gedp, argc-1, argv+1);
}
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