Revision: 77449
http://sourceforge.net/p/brlcad/code/77449
Author: starseeker
Date: 2020-10-15 12:56:28 +0000 (Thu, 15 Oct 2020)
Log Message:
-----------
C->C++
Modified Paths:
--------------
brlcad/trunk/src/libtclcad/CMakeLists.txt
Added Paths:
-----------
brlcad/trunk/src/libtclcad/commands.cpp
Removed Paths:
-------------
brlcad/trunk/src/libtclcad/commands.c
Modified: brlcad/trunk/src/libtclcad/CMakeLists.txt
===================================================================
--- brlcad/trunk/src/libtclcad/CMakeLists.txt 2020-10-15 12:54:12 UTC (rev
77448)
+++ brlcad/trunk/src/libtclcad/CMakeLists.txt 2020-10-15 12:56:28 UTC (rev
77449)
@@ -2,7 +2,7 @@
auto_path.c
bn.c
bu.c
- commands.c
+ commands.cpp
cmdhist.c
dm.c
eval.c
Deleted: brlcad/trunk/src/libtclcad/commands.c
===================================================================
--- brlcad/trunk/src/libtclcad/commands.c 2020-10-15 12:54:12 UTC (rev
77448)
+++ brlcad/trunk/src/libtclcad/commands.c 2020-10-15 12:56:28 UTC (rev
77449)
@@ -1,6722 +0,0 @@
-/* T C L C A D _ O B J . 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/tclcad_obj.c
- *
- * A quasi-object-oriented database interface.
- *
- * A GED object contains the attributes and methods for controlling a
- * BRL-CAD geometry edit object.
- *
- */
-/** @} */
-
-#include "common.h"
-
-#include <stdlib.h>
-#include <ctype.h>
-#include <string.h>
-#include <math.h>
-#include <errno.h>
-#include <assert.h>
-
-#include "png.h"
-
-#include "tcl.h"
-#ifdef HAVE_TK
-# include "tk.h"
-#endif
-
-#include "bio.h"
-
-#include "bn.h"
-#include "bu/cmd.h"
-#include "bu/path.h"
-#include "bu/process.h"
-#include "bu/units.h"
-#include "vmath.h"
-#include "rt/db4.h"
-#include "rt/geom.h"
-#include "wdb.h"
-#include "raytrace.h"
-#include "ged.h"
-#include "tclcad.h"
-
-#include "rt/solid.h"
-#include "dm.h"
-#include "dm/bview_util.h"
-
-#include "icv/io.h"
-#include "icv/ops.h"
-#include "icv/crop.h"
-#include "dm.h"
-
-#if defined(HAVE_WINDOWS_H)
-# include <tkwinport.h>
-#endif
-#ifdef HAVE_GL_GL_H
-# include <GL/gl.h>
-#endif
-
-/* For the moment call internal libged functions - a cleaner
- * solution will be needed eventually */
-#include "../libged/ged_private.h"
-
-/* Private headers */
-#include "brlcad_version.h"
-#include "./tclcad_private.h"
-#include "./view/view.h"
-
-HIDDEN int to_base2local(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_bg(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_bounds(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_configure(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_constrain_rmode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_constrain_tmode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_copy(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_data_move(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_data_move_func(struct ged *gedp,
- struct bview *gdvp,
- int argc,
- const char *argv[],
- const char *usage);
-HIDDEN int to_data_move_object_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_data_move_object_mode_func(struct ged *gedp,
- struct bview *gdvp,
- int argc,
- const char *argv[],
- const char *usage);
-HIDDEN int to_data_move_point_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_data_move_point_mode_func(struct ged *gedp,
- struct bview *gdvp,
- int argc,
- const char *argv[],
- const char *usage);
-HIDDEN int to_data_pick(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int
-to_data_pick_func(struct ged *gedp,
- struct bview *gdvp,
- int argc,
- const char *argv[],
- const char *usage);
-HIDDEN int to_data_vZ(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_dplot(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_dlist_on(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_bot_edge_split(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_bot_face_split(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_fontsize(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_fit_png_image(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_init_view_bindings(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_delete_view(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_handle_expose(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_hide_view(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_idle_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_light(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_list_views(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_local2base(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_lod(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_make(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_mirror(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[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_more_args_callback(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_move_arb_edge_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_move_arb_face_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_bot_move_pnt(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_bot_move_pnts(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_bot_move_pnt_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_bot_move_pnts_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_metaball_move_pnt_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_pipe_move_pnt_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_move_pnt_common(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_new_view(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_orotate_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_oscale_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_otranslate_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_paint_rect_area(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-#ifdef HAVE_GL_GL_H
-HIDDEN int to_pix(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_png(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-#endif
-HIDDEN int to_rect_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_rotate_arb_face_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_rotate_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_rt_end_callback(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_rt_gettrees(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_protate_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_pscale_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_ptranslate_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_data_scale_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_scale_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_screen2model(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_screen2view(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_set_coord(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_snap_view(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_translate_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_transparency(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[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_view_win_size(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_view2screen(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_vmake(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_vslew(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_zbuffer(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-HIDDEN int to_zclip(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr func,
- const char *usage,
- int maxargs);
-
-/* Utility Functions */
-
-HIDDEN void to_create_vlist_callback_solid(struct solid *gdlp);
-HIDDEN void to_create_vlist_callback(struct display_list *gdlp);
-HIDDEN void to_destroy_vlist_callback(unsigned int dlist, int range);
-HIDDEN void to_rt_end_callback_internal(int aborted);
-
-HIDDEN void to_output_handler(struct ged *gedp, char *line);
-
-typedef int (*to_wrapper_func_ptr)(struct ged *, int, const char *[],
ged_func_ptr, const char *, int);
-#define TO_WRAPPER_FUNC_PTR_NULL (to_wrapper_func_ptr)0
-
-
-struct to_cmdtab {
- const char *to_name;
- const char *to_usage;
- int to_maxargs;
- to_wrapper_func_ptr to_wrapper_func;
- ged_func_ptr to_func;
-};
-
-
-static struct to_cmdtab ged_cmds[] = {
- {"3ptarb", (char *)0, TO_UNLIMITED, to_more_args_func, ged_3ptarb},
- {"adc", "args", 7, to_view_func, ged_adc},
- {"adjust", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_adjust},
- {"ae2dir", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_ae2dir},
- {"aet", "[[-i] az el [tw]]", 6, to_view_func_plus, ged_aet},
- {"analyze", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_analyze},
- {"annotate", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_annotate},
- {"pipe_append_pnt", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_pipe_append_pnt},
- {"arb", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_arb},
- {"arced", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_arced},
- {"arot", "x y z angle", 6, to_view_func_plus, ged_arot},
- {"attr", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_attr},
- {"bb", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_bb},
- {"bev", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_bev},
- {"bo", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_bo},
- {"bot", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_bot},
- {"bot_condense", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_bot_condense},
- {"bot_decimate", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_bot_decimate},
- {"bot_dump", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_bot_dump},
- {"bot_face_fuse", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_bot_face_fuse},
- {"bot_face_sort", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_bot_face_sort},
- {"bot_flip", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_bot_flip},
- {"bot_fuse", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_bot_fuse},
- {"bot_merge", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_bot_merge},
- {"bot_smooth", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_bot_smooth},
- {"bot_split", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_bot_split},
- {"bot_sync", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_bot_sync},
- {"bot_vertex_fuse", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_bot_vertex_fuse},
- {"brep", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_brep},
- {"c", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_comb_std},
- {"cat", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_cat},
- {"center", "[x y z]", 5, to_view_func_plus, ged_center},
- {"check", (char *)0, TO_UNLIMITED, to_view_func, ged_check},
- {"clear", (char *)0, TO_UNLIMITED, to_pass_through_and_refresh_func,
ged_zap},
- {"clone", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_clone},
- {"coil", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_coil},
- {"color", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_color},
- {"comb", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_comb},
- {"comb_color", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_comb_color},
- {"combmem", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_combmem},
- {"constraint", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_constraint},
- {"copyeval", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_copyeval},
- {"copymat", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_copymat},
- {"cpi", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_cpi},
- {"d", (char *)0, TO_UNLIMITED, to_pass_through_and_refresh_func,
ged_erase},
- {"dbconcat", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_concat},
- {"dbfind", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_find},
- {"dbip", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_dbip},
- {"dbot_dump", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_dbot_dump},
- {"debug", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_debug},
- {"debugbu", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_debugbu},
- {"debugdir", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_debugdir},
- {"debuglib", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_debuglib},
- {"debugnmg", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_debugnmg},
- {"decompose", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_decompose},
- {"delay", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_delay},
- {"dplot", "dplot_logfile", 1, to_dplot, ged_dplot},
- {"metaball_delete_pnt", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_metaball_delete_pnt},
- {"pipe_delete_pnt", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_pipe_delete_pnt},
- {"dir2ae", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_dir2ae},
- {"draw", (char *)0, TO_UNLIMITED, to_autoview_func, ged_draw},
- {"dump", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_dump},
- {"dup", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_dup},
- {"E", (char *)0, TO_UNLIMITED, to_autoview_func, ged_E},
- {"e", (char *)0, TO_UNLIMITED, to_autoview_func, ged_draw},
- {"eac", (char *)0, TO_UNLIMITED, to_autoview_func, ged_eac},
- {"echo", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_echo},
- {"edarb", (char *)0, TO_UNLIMITED, to_more_args_func, ged_edarb},
- {"edcodes", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_edcodes},
- {"edcolor", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_edcolor},
- {"edcomb", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_edcomb},
- {"edit", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_edit},
- {"edmater", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_edmater},
- {"env", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_env},
- {"erase", (char *)0, TO_UNLIMITED, to_pass_through_and_refresh_func,
ged_erase},
- {"ev", (char *)0, TO_UNLIMITED, to_autoview_func, ged_ev},
- {"expand", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_expand},
- {"eye", "[x y z]", 5, to_view_func_plus, ged_eye},
- {"eye_pos", "[x y z]", 5, to_view_func_plus, ged_eye_pos},
- {"eye_pt", "[x y z]", 5, to_view_func_plus, ged_eye},
- {"exists", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_exists},
- {"facetize", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_facetize},
- {"voxelize", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_voxelize},
- {"fb2pix", "[-h -i -c] [-s squaresize] [-w width] [-n height]
[file.pix]", TO_UNLIMITED, to_view_func, ged_fb2pix},
- {"fbclear", "[r g b]", TO_UNLIMITED, to_view_func, ged_fbclear},
- {"find_arb_edge", "arb vx vy ptol", 5, to_view_func,
ged_find_arb_edge_nearest_pnt},
- {"find_bot_edge", "bot vx vy", 5, to_view_func,
ged_find_bot_edge_nearest_pnt},
- {"find_bot_pnt", "bot vx vy", 5, to_view_func,
ged_find_bot_pnt_nearest_pnt},
- {"find_pipe_pnt", "pipe x y z", 6, to_view_func,
ged_find_pipe_pnt_nearest_pnt},
- {"form", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_form},
- {"fracture", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_fracture},
- {"g", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_group},
- {"gdiff", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_gdiff},
- {"get", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_get},
- {"get_autoview", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_get_autoview},
- {"get_bot_edges", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_get_bot_edges},
- {"get_comb", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_get_comb},
- {"get_eyemodel", "vname", 2, to_view_func, ged_get_eyemodel},
- {"get_type", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_get_type},
- {"glob", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_glob},
- {"gqa", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_gqa},
- {"graph", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_graph},
- {"grid", "args", 6, to_view_func, ged_grid},
- {"grid2model_lu", "x y", 4, to_view_func_less, ged_grid2model_lu},
- {"grid2view_lu", "x y", 4, to_view_func_less, ged_grid2view_lu},
- {"heal", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_heal},
- {"hide", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_hide},
- {"how", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_how},
- {"human", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_human},
- {"i", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_instance},
- {"idents", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_tables},
- {"illum", (char *)0, TO_UNLIMITED, to_pass_through_and_refresh_func,
ged_illum},
- {"importFg4Section", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_importFg4Section},
- {"in", (char *)0, TO_UNLIMITED, to_more_args_func, ged_in},
- {"inside", (char *)0, TO_UNLIMITED, to_more_args_func, ged_inside},
- {"isize", "vname", 2, to_view_func, ged_isize},
- {"item", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_item},
- {"joint", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_joint},
- {"joint2", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_joint2},
- {"keep", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_keep},
- {"keypoint", "[x y z]", 5, to_view_func, ged_keypoint},
- {"kill", (char *)0, TO_UNLIMITED, to_pass_through_and_refresh_func,
ged_kill},
- {"killall", (char *)0, TO_UNLIMITED,
to_pass_through_and_refresh_func, ged_killall},
- {"killrefs", (char *)0, TO_UNLIMITED,
to_pass_through_and_refresh_func, ged_killrefs},
- {"killtree", (char *)0, TO_UNLIMITED,
to_pass_through_and_refresh_func, ged_killtree},
- {"l", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_list},
- {"lc", "[-d|-s|-r] [-z] [-0|-1|-2|-3|-4|-5] [-f {FileName}]
{GroupName}", TO_UNLIMITED, to_pass_through_func, ged_lc},
- {"listeval", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_pathsum},
- {"loadview", "filename", 3, to_view_func, ged_loadview},
- {"lod", (char *)0, TO_UNLIMITED, to_lod, ged_lod},
- {"log", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_log},
- {"lookat", "x y z", 5, to_view_func_plus, ged_lookat},
- {"ls", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_ls},
- {"lt", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_lt},
- {"m2v_point", "x y z", 5, to_view_func, ged_m2v_point},
- {"make_name", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_make_name},
- {"make_pnts", (char *)0, TO_UNLIMITED, to_more_args_func,
ged_make_pnts},
- {"mat4x3pnt", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_mat4x3pnt},
- {"match", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_match},
- {"mater", (char *)0, TO_UNLIMITED, to_more_args_func, ged_mater},
- {"model2grid_lu", "x y z", 5, to_view_func_less, ged_model2grid_lu},
- {"model2view", "vname", 2, to_view_func, ged_model2view},
- {"model2view_lu", "x y z", 5, to_view_func_less, ged_model2view_lu},
- {"move_arb_edge", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_move_arb_edge},
- {"move_arb_face", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_move_arb_face},
- {"metaball_move_pnt", (char *)0, TO_UNLIMITED, to_move_pnt_common,
ged_metaball_move_pnt},
- {"pipe_move_pnt", (char *)0, TO_UNLIMITED, to_move_pnt_common,
ged_pipe_move_pnt},
- {"mouse_add_metaball_pnt", "obj mx my", TO_UNLIMITED,
to_mouse_append_pnt_common, ged_metaball_add_pnt},
- {"mouse_append_pipe_pnt", "obj mx my", TO_UNLIMITED,
to_mouse_append_pnt_common, ged_pipe_append_pnt},
- {"mouse_move_metaball_pnt", "obj i mx my", TO_UNLIMITED,
to_mouse_move_pnt_common, ged_metaball_move_pnt},
- {"mouse_move_pipe_pnt", "obj i mx my", TO_UNLIMITED,
to_mouse_move_pnt_common, ged_pipe_move_pnt},
- {"mouse_prepend_pipe_pnt", "obj mx my", TO_UNLIMITED,
to_mouse_append_pnt_common, ged_pipe_prepend_pnt},
- {"mv", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_move},
- {"mvall", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_move_all},
- {"nirt", "[args]", TO_UNLIMITED, to_view_func, ged_nirt},
- {"nmg_collapse", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_nmg_collapse},
- {"nmg_fix_normals", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_nmg_fix_normals},
- {"nmg_simplify", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_nmg_simplify},
- {"ocenter", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_ocenter},
- {"open", (char *)0, TO_UNLIMITED, to_pass_through_and_refresh_func,
ged_reopen},
- {"orient", "quat", 6, to_view_func_plus, ged_orient},
- {"orientation", "quat", 6, to_view_func_plus, ged_orient},
- {"orotate", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_orotate},
- {"oscale", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_oscale},
- {"otranslate", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_otranslate},
- {"overlay", (char *)0, TO_UNLIMITED, to_autoview_func, ged_overlay},
- {"pathlist", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_pathlist},
- {"paths", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_pathsum},
- {"perspective", "[angle]", 3, to_view_func_plus, ged_perspective},
- {"pix2fb", "[options] [file.pix]", TO_UNLIMITED, to_view_func,
ged_pix2fb},
- {"plot", "[options] file.pl", 16, to_view_func, ged_plot},
- {"pmat", "[mat]", 3, to_view_func, ged_pmat},
- {"pmodel2view", "vname", 2, to_view_func, ged_pmodel2view},
- {"png2fb", "[options] [file.png]", TO_UNLIMITED, to_view_func,
ged_png2fb},
- {"pngwf", "[options] file.png", 16, to_view_func, ged_png},
- {"prcolor", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_prcolor},
- {"prefix", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_prefix},
- {"pipe_prepend_pnt", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_pipe_prepend_pnt},
- {"preview", "[options] script", TO_UNLIMITED, to_dm_func,
ged_preview},
- {"protate", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_protate},
- {"postscript", "[options] file.ps", 16, to_view_func, ged_ps},
- {"pscale", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_pscale},
- {"pset", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_pset},
- {"ptranslate", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_ptranslate},
- {"push", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_push},
- {"put", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_put},
- {"put_comb", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_put_comb},
- {"putmat", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_putmat},
- {"qray", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_qray},
- {"quat", "a b c d", 6, to_view_func_plus, ged_quat},
- {"qvrot", "x y z angle", 6, to_view_func_plus, ged_qvrot},
- {"r", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_region},
- {"rcodes", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_rcodes},
- {"rect", "args", 6, to_view_func, ged_rect},
- {"red", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_red},
- {"regdef", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_regdef},
- {"regions", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_tables},
- {"solid_report", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_solid_report},
- {"rfarb", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_rfarb},
- {"rm", (char *)0, TO_UNLIMITED, to_pass_through_and_refresh_func,
ged_remove},
- {"rmap", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_rmap},
- {"rmat", "[mat]", 3, to_view_func, ged_rmat},
- {"rmater", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_rmater},
- {"rot", "[-m|-v] x y z", 6, to_view_func_plus, ged_rot},
- {"rot_about", "[e|k|m|v]", 3, to_view_func, ged_rotate_about},
- {"rot_point", "x y z", 5, to_view_func, ged_rot_point},
- {"rotate_arb_face", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_rotate_arb_face},
- {"rrt", "[args]", TO_UNLIMITED, to_view_func, ged_rrt},
- {"rselect", (char *)0, TO_UNLIMITED, to_view_func,
ged_rselect},
- {"rt", "[args]", TO_UNLIMITED, to_view_func, ged_rt},
- {"rtabort", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_rtabort},
- {"rtarea", "[args]", TO_UNLIMITED, to_view_func, ged_rt},
- {"rtcheck", "[args]", TO_UNLIMITED, to_view_func, ged_rtcheck},
- {"rtedge", "[args]", TO_UNLIMITED, to_view_func, ged_rt},
- {"rtweight", "[args]", TO_UNLIMITED, to_view_func, ged_rt},
- {"rtwizard", "[args]", TO_UNLIMITED, to_view_func, ged_rtwizard},
- {"savekey", "filename", 3, to_view_func, ged_savekey},
- {"saveview", (char *)0, TO_UNLIMITED, to_view_func, ged_saveview},
- {"sca", "sf", 3, to_view_func_plus, ged_scale},
- {"screengrab", "imagename.ext", TO_UNLIMITED, to_dm_func,
ged_screen_grab},
- {"search", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_search},
- {"select", (char *)0, TO_UNLIMITED, to_view_func, ged_select},
- {"set_output_script", "[script]", TO_UNLIMITED, to_pass_through_func,
ged_set_output_script},
- {"set_transparency", (char *)0, TO_UNLIMITED,
to_pass_through_and_refresh_func, ged_set_transparency},
- {"set_uplotOutputMode", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_set_uplotOutputMode},
- {"setview", "x y z", 5, to_view_func_plus, ged_setview},
- {"shaded_mode", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_shaded_mode},
- {"shader", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_shader},
- {"shells", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_shells},
- {"showmats", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_showmats},
- {"size", "[size]", 3, to_view_func_plus, ged_size},
- {"slew", "x y [z]", 5, to_view_func_plus, ged_slew},
- {"solids", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_tables},
- {"solids_on_ray", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_solids_on_ray},
- {"summary", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_summary},
- {"sv", "x y [z]", 5, to_view_func_plus, ged_slew},
- {"sync", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_sync},
- {"t", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_ls},
- {"tire", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_tire},
- {"title", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_title},
- {"tol", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_tol},
- {"tops", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_tops},
- {"tra", "[-m|-v] x y z", 6, to_view_func_plus, ged_tra},
- {"track", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_track},
- {"tree", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_tree},
- {"unhide", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_unhide},
- {"units", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_units},
- {"v2m_point", "x y z", 5, to_view_func, ged_v2m_point},
- {"vdraw", (char *)0, TO_UNLIMITED, to_pass_through_and_refresh_func,
ged_vdraw},
- {"version", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_version},
- {"view", "quat|ypr|aet|center|eye|size [args]", 7, to_view_func_plus,
ged_view_func},
- {"view2grid_lu", "x y z", 5, to_view_func_less, ged_view2grid_lu},
- {"view2model", "", 2, to_view_func_less, ged_view2model},
- {"view2model_lu", "x y z", 5, to_view_func_less, ged_view2model_lu},
- {"view2model_vec", "x y z", 5, to_view_func_less, ged_view2model_vec},
- {"viewdir", "[-i]", 3, to_view_func_less, ged_viewdir},
- {"vnirt", "[args]", TO_UNLIMITED, to_view_func, ged_vnirt},
- {"wcodes", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_wcodes},
- {"whatid", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_whatid},
- {"which_shader", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_which_shader},
- {"whichair", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_which},
- {"whichid", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_which},
- {"who", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_who},
- {"wmater", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_wmater},
- {"x", (char *)0, TO_UNLIMITED, to_pass_through_func,
ged_solid_report},
- {"xpush", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_xpush},
- {"ypr", "yaw pitch roll", 5, to_view_func_plus, ged_ypr},
- {"zap", (char *)0, TO_UNLIMITED, to_pass_through_and_refresh_func,
ged_zap},
- {"zoom", "sf", 3, to_view_func_plus, ged_zoom},
- {(char *)0, (char *)0, 0, TO_WRAPPER_FUNC_PTR_NULL,
GED_FUNC_PTR_NULL}
-};
-
-
-static struct to_cmdtab to_cmds[] = {
- {"autoview", "vname", TO_UNLIMITED, to_autoview, GED_FUNC_PTR_NULL},
- {"base2local", (char *)0, TO_UNLIMITED, to_base2local,
GED_FUNC_PTR_NULL},
- {"bg", "[r g b]", TO_UNLIMITED, to_bg, GED_FUNC_PTR_NULL},
- {"blast", (char *)0, TO_UNLIMITED, to_blast, GED_FUNC_PTR_NULL},
- {"bot_edge_split", "bot face", TO_UNLIMITED, to_bot_edge_split,
GED_FUNC_PTR_NULL},
- {"bot_face_split", "bot face", TO_UNLIMITED, to_bot_face_split,
GED_FUNC_PTR_NULL},
- {"bounds", "[\"minX maxX minY maxY minZ maxZ\"]", TO_UNLIMITED, to_bounds,
GED_FUNC_PTR_NULL},
- {"configure", "vname", TO_UNLIMITED, to_configure, GED_FUNC_PTR_NULL},
- {"constrain_rmode", "x|y|z x y", TO_UNLIMITED, to_constrain_rmode,
GED_FUNC_PTR_NULL},
- {"constrain_tmode", "x|y|z x y", TO_UNLIMITED, to_constrain_tmode,
GED_FUNC_PTR_NULL},
- {"cp", "[-f] from to", TO_UNLIMITED, to_copy, GED_FUNC_PTR_NULL},
- {"data_arrows", "???", TO_UNLIMITED, to_data_arrows, GED_FUNC_PTR_NULL},
- {"data_axes", "???", TO_UNLIMITED, to_data_axes, GED_FUNC_PTR_NULL},
- {"data_labels", "???", TO_UNLIMITED, to_data_labels, GED_FUNC_PTR_NULL},
- {"data_lines", "???", TO_UNLIMITED, to_data_lines, GED_FUNC_PTR_NULL},
- {"data_polygons", "???", TO_UNLIMITED, to_data_polygons,
GED_FUNC_PTR_NULL},
- {"data_move", "???", TO_UNLIMITED, to_data_move, GED_FUNC_PTR_NULL},
- {"data_move_object_mode", "x y", TO_UNLIMITED, to_data_move_object_mode,
GED_FUNC_PTR_NULL},
- {"data_move_point_mode", "x y", TO_UNLIMITED, to_data_move_point_mode,
GED_FUNC_PTR_NULL},
- {"data_pick", "???", TO_UNLIMITED, to_data_pick, GED_FUNC_PTR_NULL},
- {"data_scale_mode", "x y", TO_UNLIMITED, to_data_scale_mode,
GED_FUNC_PTR_NULL},
- {"data_vZ", "[z]", TO_UNLIMITED, to_data_vZ, GED_FUNC_PTR_NULL},
- {"delete_view", "vname", TO_UNLIMITED, to_delete_view,
GED_FUNC_PTR_NULL},
- {"dlist_on", "[0|1]", TO_UNLIMITED, to_dlist_on, GED_FUNC_PTR_NULL},
- {"faceplate", "center_dot|prim_labels|view_params|view_scale
color|draw [val(s)]", TO_UNLIMITED, to_faceplate, GED_FUNC_PTR_NULL},
- {"fit_png_image", "image_file_in req_width req_height scale
image_file_out", 6, to_fit_png_image, GED_FUNC_PTR_NULL},
- {"fontsize", "[fontsize]", 3, to_fontsize, GED_FUNC_PTR_NULL},
- {"get_prev_mouse", "vname", TO_UNLIMITED, to_get_prev_mouse,
GED_FUNC_PTR_NULL},
- {"handle_expose", "vname count", TO_UNLIMITED, to_handle_expose,
GED_FUNC_PTR_NULL},
- {"hide_view", "vname [0|1]", 3, to_hide_view, GED_FUNC_PTR_NULL},
- {"idle_mode", "vname", TO_UNLIMITED, to_idle_mode, GED_FUNC_PTR_NULL},
- {"init_view_bindings", "vname", TO_UNLIMITED, to_init_view_bindings,
GED_FUNC_PTR_NULL},
- {"light", "[0|1]", TO_UNLIMITED, to_light, GED_FUNC_PTR_NULL},
- {"list_views", (char *)0, TO_UNLIMITED, to_list_views,
GED_FUNC_PTR_NULL},
- {"listen", "[port]", TO_UNLIMITED, to_listen, GED_FUNC_PTR_NULL},
- {"local2base", (char *)0, TO_UNLIMITED, to_local2base,
GED_FUNC_PTR_NULL},
- {"make", (char *)0, TO_UNLIMITED, to_make, GED_FUNC_PTR_NULL},
- {"mirror", (char *)0, TO_UNLIMITED, to_mirror, GED_FUNC_PTR_NULL},
- {"model_axes", "???", TO_UNLIMITED, to_model_axes, GED_FUNC_PTR_NULL},
- {"edit_motion_delta_callback", "vname [args]", TO_UNLIMITED,
to_edit_motion_delta_callback, GED_FUNC_PTR_NULL},
- {"more_args_callback", "set/get the \"more args\" callback",
TO_UNLIMITED, to_more_args_callback, GED_FUNC_PTR_NULL},
- {"move_arb_edge_mode", "obj edge x y", TO_UNLIMITED,
to_move_arb_edge_mode, GED_FUNC_PTR_NULL},
- {"move_arb_face_mode", "obj face x y", TO_UNLIMITED,
to_move_arb_face_mode, GED_FUNC_PTR_NULL},
- {"bot_move_pnt", (char *)0, TO_UNLIMITED, to_bot_move_pnt,
GED_FUNC_PTR_NULL},
- {"bot_move_pnts", (char *)0, TO_UNLIMITED, to_bot_move_pnts,
GED_FUNC_PTR_NULL},
- {"bot_move_pnt_mode", "obj i mx my", TO_UNLIMITED,
to_bot_move_pnt_mode, GED_FUNC_PTR_NULL},
- {"bot_move_pnts_mode", "mx my obj i1 [i2 ... iN]", TO_UNLIMITED,
to_bot_move_pnts_mode, GED_FUNC_PTR_NULL},
- {"metaball_move_pnt_mode", "obj pt_i mx my", TO_UNLIMITED,
to_metaball_move_pnt_mode, GED_FUNC_PTR_NULL},
- {"pipe_pnt_mode", "obj seg_i mx my", TO_UNLIMITED, to_pipe_move_pnt_mode,
GED_FUNC_PTR_NULL},
- {"mouse_brep_selection_append", "obj mx my", 5,
to_mouse_brep_selection_append, GED_FUNC_PTR_NULL},
- {"mouse_brep_selection_translate", "obj mx my", 5,
to_mouse_brep_selection_translate, GED_FUNC_PTR_NULL},
- {"mouse_constrain_rot", "coord mx my", TO_UNLIMITED,
to_mouse_constrain_rot, GED_FUNC_PTR_NULL},
- {"mouse_constrain_trans", "coord mx my", TO_UNLIMITED,
to_mouse_constrain_trans, GED_FUNC_PTR_NULL},
- {"mouse_data_scale", "mx my", TO_UNLIMITED, to_mouse_data_scale,
GED_FUNC_PTR_NULL},
- {"mouse_find_arb_edge", "obj mx my ptol", TO_UNLIMITED,
to_mouse_find_arb_edge, GED_FUNC_PTR_NULL},
- {"mouse_find_bot_edge", "obj mx my", TO_UNLIMITED,
to_mouse_find_bot_edge, GED_FUNC_PTR_NULL},
- {"mouse_find_bot_pnt", "obj mx my", TO_UNLIMITED,
to_mouse_find_bot_pnt, GED_FUNC_PTR_NULL},
- {"mouse_find_metaball_pnt", "obj mx my", TO_UNLIMITED,
to_mouse_find_metaball_pnt, GED_FUNC_PTR_NULL},
- {"mouse_find_pipe_pnt", "obj mx my", TO_UNLIMITED,
to_mouse_find_pipe_pnt, GED_FUNC_PTR_NULL},
- {"mouse_joint_select", "obj mx my", 5, to_mouse_joint_select,
GED_FUNC_PTR_NULL},
- {"mouse_joint_selection_translate", "obj mx my", 5,
to_mouse_joint_selection_translate, GED_FUNC_PTR_NULL},
- {"mouse_move_arb_edge", "obj edge mx my", TO_UNLIMITED,
to_mouse_move_arb_edge, GED_FUNC_PTR_NULL},
- {"mouse_move_arb_face", "obj face mx my", TO_UNLIMITED,
to_mouse_move_arb_face, GED_FUNC_PTR_NULL},
- {"mouse_move_bot_pnt", "[-r] obj i mx my", TO_UNLIMITED,
to_mouse_move_bot_pnt, GED_FUNC_PTR_NULL},
- {"mouse_move_bot_pnts", "mx my obj i1 [i2 ... iN]", TO_UNLIMITED,
to_mouse_move_bot_pnts, GED_FUNC_PTR_NULL},
- {"mouse_orotate", "obj mx my", TO_UNLIMITED, to_mouse_orotate,
GED_FUNC_PTR_NULL},
- {"mouse_oscale", "obj mx my", TO_UNLIMITED, to_mouse_oscale,
GED_FUNC_PTR_NULL},
- {"mouse_otranslate", "obj mx my", TO_UNLIMITED, to_mouse_otranslate,
GED_FUNC_PTR_NULL},
- {"mouse_poly_circ", "mx my", TO_UNLIMITED, to_mouse_poly_circ,
GED_FUNC_PTR_NULL},
- {"mouse_poly_cont", "mx my", TO_UNLIMITED, to_mouse_poly_cont,
GED_FUNC_PTR_NULL},
- {"mouse_poly_ell", "mx my", TO_UNLIMITED, to_mouse_poly_ell,
GED_FUNC_PTR_NULL},
- {"mouse_poly_rect", "mx my", TO_UNLIMITED, to_mouse_poly_rect,
GED_FUNC_PTR_NULL},
- {"mouse_ray", "mx my", TO_UNLIMITED, to_mouse_ray, GED_FUNC_PTR_NULL},
- {"mouse_rect", "mx my", TO_UNLIMITED, to_mouse_rect,
GED_FUNC_PTR_NULL},
- {"mouse_rot", "mx my", TO_UNLIMITED, to_mouse_rot, GED_FUNC_PTR_NULL},
- {"mouse_rotate_arb_face", "obj face v mx my", TO_UNLIMITED,
to_mouse_rotate_arb_face, GED_FUNC_PTR_NULL},
- {"mouse_scale", "mx my", TO_UNLIMITED, to_mouse_scale,
GED_FUNC_PTR_NULL},
- {"mouse_protate", "obj attribute mx my", TO_UNLIMITED, to_mouse_protate,
GED_FUNC_PTR_NULL},
- {"mouse_pscale", "obj attribute mx my", TO_UNLIMITED, to_mouse_pscale,
GED_FUNC_PTR_NULL},
- {"mouse_ptranslate", "obj attribute mx my", TO_UNLIMITED,
to_mouse_ptranslate, GED_FUNC_PTR_NULL},
- {"mouse_trans", "mx my", TO_UNLIMITED, to_mouse_trans,
GED_FUNC_PTR_NULL},
- {"new_view", "vname type [args]", TO_UNLIMITED, to_new_view,
GED_FUNC_PTR_NULL},
- {"orotate_mode", "obj x y", TO_UNLIMITED, to_orotate_mode,
GED_FUNC_PTR_NULL},
- {"oscale_mode", "obj x y", TO_UNLIMITED, to_oscale_mode,
GED_FUNC_PTR_NULL},
- {"otranslate_mode", "obj x y", TO_UNLIMITED, to_otranslate_mode,
GED_FUNC_PTR_NULL},
- {"paint_rect_area", "vname", TO_UNLIMITED, to_paint_rect_area,
GED_FUNC_PTR_NULL},
-#ifdef HAVE_GL_GL_H
- {"pix", "file", TO_UNLIMITED, to_pix, GED_FUNC_PTR_NULL},
- {"png", "file", TO_UNLIMITED, to_png, GED_FUNC_PTR_NULL},
-#endif
- {"poly_circ_mode", "x y", TO_UNLIMITED, to_poly_circ_mode,
GED_FUNC_PTR_NULL},
- {"poly_cont_build", "x y", TO_UNLIMITED, to_poly_cont_build,
GED_FUNC_PTR_NULL},
- {"poly_cont_build_end", "y", TO_UNLIMITED, to_poly_cont_build_end,
GED_FUNC_PTR_NULL},
- {"poly_ell_mode", "x y", TO_UNLIMITED, to_poly_ell_mode,
GED_FUNC_PTR_NULL},
- {"poly_rect_mode", "x y [s]", TO_UNLIMITED, to_poly_rect_mode,
GED_FUNC_PTR_NULL},
- {"prim_label", "[prim_1 prim_2 ... prim_N]", TO_UNLIMITED,
to_prim_label, GED_FUNC_PTR_NULL},
- {"protate_mode", "obj attribute x y", TO_UNLIMITED, to_protate_mode,
GED_FUNC_PTR_NULL},
- {"pscale_mode", "obj attribute x y", TO_UNLIMITED, to_pscale_mode,
GED_FUNC_PTR_NULL},
- {"ptranslate_mode", "obj attribute x y", TO_UNLIMITED,
to_ptranslate_mode, GED_FUNC_PTR_NULL},
- {"rect_mode", "x y", TO_UNLIMITED, to_rect_mode, GED_FUNC_PTR_NULL},
- {"redraw", "obj", 2, to_redraw, GED_FUNC_PTR_NULL},
- {"refresh", "vname", TO_UNLIMITED, to_refresh, GED_FUNC_PTR_NULL},
- {"refresh_all", (char *)0, TO_UNLIMITED, to_refresh_all,
GED_FUNC_PTR_NULL},
- {"refresh_on", "[0|1]", TO_UNLIMITED, to_refresh_on,
GED_FUNC_PTR_NULL},
- {"rotate_arb_face_mode", "obj face v x y", TO_UNLIMITED,
to_rotate_arb_face_mode, GED_FUNC_PTR_NULL},
- {"rotate_mode", "x y", TO_UNLIMITED, to_rotate_mode, GED_FUNC_PTR_NULL},
- {"rt_end_callback", "[args]", TO_UNLIMITED, to_rt_end_callback,
GED_FUNC_PTR_NULL},
- {"rt_gettrees", "[-i] [-u] pname object", TO_UNLIMITED, to_rt_gettrees,
GED_FUNC_PTR_NULL},
- {"scale_mode", "x y", TO_UNLIMITED, to_scale_mode, GED_FUNC_PTR_NULL},
- {"screen2model", "x y", TO_UNLIMITED, to_screen2model,
GED_FUNC_PTR_NULL},
- {"screen2view", "x y", TO_UNLIMITED, to_screen2view, GED_FUNC_PTR_NULL},
- {"sdata_arrows", "???", TO_UNLIMITED, to_data_arrows, GED_FUNC_PTR_NULL},
- {"sdata_axes", "???", TO_UNLIMITED, to_data_axes, GED_FUNC_PTR_NULL},
- {"sdata_labels", "???", TO_UNLIMITED, to_data_labels, GED_FUNC_PTR_NULL},
- {"sdata_lines", "???", TO_UNLIMITED, to_data_lines, GED_FUNC_PTR_NULL},
- {"sdata_polygons", "???", TO_UNLIMITED, to_data_polygons,
GED_FUNC_PTR_NULL},
- {"set_coord", "[m|v]", TO_UNLIMITED, to_set_coord, GED_FUNC_PTR_NULL},
- {"set_fb_mode", "[mode]", TO_UNLIMITED, to_set_fb_mode,
GED_FUNC_PTR_NULL},
- {"snap_view", "vx vy", 4, to_snap_view, GED_FUNC_PTR_NULL},
- {"translate_mode", "x y", TO_UNLIMITED, to_translate_mode,
GED_FUNC_PTR_NULL},
- {"transparency", "[val]", TO_UNLIMITED, to_transparency,
GED_FUNC_PTR_NULL},
- {"view_axes", "vname [args]", TO_UNLIMITED, to_view_axes,
GED_FUNC_PTR_NULL},
- {"view_callback", "vname [args]", TO_UNLIMITED, to_view_callback,
GED_FUNC_PTR_NULL},
- {"view_win_size", "[s] | [x y]", 4, to_view_win_size, GED_FUNC_PTR_NULL},
- {"view2screen", "", 2, to_view2screen, GED_FUNC_PTR_NULL},
- {"vmake", "pname ptype", TO_UNLIMITED, to_vmake, GED_FUNC_PTR_NULL},
- {"vslew", "x y", TO_UNLIMITED, to_vslew, GED_FUNC_PTR_NULL},
- {"zbuffer", "[0|1]", TO_UNLIMITED, to_zbuffer, GED_FUNC_PTR_NULL},
- {"zclip", "[0|1]", TO_UNLIMITED, to_zclip, GED_FUNC_PTR_NULL},
- {(char *)0, (char *)0, 0, TO_WRAPPER_FUNC_PTR_NULL,
GED_FUNC_PTR_NULL}
-};
-
-
-/**
- * @brief create the Tcl command for to_open
- *
- */
-int
-Ged_Init(Tcl_Interp *interp)
-{
-
- if (library_initialized(0))
- return TCL_OK;
-
- {
- const char *version_str = brlcad_version();
- tclcad_eval_noresult(interp, "set brlcad_version", 1, &version_str);
- }
-
- BU_LIST_INIT(&HeadTclcadObj.l);
- (void)Tcl_CreateCommand(interp, (const char *)"go_open", to_open_tcl,
- (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
-
- (void)Tcl_CreateCommand(interp, (const char *)"dm_list", dm_list_tcl,
- (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
-
- (void)library_initialized(1);
-
- return TCL_OK;
-}
-
-
-/**
- * @brief
- * Generic interface for database commands.
- *
- * @par Usage:
- * procname cmd ?args?
- *
- * @return result of ged command.
- */
-HIDDEN int
-to_cmd(ClientData clientData,
- Tcl_Interp *interp,
- int argc,
- char **argv)
-{
- register struct to_cmdtab *ctp;
- struct tclcad_obj *top = (struct tclcad_obj *)clientData;
- Tcl_DString ds;
- int ret = GED_ERROR;
-
- Tcl_DStringInit(&ds);
-
- if (argc < 2) {
- Tcl_DStringAppend(&ds, "subcommand not specified; must be one of: ",
-1);
- for (ctp = ged_cmds; ctp->to_name != (char *)NULL; ctp++) {
- Tcl_DStringAppend(&ds, " ", -1);
- Tcl_DStringAppend(&ds, ctp->to_name, -1);
- }
- for (ctp = to_cmds; ctp->to_name != (char *)NULL; ctp++) {
- Tcl_DStringAppend(&ds, " ", -1);
- Tcl_DStringAppend(&ds, ctp->to_name, -1);
- }
- Tcl_DStringAppend(&ds, "\n", -1);
- Tcl_DStringResult(interp, &ds);
-
- return TCL_ERROR;
- }
-
- current_top = top;
-
- for (ctp = to_cmds; ctp->to_name != (char *)0; ctp++) {
- if (BU_STR_EQUAL(ctp->to_name, argv[1])) {
- struct ged *gedp = top->to_gedp;
- ret = (*ctp->to_wrapper_func)(gedp, argc-1, (const char **)argv+1,
ctp->to_func, ctp->to_usage, ctp->to_maxargs);
- break;
- }
- }
- if (ctp->to_name == (char *)0) {
- for (ctp = ged_cmds; ctp->to_name != (char *)0; ctp++) {
- if (BU_STR_EQUAL(ctp->to_name, argv[1])) {
- struct ged *gedp = top->to_gedp;
- ret = (*ctp->to_wrapper_func)(gedp, argc-1, (const char
**)argv+1, ctp->to_func, ctp->to_usage, ctp->to_maxargs);
- break;
- }
- }
- }
-
- /* Command not found. */
- if (ctp->to_name == (char *)0) {
- Tcl_DStringAppend(&ds, "unknown subcommand: ", -1);
- Tcl_DStringAppend(&ds, argv[1], -1);
- Tcl_DStringAppend(&ds, "; must be one of: ", -1);
-
- for (ctp = ged_cmds; ctp->to_name != (char *)NULL; ctp++) {
- Tcl_DStringAppend(&ds, " ", -1);
- Tcl_DStringAppend(&ds, ctp->to_name, -1);
- }
-
- for (ctp = to_cmds; ctp->to_name != (char *)NULL; ctp++) {
- Tcl_DStringAppend(&ds, " ", -1);
- Tcl_DStringAppend(&ds, ctp->to_name, -1);
- }
-
- Tcl_DStringAppend(&ds, "\n", -1);
- Tcl_DStringResult(interp, &ds);
-
- return TCL_ERROR;
- }
-
- Tcl_DStringAppend(&ds, bu_vls_addr(top->to_gedp->ged_result_str), -1);
- Tcl_DStringResult(interp, &ds);
-
- if (ret & GED_ERROR)
- return TCL_ERROR;
-
- return TCL_OK;
-}
-
-
-HIDDEN void
-free_path_edit_params(struct bu_hash_tbl *t)
-{
- struct bu_hash_entry *entry = bu_hash_next(t, NULL);
- while (entry) {
- struct path_edit_params *pp = (struct path_edit_params
*)bu_hash_value(entry, NULL);
- BU_PUT(pp, struct path_edit_params);
- entry = bu_hash_next(t, entry);
- }
-}
-
-
-/**
- * @brief
- * Called by Tcl when the object is destroyed.
- */
-void
-to_deleteProc(ClientData clientData)
-{
- struct tclcad_obj *top = (struct tclcad_obj *)clientData;
- BU_LIST_DEQUEUE(&top->l);
-
- if (current_top == top)
- current_top = TCLCAD_OBJ_NULL;
-
- if (top->to_gedp) {
-
- // Clean up the libtclcad view data.
- struct bview *gdvp = NULL;
- for (size_t i = 0; i < BU_PTBL_LEN(&top->to_gedp->ged_views); i++) {
- gdvp = (struct bview *)BU_PTBL_GET(&top->to_gedp->ged_views, i);
-
- // There is a top level command created in the Tcl interp that is
the name
- // of the dm. Clear that command.
- struct bu_vls *dm_tcl_cmd = dm_get_pathname((struct dm *)gdvp->dmp);
- if (dm_tcl_cmd && bu_vls_strlen(dm_tcl_cmd))
- Tcl_DeleteCommand(top->to_interp, bu_vls_cstr(dm_tcl_cmd));
-
- // Close the dm. This is not done by libged because libged only
manages the
- // data bview knows about. From bview's perspective, dmp is just a
pointer
- // to an opaque data structure it knows nothing about.
- (void)dm_close((struct dm *)gdvp->dmp);
-
- // Delete libtclcad specific parts of data - ged_free (called by
- // ged_close) will handle freeing the primary bview list entries.
- struct tclcad_view_data *tvd = (struct tclcad_view_data
*)gdvp->u_data;
- if (tvd) {
- bu_vls_free(&tvd->gdv_edit_motion_delta_callback);
- bu_vls_free(&tvd->gdv_callback);
- BU_PUT(tvd, struct tclcad_view_data);
- gdvp->u_data = NULL;
- }
-
- }
-
- // Clean up the other libtclcad data
- if (top->to_gedp->u_data) {
- struct tclcad_ged_data *tgd = (struct tclcad_ged_data
*)top->to_gedp->u_data;
- bu_vls_free(&tgd->go_rt_end_callback);
- bu_vls_free(&tgd->go_more_args_callback);
- free_path_edit_params(tgd->go_edited_paths);
- bu_hash_destroy(tgd->go_edited_paths);
- BU_PUT(tgd, struct tclcad_ged_data);
- top->to_gedp->u_data = NULL;
- }
- if (top->to_gedp->ged_io_data) {
- struct tclcad_io_data *t_iod = (struct tclcad_io_data
*)top->to_gedp->ged_io_data;
- BU_PUT(t_iod, struct tclcad_io_data);
- }
-
- // Got the libtclcad cleanup done, have libged do its up.
- ged_close(top->to_gedp);
-
- BU_PUT(top->to_gedp, struct ged);
- }
-
- bu_free((void *)top, "struct ged_obj");
-}
-
-
-/**
- * @brief
- * Create a command named "oname" in "interp" using "gedp" as its state.
- *
- */
-int
-to_create_cmd(Tcl_Interp *interp,
- struct tclcad_obj *top, /* pointer to object */
- const char *oname) /* object name */
-{
- if (top == TCLCAD_OBJ_NULL) {
- Tcl_AppendResult(interp, "to_create_cmd ", oname, " failed", NULL);
- return TCL_ERROR;
- }
-
- /* Instantiate the newprocname, with clientData of top */
- /* Beware, returns a "token", not TCL_OK. */
- (void)Tcl_CreateCommand(interp, oname, (Tcl_CmdProc *)to_cmd,
- (ClientData)top, to_deleteProc);
-
- /* Return new function name as result */
- Tcl_AppendResult(interp, oname, (char *)NULL);
-
- return TCL_OK;
-}
-
-
-/* Wrappers for setting up/tearing down IO handler */
-#ifndef _WIN32
-void
-tclcad_create_io_handler(struct ged_subprocess *p, bu_process_io_t d,
ged_io_func_t callback, void *data)
-{
- if (!p || !p->p || !p->gedp || !p->gedp->ged_io_data)
- return;
- int *fdp = (int *)bu_process_fd(p->p, d);
- if (fdp) {
- struct tclcad_io_data *t_iod = (struct tclcad_io_data
*)p->gedp->ged_io_data;
- Tcl_CreateFileHandler(*fdp, t_iod->io_mode, callback, (ClientData)data);
- }
-}
-
-
-void
-tclcad_delete_io_handler(struct ged_subprocess *p, bu_process_io_t d)
-{
- if (!p) return;
- int *fdp = (int *)bu_process_fd(p->p, d);
- if (fdp) {
- Tcl_DeleteFileHandler(*fdp);
- close(*fdp);
- }
-}
-
-
-#else
-void
-tclcad_create_io_handler(struct ged_subprocess *p, bu_process_io_t d,
ged_io_func_t callback, void *data)
-{
- if (!p || !p->p || !p->gedp || !p->gedp->ged_io_data)
- return;
- struct tclcad_io_data *t_iod = (struct tclcad_io_data
*)p->gedp->ged_io_data;
- HANDLE *fdp = (HANDLE *)bu_process_fd(p->p, d);
- if (fdp) {
- switch (d) {
- case BU_PROCESS_STDIN:
- if (!t_iod->chan_stdin) {
- t_iod->chan_stdin = Tcl_MakeFileChannel(*fdp,
t_iod->io_mode);
- Tcl_CreateChannelHandler(t_iod->chan_stdin,
t_iod->io_mode, callback, (ClientData)data);
- }
- break;
- case BU_PROCESS_STDOUT:
- if (!t_iod->chan_stdout) {
- t_iod->chan_stdout = Tcl_MakeFileChannel(*fdp,
t_iod->io_mode);
- Tcl_CreateChannelHandler(t_iod->chan_stdout,
t_iod->io_mode, callback, (ClientData)data);
- }
- break;
- case BU_PROCESS_STDERR:
- if (!t_iod->chan_stderr) {
- t_iod->chan_stderr = Tcl_MakeFileChannel(*fdp,
t_iod->io_mode);
- Tcl_CreateChannelHandler(t_iod->chan_stderr,
t_iod->io_mode, callback, (ClientData)data);
- }
- break;
- }
- }
-}
-
-
-void
-tclcad_delete_io_handler(struct ged_subprocess *p, bu_process_io_t d)
-{
- if (!p || !p->p || !p->gedp || !p->gedp->ged_io_data)
- return;
- struct tclcad_io_data *t_iod = (struct tclcad_io_data
*)p->gedp->ged_io_data;
- switch (d) {
- case BU_PROCESS_STDIN:
- if (t_iod->chan_stdin) {
- Tcl_DeleteChannelHandler(t_iod->chan_stdin, NULL,
(ClientData)NULL);
- Tcl_Close(t_iod->interp, t_iod->chan_stdin);
- t_iod->chan_stdin = NULL;
- }
- break;
- case BU_PROCESS_STDOUT:
- if (t_iod->chan_stdout) {
- Tcl_DeleteChannelHandler(t_iod->chan_stdout, NULL,
(ClientData)NULL);
- Tcl_Close(t_iod->interp, t_iod->chan_stdout);
- t_iod->chan_stdout = NULL;
- }
- break;
- case BU_PROCESS_STDERR:
- if (t_iod->chan_stderr) {
- Tcl_DeleteChannelHandler(t_iod->chan_stderr, NULL,
(ClientData)NULL);
- Tcl_Close(t_iod->interp, t_iod->chan_stderr);
- t_iod->chan_stderr = NULL;
- }
- break;
- }
-}
-#endif
-
-
-/**
- * @brief
- * A TCL interface to wdb_fopen() and wdb_dbopen().
- *
- * @par Implicit return -
- * Creates a new TCL proc which responds to get/put/etc. arguments
- * when invoked. clientData of that proc will be ged_obj pointer for
- * this instance of the database. Easily allows keeping track of
- * multiple databases.
- *
- * @return wdb pointer, for more traditional C-style interfacing.
- *
- * @par Example -
- * set top [go_open .inmem inmem $dbip]
- *@n .inmem get box.s
- *@n .inmem close
- *
- *@n go_open db file "bob.g"
- *@n db get white.r
- *@n db close
- */
-int
-to_open_tcl(ClientData UNUSED(clientData),
- Tcl_Interp *interp,
- int argc,
- const char **argv)
-{
- struct tclcad_obj *top = NULL;
- struct ged *gedp = NULL;
- const char *dbname = NULL;
-
- if (argc == 1) {
- /* get list of database objects */
- for (BU_LIST_FOR(top, tclcad_obj, &HeadTclcadObj.l))
- Tcl_AppendResult(interp, bu_vls_addr(&top->to_gedp->go_name), " ",
(char *)NULL);
-
- return TCL_OK;
- }
-
- if (argc < 3 || 4 < argc) {
- Tcl_AppendResult(interp, "\
-Usage: go_open\n\
- go_open newprocname file filename\n\
- go_open newprocname disk $dbip\n\
- go_open newprocname disk_append $dbip\n\
- go_open newprocname inmem $dbip\n\
- go_open newprocname inmem_append $dbip\n\
- go_open newprocname db filename\n\
- go_open newprocname filename\n",
- NULL);
- return TCL_ERROR;
- }
-
- /* Delete previous proc (if any) to release all that memory, first */
- (void)Tcl_DeleteCommand(interp, argv[1]);
-
- if (argc == 3 || BU_STR_EQUAL(argv[2], "db")) {
- if (argc == 3) {
- dbname = argv[2];
- gedp = ged_open("filename", dbname, 0);
- } else {
- dbname = argv[3];
- gedp = ged_open("db", dbname, 0);
- }
- } else {
- dbname = argv[3];
- gedp = ged_open(argv[2], dbname, 0);
- }
-
- if (gedp == GED_NULL) {
- Tcl_AppendResult(interp, "Unable to open geometry database: ", dbname,
(char *)NULL);
- return TCL_ERROR;
- }
- gedp->ged_interp = (void *)interp;
-
- /* Set the Tcl specific I/O handlers for asynchronous subprocess I/O */
- struct tclcad_io_data *t_iod;
- BU_GET(t_iod, struct tclcad_io_data);
- t_iod->io_mode = TCL_READABLE;
- t_iod->interp = interp;
- gedp->ged_io_data = (void *)t_iod;
- gedp->ged_create_io_handler = &tclcad_create_io_handler;
- gedp->ged_delete_io_handler = &tclcad_delete_io_handler;
-
- /* initialize tclcad_obj */
- BU_ALLOC(top, struct tclcad_obj);
- top->to_interp = interp;
-
- BU_ASSERT(gedp != NULL);
- top->to_gedp = gedp;
-
- top->to_gedp->ged_output_handler = to_output_handler;
- top->to_gedp->ged_refresh_handler = to_refresh_handler;
- top->to_gedp->ged_create_vlist_solid_callback =
to_create_vlist_callback_solid;
- top->to_gedp->ged_create_vlist_display_list_callback =
to_create_vlist_callback;
- top->to_gedp->ged_destroy_vlist_callback = to_destroy_vlist_callback;
-
- BU_ASSERT(gedp->ged_gdp != NULL);
- top->to_gedp->ged_gdp->gd_rtCmdNotify = to_rt_end_callback_internal;
-
- // Initialize libtclcad GED data container
- struct tclcad_ged_data *tgd;
- BU_GET(tgd, struct tclcad_ged_data);
- bu_vls_init(&tgd->go_rt_end_callback);
- tgd->go_rt_end_callback_cnt = 0;
- bu_vls_init(&tgd->go_more_args_callback);
- tgd->go_more_args_callback_cnt = 0;
- tgd->go_edited_paths = bu_hash_create(0);
- tgd->gedp = top->to_gedp;
- tgd->go_refresh_on = 1;
- gedp->u_data = (void *)tgd;
-
- bu_vls_strcpy(&top->to_gedp->go_name, argv[1]);
-
- /* append to list of tclcad_obj */
- BU_LIST_APPEND(&HeadTclcadObj.l, &top->l);
-
- return to_create_cmd(interp, top, argv[1]);
-}
-
-
-/*************************** Local Command Functions
***************************/
-
-HIDDEN int
-to_base2local(struct ged *gedp,
- int UNUSED(argc),
- const char *UNUSED(argv[]),
- ged_func_ptr UNUSED(func),
- const char *UNUSED(usage),
- int UNUSED(maxargs))
-{
- /* initialize result */
- bu_vls_trunc(gedp->ged_result_str, 0);
-
- bu_vls_printf(gedp->ged_result_str, "%lf",
current_top->to_gedp->ged_wdbp->dbip->dbi_base2local);
-
- return GED_OK;
-}
-
-
-HIDDEN int
-to_bg(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr UNUSED(func),
- const char *usage,
- int UNUSED(maxargs))
-{
- int r, g, b;
-
- /* 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 && argc != 5) {
- bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_ERROR;
- }
-
- struct bview *gdvp = ged_find_view(gedp, argv[1]);
- if (!gdvp) {
- bu_vls_printf(gedp->ged_result_str, "View not found - %s", argv[1]);
- return GED_ERROR;
- }
-
- /* get background color */
- if (argc == 2) {
- unsigned char *dm_bg = dm_get_bg((struct dm *)gdvp->dmp);
- if (dm_bg) {
- bu_vls_printf(gedp->ged_result_str, "%d %d %d",
- dm_bg[0],
- dm_bg[1],
- dm_bg[2]);
- }
- return GED_OK;
- }
-
- /* 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_color;
-
- /* validate color */
- if (r < 0 || 255 < r ||
- g < 0 || 255 < g ||
- b < 0 || 255 < b)
- goto bad_color;
-
- (void)dm_make_current((struct dm *)gdvp->dmp);
- (void)dm_set_bg((struct dm *)gdvp->dmp, (unsigned char)r, (unsigned
char)g, (unsigned char)b);
-
- to_refresh_view(gdvp);
-
- return GED_OK;
-
-bad_color:
- bu_vls_printf(gedp->ged_result_str, "%s: %s %s %s", argv[0], argv[2],
argv[3], argv[4]);
- return GED_ERROR;
-}
-
-
-HIDDEN int
-to_bounds(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr UNUSED(func),
- const char *usage,
- int UNUSED(maxargs))
-{
- fastf_t bounds[6];
-
- /* must be double for scanf */
- double scan[6];
-
- /* 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 && argc != 3) {
- bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_ERROR;
- }
-
- struct bview *gdvp = ged_find_view(gedp, argv[1]);
- if (!gdvp) {
- bu_vls_printf(gedp->ged_result_str, "View not found - %s", argv[1]);
- return GED_ERROR;
- }
-
- /* get window bounds */
- if (argc == 2) {
- vect_t *cmin = dm_get_clipmin((struct dm *)gdvp->dmp);
- vect_t *cmax = dm_get_clipmax((struct dm *)gdvp->dmp);
- if (cmin && cmax) {
- bu_vls_printf(gedp->ged_result_str, "%g %g %g %g %g %g",
- (*cmin)[X], (*cmax)[X], (*cmin)[Y], (*cmax)[Y],
(*cmin)[Z], (*cmax)[Z]);
- }
- return GED_OK;
- }
-
- /* set window bounds */
- if (bu_sscanf(argv[2], "%lf %lf %lf %lf %lf %lf",
- &scan[0], &scan[1],
- &scan[2], &scan[3],
- &scan[4], &scan[5]) != 6) {
- bu_vls_printf(gedp->ged_result_str, "%s: invalid bounds - %s", argv[0],
argv[2]);
- return GED_ERROR;
- }
- /* convert double to fastf_t */
- VMOVE(bounds, scan); /* first point */
- VMOVE(&bounds[3], &scan[3]); /* second point */
-
- /*
- * Since dm_bound doesn't appear to be used anywhere, I'm going to
- * use it for controlling the location of the zclipping plane in
- * dm-ogl.c. dm-X.c uses dm_clipmin and dm_clipmax.
- */
- if (dm_get_clipmax((struct dm *)gdvp->dmp) && (*dm_get_clipmax((struct dm
*)gdvp->dmp))[2] <= GED_MAX)
- dm_set_bound((struct dm *)gdvp->dmp, 1.0);
- else
- dm_set_bound((struct dm *)gdvp->dmp, GED_MAX/((*dm_get_clipmax((struct
dm *)gdvp->dmp))[2]));
-
- (void)dm_make_current((struct dm *)gdvp->dmp);
- (void)dm_set_win_bounds((struct dm *)gdvp->dmp, bounds);
-
- return GED_OK;
-}
-
-
-HIDDEN int
-to_configure(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr UNUSED(func),
- const char *usage,
- int UNUSED(maxargs))
-{
- int status;
-
- /* initialize result */
- bu_vls_trunc(gedp->ged_result_str, 0);
-
- if (argc != 2) {
- bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_ERROR;
- }
-
- struct bview *gdvp = ged_find_view(gedp, argv[1]);
- if (!gdvp) {
- bu_vls_printf(gedp->ged_result_str, "View not found - %s", argv[1]);
- return GED_ERROR;
- }
-
- /* configure the display manager window */
- status = dm_configure_win((struct dm *)gdvp->dmp, 0);
-
- /* configure the framebuffer window */
- struct tclcad_view_data *tvd = (struct tclcad_view_data *)gdvp->u_data;
- if (tvd->gdv_fbs.fbs_fbp != FB_NULL)
- (void)fb_configure_window(tvd->gdv_fbs.fbs_fbp, dm_get_width((struct dm
*)gdvp->dmp), dm_get_height((struct dm *)gdvp->dmp));
-
- {
- char cdimX[32];
- char cdimY[32];
- const char *av[5];
-
- snprintf(cdimX, 32, "%d", dm_get_width((struct dm *)gdvp->dmp));
- snprintf(cdimY, 32, "%d", dm_get_height((struct dm *)gdvp->dmp));
-
- av[0] = "rect";
- av[1] = "cdim";
- av[2] = cdimX;
- av[3] = cdimY;
- av[4] = NULL;
-
- gedp->ged_gvp = gdvp;
- (void)ged_rect(gedp, 4, (const char **)av);
- }
-
- if (status == TCL_OK) {
- to_refresh_view(gdvp);
- return GED_OK;
- }
-
- return GED_ERROR;
-}
-
-
-HIDDEN int
-to_constrain_rmode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr UNUSED(func),
- const char *usage,
- int UNUSED(maxargs))
-{
- struct bu_vls bindings = BU_VLS_INIT_ZERO;
-
- /* must be double for scanf */
- double x, y;
-
- /* 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 != 5) {
- bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_ERROR;
- }
-
- struct bview *gdvp = ged_find_view(gedp, argv[1]);
- if (!gdvp) {
- bu_vls_printf(gedp->ged_result_str, "View not found - %s", argv[1]);
- return GED_ERROR;
- }
-
- if ((argv[2][0] != 'x' &&
- argv[2][0] != 'y' &&
- argv[2][0] != 'z') || argv[2][1] != '\0') {
- bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_OK;
- }
-
- if (bu_sscanf(argv[3], "%lf", &x) != 1 ||
- bu_sscanf(argv[4], "%lf", &y) != 1) {
- bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_ERROR;
- }
-
- gdvp->gv_prevMouseX = x;
- gdvp->gv_prevMouseY = y;
- gdvp->gv_mode = TCLCAD_CONSTRAINED_ROTATE_MODE;
-
- struct bu_vls *pathname = dm_get_pathname((struct dm *)gdvp->dmp);
- if (pathname && bu_vls_strlen(pathname)) {
- bu_vls_printf(&bindings, "bind %s <Motion> {%s mouse_constrain_rot %s
%s %%x %%y}; break",
- bu_vls_cstr(pathname),
- bu_vls_cstr(¤t_top->to_gedp->go_name),
- bu_vls_cstr(&gdvp->gv_name),
- argv[2]);
- Tcl_Eval(current_top->to_interp, bu_vls_cstr(&bindings));
- }
- bu_vls_free(&bindings);
-
- return GED_OK;
-}
-
-
-HIDDEN int
-to_constrain_tmode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr UNUSED(func),
- const char *usage,
- int UNUSED(maxargs))
-{
- struct bu_vls bindings = BU_VLS_INIT_ZERO;
-
- /* must be double for scanf */
- double x, y;
-
- /* 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 != 5) {
- bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_ERROR;
- }
-
- struct bview *gdvp = ged_find_view(gedp, argv[1]);
- if (!gdvp) {
- bu_vls_printf(gedp->ged_result_str, "View not found - %s", argv[1]);
- return GED_ERROR;
- }
-
- if ((argv[2][0] != 'x' &&
- argv[2][0] != 'y' &&
- argv[2][0] != 'z') || argv[2][1] != '\0') {
- bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_OK;
- }
-
- if (bu_sscanf(argv[3], "%lf", &x) != 1 ||
- bu_sscanf(argv[4], "%lf", &y) != 1) {
- bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_ERROR;
- }
-
- gdvp->gv_prevMouseX = x;
- gdvp->gv_prevMouseY = y;
- gdvp->gv_mode = TCLCAD_CONSTRAINED_TRANSLATE_MODE;
-
- if (dm_get_pathname((struct dm *)gdvp->dmp)) {
- bu_vls_printf(&bindings, "bind %s <Motion> {%s mouse_constrain_trans %s
%s %%x %%y}; break",
- bu_vls_addr(dm_get_pathname((struct dm *)gdvp->dmp)),
- bu_vls_addr(¤t_top->to_gedp->go_name),
- bu_vls_addr(&gdvp->gv_name),
- argv[2]);
- Tcl_Eval(current_top->to_interp, bu_vls_addr(&bindings));
- }
- bu_vls_free(&bindings);
-
- return GED_OK;
-}
-
-
-HIDDEN int
-to_copy(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr UNUSED(func),
- const char *usage,
- int UNUSED(maxargs))
-{
- struct ged *from_gedp = GED_NULL;
- struct ged *to_gedp = GED_NULL;
- int ret;
- const char *cp;
- struct tclcad_obj *top;
- struct bu_vls db_vls = BU_VLS_INIT_ZERO;
- struct bu_vls from_vls = BU_VLS_INIT_ZERO;
- struct bu_vls to_vls = BU_VLS_INIT_ZERO;
- int fflag;
-
- /* 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 || 4 < argc) {
- bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_ERROR;
- }
-
- if (argc == 4) {
- if (argv[1][0] != '-' || argv[1][1] != 'f' || argv[1][2] != '\0') {
- bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_ERROR;
- }
-
- fflag = 1;
-
- /* Advance past the -f option */
- --argc;
- ++argv;
- } else
- fflag = 0;
-
- cp = strchr(argv[1], ':');
- if (cp) {
- bu_vls_strncpy(&db_vls, argv[1], cp-argv[1]);
- bu_vls_strcpy(&from_vls, cp+1);
-
- for (BU_LIST_FOR(top, tclcad_obj, &HeadTclcadObj.l)) {
- if (BU_STR_EQUAL(bu_vls_addr(&top->to_gedp->go_name),
bu_vls_addr(&db_vls))) {
- from_gedp = top->to_gedp;
- break;
- }
- }
-
- bu_vls_free(&db_vls);
-
- if (from_gedp == GED_NULL) {
- bu_vls_free(&from_vls);
- bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_ERROR;
- }
- } else {
- bu_vls_strcpy(&from_vls, argv[1]);
- from_gedp = gedp;
- }
-
- cp = strchr(argv[2], ':');
- if (cp) {
- bu_vls_trunc(&db_vls, 0);
- bu_vls_strncpy(&db_vls, argv[2], cp-argv[2]);
- bu_vls_strcpy(&to_vls, cp+1);
-
- for (BU_LIST_FOR(top, tclcad_obj, &HeadTclcadObj.l)) {
- if (BU_STR_EQUAL(bu_vls_addr(&top->to_gedp->go_name),
bu_vls_addr(&db_vls))) {
- to_gedp = top->to_gedp;
- break;
- }
- }
-
- bu_vls_free(&db_vls);
-
- if (to_gedp == GED_NULL) {
- bu_vls_free(&from_vls);
- bu_vls_free(&to_vls);
- bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_ERROR;
- }
- } else {
- bu_vls_strcpy(&to_vls, argv[2]);
- to_gedp = gedp;
- }
-
- if (from_gedp == to_gedp) {
- ret = ged_dbcopy(from_gedp, to_gedp,
- bu_vls_addr(&from_vls),
- bu_vls_addr(&to_vls),
- fflag);
-
- if (ret != GED_OK && from_gedp != gedp)
- bu_vls_strcpy(gedp->ged_result_str,
bu_vls_addr(from_gedp->ged_result_str));
- } else {
- ret = ged_dbcopy(from_gedp, to_gedp,
- bu_vls_addr(&from_vls),
- bu_vls_addr(&to_vls),
- fflag);
-
- if (ret != GED_OK) {
- if (bu_vls_strlen(from_gedp->ged_result_str)) {
- if (from_gedp != gedp)
- bu_vls_strcpy(gedp->ged_result_str,
bu_vls_addr(from_gedp->ged_result_str));
- } else if (to_gedp != gedp &&
bu_vls_strlen(to_gedp->ged_result_str))
- bu_vls_strcpy(gedp->ged_result_str,
bu_vls_addr(to_gedp->ged_result_str));
- }
- }
-
- bu_vls_free(&from_vls);
- bu_vls_free(&to_vls);
-
- return ret;
-}
-
-
-int
-go_data_move(Tcl_Interp *UNUSED(interp),
- struct ged *gedp,
- struct bview *gdvp,
- int argc,
- const char *argv[],
- const char *usage)
-{
- /* 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;
- }
-
- /* Don't allow go_refresh() to be called */
- if (current_top != NULL) {
- struct tclcad_ged_data *tgd = (struct tclcad_ged_data
*)current_top->to_gedp->u_data;
- tgd->go_refresh_on = 0;
- }
-
- return to_data_move_func(gedp, gdvp, argc, argv, usage);
-}
-
-
-/*
- * Usage: data_move vname dtype dindex mx my
- */
-HIDDEN int
-to_data_move(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr UNUSED(func),
- const char *usage,
- int UNUSED(maxargs))
-{
- /* 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 < 5 || 6 < argc) {
- bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_ERROR;
- }
-
- struct bview *gdvp = ged_find_view(gedp, argv[1]);
- if (!gdvp) {
- 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];
- return to_data_move_func(gedp, gdvp, argc-1, argv+1, usage);
-}
-
-
-HIDDEN int
-to_data_move_func(struct ged *gedp,
- struct bview *gdvp,
- int argc,
- const char *argv[],
- const char *usage)
-{
- int mx, my;
- int width, height;
- int dindex;
- fastf_t cx, cy;
- fastf_t vx, vy;
- fastf_t sf;
- point_t mpoint, vpoint;
-
- if (bu_sscanf(argv[2], "%d", &dindex) != 1 || dindex < 0)
- goto bad;
-
- if (argc == 4) {
- if (bu_sscanf(argv[3], "%d %d", &mx, &my) != 2)
- goto bad;
- } else {
- if (bu_sscanf(argv[3], "%d", &mx) != 1)
- goto bad;
-
- if (bu_sscanf(argv[4], "%d", &my) != 1)
- goto bad;
- }
-
- width = dm_get_width((struct dm *)gdvp->dmp);
- cx = 0.5 * (fastf_t)width;
- height = dm_get_height((struct dm *)gdvp->dmp);
- cy = 0.5 * (fastf_t)height;
- sf = 2.0 / width;
- vx = (mx - cx) * sf;
- vy = (cy - my) * sf;
-
- if (BU_STR_EQUAL(argv[1], "data_polygons")) {
- size_t i, j, k;
- bview_data_polygon_state *gdpsp = &gdvp->gv_data_polygons;
-
- if (bu_sscanf(argv[2], "%zu %zu %zu", &i, &j, &k) != 3)
- goto bad;
-
- /* Silently ignore */
- if (i >= gdpsp->gdps_polygons.num_polygons ||
- j >= gdpsp->gdps_polygons.polygon[i].num_contours ||
- k >= gdpsp->gdps_polygons.polygon[i].contour[j].num_points)
- return GED_OK;
-
- /* This section is for moving more than a single point on a contour */
- if (gdvp->gv_mode == TCLCAD_DATA_MOVE_OBJECT_MODE) {
- point_t old_mpoint, new_mpoint;
- vect_t diff;
-
- VMOVE(old_mpoint,
gdpsp->gdps_polygons.polygon[i].contour[j].point[k]);
-
- MAT4X3PNT(vpoint, gdvp->gv_model2view,
gdpsp->gdps_polygons.polygon[i].contour[j].point[k]);
- vpoint[X] = vx;
- vpoint[Y] = vy;
- MAT4X3PNT(new_mpoint, gdvp->gv_view2model, vpoint);
- VSUB2(diff, new_mpoint, old_mpoint);
-
- /* Move all polygons and all their respective contours. */
- if (gdpsp->gdps_moveAll) {
- size_t p, c;
- for (p = 0; p < gdpsp->gdps_polygons.num_polygons; ++p) {
- for (c = 0; c <
gdpsp->gdps_polygons.polygon[p].num_contours; ++c) {
- for (k = 0; k <
gdpsp->gdps_polygons.polygon[p].contour[c].num_points; ++k) {
-
VADD2(gdpsp->gdps_polygons.polygon[p].contour[c].point[k],
-
gdpsp->gdps_polygons.polygon[p].contour[c].point[k],
- diff);
- }
- }
- }
- } else {
- /* Move only the contour. */
- for (k = 0; k <
gdpsp->gdps_polygons.polygon[i].contour[j].num_points; ++k) {
- VADD2(gdpsp->gdps_polygons.polygon[i].contour[j].point[k],
- gdpsp->gdps_polygons.polygon[i].contour[j].point[k],
- diff);
- }
- }
- } else {
- /* This section is for moving a single point on a contour */
- MAT4X3PNT(vpoint, gdvp->gv_model2view,
gdpsp->gdps_polygons.polygon[i].contour[j].point[k]);
- vpoint[X] = vx;
- vpoint[Y] = vy;
- MAT4X3PNT(gdpsp->gdps_polygons.polygon[i].contour[j].point[k],
gdvp->gv_view2model, vpoint);
- }
-
- to_refresh_view(gdvp);
- return GED_OK;
- }
-
- if (BU_STR_EQUAL(argv[1], "data_arrows")) {
- struct bview_data_arrow_state *gdasp = &gdvp->gv_data_arrows;
-
- /* Silently ignore */
- if (dindex >= gdvp->gv_data_arrows.gdas_num_points)
- return GED_OK;
-
- /* This section is for moving the entire arrow */
- if (gdvp->gv_mode == TCLCAD_DATA_MOVE_OBJECT_MODE) {
- int dindexA, dindexB;
- point_t old_mpoint, new_mpoint;
- vect_t diff;
-
- dindexA = dindex;
- if (dindex%2)
- dindexB = dindex - 1;
- else
- dindexB = dindex + 1;
-
- VMOVE(old_mpoint, gdasp->gdas_points[dindexA]);
-
- MAT4X3PNT(vpoint, gdvp->gv_model2view, gdasp->gdas_points[dindexA]);
- vpoint[X] = vx;
- vpoint[Y] = vy;
- MAT4X3PNT(new_mpoint, gdvp->gv_view2model, vpoint);
- VSUB2(diff, new_mpoint, old_mpoint);
-
- VMOVE(gdasp->gdas_points[dindexA], new_mpoint);
- VADD2(gdasp->gdas_points[dindexB], gdasp->gdas_points[dindexB],
diff);
- } else {
- MAT4X3PNT(vpoint, gdvp->gv_model2view, gdasp->gdas_points[dindex]);
- vpoint[X] = vx;
- vpoint[Y] = vy;
- MAT4X3PNT(mpoint, gdvp->gv_view2model, vpoint);
- VMOVE(gdasp->gdas_points[dindex], mpoint);
- }
-
- to_refresh_view(gdvp);
- return GED_OK;
- }
-
- if (BU_STR_EQUAL(argv[1], "sdata_arrows")) {
- struct bview_data_arrow_state *gdasp = &gdvp->gv_sdata_arrows;
-
- /* Silently ignore */
- if (dindex >= gdvp->gv_sdata_arrows.gdas_num_points)
- return GED_OK;
-
- /* This section is for moving the entire arrow */
- if (gdvp->gv_mode == TCLCAD_DATA_MOVE_OBJECT_MODE) {
- int dindexA, dindexB;
- point_t old_mpoint, new_mpoint;
- vect_t diff;
-
- dindexA = dindex;
- if (dindex%2)
- dindexB = dindex - 1;
- else
- dindexB = dindex + 1;
-
- VMOVE(old_mpoint, gdasp->gdas_points[dindexA]);
-
- MAT4X3PNT(vpoint, gdvp->gv_model2view, gdasp->gdas_points[dindexA]);
- vpoint[X] = vx;
- vpoint[Y] = vy;
- MAT4X3PNT(new_mpoint, gdvp->gv_view2model, vpoint);
- VSUB2(diff, new_mpoint, old_mpoint);
-
- VMOVE(gdasp->gdas_points[dindexA], new_mpoint);
- VADD2(gdasp->gdas_points[dindexB], gdasp->gdas_points[dindexB],
diff);
- } else {
- MAT4X3PNT(vpoint, gdvp->gv_model2view, gdasp->gdas_points[dindex]);
- vpoint[X] = vx;
- vpoint[Y] = vy;
- MAT4X3PNT(mpoint, gdvp->gv_view2model, vpoint);
- VMOVE(gdasp->gdas_points[dindex], mpoint);
- }
-
- to_refresh_view(gdvp);
- return GED_OK;
- }
-
- if (BU_STR_EQUAL(argv[1], "data_axes")) {
- struct bview_data_axes_state *gdasp = &gdvp->gv_data_axes;
-
- /* Silently ignore */
- if (dindex >= gdvp->gv_data_axes.num_points)
- return GED_OK;
-
- MAT4X3PNT(vpoint, gdvp->gv_model2view, gdasp->points[dindex]);
- vpoint[X] = vx;
- vpoint[Y] = vy;
- MAT4X3PNT(mpoint, gdvp->gv_view2model, vpoint);
- VMOVE(gdasp->points[dindex], mpoint);
-
- to_refresh_view(gdvp);
- return GED_OK;
- }
-
- if (BU_STR_EQUAL(argv[1], "sdata_axes")) {
- struct bview_data_axes_state *gdasp = &gdvp->gv_sdata_axes;
-
- /* Silently ignore */
- if (dindex >= gdvp->gv_sdata_axes.num_points)
- return GED_OK;
-
- MAT4X3PNT(vpoint, gdvp->gv_model2view, gdasp->points[dindex]);
- vpoint[X] = vx;
- vpoint[Y] = vy;
- MAT4X3PNT(mpoint, gdvp->gv_view2model, vpoint);
- VMOVE(gdasp->points[dindex], mpoint);
-
- to_refresh_view(gdvp);
- return GED_OK;
- }
-
-
- if (BU_STR_EQUAL(argv[1], "data_labels")) {
- struct bview_data_label_state *gdlsp = &gdvp->gv_data_labels;
-
- /* Silently ignore */
- if (dindex >= gdvp->gv_data_labels.gdls_num_labels)
- return GED_OK;
-
- MAT4X3PNT(vpoint, gdvp->gv_model2view, gdlsp->gdls_points[dindex]);
- vpoint[X] = vx;
- vpoint[Y] = vy;
- MAT4X3PNT(mpoint, gdvp->gv_view2model, vpoint);
- VMOVE(gdlsp->gdls_points[dindex], mpoint);
-
- to_refresh_view(gdvp);
- return GED_OK;
- }
-
- if (BU_STR_EQUAL(argv[1], "sdata_labels")) {
- struct bview_data_label_state *gdlsp = &gdvp->gv_sdata_labels;
-
- /* Silently ignore */
- if (dindex >= gdvp->gv_sdata_labels.gdls_num_labels)
- return GED_OK;
-
- MAT4X3PNT(vpoint, gdvp->gv_model2view, gdlsp->gdls_points[dindex]);
- vpoint[X] = vx;
- vpoint[Y] = vy;
- MAT4X3PNT(mpoint, gdvp->gv_view2model, vpoint);
- VMOVE(gdlsp->gdls_points[dindex], mpoint);
-
- to_refresh_view(gdvp);
- return GED_OK;
- }
-
- if (BU_STR_EQUAL(argv[1], "data_lines")) {
- struct bview_data_line_state *gdlsp = &gdvp->gv_data_lines;
-
- /* Silently ignore */
- if (dindex >= gdvp->gv_data_lines.gdls_num_points)
- return GED_OK;
-
- /* This section is for moving the entire line */
- if (gdvp->gv_mode == TCLCAD_DATA_MOVE_OBJECT_MODE) {
- int dindexA, dindexB;
- point_t old_mpoint, new_mpoint;
- vect_t diff;
-
- dindexA = dindex;
- if (dindex%2)
- dindexB = dindex - 1;
- else
- dindexB = dindex + 1;
-
- VMOVE(old_mpoint, gdlsp->gdls_points[dindexA]);
-
- MAT4X3PNT(vpoint, gdvp->gv_model2view, gdlsp->gdls_points[dindexA]);
- vpoint[X] = vx;
- vpoint[Y] = vy;
- MAT4X3PNT(new_mpoint, gdvp->gv_view2model, vpoint);
- VSUB2(diff, new_mpoint, old_mpoint);
-
- VMOVE(gdlsp->gdls_points[dindexA], new_mpoint);
- VADD2(gdlsp->gdls_points[dindexB], gdlsp->gdls_points[dindexB],
diff);
- } else {
- MAT4X3PNT(vpoint, gdvp->gv_model2view, gdlsp->gdls_points[dindex]);
- vpoint[X] = vx;
- vpoint[Y] = vy;
- MAT4X3PNT(mpoint, gdvp->gv_view2model, vpoint);
- VMOVE(gdlsp->gdls_points[dindex], mpoint);
- }
-
- to_refresh_view(gdvp);
- return GED_OK;
- }
-
- if (BU_STR_EQUAL(argv[1], "sdata_lines")) {
- struct bview_data_line_state *gdlsp = &gdvp->gv_sdata_lines;
-
- /* Silently ignore */
- if (dindex >= gdvp->gv_sdata_lines.gdls_num_points)
- return GED_OK;
-
- /* This section is for moving the entire line */
- if (gdvp->gv_mode == TCLCAD_DATA_MOVE_OBJECT_MODE) {
- int dindexA, dindexB;
- point_t old_mpoint, new_mpoint;
- vect_t diff;
-
- dindexA = dindex;
- if (dindex%2)
- dindexB = dindex - 1;
- else
- dindexB = dindex + 1;
-
- VMOVE(old_mpoint, gdlsp->gdls_points[dindexA]);
-
- MAT4X3PNT(vpoint, gdvp->gv_model2view, gdlsp->gdls_points[dindexA]);
- vpoint[X] = vx;
- vpoint[Y] = vy;
- MAT4X3PNT(new_mpoint, gdvp->gv_view2model, vpoint);
- VSUB2(diff, new_mpoint, old_mpoint);
-
- VMOVE(gdlsp->gdls_points[dindexA], new_mpoint);
- VADD2(gdlsp->gdls_points[dindexB], gdlsp->gdls_points[dindexB],
diff);
- } else {
- MAT4X3PNT(vpoint, gdvp->gv_model2view, gdlsp->gdls_points[dindex]);
- vpoint[X] = vx;
- vpoint[Y] = vy;
- MAT4X3PNT(mpoint, gdvp->gv_view2model, vpoint);
- VMOVE(gdlsp->gdls_points[dindex], mpoint);
- }
-
- to_refresh_view(gdvp);
- return GED_OK;
- }
-
-bad:
- bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_ERROR;
-}
-
-
-int
-go_data_move_object_mode(Tcl_Interp *UNUSED(interp),
- struct ged *gedp,
- struct bview *gdvp,
- int argc,
- const char *argv[],
- const char *usage)
-{
- /* 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;
- }
-
- /* Don't allow go_refresh() to be called */
- if (current_top != NULL) {
- struct tclcad_ged_data *tgd = (struct tclcad_ged_data
*)current_top->to_gedp->u_data;
- tgd->go_refresh_on = 0;
- }
-
- return to_data_move_object_mode_func(gedp, gdvp, argc, argv, usage);
-}
-
-
-HIDDEN int
-to_data_move_object_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr UNUSED(func),
- const char *usage,
- int UNUSED(maxargs))
-{
- /* 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;
- }
-
- struct bview *gdvp = ged_find_view(gedp, argv[1]);
- if (!gdvp) {
- 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_move_point_mode_func */
- argv[1] = argv[0];
- return to_data_move_object_mode_func(gedp, gdvp, argc-1, argv+1, usage);
-}
-
-
-HIDDEN int
-to_data_move_object_mode_func(struct ged *gedp,
- struct bview *gdvp,
- int UNUSED(argc),
- const char *argv[],
- const char *usage)
-{
- int x, y;
-
- gedp->ged_gvp = gdvp;
-
- if (bu_sscanf(argv[1], "%d", &x) != 1 ||
- bu_sscanf(argv[2], "%d", &y) != 1) {
- bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_ERROR;
- }
-
- /* At the moment, only gv_mode is being used. */
- gdvp->gv_prevMouseX = x;
- gdvp->gv_prevMouseY = y;
- gdvp->gv_mode = TCLCAD_DATA_MOVE_OBJECT_MODE;
-
- return GED_OK;
-}
-
-
-int
-go_data_move_point_mode(Tcl_Interp *UNUSED(interp),
- struct ged *gedp,
- struct bview *gdvp,
- int argc,
- const char *argv[],
- const char *usage)
-{
- /* 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;
- }
-
- /* Don't allow go_refresh() to be called */
- if (current_top != NULL) {
- struct tclcad_ged_data *tgd = (struct tclcad_ged_data
*)current_top->to_gedp->u_data;
- tgd->go_refresh_on = 0;
- }
-
- return to_data_move_point_mode_func(gedp, gdvp, argc, argv, usage);
-}
-
-
-HIDDEN int
-to_data_move_point_mode(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr UNUSED(func),
- const char *usage,
- int UNUSED(maxargs))
-{
- /* 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;
- }
-
- struct bview *gdvp = ged_find_view(gedp, argv[1]);
- if (!gdvp) {
- 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_move_point_mode_func */
- argv[1] = argv[0];
- return to_data_move_point_mode_func(gedp, gdvp, argc-1, argv+1, usage);
-}
-
-
-HIDDEN int
-to_data_move_point_mode_func(struct ged *gedp,
- struct bview *gdvp,
- int UNUSED(argc),
- const char *argv[],
- const char *usage)
-{
- int x, y;
-
- gedp->ged_gvp = gdvp;
-
- if (bu_sscanf(argv[1], "%d", &x) != 1 ||
- bu_sscanf(argv[2], "%d", &y) != 1) {
- bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_ERROR;
- }
-
- /* At the moment, only gv_mode is being used. */
- gdvp->gv_prevMouseX = x;
- gdvp->gv_prevMouseY = y;
- gdvp->gv_mode = TCLCAD_DATA_MOVE_POINT_MODE;
-
- return GED_OK;
-}
-
-
-int
-go_data_pick(struct ged *gedp,
- struct bview *gdvp,
- int argc,
- const char *argv[],
- const char *usage)
-{
- /* 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 || 3 < 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) {
- struct tclcad_ged_data *tgd = (struct tclcad_ged_data
*)current_top->to_gedp->u_data;
- tgd->go_refresh_on = 0;
- }
-
- return to_data_pick_func(gedp, gdvp, argc, argv, usage);
-}
-
-
-HIDDEN int
-to_data_pick(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr UNUSED(func),
- const char *usage,
- int UNUSED(maxargs))
-{
- /* 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 || 4 < argc) {
- bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_ERROR;
- }
-
- struct bview *gdvp = ged_find_view(gedp, argv[1]);
- if (!gdvp) {
- 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_pick_func */
- argv[1] = argv[0];
- return to_data_pick_func(gedp, gdvp, argc-1, argv+1, usage);
-}
-
-
-HIDDEN int
-to_data_pick_func(struct ged *gedp,
- struct bview *gdvp,
- int argc,
- const char *argv[],
- const char *usage)
-{
- int mx, my, width, height;
- fastf_t cx, cy;
- fastf_t vx, vy;
- fastf_t sf;
- point_t dpoint, vpoint;
- register int i;
- fastf_t top_z = -MAX_FASTF;
- point_t top_point = VINIT_ZERO;
- size_t top_i = 0;
- size_t top_j = 0;
- size_t top_k = 0;
- int found_top = 0;
- const char *top_data_str = NULL;
- const char *top_data_label = NULL;
- static fastf_t tol = 0.015;
- static const char *data_polygons_str = "data_polygons";
- static const char *data_labels_str = "data_labels";
- static const char *sdata_labels_str = "sdata_labels";
- static const char *data_lines_str = "data_lines";
- static const char *sdata_lines_str = "sdata_lines";
- static const char *data_arrows_str = "data_arrows";
- static const char *sdata_arrows_str = "sdata_arrows";
- static const char *data_axes_str = "data_axes";
- static const char *sdata_axes_str = "sdata_axes";
-
- if (argc == 2) {
- if (bu_sscanf(argv[1], "%d %d", &mx, &my) != 2)
- goto bad;
- } else {
- if (bu_sscanf(argv[1], "%d", &mx) != 1)
- goto bad;
-
- if (bu_sscanf(argv[2], "%d", &my) != 1)
- goto bad;
- }
-
- width = dm_get_width((struct dm *)gdvp->dmp);
- cx = 0.5 * (fastf_t)width;
- height = dm_get_height((struct dm *)gdvp->dmp);
- cy = 0.5 * (fastf_t)height;
- sf = 2.0 / width;
- vx = (mx - cx) * sf;
- vy = (cy - my) * sf;
-
- /* check for polygon points */
- if (gdvp->gv_data_polygons.gdps_draw &&
- gdvp->gv_data_polygons.gdps_polygons.num_polygons) {
- register size_t si, sj, sk;
-
- bview_data_polygon_state *gdpsp = &gdvp->gv_data_polygons;
-
- for (si = 0; si < gdpsp->gdps_polygons.num_polygons; ++si)
- for (sj = 0; sj < gdpsp->gdps_polygons.polygon[si].num_contours;
++sj)
- for (sk = 0; sk <
gdpsp->gdps_polygons.polygon[si].contour[sj].num_points; ++sk) {
- fastf_t minX, maxX;
- fastf_t minY, maxY;
-
- MAT4X3PNT(vpoint, gdvp->gv_model2view,
gdpsp->gdps_polygons.polygon[si].contour[sj].point[sk]);
- minX = vpoint[X] - tol;
- maxX = vpoint[X] + tol;
- minY = vpoint[Y] - tol;
- maxY = vpoint[Y] + tol;
-
- if (minX < vx && vx < maxX &&
- minY < vy && vy < maxY) {
- if (!found_top || top_z < vpoint[Z]) {
- top_z = vpoint[Z];
- top_data_str = data_polygons_str;
- top_i = si;
- top_j = sj;
- top_k = sk;
- VMOVE(top_point,
gdpsp->gdps_polygons.polygon[si].contour[sj].point[sk]);
- found_top = 1;
- }
- }
- }
- }
-
- if (found_top) {
- bu_vls_printf(gedp->ged_result_str, "%s {%zu %zu %zu} {%lf %lf %lf}",
- top_data_str, top_i, top_j, top_k, V3ARGS(top_point));
- return GED_OK;
- }
-
- /* check for label points */
- if (gdvp->gv_data_labels.gdls_draw &&
- gdvp->gv_data_labels.gdls_num_labels) {
- struct bview_data_label_state *gdlsp = &gdvp->gv_data_labels;
-
- for (i = 0; i < gdlsp->gdls_num_labels; ++i) {
- fastf_t minX, maxX;
- fastf_t minY, maxY;
-
- VMOVE(dpoint, gdlsp->gdls_points[i]);
- MAT4X3PNT(vpoint, gdvp->gv_model2view, dpoint);
-
- minX = vpoint[X];
- maxX = vpoint[X] + (2 * tol);
- minY = vpoint[Y];
- maxY = vpoint[Y] + (2 * tol);
-
- if (minX < vx && vx < maxX &&
- minY < vy && vy < maxY) {
- if (!found_top || top_z < vpoint[Z]) {
- top_z = vpoint[Z];
- top_data_str = data_labels_str;
- top_i = i;
- top_data_label = gdlsp->gdls_labels[i];
- VMOVE(top_point, dpoint);
- found_top = 1;
- }
- }
- }
- }
-
- /* check for selected label points */
- if (gdvp->gv_sdata_labels.gdls_draw &&
- gdvp->gv_sdata_labels.gdls_num_labels) {
- struct bview_data_label_state *gdlsp = &gdvp->gv_sdata_labels;
-
- for (i = 0; i < gdlsp->gdls_num_labels; ++i) {
- fastf_t minX, maxX;
- fastf_t minY, maxY;
-
- VMOVE(dpoint, gdlsp->gdls_points[i]);
- MAT4X3PNT(vpoint, gdvp->gv_model2view, dpoint);
-
- minX = vpoint[X];
- maxX = vpoint[X] + (2 * tol);
- minY = vpoint[Y];
- maxY = vpoint[Y] + (2 * tol);
-
- if (minX < vx && vx < maxX &&
- minY < vy && vy < maxY) {
- if (!found_top || top_z < vpoint[Z]) {
- top_z = vpoint[Z];
- top_data_str = sdata_labels_str;
- top_i = i;
- top_data_label = gdlsp->gdls_labels[i];
- VMOVE(top_point, dpoint);
- found_top = 1;
- }
- }
- }
- }
-
- if (found_top) {
- bu_vls_printf(gedp->ged_result_str, "%s %zu {{%s} {%lf %lf %lf}}",
- top_data_str, top_i, top_data_label, V3ARGS(top_point));
- return GED_OK;
- }
-
- /* check for line points */
- if (gdvp->gv_data_lines.gdls_draw &&
- gdvp->gv_data_lines.gdls_num_points) {
- struct bview_data_line_state *gdlsp = &gdvp->gv_data_lines;
-
- for (i = 0; i < gdlsp->gdls_num_points; ++i) {
- fastf_t minX, maxX;
- fastf_t minY, maxY;
-
- VMOVE(dpoint, gdlsp->gdls_points[i]);
- MAT4X3PNT(vpoint, gdvp->gv_model2view, dpoint);
-
- minX = vpoint[X] - tol;
- maxX = vpoint[X] + tol;
- minY = vpoint[Y] - tol;
- maxY = vpoint[Y] + tol;
- if (minX < vx && vx < maxX &&
- minY < vy && vy < maxY) {
- if (top_z < vpoint[Z]) {
- top_z = vpoint[Z];
- top_data_str = data_lines_str;
- top_i = i;
- VMOVE(top_point, dpoint);
- found_top = 1;
- }
- bu_vls_printf(gedp->ged_result_str, "data_lines %d {%lf %lf
%lf}", i, V3ARGS(dpoint));
- return GED_OK;
- }
- }
- }
-
- /* check for selected line points */
- if (gdvp->gv_sdata_lines.gdls_draw &&
- gdvp->gv_sdata_lines.gdls_num_points) {
- struct bview_data_line_state *gdlsp = &gdvp->gv_sdata_lines;
-
- for (i = 0; i < gdlsp->gdls_num_points; ++i) {
- fastf_t minX, maxX;
- fastf_t minY, maxY;
-
- VMOVE(dpoint, gdlsp->gdls_points[i]);
- MAT4X3PNT(vpoint, gdvp->gv_model2view, dpoint);
-
- minX = vpoint[X] - tol;
- maxX = vpoint[X] + tol;
- minY = vpoint[Y] - tol;
- maxY = vpoint[Y] + tol;
- if (minX < vx && vx < maxX &&
- minY < vy && vy < maxY) {
- if (!found_top || top_z < vpoint[Z]) {
- top_z = vpoint[Z];
- top_data_str = sdata_lines_str;
- top_i = i;
- VMOVE(top_point, dpoint);
- found_top = 1;
- }
- }
- }
- }
-
- if (found_top) {
- bu_vls_printf(gedp->ged_result_str, "%s %zu {%lf %lf %lf}",
- top_data_str, top_i, V3ARGS(top_point));
- return GED_OK;
- }
-
- /* check for arrow points */
- if (gdvp->gv_data_arrows.gdas_draw &&
- gdvp->gv_data_arrows.gdas_num_points) {
- struct bview_data_arrow_state *gdasp = &gdvp->gv_data_arrows;
-
- for (i = 0; i < gdasp->gdas_num_points; ++i) {
- fastf_t minX, maxX;
- fastf_t minY, maxY;
-
- VMOVE(dpoint, gdasp->gdas_points[i]);
- MAT4X3PNT(vpoint, gdvp->gv_model2view, dpoint);
-
- minX = vpoint[X] - tol;
- maxX = vpoint[X] + tol;
- minY = vpoint[Y] - tol;
- maxY = vpoint[Y] + tol;
- if (minX < vx && vx < maxX &&
- minY < vy && vy < maxY) {
- if (!found_top || top_z < vpoint[Z]) {
- top_z = vpoint[Z];
- top_data_str = data_arrows_str;
- top_i = i;
- VMOVE(top_point, dpoint);
- found_top = 1;
- }
- }
- }
- }
-
- /* check for selected arrow points */
- if (gdvp->gv_sdata_arrows.gdas_draw &&
- gdvp->gv_sdata_arrows.gdas_num_points) {
- struct bview_data_arrow_state *gdasp = &gdvp->gv_sdata_arrows;
-
- for (i = 0; i < gdasp->gdas_num_points; ++i) {
- fastf_t minX, maxX;
- fastf_t minY, maxY;
-
- VMOVE(dpoint, gdasp->gdas_points[i]);
- MAT4X3PNT(vpoint, gdvp->gv_model2view, dpoint);
-
- minX = vpoint[X] - tol;
- maxX = vpoint[X] + tol;
- minY = vpoint[Y] - tol;
- maxY = vpoint[Y] + tol;
- if (minX < vx && vx < maxX &&
- minY < vy && vy < maxY) {
- if (!found_top || top_z < vpoint[Z]) {
- top_z = vpoint[Z];
- top_data_str = sdata_arrows_str;
- top_i = i;
- VMOVE(top_point, dpoint);
- found_top = 1;
- }
- }
- }
- }
-
- if (found_top) {
- bu_vls_printf(gedp->ged_result_str, "%s %zu {%lf %lf %lf}",
- top_data_str, top_i, V3ARGS(top_point));
- return GED_OK;
- }
-
- /* check for axes points */
- if (gdvp->gv_data_axes.draw &&
- gdvp->gv_data_axes.num_points) {
- struct bview_data_axes_state *gdasp = &gdvp->gv_data_axes;
-
- for (i = 0; i < gdasp->num_points; ++i) {
- fastf_t minX, maxX;
- fastf_t minY, maxY;
-
- VMOVE(dpoint, gdasp->points[i]);
- MAT4X3PNT(vpoint, gdvp->gv_model2view, dpoint);
-
- minX = vpoint[X] - tol;
- maxX = vpoint[X] + tol;
- minY = vpoint[Y] - tol;
- maxY = vpoint[Y] + tol;
- if (minX < vx && vx < maxX &&
- minY < vy && vy < maxY) {
- if (!found_top || top_z < vpoint[Z]) {
- top_z = vpoint[Z];
- top_i = i;
- top_data_str = data_axes_str;
- VMOVE(top_point, dpoint);
- found_top = 1;
- }
- }
- }
- }
-
- /* check for selected axes points */
- if (gdvp->gv_sdata_axes.draw &&
- gdvp->gv_sdata_axes.num_points) {
- struct bview_data_axes_state *gdasp = &gdvp->gv_sdata_axes;
-
- for (i = 0; i < gdasp->num_points; ++i) {
- fastf_t minX, maxX;
- fastf_t minY, maxY;
-
- VMOVE(dpoint, gdasp->points[i]);
- MAT4X3PNT(vpoint, gdvp->gv_model2view, dpoint);
-
- minX = vpoint[X] - tol;
- maxX = vpoint[X] + tol;
- minY = vpoint[Y] - tol;
- maxY = vpoint[Y] + tol;
- if (minX < vx && vx < maxX &&
- minY < vy && vy < maxY) {
- if (!found_top || top_z < vpoint[Z]) {
- top_z = vpoint[Z];
- top_i = i;
- top_data_str = sdata_axes_str;
- VMOVE(top_point, dpoint);
- found_top = 1;
- }
- }
- }
- }
-
- if (found_top)
- bu_vls_printf(gedp->ged_result_str, "%s %zu {%lf %lf %lf}",
- top_data_str, top_i, V3ARGS(top_point));
-
- return GED_OK;
-
-bad:
- bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_ERROR;
-}
-
-
-HIDDEN int
-to_data_vZ(struct ged *gedp,
- int argc,
- const char *argv[],
- ged_func_ptr UNUSED(func),
- const char *usage,
- int UNUSED(maxargs))
-{
- /* must be double for scanf */
- double vZ;
-
- /* 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 && argc != 3) {
- bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_ERROR;
- }
-
- struct bview *gdvp = ged_find_view(gedp, argv[1]);
- if (!gdvp) {
- bu_vls_printf(gedp->ged_result_str, "View not found - %s", argv[1]);
- return GED_ERROR;
- }
-
- /* Get the data vZ */
- if (argc == 2) {
- bu_vls_printf(gedp->ged_result_str, "%lf", gdvp->gv_data_vZ);
- return GED_OK;
- }
-
- /* Set the data vZ */
- if (bu_sscanf(argv[2], "%lf", &vZ) != 1) {
- bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_ERROR;
- }
-
- gdvp->gv_data_vZ = vZ;
-
- return GED_OK;
-}
-
-
-HIDDEN void
-to_init_default_bindings(struct bview *gdvp)
-{
- struct bu_vls bindings = BU_VLS_INIT_ZERO;
-
- if (dm_get_pathname((struct dm *)gdvp->dmp)) {
- struct bu_vls *pathvls = dm_get_pathname((struct dm *)gdvp->dmp);
- if (pathvls) {
- bu_vls_printf(&bindings, "bind %s <Configure> {%s configure %s;
break}; ",
- bu_vls_addr(pathvls),
- bu_vls_addr(¤t_top->to_gedp->go_name),
- bu_vls_addr(&gdvp->gv_name));
- bu_vls_printf(&bindings, "bind %s <Enter> {focus %s; break}; ",
- bu_vls_addr(pathvls),
- bu_vls_addr(pathvls));
- bu_vls_printf(&bindings, "bind %s <Expose> {%s handle_expose %s
%%c; break}; ",
- bu_vls_addr(pathvls),
- bu_vls_addr(¤t_top->to_gedp->go_name),
- bu_vls_addr(&gdvp->gv_name));
- bu_vls_printf(&bindings, "catch {wm protocol %s WM_DELETE_WINDOW
{%s delete_view %s; break}}; ",
- bu_vls_addr(pathvls),
- bu_vls_addr(¤t_top->to_gedp->go_name),
- bu_vls_addr(&gdvp->gv_name));
-
- /* Mouse Bindings */
- bu_vls_printf(&bindings, "bind %s <2> {%s vslew %s %%x %%y; focus
%s; break}; ",
- bu_vls_addr(pathvls),
- bu_vls_addr(¤t_top->to_gedp->go_name),
- bu_vls_addr(&gdvp->gv_name),
- bu_vls_addr(pathvls));
- bu_vls_printf(&bindings, "bind %s <1> {%s zoom %s 0.5; focus %s;
break}; ",
- bu_vls_addr(pathvls),
- bu_vls_addr(¤t_top->to_gedp->go_name),
- bu_vls_addr(&gdvp->gv_name),
- bu_vls_addr(pathvls));
- bu_vls_printf(&bindings, "bind %s <3> {%s zoom %s 2.0; focus %s;
break}; ",
@@ 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