Revision: 76646
http://sourceforge.net/p/brlcad/code/76646
Author: starseeker
Date: 2020-08-02 20:15:01 +0000 (Sun, 02 Aug 2020)
Log Message:
-----------
Now that we've gotten trunk into RELEASE so we can work on 7.32.0, merge the
latest bioh changes to libged/libtclcad back into trunk. Next steps are likely
to be more invasive, so this seems to be a reasonable sync point.
Modified Paths:
--------------
brlcad/trunk/include/bu/magic.h
brlcad/trunk/include/dm/bview.h
brlcad/trunk/include/ged/defines.h
brlcad/trunk/include/ged/view.h
brlcad/trunk/include/tclcad.h
brlcad/trunk/src/libged/arb/rotate_arb_face.c
brlcad/trunk/src/libged/bb/bb.c
brlcad/trunk/src/libged/bigE/bigE.c
brlcad/trunk/src/libged/bot/bot.cpp
brlcad/trunk/src/libged/bot/bot_dump.c
brlcad/trunk/src/libged/bot/check.cpp
brlcad/trunk/src/libged/bot/edbot.c
brlcad/trunk/src/libged/bot/extrude.cpp
brlcad/trunk/src/libged/bot/remesh.cpp
brlcad/trunk/src/libged/clone/clone.c
brlcad/trunk/src/libged/comb/comb.c
brlcad/trunk/src/libged/comb_std/comb_std.c
brlcad/trunk/src/libged/copymat/copymat.c
brlcad/trunk/src/libged/display_list.c
brlcad/trunk/src/libged/draw/draw.c
brlcad/trunk/src/libged/draw/preview.c
brlcad/trunk/src/libged/edcodes/edcodes.c
brlcad/trunk/src/libged/edit/edit.c
brlcad/trunk/src/libged/edmater/edmater.c
brlcad/trunk/src/libged/erase/erase.c
brlcad/trunk/src/libged/facetize/facetize.cpp
brlcad/trunk/src/libged/gdiff/gdiff.c
brlcad/trunk/src/libged/ged.c
brlcad/trunk/src/libged/ged_private.h
brlcad/trunk/src/libged/ged_util.c
brlcad/trunk/src/libged/get/get.c
brlcad/trunk/src/libged/get_obj_bounds.c
brlcad/trunk/src/libged/get_type/get_type.c
brlcad/trunk/src/libged/include/plugin.h
brlcad/trunk/src/libged/joint/joint.c
brlcad/trunk/src/libged/kill/kill.c
brlcad/trunk/src/libged/killrefs/killrefs.c
brlcad/trunk/src/libged/killtree/killtree.c
brlcad/trunk/src/libged/mater/mater.cpp
brlcad/trunk/src/libged/metaball/metaball.c
brlcad/trunk/src/libged/move_arb_edge/move_arb_edge.c
brlcad/trunk/src/libged/move_arb_face/move_arb_face.c
brlcad/trunk/src/libged/ocenter/ocenter.c
brlcad/trunk/src/libged/orotate/orotate.c
brlcad/trunk/src/libged/oscale/oscale.c
brlcad/trunk/src/libged/otranslate/otranslate.c
brlcad/trunk/src/libged/pipe/pipe.c
brlcad/trunk/src/libged/pipe.c
brlcad/trunk/src/libged/polyclip.cpp
brlcad/trunk/src/libged/process/process.c
brlcad/trunk/src/libged/protate/protate.c
brlcad/trunk/src/libged/pscale/pscale.c
brlcad/trunk/src/libged/pset/pset.c
brlcad/trunk/src/libged/ptranslate/ptranslate.c
brlcad/trunk/src/libged/put/put.c
brlcad/trunk/src/libged/put_comb/put_comb.c
brlcad/trunk/src/libged/remove/remove.c
brlcad/trunk/src/libged/rmater/rmater.c
brlcad/trunk/src/libged/rtabort/rtabort.c
brlcad/trunk/src/libged/rtcheck/rtcheck.c
brlcad/trunk/src/libged/rtwizard/rtwizard.c
brlcad/trunk/src/libged/select/select.c
brlcad/trunk/src/libged/set_transparency/set_transparency.c
brlcad/trunk/src/libged/vdraw/vdraw.c
brlcad/trunk/src/libged/view/data_lines.c
brlcad/trunk/src/libged/wcodes/wcodes.c
brlcad/trunk/src/libged/zap/zap.c
brlcad/trunk/src/libtclcad/fb.c
brlcad/trunk/src/libtclcad/tclcad_mouse.c
brlcad/trunk/src/libtclcad/tclcad_obj.c
brlcad/trunk/src/libtclcad/tclcad_obj_wrapper.c
brlcad/trunk/src/libtclcad/tclcad_polygons.c
brlcad/trunk/src/libtclcad/tclcad_private.h
brlcad/trunk/src/libtclcad/view/arrows.c
brlcad/trunk/src/libtclcad/view/autoview.c
brlcad/trunk/src/libtclcad/view/axes.c
brlcad/trunk/src/libtclcad/view/draw.c
brlcad/trunk/src/libtclcad/view/faceplate.c
brlcad/trunk/src/libtclcad/view/labels.c
brlcad/trunk/src/libtclcad/view/lines.c
brlcad/trunk/src/libtclcad/view/refresh.c
brlcad/trunk/src/libtclcad/view/util.c
brlcad/trunk/src/libtclcad/view/view.h
brlcad/trunk/src/mged/chgview.c
brlcad/trunk/src/mged/dodraw.c
brlcad/trunk/src/mged/mged.c
brlcad/trunk/src/mged/overlay.c
brlcad/trunk/src/mged/setup.c
brlcad/trunk/src/mged/utility1.c
brlcad/trunk/src/mged/wdb_obj.c
brlcad/trunk/src/shapes/coil.c
Added Paths:
-----------
brlcad/trunk/src/libged/exec.cpp
brlcad/trunk/src/libged/include/
Removed Paths:
-------------
brlcad/trunk/src/libged/exec.cpp
brlcad/trunk/src/libged/include/
Property Changed:
----------------
brlcad/trunk/
brlcad/trunk/NEWS
brlcad/trunk/doc/
brlcad/trunk/include/
brlcad/trunk/regress/
brlcad/trunk/src/libged/polyclip.cpp
Index: brlcad/trunk
===================================================================
--- brlcad/trunk 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk 2020-08-02 20:15:01 UTC (rev 76646)
Property changes on: brlcad/trunk
___________________________________________________________________
Modified: svn:mergeinfo
## -1,5 +1,5 ##
/brlcad/branches/RELEASE:57439,57447-57860,69901-69913,70323-70333,71915-72242,72525-72534,72826-72858,74376-74454,74964-75140,75372-75685,76001-76451
-/brlcad/branches/bioh:75720-75736,75740-75742,75860-75891,75894-75986,76088-76153,76355-76365,76368-76376,76577
+/brlcad/branches/bioh:75720-75736,75740-75742,75860-75891,75894-75986,76088-76153,76354-76506,76577
/brlcad/branches/brep-debug:61373,61375,61404,61427,61429,61470,61544,61567,61576,61999,62018,62094,62098,62107,62117,62406,62416-62519,62521-62584,62593-62614,62623,62658,62660-62674,62681-62771,62876,62901,62907,62910,62925,62928,62931-63025,63027,63051,63054-63056,63069,63071-63073,63122,63160-63161,63165,63171,63184,63187,63189-63190,63193-63196,63200,63202,63205-63210,63213,63219-63225,63232-63233,63236,63238,63338,63350-63353,63481,63618,63669,64173-64174,64176-64177,64229-64233,64242,64244,64360-64362,65165,65245,65249,65334,65833-65834,66370-66375,66931-66932,66934,67012-67015,67018-67019,67021-67022,67406,67740,67746-67748,67950,67952,68144-68145,68636,68640-68643,68820,69081,69109,69168,69206,69289,69346,69460-69461,69582-69583,69719-69721,69857-69859,69927,69995-69996,70148-70149,70347-70349,70377,70526-70527,71006-71007,71009-71022,71046-71047,71049,71096-71100
/brlcad/branches/bullet:62518
/brlcad/branches/cmake:43219
Index: brlcad/trunk/NEWS
===================================================================
--- brlcad/trunk/NEWS 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/NEWS 2020-08-02 20:15:01 UTC (rev 76646)
Property changes on: brlcad/trunk/NEWS
___________________________________________________________________
Modified: svn:mergeinfo
## -1,5 +1,5 ##
/brlcad/branches/RELEASE/NEWS:57439,57447-57860,68609-68613,69901-69913,70323-70333,71915-72242,72525-72534,72826-72858,74376-74454,74964-75140,76001-76451
-/brlcad/branches/bioh/NEWS:75894-75986,76088-76153
+/brlcad/branches/bioh/NEWS:75894-75986,76088-76153,76354-76506
/brlcad/branches/brep-debug/NEWS:61373,61375,61404,61427,61429,61470,61544,61567,61576,61999,62018,62094,62098,62107,62117,62406,62416-62519,62521-62584,62593-62614,62623,62658,62660-62674,62681-62771,62876,62901,62907,62910,62925,62928,62931-63025,63027,63051,63054-63056,63069,63071-63073,63122,63160-63161,63165,63171,63184,63187,63189-63190,63193-63196,63200,63202,63205-63210,63213,63219-63225,63232-63233,63236,63238,63338,63350-63353,63481,63618,63669,64173-64174,64176-64177,64229-64233,64242,64244,64360-64362,65165,65245,65249,65334,65833-65834,66370-66375,66931-66932,66934,67012-67015,67018-67019,67021-67022,67406,67740,67746-67748,67950,67952,68144-68145,68636,68640-68643,68820,69081,69109,69168,69206,69289,69346,69460-69461,69582-69583,69719-69721,69857-69859,69927,69995-69996,70148-70149,70347-70349,70377,70526-70527,71006-71007,71009-71022,71046-71047,71049,71096-71100
/brlcad/branches/bullet/NEWS:62518
/brlcad/branches/cmake/NEWS:43219
Index: brlcad/trunk/doc
===================================================================
--- brlcad/trunk/doc 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/doc 2020-08-02 20:15:01 UTC (rev 76646)
Property changes on: brlcad/trunk/doc
___________________________________________________________________
Modified: svn:mergeinfo
## -1,5 +1,5 ##
/brlcad/branches/RELEASE/doc:57439,57447-57860,69901-69913,71917-72242,72525-72534,72826-72858,74376-74454,74964-75140
-/brlcad/branches/bioh/doc:75894-75986,76088-76153,76355-76365
+/brlcad/branches/bioh/doc:75894-75986,76088-76153,76354-76506
/brlcad/branches/brep-debug/doc:61373,61375,61404,61427,61429,61470,61544,61567,61576,61999,62018,62094,62098,62107,62117,62406,62416-62519,62521-62584,62593-62614,62623,62658,62660-62674,62681-62771,62876,62901,62907,62910,62925,62928,62931-63025,63027,63051,63054-63056,63069,63071-63073,63122,63160-63161,63165,63171,63184,63187,63189-63190,63193-63196,63200,63202,63205-63210,63213,63219-63225,63232-63233,63236,63238,63338,63350-63353,63481,63618,63669,64173-64174,64176-64177,64229-64233,64242,64244,64360-64362,65165,65245,65249,65334,65833-65834,66370-66375,66931-66932,66934,67012-67015,67018-67019,67021-67022,67406,67740,67746-67748,67950,67952,68144-68145,68636,68640-68643,68820,69081,69109,69206,69289,69346,69460-69461,69582-69583,69719-69721,69857-69859,69927
/brlcad/branches/bullet/doc:62518
/brlcad/branches/cmake/doc:43219
Index: brlcad/trunk/include
===================================================================
--- brlcad/trunk/include 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/include 2020-08-02 20:15:01 UTC (rev 76646)
Property changes on: brlcad/trunk/include
___________________________________________________________________
Modified: svn:mergeinfo
## -1,5 +1,5 ##
/brlcad/branches/RELEASE/include:57439,57447-57860,69901-69913,71915-72242,72525-72534,72826-72858,74376-74454,74964-75140,75372-75681
-/brlcad/branches/bioh/include:75720-75736,75740-75742,75860-75891,75894-75986,76088-76153
+/brlcad/branches/bioh/include:75720-75736,75740-75742,75860-75891,75894-75986,76088-76153,76354-76506
/brlcad/branches/brep-debug/include:61373,61375,61404,61427,61429,61470,61544,61567,61576,61999,62018,62094,62098,62107,62117,62406,62416-62519,62521-62584,62593-62614,62623,62658,62660-62674,62681-62771,62876,62901,62907,62910,62925,62928,62931-63025,63027,63051,63054-63056,63069,63071-63073,63122,63160-63161,63165,63171,63184,63187,63189-63190,63193-63196,63200,63202,63205-63210,63213,63219-63225,63232-63233,63236,63238,63338,63350-63353,63481,63618,63669,64173-64174,64176-64177,64229-64233,64242,64244,64360-64362,65165,65245,65249,65334,65833-65834,66370-66375,66931-66932,66934,67012-67015,67018-67019,67021-67022,67406,67740,67746-67748,67950,67952,68144-68145,68636,68640-68643,68820,69081,69109,69206,69289,69346,69460-69461,69582-69583,69719-69721,69857-69859,69927
/brlcad/branches/bullet/include:62518
/brlcad/branches/cmake/include:43219
Modified: brlcad/trunk/include/bu/magic.h
===================================================================
--- brlcad/trunk/include/bu/magic.h 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/include/bu/magic.h 2020-08-02 20:15:01 UTC (rev 76646)
@@ -209,6 +209,7 @@
/* misc */
#define ANIMATE_MAGIC 0x414e4963 /**< ANIc */
+#define BVIEW_MAGIC 0x62766965 /**< bvie */
#define CURVE_BEZIER_MAGIC 0x62657a69 /**< bezi */
#define CURVE_CARC_MAGIC 0x63617263 /**< carc */
#define CURVE_LSEG_MAGIC 0x6c736567 /**< lseg */
Modified: brlcad/trunk/include/dm/bview.h
===================================================================
--- brlcad/trunk/include/dm/bview.h 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/include/dm/bview.h 2020-08-02 20:15:01 UTC (rev 76646)
@@ -196,7 +196,8 @@
};
struct bview {
- struct bu_list l;
+ uint32_t magic; /**< @brief magic number */
+ struct bu_vls gv_name;
fastf_t gv_scale;
fastf_t gv_size; /**< @brief 2.0 *
scale */
fastf_t gv_isize; /**< @brief 1.0 /
size */
@@ -251,11 +252,14 @@
fastf_t gv_curve_scale;
fastf_t gv_data_vZ;
size_t gv_bot_threshold;
+ int gv_hidden;
+ void *dmp; /* Display manager pointer, if one is
associated with this view */
+ void *u_data; /* Caller data associated with this
view */
struct bu_ptbl *callbacks;
};
-struct bview_client_data {
+struct bview_solid_data {
struct display_list *gdlp;
int draw_solid_lines_only;
int wireframe_color_override;
@@ -266,37 +270,6 @@
void *freesolid;
};
-/**
- * A view object maintains state for controlling a view.
- */
-struct view_obj {
- struct bu_list l;
- struct bu_vls vo_name; /**< @brief view object
name/cmd */
- fastf_t vo_scale;
- fastf_t vo_size; /**< @brief 2.0 * scale */
- fastf_t vo_invSize; /**< @brief 1.0 / size */
- fastf_t vo_perspective; /**< @brief perspective angle
*/
- fastf_t vo_local2base; /**< @brief scale local units
to base units (i.e. mm) */
- fastf_t vo_base2local; /**< @brief scale base units
(i.e. mm) to local units */
- vect_t vo_aet;
- vect_t vo_eye_pos; /**< @brief eye position */
- vect_t vo_keypoint;
- char vo_coord; /**< @brief coordinate system
*/
- char vo_rotate_about; /**< @brief indicates what
point rotations are about */
- mat_t vo_rotation;
- mat_t vo_center;
- mat_t vo_model2view;
- mat_t vo_pmodel2view;
- mat_t vo_view2model;
- mat_t vo_pmat; /**< @brief perspective
matrix */
- struct bu_observer_list vo_observers;
- void (*vo_callback)(); /**< @brief called in
vo_update with vo_clientData and vop */
- void * vo_clientData; /**< @brief passed to
vo_callback */
- int vo_zclip;
- void *interp;
-};
-#define VIEW_OBJ_NULL ((struct view_obj *)0)
-
#endif /* DM_BVIEW_H */
/** @} */
Modified: brlcad/trunk/include/ged/defines.h
===================================================================
--- brlcad/trunk/include/ged/defines.h 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/include/ged/defines.h 2020-08-02 20:15:01 UTC (rev 76646)
@@ -35,6 +35,7 @@
#include "bu/vls.h"
#include "dm/bview.h"
#include "rt/search.h"
+#include "rt/solid.h"
__BEGIN_DECLS
@@ -73,16 +74,23 @@
#define GED_DISPLAY_LIST_NULL ((struct display_list *)0)
#define GED_DRAWABLE_NULL ((struct ged_drawable *)0)
#define GED_VIEW_NULL ((struct bview *)0)
-#define GED_DM_VIEW_NULL ((struct ged_dm_view *)0)
#define GED_RESULT_NULL ((void *)0)
+/* Forward declaration */
+struct ged;
+
+typedef int (*ged_func_ptr)(struct ged *, int, const char *[]);
#define GED_FUNC_PTR_NULL ((ged_func_ptr)0)
-#define GED_REFRESH_CALLBACK_PTR_NULL ((ged_refresh_callback_ptr)0)
-#define GED_CREATE_VLIST_SOLID_CALLBACK_PTR_NULL
((ged_create_vlist_solid_callback_ptr)0)
-#define GED_CREATE_VLIST_CALLBACK_PTR_NULL ((ged_create_vlist_callback_ptr)0)
-#define GED_FREE_VLIST_CALLBACK_PTR_NULL ((ged_free_vlist_callback_ptr)0)
+/* Callback related definitions */
+typedef void (*ged_io_func_t)(void *, int);
+typedef void (*ged_refresh_func_t)(void *);
+typedef void (*ged_create_vlist_solid_func_t)(struct solid *);
+typedef void (*ged_create_vlist_display_list_func_t)(struct display_list *);
+typedef void (*ged_destroy_vlist_func_t)(unsigned int, int);
+struct ged_callback_state;
+
/**
* Definition of global parallel-processing semaphores.
*
@@ -116,10 +124,11 @@
struct ged_subprocess {
- struct bu_list l;
+ uint32_t magic; /**< @brief magic number */
struct bu_process *p;
void *chan;
int aborted;
+ struct ged *gedp;
};
/* FIXME: should be private */
@@ -145,11 +154,9 @@
/* FIXME: should be private */
struct ged_drawable {
- struct bu_list l;
- struct bu_list *gd_headDisplay; /**< @brief
head of display list */
+ struct bu_list *gd_headDisplay; /**< @brief head of
display list */
struct bu_list *gd_headVDraw; /**< @brief head of
vdraw list */
struct vd_curve *gd_currVHead; /**< @brief current
vdraw head */
- struct solid *gd_freeSolids; /**< @brief ptr to
head of free solid list */
char **gd_rt_cmd; /* DEPRECATED - will be
removed, do not use */
int gd_rt_cmd_len; /* DEPRECATED - will be
removed, do not use */
@@ -172,8 +179,8 @@
};
-typedef void (*ged_io_handler_callback_t)(void *, int);
+
struct ged_cmd;
/* struct details are private - use accessor functions to manipulate */
@@ -180,13 +187,19 @@
struct ged_results;
struct ged {
- struct bu_list l;
+ struct bu_vls go_name;
struct rt_wdb *ged_wdbp;
+ // The full set of bviews associated with this ged object
+ struct bu_ptbl ged_views;
+
+ void *u_data; /**< @brief User data associated with
this ged instance */
+
/** for catching log messages */
struct bu_vls *ged_log;
struct solid *freesolid; /* For now this is a struct
solid, but longer term that may not always be true */
+ struct bu_ptbl free_solids; /**< @brief solid structures
available for reuse */
/* @todo: add support for returning an array of objects, not just a
* simple string.
@@ -205,22 +218,22 @@
struct bview *ged_gvp;
struct bu_hash_tbl *ged_selections; /**< @brief object name ->
struct rt_object_selections */
- void *ged_refresh_clientdata; /**< @brief
client data passed to refresh handler */
- void (*ged_refresh_handler)(void *); /**< @brief
function for handling refresh requests */
- void (*ged_output_handler)(struct ged *, char *);
/**< @brief function for handling output */
char *ged_output_script; /**< @brief
script for use by the outputHandler */
- void (*ged_create_vlist_solid_callback)(struct solid
*); /**< @brief function to call after creating a vlist to create display
list for solid */
- void (*ged_create_vlist_callback)(struct
display_list *); /**< @brief function to call after all vlist created that
loops through creating display list for each solid */
- void (*ged_free_vlist_callback)(unsigned int, int);
/**< @brief function to call after freeing a vlist */
- /* FIXME -- this ugly hack needs to die. the result string should be
stored before the call. */
+
+ /* FIXME -- this ugly hack needs to die. the result string should
+ * be stored before the call.
+ */
int ged_internal_call;
- /* Handler functions for I/O communication with asynchronous subprocess
commands */
- int io_mode;
- void (*ged_create_io_handler)(void **chan, struct bu_process *p, int fd,
int mode, void *data, ged_io_handler_callback_t callback);
- void (*ged_delete_io_handler)(void *interp, void *chan, struct bu_process
*p, int fd, void *data, ged_io_handler_callback_t callback);
+ /* TODO: hide all callback related symbols, callback typedefs
+ * (above), and eventually most if not all of the remaining fields
+ * into an _impl structure so callers are not tightly coupled to
+ * the ged structure. access via public functions that have been
+ * given design consideration.
+ */
+
/* FOR LIBGED INTERNAL USE */
struct ged_cmd *cmds;
int (*add)(struct ged *gedp, const struct ged_cmd *cmd);
@@ -227,21 +240,51 @@
int (*del)(struct ged *gedp, const char *name);
int (*run)(struct ged *gedp, int ac, char *av[]);
- struct ged_subprocess gd_headSubprocess; /**< @brief head of forked
processes */
+ struct bu_ptbl ged_subp; /**< @brief forked sub-processes */
+ /* Interface to LIBDM */
+ void *ged_dmp;
+
+
+ /* Callbacks */
+
+ struct ged_callback_state *ged_cbs;
+ void (*ged_refresh_handler)(void *); /**< @brief
function for handling refresh requests */
+ void *ged_refresh_clientdata; /**< @brief
client data passed to refresh handler */
+ void (*ged_output_handler)(struct ged *, char *);
/**< @brief function for handling output */
+ void (*ged_create_vlist_solid_callback)(struct solid
*); /**< @brief function to call after creating a vlist to create display
list for solid */
+ void
(*ged_create_vlist_display_list_callback)(struct display_list *); /**<
@brief function to call after all vlist created that loops through creating
display list for each solid */
+ void (*ged_destroy_vlist_callback)(unsigned int,
int); /**< @brief function to call after freeing a vlist */
+
+ /* Handler functions for I/O communication with asynchronous subprocess
commands. There
+ * are two opaque data structures at play here, with different scopes.
One is the "data"
+ * pointer passed to ged_create_io_handler, which is used to store
command-specific
+ * information internal to the library (the simplest thing to do is pass
ged_subprocess
+ * in as the data pointer, but if that's not enough - see for example
rtcheck - this
+ * mechanism allows for more elaborate measures.
+ *
+ * The second is ged_io_data, which is set in gedp by the calling
application. This is where
+ * information specific to the parent's I/O environment (which by
definition the library
+ * can't know about as it is application specific) lives. It should be
assigned in the
+ * applications gedp before any calls to ged_create_io_handler are made.
+ * */
+ void (*ged_create_io_handler)(struct ged_subprocess *gp, int fd,
ged_io_func_t callback, void *data);
+ void (*ged_delete_io_handler)(struct ged_subprocess *gp, int fd);
+ void *ged_io_data; /**< brief caller supplied data */
+
+ // Other callbacks...
+ // Tcl command strings - these are libtclcad level callbacks that execute
user supplied Tcl commands if set:
+ // gdv_callback, gdv_edit_motion_delta_callback, go_more_args_callback,
go_rt_end_callback
+ //
+ // fbserv_obj: fbs_callback
+ // bview.h gv_callback (only used by MGED?)
+ // db_search_callback_t
+
void *ged_interp; /* Temporary - do not rely on when designing new
functionality */
db_search_callback_t ged_interp_eval; /* FIXME: broke the rule written on
the previous line */
- /* Interface to LIBDM */
- void *ged_dmp;
};
-typedef int (*ged_func_ptr)(struct ged *, int, const char *[]);
-typedef void (*ged_refresh_callback_ptr)(void *);
-typedef void (*ged_create_vlist_solid_callback_ptr)(struct solid *);
-typedef void (*ged_create_vlist_callback_ptr)(struct display_list *);
-typedef void (*ged_free_vlist_callback_ptr)(unsigned int, int);
-
/* accessor functions for ged_results - calling
* applications should not work directly with the
* internals of ged_results, which are not guaranteed
Modified: brlcad/trunk/include/ged/view.h
===================================================================
--- brlcad/trunk/include/ged/view.h 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/include/ged/view.h 2020-08-02 20:15:01 UTC (rev 76646)
@@ -64,15 +64,10 @@
/* defined in display_list.c */
GED_EXPORT void dl_set_iflag(struct bu_list *hdlp, int iflag);
GED_EXPORT extern void dl_color_soltab(struct bu_list *hdlp);
-GED_EXPORT extern void dl_erasePathFromDisplay(struct bu_list *hdlp,
- struct db_i *dbip,
- void (*callback)(unsigned int,
int),
- const char *path,
- int allow_split,
- struct solid *freesolid);
+GED_EXPORT extern void dl_erasePathFromDisplay(struct ged *gedp, const char
*path, int allow_split);
GED_EXPORT extern struct display_list *dl_addToDisplay(struct bu_list *hdlp,
struct db_i *dbip, const char *name);
-GED_EXPORT extern int invent_solid(struct bu_list *hdlp, struct db_i *dbip,
void (*callback_create)(struct solid *), void (*callback_free)(unsigned int,
int), char *name, struct bu_list *vhead, long int rgb, int copy, fastf_t
transparency, int dmode, struct solid *freesolid, int csoltab);
+GED_EXPORT extern int invent_solid(struct ged *gedp, char *name, struct
bu_list *vhead, long int rgb, int copy, fastf_t transparency, int dmode, int
csoltab);
/* defined in ged.c */
GED_EXPORT extern void ged_view_init(struct bview *gvp);
@@ -154,6 +149,8 @@
GED_EXPORT extern int ged_polygons_overlap(struct ged *gedp, struct bg_polygon
*polyA, struct bg_polygon *polyB);
GED_EXPORT extern void ged_polygon_fill_segments(struct ged *gedp, struct
bg_polygon *poly, vect2d_t vfilldir, fastf_t vfilldelta);
+GED_EXPORT extern struct bview * ged_find_view(struct ged *gedp, const char
*key);
+
// TODO - this (and probably the grid logic too) belong at the libdm level -
they're operating
// on the bview, rather than the ged level data...
GED_EXPORT extern int ged_snap_to_lines(struct ged *gedp, fastf_t *vx, fastf_t
*vy);
Modified: brlcad/trunk/include/tclcad.h
===================================================================
--- brlcad/trunk/include/tclcad.h 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/include/tclcad.h 2020-08-02 20:15:01 UTC (rev 76646)
@@ -132,38 +132,40 @@
DM_EXPORT extern int fbs_open(struct fbserv_obj *fbsp, int port);
DM_EXPORT extern int fbs_close(struct fbserv_obj *fbsp);
+struct tclcad_ged_data {
+ struct ged *gedp;
+ struct bu_vls go_more_args_callback;
+ int go_more_args_callback_cnt;
-struct ged_dm_view {
- struct bu_list l;
- struct bu_vls gdv_callback;
- struct bu_vls gdv_edit_motion_delta_callback;
- struct bu_vls gdv_name;
- struct bview *gdv_view;
- struct dm *gdv_dmp;
- struct fbserv_obj gdv_fbs;
- struct ged_obj *gdv_gop;
- int gdv_hide_view;
-};
+ // These are view related, but appear to be intended as global across all
+ // views associated with the gedp - that is why they are here and not in
+ // tclcad_view_data.
+ struct bu_hash_tbl *go_edited_paths;
+ struct bu_vls go_rt_end_callback;
+ int go_rt_end_callback_cnt;
+ int go_dlist_on;
+ int go_refresh_on;
-struct ged_obj {
- struct ged *go_gedp;
- struct ged_dm_view go_head_views;
- struct bu_vls go_name;
- struct bu_vls go_more_args_callback;
- struct bu_vls go_rt_end_callback;
+ // TODO - these really shouldn't be libtclcad specific... we don't want to
+ // depend on Tcl for label primitives...
struct bu_vls *go_prim_label_list;
int go_prim_label_list_size;
- int go_refresh_on;
- int go_dlist_on;
- Tcl_Interp *interp;
- struct bu_hash_tbl *go_edited_paths;
};
-#define GED_OBJ_NULL ((struct ged_obj *)0)
+// Data specific to an individual view rather than the geometry database
+// instance.
+struct tclcad_view_data {
+ struct ged *gedp;
+ struct bu_vls gdv_edit_motion_delta_callback;
+ int gdv_edit_motion_delta_callback_cnt;
+ struct bu_vls gdv_callback;
+ int gdv_callback_cnt;
+ struct fbserv_obj gdv_fbs;
+};
struct tclcad_obj {
struct bu_list l;
- struct ged_obj *to_gop;
+ struct ged *to_gedp;
Tcl_Interp *to_interp;
};
@@ -349,108 +351,108 @@
TCLCAD_EXPORT extern struct application *to_rt_gettrees_application(struct ged
*gedp,
int argc,
const char
*argv[]);
-TCLCAD_EXPORT extern void go_refresh(struct ged_obj *gop,
- struct ged_dm_view *gdvp);
-TCLCAD_EXPORT extern void go_refresh_draw(struct ged_obj *gop,
- struct ged_dm_view *gdvp,
+TCLCAD_EXPORT extern void go_refresh(struct ged *gedp,
+ struct bview *gdvp);
+TCLCAD_EXPORT extern void go_refresh_draw(struct ged *gedp,
+ struct bview *gdvp,
int restore_zbuffer);
-TCLCAD_EXPORT extern int go_view_axes(struct ged_obj *gop,
- struct ged_dm_view *gdvp,
+TCLCAD_EXPORT extern int go_view_axes(struct ged *gedp,
+ struct bview *gdvp,
int argc,
const char *argv[],
const char *usage);
TCLCAD_EXPORT extern int go_data_labels(Tcl_Interp *interp,
struct ged *gedp,
- struct ged_dm_view *gdvp,
+ struct bview *gdvp,
int argc,
const char *argv[],
const char *usage);
TCLCAD_EXPORT extern int go_data_arrows(Tcl_Interp *interp,
struct ged *gedp,
- struct ged_dm_view *gdvp,
+ struct bview *gdvp,
int argc,
const char *argv[],
const char *usage);
TCLCAD_EXPORT extern int go_data_pick(struct ged *gedp,
- struct ged_dm_view *gdvp,
+ struct bview *gdvp,
int argc,
const char *argv[],
const char *usage);
TCLCAD_EXPORT extern int go_data_axes(Tcl_Interp *interp,
struct ged *gedp,
- struct ged_dm_view *gdvp,
+ struct bview *gdvp,
int argc,
const char *argv[],
const char *usage);
TCLCAD_EXPORT extern int go_data_lines(Tcl_Interp *interp,
struct ged *gedp,
- struct ged_dm_view *gdvp,
+ struct bview *gdvp,
int argc,
const char *argv[],
const char *usage);
TCLCAD_EXPORT extern int go_data_move(Tcl_Interp *interp,
struct ged *gedp,
- struct ged_dm_view *gdvp,
+ struct bview *gdvp,
int argc,
const char *argv[],
const char *usage);
TCLCAD_EXPORT extern int go_data_move_object_mode(Tcl_Interp *interp,
struct ged *gedp,
- struct ged_dm_view *gdvp,
+ struct bview *gdvp,
int argc,
const char *argv[],
const char *usage);
TCLCAD_EXPORT extern int go_data_move_point_mode(Tcl_Interp *interp,
struct ged *gedp,
- struct ged_dm_view *gdvp,
+ struct bview *gdvp,
int argc,
const char *argv[],
const char *usage);
TCLCAD_EXPORT extern int go_data_polygons(Tcl_Interp *interp,
struct ged *gedp,
- struct ged_dm_view *gdvp,
+ struct bview *gdvp,
int argc,
const char *argv[],
const char *usage);
TCLCAD_EXPORT extern int go_mouse_poly_circ(Tcl_Interp *interp,
struct ged *gedp,
- struct ged_dm_view *gdvp,
+ struct bview *gdvp,
int argc,
const char *argv[],
const char *usage);
TCLCAD_EXPORT extern int go_mouse_poly_cont(Tcl_Interp *interp,
struct ged *gedp,
- struct ged_dm_view *gdvp,
+ struct bview *gdvp,
int argc,
const char *argv[],
const char *usage);
TCLCAD_EXPORT extern int go_mouse_poly_ell(Tcl_Interp *interp,
struct ged *gedp,
- struct ged_dm_view *gdvp,
+ struct bview *gdvp,
int argc,
const char *argv[],
const char *usage);
TCLCAD_EXPORT extern int go_mouse_poly_rect(Tcl_Interp *interp,
struct ged *gedp,
- struct ged_dm_view *gdvp,
+ struct bview *gdvp,
int argc,
const char *argv[],
const char *usage);
TCLCAD_EXPORT extern int go_poly_circ_mode(Tcl_Interp *interp,
struct ged *gedp,
- struct ged_dm_view *gdvp,
+ struct bview *gdvp,
int argc,
const char *argv[],
const char *usage);
TCLCAD_EXPORT extern int go_poly_ell_mode(Tcl_Interp *interp,
struct ged *gedp,
- struct ged_dm_view *gdvp,
+ struct bview *gdvp,
int argc,
const char *argv[],
const char *usage);
TCLCAD_EXPORT extern int go_poly_rect_mode(Tcl_Interp *interp,
struct ged *gedp,
- struct ged_dm_view *gdvp,
+ struct bview *gdvp,
int argc,
const char *argv[],
const char *usage);
@@ -459,13 +461,13 @@
struct bu_vls *result_str);
TCLCAD_EXPORT extern int go_poly_cont_build(Tcl_Interp *interp,
struct ged *gedp,
- struct ged_dm_view *gdvp,
+ struct bview *gdvp,
int argc,
const char *argv[],
const char *usage);
TCLCAD_EXPORT extern int go_poly_cont_build_end(Tcl_Interp *UNUSED(interp),
struct ged *gedp,
- struct ged_dm_view *gdvp,
+ struct bview *gdvp,
int argc,
const char *argv[],
const char *usage);
@@ -512,16 +514,17 @@
TCLCAD_EXPORT extern int tclcad_init(Tcl_Interp *interp, int init_gui, struct
bu_vls *tlog);
/**
- * Create Tcl specific I/O handlers
+ * Tcl specific I/O handlers
*/
+struct tclcad_io_data {
+ Tcl_Channel chan;
+ Tcl_Interp *interp;
+ int io_mode;
+};
TCLCAD_EXPORT void
-tclcad_create_io_handler(void **chan, struct bu_process *p, int fd, int mode,
void *data, ged_io_handler_callback_t callback);
-
-/**
- * Delete Tcl specific I/O handlers
- */
+tclcad_create_io_handler(struct ged_subprocess *p, int fd, ged_io_func_t
callback, void *data);
TCLCAD_EXPORT void
-tclcad_delete_io_handler(void *interp, void *chan, struct bu_process *p, int
fd, void *data, ged_io_handler_callback_t callback);
+tclcad_delete_io_handler(struct ged_subprocess *p, int fd);
/* dm_tcl.c */
Index: brlcad/trunk/regress
===================================================================
--- brlcad/trunk/regress 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/regress 2020-08-02 20:15:01 UTC (rev 76646)
Property changes on: brlcad/trunk/regress
___________________________________________________________________
Modified: svn:mergeinfo
## -1,5 +1,5 ##
/brlcad/branches/RELEASE/regress:57439,57447-57860,69901-69913,71917-72242,72525-72534,72826-72858,74376-74454,75372-75681
-/brlcad/branches/bioh/regress:75860-75891,75894-75986,76088-76153,76355-76365,76368-76376
+/brlcad/branches/bioh/regress:75860-75891,75894-75986,76088-76153,76354-76506
/brlcad/branches/brep-debug/regress:61373,61375,61404,61427,61429,61470,61544,61567,61576,61999,62018,62094,62098,62107,62117,62406,62416-62519,62521-62584,62593-62614,62623,62658,62660-62674,62681-62771,62876,62901,62907,62910,62925,62928,62931-63025,63027,63051,63054-63056,63069,63071-63073,63122,63160-63161,63165,63171,63184,63187,63189-63190,63193-63196,63200,63202,63205-63210,63213,63219-63225,63232-63233,63236,63238,63338,63350-63353,63481,63618,63669,64173-64174,64176-64177,64229-64233,64242,64244,64360-64362,65165,65245,65249,65334,65833-65834,66370-66375,66931-66932,66934,67012-67015,67018-67019,67021-67022,67406,67740,67746-67748,67950,67952,68144-68145,68636,68640-68643,68820,69081,69109,69206,69289,69346,69460-69461,69582-69583,69719-69721,69857-69859,69927
/brlcad/branches/bullet/regress:62518
/brlcad/branches/cmake/regress:43219
Modified: brlcad/trunk/src/libged/arb/rotate_arb_face.c
===================================================================
--- brlcad/trunk/src/libged/arb/rotate_arb_face.c 2020-08-02 19:53:00 UTC
(rev 76645)
+++ brlcad/trunk/src/libged/arb/rotate_arb_face.c 2020-08-02 20:15:01 UTC
(rev 76646)
@@ -95,7 +95,7 @@
return GED_ERROR;
}
- if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1],
gedp->ged_wdbp, mat) == GED_ERROR)
+ if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1],
gedp->ged_wdbp, mat) & GED_ERROR)
return GED_ERROR;
if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD ||
Modified: brlcad/trunk/src/libged/bb/bb.c
===================================================================
--- brlcad/trunk/src/libged/bb/bb.c 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/src/libged/bb/bb.c 2020-08-02 20:15:01 UTC (rev 76646)
@@ -126,7 +126,7 @@
VSETALL(rpp_min, INFINITY);
VSETALL(rpp_max, -INFINITY);
for (i = 0; i < argc; i++) {
- if (ged_get_obj_bounds(gedp, argc - i, (const char **)argv+i,
use_air, obj_min, obj_max) == GED_ERROR)
+ if (ged_get_obj_bounds(gedp, argc - i, (const char **)argv+i,
use_air, obj_min, obj_max) & GED_ERROR)
return GED_ERROR;
VMINMAX(rpp_min, rpp_max, (double *)obj_min);
VMINMAX(rpp_min, rpp_max, (double *)obj_max);
Modified: brlcad/trunk/src/libged/bigE/bigE.c
===================================================================
--- brlcad/trunk/src/libged/bigE/bigE.c 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/src/libged/bigE/bigE.c 2020-08-02 20:15:01 UTC (rev 76646)
@@ -2053,7 +2053,7 @@
av[1] = (char *)0;
for (i = 0; i < argc; ++i) {
- dl_erasePathFromDisplay(gedp->ged_gdp->gd_headDisplay,
gedp->ged_wdbp->dbip, gedp->ged_free_vlist_callback, argv[i], 0,
gedp->freesolid);
+ dl_erasePathFromDisplay(gedp, argv[i], 0);
dgcdp->gdlp = dl_addToDisplay(gedp->ged_gdp->gd_headDisplay,
gedp->ged_wdbp->dbip, argv[i]);
BU_ALLOC(dgcdp->ap, struct application);
Modified: brlcad/trunk/src/libged/bot/bot.cpp
===================================================================
--- brlcad/trunk/src/libged/bot/bot.cpp 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/src/libged/bot/bot.cpp 2020-08-02 20:15:01 UTC (rev 76646)
@@ -115,7 +115,7 @@
return GED_ERROR;
}
- if (_bot_obj_setup(gb, argv[1]) == GED_ERROR) {
+ if (_bot_obj_setup(gb, argv[1]) & GED_ERROR) {
return GED_ERROR;
}
Modified: brlcad/trunk/src/libged/bot/bot_dump.c
===================================================================
--- brlcad/trunk/src/libged/bot/bot_dump.c 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/bot/bot_dump.c 2020-08-02 20:15:01 UTC (rev
76646)
@@ -891,7 +891,7 @@
using_dbot_dump = 0;
- if (bot_dump_get_args(gedp, argc, argv) == GED_ERROR)
+ if (bot_dump_get_args(gedp, argc, argv) & GED_ERROR)
return GED_ERROR;
if (bu_optind > argc) {
Modified: brlcad/trunk/src/libged/bot/check.cpp
===================================================================
--- brlcad/trunk/src/libged/bot/check.cpp 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/bot/check.cpp 2020-08-02 20:15:01 UTC (rev
76646)
@@ -711,7 +711,7 @@
return GED_OK;
}
- if (_bot_obj_setup(gb, argv[argc-1]) == GED_ERROR) {
+ if (_bot_obj_setup(gb, argv[argc-1]) & GED_ERROR) {
return GED_ERROR;
}
argc--;
Modified: brlcad/trunk/src/libged/bot/edbot.c
===================================================================
--- brlcad/trunk/src/libged/bot/edbot.c 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/src/libged/bot/edbot.c 2020-08-02 20:15:01 UTC (rev 76646)
@@ -89,7 +89,7 @@
return GED_ERROR;
}
- if (wdb_import_from_path2(gedp->ged_result_str, &intern, last,
gedp->ged_wdbp, mat) == GED_ERROR) {
+ if (wdb_import_from_path2(gedp->ged_result_str, &intern, last,
gedp->ged_wdbp, mat) & GED_ERROR) {
bu_vls_printf(gedp->ged_result_str, "%s: failed to find %s", argv[0],
argv[1]);
return GED_ERROR;
}
Modified: brlcad/trunk/src/libged/bot/extrude.cpp
===================================================================
--- brlcad/trunk/src/libged/bot/extrude.cpp 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/bot/extrude.cpp 2020-08-02 20:15:01 UTC (rev
76646)
@@ -100,7 +100,7 @@
argc--; argv++;
- if (_bot_obj_setup(gb, argv[0]) == GED_ERROR) {
+ if (_bot_obj_setup(gb, argv[0]) & GED_ERROR) {
return GED_ERROR;
}
Modified: brlcad/trunk/src/libged/bot/remesh.cpp
===================================================================
--- brlcad/trunk/src/libged/bot/remesh.cpp 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/bot/remesh.cpp 2020-08-02 20:15:01 UTC (rev
76646)
@@ -179,7 +179,7 @@
argc--; argv++;
- if (_bot_obj_setup(gb, argv[0]) == GED_ERROR) {
+ if (_bot_obj_setup(gb, argv[0]) & GED_ERROR) {
return GED_ERROR;
}
Modified: brlcad/trunk/src/libged/clone/clone.c
===================================================================
--- brlcad/trunk/src/libged/clone/clone.c 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/clone/clone.c 2020-08-02 20:15:01 UTC (rev
76646)
@@ -1006,7 +1006,7 @@
}
/* validate user options */
- if (get_args(gedp, argc, (char **)argv, &state) == GED_ERROR)
+ if (get_args(gedp, argc, (char **)argv, &state) & GED_ERROR)
return GED_ERROR;
bu_vls_init(&state.olist);
Modified: brlcad/trunk/src/libged/comb/comb.c
===================================================================
--- brlcad/trunk/src/libged/comb/comb.c 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/src/libged/comb/comb.c 2020-08-02 20:15:01 UTC (rev 76646)
@@ -169,7 +169,7 @@
bu_vls_free(&orig_name);
return GED_ERROR;
}
- if (region_flag_clear(gedp, new_dp) == GED_ERROR) {
+ if (region_flag_clear(gedp, new_dp) & GED_ERROR) {
bu_vls_free(&comb_child_name);
bu_vls_free(&orig_name);
return GED_ERROR;
Modified: brlcad/trunk/src/libged/comb_std/comb_std.c
===================================================================
--- brlcad/trunk/src/libged/comb_std/comb_std.c 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/comb_std/comb_std.c 2020-08-02 20:15:01 UTC (rev
76646)
@@ -561,7 +561,7 @@
if (last_tok == TOK_RPAREN) {
/* next token MUST be an operator */
- if (add_operator(gedp, &tok_hd.l, ptr, &last_tok) == GED_ERROR)
{
+ if (add_operator(gedp, &tok_hd.l, ptr, &last_tok) & GED_ERROR) {
free_tokens(&tok_hd.l);
return GED_ERROR;
}
Modified: brlcad/trunk/src/libged/copymat/copymat.c
===================================================================
--- brlcad/trunk/src/libged/copymat/copymat.c 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/copymat/copymat.c 2020-08-02 20:15:01 UTC (rev
76646)
@@ -150,7 +150,7 @@
wrapup:
bu_vls_free(&pvls);
- if (status == GED_ERROR)
+ if (status & GED_ERROR)
rt_db_free_internal(&intern);
return status;
}
Modified: brlcad/trunk/src/libged/display_list.c
===================================================================
--- brlcad/trunk/src/libged/display_list.c 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/display_list.c 2020-08-02 20:15:01 UTC (rev
76646)
@@ -34,6 +34,7 @@
#include "bn/plot3.h"
#include "rt/solid.h"
+#include "ged.h"
#include "./ged_private.h"
/* defined in draw_calc.cpp */
@@ -203,10 +204,11 @@
*
*/
void
-dl_erasePathFromDisplay(struct bu_list *hdlp,
- struct db_i *dbip, void (*callback)(unsigned int, int),
- const char *path, int allow_split, struct solid *freesolid)
+dl_erasePathFromDisplay(struct ged *gedp, const char *path, int allow_split)
{
+ struct bu_list *hdlp = gedp->ged_gdp->gd_headDisplay;
+ struct db_i *dbip = gedp->ged_wdbp->dbip;
+ struct solid *freesolid = gedp->freesolid;
struct display_list *gdlp;
struct display_list *next_gdlp;
struct display_list *last_gdlp;
@@ -226,11 +228,11 @@
next_gdlp = BU_LIST_PNEXT(display_list, gdlp);
if (BU_STR_EQUAL(path, bu_vls_addr(&gdlp->dl_path))) {
- if (callback != GED_FREE_VLIST_CALLBACK_PTR_NULL) {
+ if (gedp->ged_destroy_vlist_callback !=
GED_DESTROY_VLIST_FUNC_NULL) {
/* We can't assume the display lists are contiguous */
FOR_ALL_SOLIDS(sp, &gdlp->dl_headSolid) {
- (*callback)(BU_LIST_FIRST(solid,
&gdlp->dl_headSolid)->s_dlist, 1);
+ ged_destroy_vlist_cb(gedp, BU_LIST_FIRST(solid,
&gdlp->dl_headSolid)->s_dlist, 1);
}
}
@@ -262,8 +264,7 @@
nsp = BU_LIST_PNEXT(solid, sp);
if (db_full_path_match_top(&subpath, &sp->s_fullpath)) {
- if (callback != GED_FREE_VLIST_CALLBACK_PTR_NULL)
- (*callback)(sp->s_dlist, 1);
+ ged_destroy_vlist_cb(gedp, sp->s_dlist, 1);
BU_LIST_DEQUEUE(&sp->l);
FREE_SOLID(sp, &freesolid->l);
@@ -302,21 +303,19 @@
HIDDEN void
-eraseAllSubpathsFromSolidList(struct display_list *gdlp,
+eraseAllSubpathsFromSolidList(struct ged *gedp, struct display_list *gdlp,
struct db_full_path *subpath,
- void (*callback)(unsigned int, int),
- const int skip_first, struct solid *freesolid)
+ const int skip_first)
{
struct solid *sp;
struct solid *nsp;
+ struct solid *freesolid = gedp->freesolid;
sp = BU_LIST_NEXT(solid, &gdlp->dl_headSolid);
while (BU_LIST_NOT_HEAD(sp, &gdlp->dl_headSolid)) {
nsp = BU_LIST_PNEXT(solid, sp);
if (db_full_path_subset(&sp->s_fullpath, subpath, skip_first)) {
- if (callback != GED_FREE_VLIST_CALLBACK_PTR_NULL)
- (*callback)(sp->s_dlist, 1);
-
+ ged_destroy_vlist_cb(gedp, sp->s_dlist, 1);
BU_LIST_DEQUEUE(&sp->l);
FREE_SOLID(sp, &freesolid->l);
}
@@ -333,9 +332,10 @@
*
*/
void
-_dl_eraseAllNamesFromDisplay(struct bu_list *hdlp, struct db_i *dbip,
- void (*callback)(unsigned int, int), const char *name, const
int skip_first, struct solid *freesolid)
+_dl_eraseAllNamesFromDisplay(struct ged *gedp, const char *name, const int
skip_first)
{
+ struct bu_list *hdlp = gedp->ged_gdp->gd_headDisplay;
+ struct db_i *dbip = gedp->ged_wdbp->dbip;
struct display_list *gdlp;
struct display_list *next_gdlp;
@@ -361,7 +361,7 @@
}
if (BU_STR_EQUAL(tok, name)) {
- _dl_freeDisplayListItem(dbip, callback, gdlp, freesolid);
+ _dl_freeDisplayListItem(gedp, gdlp);
found = 1;
break;
@@ -375,7 +375,7 @@
struct db_full_path subpath;
if (db_string_to_path(&subpath, dbip, name) == 0) {
- eraseAllSubpathsFromSolidList(gdlp, &subpath, callback,
skip_first, freesolid);
+ eraseAllSubpathsFromSolidList(gedp, gdlp, &subpath, skip_first);
db_free_full_path(&subpath);
}
}
@@ -387,12 +387,14 @@
int
-_dl_eraseFirstSubpath(struct bu_list *hdlp, struct db_i *dbip,
- void (*callback)(unsigned int, int),
+_dl_eraseFirstSubpath(struct ged *gedp,
struct display_list *gdlp,
struct db_full_path *subpath,
- const int skip_first, struct solid *freesolid)
+ const int skip_first)
{
+ struct bu_list *hdlp = gedp->ged_gdp->gd_headDisplay;
+ struct db_i *dbip = gedp->ged_wdbp->dbip;
+ struct solid *freesolid = gedp->freesolid;
struct solid *sp;
struct solid *nsp;
struct db_full_path dup_path;
@@ -406,8 +408,7 @@
int ret;
int full_len = sp->s_fullpath.fp_len;
- if (callback != GED_FREE_VLIST_CALLBACK_PTR_NULL)
- (*callback)(sp->s_dlist, 1);
+ ged_destroy_vlist_cb(gedp, sp->s_dlist, 1);
sp->s_fullpath.fp_len = full_len - 1;
db_dup_full_path(&dup_path, &sp->s_fullpath);
@@ -438,15 +439,13 @@
* Erase/remove display list item from headDisplay if path is a subset of
item's path.
*/
void
-_dl_eraseAllPathsFromDisplay(struct bu_list *hdlp, struct db_i *dbip,
- void (*callback)(unsigned int, int),
- const char *path,
- const int skip_first,
- struct solid *freesolid)
+_dl_eraseAllPathsFromDisplay(struct ged *gedp, const char *path, const int
skip_first)
{
struct display_list *gdlp;
struct display_list *next_gdlp;
struct db_full_path fullpath, subpath;
+ struct bu_list *hdlp = gedp->ged_gdp->gd_headDisplay;
+ struct db_i *dbip = gedp->ged_wdbp->dbip;
if (db_string_to_path(&subpath, dbip, path) == 0) {
gdlp = BU_LIST_NEXT(display_list, hdlp);
@@ -470,8 +469,8 @@
if (db_string_to_path(&fullpath, dbip, bu_vls_addr(&gdlp->dl_path))
== 0) {
if (db_full_path_subset(&fullpath, &subpath, skip_first)) {
- _dl_freeDisplayListItem(dbip, callback, gdlp, freesolid);
- } else if (_dl_eraseFirstSubpath(hdlp, dbip, callback, gdlp,
&subpath, skip_first, freesolid)) {
+ _dl_freeDisplayListItem(gedp, gdlp);
+ } else if (_dl_eraseFirstSubpath(gedp, gdlp, &subpath,
skip_first)) {
gdlp = BU_LIST_NEXT(display_list, hdlp);
db_free_full_path(&fullpath);
continue;
@@ -489,18 +488,18 @@
void
-_dl_freeDisplayListItem (struct db_i *dbip,
- void (*callback)(unsigned int, int),
- struct display_list *gdlp, struct solid *freesolid)
+_dl_freeDisplayListItem (struct ged *gedp, struct display_list *gdlp)
{
+ struct db_i *dbip = gedp->ged_wdbp->dbip;
+ struct solid *freesolid = gedp->freesolid;
struct solid *sp;
struct directory *dp;
- if (callback != GED_FREE_VLIST_CALLBACK_PTR_NULL) {
+ if (gedp->ged_destroy_vlist_callback != GED_DESTROY_VLIST_FUNC_NULL) {
/* We can't assume the display lists are contiguous */
FOR_ALL_SOLIDS(sp, &gdlp->dl_headSolid) {
- (*callback)(BU_LIST_FIRST(solid, &gdlp->dl_headSolid)->s_dlist, 1);
+ ged_destroy_vlist_cb(gedp, BU_LIST_FIRST(solid,
&gdlp->dl_headSolid)->s_dlist, 1);
}
}
@@ -668,10 +667,10 @@
}
void
-dl_add_path(struct display_list *gdlp, int dashflag, fastf_t transparency, int
dmode, int hiddenLine, struct bu_list *vhead, const struct db_full_path *pathp,
struct db_tree_state *tsp, unsigned char *wireframe_color_override, void
(*callback)(struct solid *sp), struct solid *freesolid)
+dl_add_path(int dashflag, struct bu_list *vhead, const struct db_full_path
*pathp, struct db_tree_state *tsp, unsigned char *wireframe_color_override,
struct _ged_client_data *dgcdp)
{
struct solid *sp;
- GET_SOLID(sp, &freesolid->l);
+ GET_SOLID(sp, &dgcdp->freesolid->l);
solid_append_vlist(sp, (struct bn_vlist *)vhead);
@@ -691,23 +690,19 @@
solid_set_color_info(sp, wireframe_color_override, tsp);
sp->s_dlist = 0;
- sp->s_transparency = transparency;
- sp->s_dmode = dmode;
- sp->s_hiddenLine = hiddenLine;
+ sp->s_transparency = dgcdp->transparency;
+ sp->s_dmode = dgcdp->dmode;
+ sp->s_hiddenLine = dgcdp->hiddenLine;
/* append solid to display list */
bu_semaphore_acquire(RT_SEM_MODEL);
- BU_LIST_APPEND(gdlp->dl_headSolid.back, &sp->l);
+ BU_LIST_APPEND(dgcdp->gdlp->dl_headSolid.back, &sp->l);
bu_semaphore_release(RT_SEM_MODEL);
- if (callback != GED_CREATE_VLIST_SOLID_CALLBACK_PTR_NULL) {
- (*callback)(sp);
- }
+ ged_create_vlist_solid_cb(dgcdp->gedp, sp);
}
-
-
static fastf_t
view_avg_size(struct bview *gvp)
{
@@ -932,8 +927,11 @@
int
-dl_redraw(struct display_list *gdlp, struct db_i *dbip, struct db_tree_state
*tsp, struct bview *gvp, void (*callback)(struct display_list *), int
skip_subtractions)
+dl_redraw(struct display_list *gdlp, struct ged *gedp, int skip_subtractions)
{
+ struct db_i *dbip = gedp->ged_wdbp->dbip;
+ struct db_tree_state *tsp = &gedp->ged_wdbp->wdb_initial_tree_state;
+ struct bview *gvp = gedp->ged_gvp;
int ret = 0;
struct solid *sp;
for (BU_LIST_FOR(sp, solid, &gdlp->dl_headSolid)) {
@@ -941,8 +939,7 @@
ret += redraw_solid(sp, dbip, tsp, gvp);
}
}
- if (callback != GED_CREATE_VLIST_CALLBACK_PTR_NULL)
- (*callback)(gdlp);
+ ged_create_vlist_display_list_cb(gedp, gdlp);
return ret;
}
@@ -956,7 +953,7 @@
point_t min, max;
struct solid *sp;
union tree *curtree;
- struct bview_client_data *bview_data = (struct bview_client_data
*)client_data;
+ struct bview_solid_data *bview_data = (struct bview_solid_data
*)client_data;
RT_CK_DB_INTERNAL(ip);
BG_CK_TESS_TOL(tsp->ts_ttol);
@@ -1124,11 +1121,12 @@
sp->s_vlen = bn_vlist_cmd_cnt((struct bn_vlist *)(&(sp->s_vlist)));
}
-int invent_solid(struct bu_list *hdlp, struct db_i *dbip,
- void (*callback_create)(struct solid *), void
(*callback_free)(unsigned int, int),
- char *name, struct bu_list *vhead, long int rgb, int copy,
fastf_t transparency, int dmode,
- struct solid *freesolid, int csoltab)
+int invent_solid(struct ged *gedp, char *name, struct bu_list *vhead, long int
rgb, int copy,
+ fastf_t transparency, int dmode, int csoltab)
{
+ struct bu_list *hdlp = gedp->ged_gdp->gd_headDisplay;
+ struct db_i *dbip = gedp->ged_wdbp->dbip;
+ struct solid *freesolid = gedp->freesolid;
struct directory *dp;
struct solid *sp;
struct display_list *gdlp;
@@ -1147,7 +1145,7 @@
* Name exists from some other overlay,
* zap any associated solids
*/
- dl_erasePathFromDisplay(hdlp, dbip, callback_free, name, 0, freesolid);
+ dl_erasePathFromDisplay(gedp, name, 0);
}
/* Need to enter phony name in directory structure */
dp = db_diradd(dbip, name, RT_DIR_PHONY_ADDR, 0, RT_DIR_SOLID, (void
*)&type);
@@ -1191,8 +1189,7 @@
if (csoltab)
color_soltab(sp);
- if (callback_create != GED_CREATE_VLIST_SOLID_CALLBACK_PTR_NULL)
- (*callback_create)(sp);
+ ged_create_vlist_solid_cb(gedp, sp);
return 0; /* OK */
@@ -1279,8 +1276,10 @@
}
void
-dl_zap(struct bu_list *hdlp, struct db_i *dbip, void (*callback)(unsigned int,
int), struct solid *freesolid)
+dl_zap(struct ged *gedp, struct solid *freesolid)
{
+ struct bu_list *hdlp = gedp->ged_gdp->gd_headDisplay;
+ struct db_i *dbip = gedp->ged_wdbp->dbip;
struct solid *sp = SOLID_NULL;
struct display_list *gdlp = NULL;
struct bu_ptbl dls = BU_PTBL_INIT_ZERO;
@@ -1289,8 +1288,8 @@
while (BU_LIST_WHILE(gdlp, display_list, hdlp)) {
- if (callback != GED_FREE_VLIST_CALLBACK_PTR_NULL &&
BU_LIST_NON_EMPTY(&gdlp->dl_headSolid))
- (*callback)(BU_LIST_FIRST(solid, &gdlp->dl_headSolid)->s_dlist,
+ if (BU_LIST_NON_EMPTY(&gdlp->dl_headSolid))
+ ged_destroy_vlist_cb(gedp, BU_LIST_FIRST(solid,
&gdlp->dl_headSolid)->s_dlist,
BU_LIST_LAST(solid, &gdlp->dl_headSolid)->s_dlist -
BU_LIST_FIRST(solid, &gdlp->dl_headSolid)->s_dlist + 1);
@@ -2452,8 +2451,9 @@
void
-dl_set_transparency(struct bu_list *hdlp, struct directory **dpp, double
transparency, void (*callback)(struct display_list *))
+dl_set_transparency(struct ged *gedp, struct directory **dpp, double
transparency)
{
+ struct bu_list *hdlp = gedp->ged_gdp->gd_headDisplay;
struct display_list *gdlp;
struct display_list *next_gdlp;
struct solid *sp;
@@ -2480,8 +2480,7 @@
}
- if (callback != GED_CREATE_VLIST_CALLBACK_PTR_NULL)
- (*callback)(gdlp);
+ ged_create_vlist_display_list_cb(gedp, gdlp);
gdlp = next_gdlp;
}
Modified: brlcad/trunk/src/libged/draw/draw.c
===================================================================
--- brlcad/trunk/src/libged/draw/draw.c 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/src/libged/draw/draw.c 2020-08-02 20:15:01 UTC (rev 76646)
@@ -848,7 +848,7 @@
/* create solids */
for (i = 0; i < argc; ++i) {
- struct bview_client_data bview_data;
+ struct bview_solid_data bview_data;
bview_data.draw_solid_lines_only =
dgcdp.draw_solid_lines_only;
bview_data.wireframe_color_override =
dgcdp.wireframe_color_override;
bview_data.wireframe_color[0]= dgcdp.wireframe_color[0];
@@ -903,7 +903,7 @@
continue;
}
- ret = dl_redraw(gdlp, gedp->ged_wdbp->dbip,
&gedp->ged_wdbp->wdb_initial_tree_state, gedp->ged_gvp,
gedp->ged_create_vlist_callback, dgcdp.draw_non_subtract_only);
+ ret = dl_redraw(gdlp, gedp, dgcdp.draw_non_subtract_only);
if (ret < 0) {
/* restore view bot threshold */
if (gedp && gedp->ged_gvp)
gedp->ged_gvp->gv_bot_threshold = threshold_cached;
@@ -1134,7 +1134,7 @@
continue;
}
- dl_erasePathFromDisplay(gedp->ged_gdp->gd_headDisplay,
gedp->ged_wdbp->dbip, gedp->ged_free_vlist_callback, new_argv[i], 0,
gedp->freesolid);
+ dl_erasePathFromDisplay(gedp, new_argv[i], 0);
}
drawtrees_retval = _ged_drawtrees(gedp, new_argc, (const char
**)new_argv, kind, (struct _ged_client_data *)0);
@@ -1168,7 +1168,7 @@
continue;
}
- dl_erasePathFromDisplay(gedp->ged_gdp->gd_headDisplay,
gedp->ged_wdbp->dbip, gedp->ged_free_vlist_callback, argv[i], 0,
gedp->freesolid);
+ dl_erasePathFromDisplay(gedp, argv[i], 0);
}
/* if our display is non-empty add -R to keep current view */
@@ -1246,7 +1246,7 @@
/* redraw everything */
for (BU_LIST_FOR(gdlp, display_list, gedp->ged_gdp->gd_headDisplay))
{
- ret = dl_redraw(gdlp, gedp->ged_wdbp->dbip,
&gedp->ged_wdbp->wdb_initial_tree_state, gedp->ged_gvp,
gedp->ged_create_vlist_callback, 0);
+ ret = dl_redraw(gdlp, gedp, 0);
if (ret < 0) {
bu_vls_printf(gedp->ged_result_str, "%s: redraw failure\n",
argv[0]);
return GED_ERROR;
@@ -1282,7 +1282,7 @@
found_path = 1;
db_free_full_path(&dl_path);
- ret = dl_redraw(gdlp, gedp->ged_wdbp->dbip,
&gedp->ged_wdbp->wdb_initial_tree_state, gedp->ged_gvp,
gedp->ged_create_vlist_callback, 0);
+ ret = dl_redraw(gdlp, gedp, 0);
if (ret < 0) {
bu_vls_printf(gedp->ged_result_str,
"%s: %s redraw failure\n", argv[0], argv[i]);
Modified: brlcad/trunk/src/libged/draw/preview.c
===================================================================
--- brlcad/trunk/src/libged/draw/preview.c 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/draw/preview.c 2020-08-02 20:15:01 UTC (rev
76646)
@@ -146,8 +146,7 @@
_ged_drawtrees(_ged_current_gedp,
_ged_current_gedp->ged_gdp->gd_rt_cmd_len, (const char
**)&_ged_current_gedp->ged_gdp->gd_rt_cmd[1], preview_mode, (struct
_ged_client_data *)0);
}
- if (_ged_current_gedp->ged_refresh_handler !=
GED_REFRESH_CALLBACK_PTR_NULL)
-
(*_ged_current_gedp->ged_refresh_handler)(_ged_current_gedp->ged_refresh_clientdata);
+ ged_refresh_cb(_ged_current_gedp);
if (preview_delay > 0) {
struct timeval tv;
Modified: brlcad/trunk/src/libged/edcodes/edcodes.c
===================================================================
--- brlcad/trunk/src/libged/edcodes/edcodes.c 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/edcodes/edcodes.c 2020-08-02 20:15:01 UTC (rev
76646)
@@ -227,7 +227,7 @@
(void)fclose(fp);
- if (ged_wcodes(gedp, argc + 1, (const char **)av) == GED_ERROR) {
+ if (ged_wcodes(gedp, argc + 1, (const char **)av) & GED_ERROR) {
bu_file_delete(tmpfil);
bu_free((void *)av, "ged_edcodes_core av");
return GED_ERROR;
Modified: brlcad/trunk/src/libged/edit/edit.c
===================================================================
--- brlcad/trunk/src/libged/edit/edit.c 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/src/libged/edit/edit.c 2020-08-02 20:15:01 UTC (rev 76646)
@@ -778,7 +778,7 @@
point_t rpp_max;
size_t i;
- if (ged_path_validate(gedp, path) == GED_ERROR) {
+ if (ged_path_validate(gedp, path) & GED_ERROR) {
bu_vls_printf(gedp->ged_result_str, "path \"%s\" does not exist in"
"the database", db_path_to_string(path));
return GED_ERROR;
Modified: brlcad/trunk/src/libged/edmater/edmater.c
===================================================================
--- brlcad/trunk/src/libged/edmater/edmater.c 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/edmater/edmater.c 2020-08-02 20:15:01 UTC (rev
76646)
@@ -91,7 +91,7 @@
(void)fclose(fp);
- if (ged_wmater(gedp, argc, av) == GED_ERROR) {
+ if (ged_wmater(gedp, argc, av) & GED_ERROR) {
bu_file_delete(tmpfil);
bu_free((void *)av, "f_edmater: av");
return GED_ERROR;
Modified: brlcad/trunk/src/libged/erase/erase.c
===================================================================
--- brlcad/trunk/src/libged/erase/erase.c 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/erase/erase.c 2020-08-02 20:15:01 UTC (rev
76646)
@@ -74,7 +74,7 @@
if (strchr(argv[i], 'r')) {
for (i = 1; i < (size_t)argc; ++i)
- _dl_eraseAllPathsFromDisplay(gedp->ged_gdp->gd_headDisplay,
gedp->ged_wdbp->dbip, gedp->ged_free_vlist_callback, argv[i], 0,
gedp->freesolid);
+ _dl_eraseAllPathsFromDisplay(gedp, argv[i], 0);
return GED_OK;
}
@@ -166,11 +166,11 @@
if (new_argv[i][0] == '-')
continue;
- dl_erasePathFromDisplay(gedp->ged_gdp->gd_headDisplay,
gedp->ged_wdbp->dbip, gedp->ged_free_vlist_callback, new_argv[i], 1,
gedp->freesolid);
+ dl_erasePathFromDisplay(gedp, new_argv[i], 1);
}
} else {
for (i = 0; i < (size_t)argc; ++i)
- dl_erasePathFromDisplay(gedp->ged_gdp->gd_headDisplay,
gedp->ged_wdbp->dbip, gedp->ged_free_vlist_callback, argv[i], 1,
gedp->freesolid);
+ dl_erasePathFromDisplay(gedp, argv[i], 1);
}
return GED_OK;
Deleted: brlcad/trunk/src/libged/exec.cpp
===================================================================
--- brlcad/trunk/src/libged/exec.cpp 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/src/libged/exec.cpp 2020-08-02 20:15:01 UTC (rev 76646)
@@ -1,95 +0,0 @@
-/* E X E C . C P P
- * BRL-CAD
- *
- * Copyright (c) 2020 United States Government as represented by
- * the U.S. Army Research Laboratory.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * version 2.1 as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this file; see the file named COPYING for more
- * information.
- */
-/** @file exec.cpp
- *
- * Brief description
- *
- */
-
-#include "common.h"
-
-#include <map>
-#include <string>
-
-#include "bu/time.h"
-#include "ged.h"
-#include "./include/plugin.h"
-
-extern "C" int
-ged_exec(struct ged *gedp, int argc, const char *argv[]) {
- if (!gedp || !argc || !argv) {
- return GED_ERROR;
- }
-
- double start = 0.0;
- const char *tstr = getenv("GED_EXEC_TIME");
- if (tstr) {
- start = bu_gettime();
- }
-
- // TODO - right now this is the map from the libged load - should probably
- // use this to initialize a struct ged copy when ged_init is called, so
- // client codes can add their own commands to their gedp...
- //
- // The ged_cmds map should always reflect the original, vanilla state of
- // libged's command set so we have a clean fallback available if we ever
- // need it to fall back on/recover with.
- std::map<std::string, const struct ged_cmd *> *cmap =
(std::map<std::string, const struct ged_cmd *> *)ged_cmds;
- std::string key(argv[0]);
- std::map<std::string, const struct ged_cmd *>::iterator c_it =
cmap->find(key);
- if (c_it == cmap->end()) {
- bu_vls_printf(gedp->ged_result_str, "unknown command: %s", argv[0]);
- return (GED_ERROR | GED_UNKNOWN);
- }
-
- const struct ged_cmd *cmd = c_it->second;
-
- // TODO - if interactive command via cmd->i->interactive, don't execute
- // unless we have the necessary callbacks defined in gedp
-
- int cret = (*cmd->i->cmd)(gedp, argc, argv);
-
- if (tstr) {
- bu_log("%s time: %g\n", argv[0], (bu_gettime() - start)/1e6);
- }
-
- // TODO - for the moment these are the hardcoded default opts. Eventually
- // an opts var should be added to struct ged, and each exec call will set
- // the gedp->opts value to the command defaults. Then the command option
handling
- // will be able to alter the flags if desired (for example, a flag to
suppress
- // autoview behavior will simply remove the flag from gedp->opts.
- if (cmd->i->opts & GED_CMD_UPDATE_VIEW) {
- // Do update view callback
- if (gedp->ged_refresh_handler) {
- (*gedp->ged_refresh_handler)(gedp->ged_refresh_clientdata);
- }
- }
-
- return cret;
-}
-
-// Local Variables:
-// tab-width: 8
-// mode: C++
-// c-basic-offset: 4
-// indent-tabs-mode: t
-// c-file-style: "stroustrup"
-// End:
-// ex: shiftwidth=4 tabstop=8
Copied: brlcad/trunk/src/libged/exec.cpp (from rev 76506,
brlcad/branches/bioh/src/libged/exec.cpp)
===================================================================
--- brlcad/trunk/src/libged/exec.cpp (rev 0)
+++ brlcad/trunk/src/libged/exec.cpp 2020-08-02 20:15:01 UTC (rev 76646)
@@ -0,0 +1,83 @@
+/* E X E C . C P P
+ * BRL-CAD
+ *
+ * Copyright (c) 2020 United States Government as represented by
+ * the U.S. Army Research Laboratory.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this file; see the file named COPYING for more
+ * information.
+ */
+/** @file exec.cpp
+ *
+ * Brief description
+ *
+ */
+
+#include "common.h"
+
+#include <map>
+#include <string>
+
+#include "bu/time.h"
+#include "ged.h"
+#include "./include/plugin.h"
+
+extern "C" int
+ged_exec(struct ged *gedp, int argc, const char *argv[]) {
+ if (!gedp || !argc || !argv) {
+ return GED_ERROR;
+ }
+
+ double start = 0.0;
+ const char *tstr = getenv("GED_EXEC_TIME");
+ if (tstr) {
+ start = bu_gettime();
+ }
+
+ // TODO - right now this is the map from the libged load - should probably
+ // use this to initialize a struct ged copy when ged_init is called, so
+ // client codes can add their own commands to their gedp...
+ //
+ // The ged_cmds map should always reflect the original, vanilla state of
+ // libged's command set so we have a clean fallback available if we ever
+ // need it to fall back on/recover with.
+ std::map<std::string, const struct ged_cmd *> *cmap =
(std::map<std::string, const struct ged_cmd *> *)ged_cmds;
+ std::string key(argv[0]);
+ std::map<std::string, const struct ged_cmd *>::iterator c_it =
cmap->find(key);
+ if (c_it == cmap->end()) {
+ bu_vls_printf(gedp->ged_result_str, "unknown command: %s", argv[0]);
+ return (GED_ERROR | GED_UNKNOWN);
+ }
+
+ const struct ged_cmd *cmd = c_it->second;
+
+ // TODO - if interactive command via cmd->i->interactive, don't execute
+ // unless we have the necessary callbacks defined in gedp
+
+ int cret = (*cmd->i->cmd)(gedp, argc, argv);
+
+ if (tstr) {
+ bu_log("%s time: %g\n", argv[0], (bu_gettime() - start)/1e6);
+ }
+
+ return cret;
+}
+
+// Local Variables:
+// tab-width: 8
+// mode: C++
+// c-basic-offset: 4
+// indent-tabs-mode: t
+// c-file-style: "stroustrup"
+// End:
+// ex: shiftwidth=4 tabstop=8
Modified: brlcad/trunk/src/libged/facetize/facetize.cpp
===================================================================
--- brlcad/trunk/src/libged/facetize/facetize.cpp 2020-08-02 19:53:00 UTC
(rev 76645)
+++ brlcad/trunk/src/libged/facetize/facetize.cpp 2020-08-02 20:15:01 UTC
(rev 76646)
@@ -938,7 +938,7 @@
bu_vls_printf(&tmpname, "-0");
bu_vls_incr(&tmpname, NULL, NULL, &_db_uniq_test, (void *)gedp);
}
- if (_write_bot(gedp, tbot, bu_vls_addr(&tmpname), opts) == GED_ERROR) {
+ if (_write_bot(gedp, tbot, bu_vls_addr(&tmpname), opts) & GED_ERROR) {
bu_log("SPSR: could not write BoT to temporary name %s\n",
bu_vls_addr(&tmpname));
bu_vls_free(&tmpname);
ret = GED_FACETIZE_FAILURE;
Modified: brlcad/trunk/src/libged/gdiff/gdiff.c
===================================================================
--- brlcad/trunk/src/libged/gdiff/gdiff.c 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/gdiff/gdiff.c 2020-08-02 20:15:01 UTC (rev
76646)
@@ -177,11 +177,11 @@
/* Clear any previous diff drawing */
if (db_lookup(gedp->ged_wdbp->dbip, "diff_visualff", LOOKUP_QUIET)
!= RT_DIR_NULL)
- dl_erasePathFromDisplay(gedp->ged_gdp->gd_headDisplay,
gedp->ged_wdbp->dbip, gedp->ged_free_vlist_callback, "diff_visualff", 1,
gedp->freesolid);
+ dl_erasePathFromDisplay(gedp, "diff_visualff", 1);
if (db_lookup(gedp->ged_wdbp->dbip, "diff_visualff0000",
LOOKUP_QUIET) != RT_DIR_NULL)
- dl_erasePathFromDisplay(gedp->ged_gdp->gd_headDisplay,
gedp->ged_wdbp->dbip, gedp->ged_free_vlist_callback, "diff_visualff0000", 1,
gedp->freesolid);
+ dl_erasePathFromDisplay(gedp, "diff_visualff0000", 1);
if (db_lookup(gedp->ged_wdbp->dbip, "diff_visualffffff",
LOOKUP_QUIET) != RT_DIR_NULL)
- dl_erasePathFromDisplay(gedp->ged_gdp->gd_headDisplay,
gedp->ged_wdbp->dbip, gedp->ged_free_vlist_callback, "diff_visualffffff", 1,
gedp->freesolid);
+ dl_erasePathFromDisplay(gedp, "diff_visualffffff", 1);
/* Draw left-only lines */
if (view_left) {
Modified: brlcad/trunk/src/libged/ged.c
===================================================================
--- brlcad/trunk/src/libged/ged.c 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/src/libged/ged.c 2020-08-02 20:15:01 UTC (rev 76646)
@@ -86,13 +86,16 @@
/* Terminate any ged subprocesses */
if (gedp != GED_NULL) {
- struct ged_subprocess *rrp;
- for (BU_LIST_FOR(rrp, ged_subprocess, &gedp->gd_headSubprocess.l)) {
+ for (size_t i = 0; i < BU_PTBL_LEN(&gedp->ged_subp); i++) {
+ struct ged_subprocess *rrp = (struct ged_subprocess
*)BU_PTBL_GET(&gedp->ged_subp, i);
if (!rrp->aborted) {
bu_terminate(bu_process_pid(rrp->p));
rrp->aborted = 1;
}
+ bu_ptbl_rm(&gedp->ged_subp, (long *)rrp);
+ BU_PUT(rrp, struct ged_subprocess);
}
+ bu_ptbl_reset(&gedp->ged_subp);
}
ged_free(gedp);
@@ -154,7 +157,38 @@
gedp->ged_wdbp = RT_WDB_NULL;
+ bu_vls_free(&gedp->go_name);
+
+ // Note - it is the caller's responsibility to have freed any data
+ // associated with the ged or its views in the u_data pointers.
+ //
+ // Since libged does not link libdm, it's also the responsibility of the
+ // caller to close any display managers associated with the view.
+ struct bview *gdvp;
+ for (size_t i = 0; i < BU_PTBL_LEN(&gedp->ged_views); i++) {
+ gdvp = (struct bview *)BU_PTBL_GET(&gedp->ged_views, i);
+ bu_vls_free(&gdvp->gv_name);
+ bu_ptbl_free(gdvp->callbacks);
+ BU_PUT(gdvp->callbacks, struct bu_ptbl);
+ bu_free((void *)gdvp, "bview");
+ }
+ bu_ptbl_free(&gedp->ged_views);
+
if (gedp->ged_gdp != GED_DRAWABLE_NULL) {
+
+ for (size_t i = 0; i < BU_PTBL_LEN(&gedp->free_solids); i++) {
+ // TODO - FREE_SOLID macro is stashing on the freesolid list, not
+ // BU_PUT-ing the solid objects themselves - is that what we expect
+ // when doing ged_free? I.e., is ownership of the free solid list
+ // with the struct ged or with the application as a whole? We're
+ // BU_PUT-ing gedp->freesolid - above why just that one?
+#if 0
+ struct solid *sp = (struct solid *)BU_PTBL_GET(&gedp->free_solids,
i);
+ RT_FREE_VLIST(&(sp->s_vlist));
+#endif
+ }
+ bu_ptbl_free(&gedp->free_solids);
+
if (gedp->ged_gdp->gd_headDisplay)
BU_PUT(gedp->ged_gdp->gd_headDisplay, struct bu_vls);
if (gedp->ged_gdp->gd_headVDraw)
@@ -178,6 +212,7 @@
BU_PUT(gedp->ged_result_str, struct bu_vls);
}
+ // TODO - replace freesolid with free_solids ptbl
{
struct solid *nsp;
sp = BU_LIST_NEXT(solid, &gedp->freesolid->l);
@@ -193,19 +228,24 @@
free_object_selections(gedp->ged_selections);
bu_hash_destroy(gedp->ged_selections);
+ BU_PUT(gedp->ged_cbs, struct ged_callback_state);
+
+ bu_ptbl_free(&gedp->ged_subp);
}
void
ged_init(struct ged *gedp)
{
- struct solid *freesolid;
-
if (gedp == GED_NULL)
return;
- BU_LIST_INIT(&gedp->l);
gedp->ged_wdbp = RT_WDB_NULL;
+ // TODO - rename to ged_name
+ bu_vls_init(&gedp->go_name);
+
+ BU_PTBL_INIT(&gedp->ged_views);
+
BU_GET(gedp->ged_log, struct bu_vls);
bu_vls_init(gedp->ged_log);
@@ -212,7 +252,7 @@
BU_GET(gedp->ged_results, struct ged_results);
(void)_ged_results_init(gedp->ged_results);
- BU_LIST_INIT(&gedp->gd_headSubprocess.l);
+ BU_PTBL_INIT(&gedp->ged_subp);
/* For now, we're keeping the string... will go once no one uses it */
BU_GET(gedp->ged_result_str, struct bu_vls);
@@ -230,19 +270,37 @@
gedp->ged_selections = bu_hash_create(32);
/* init the solid list */
+ struct solid *freesolid;
BU_GET(freesolid, struct solid);
BU_LIST_INIT(&freesolid->l);
gedp->freesolid = freesolid;
- gedp->ged_gdp->gd_freeSolids = freesolid;
- /* (in)sanity */
+ /* TODO: If we're init-ing the list here, does that mean the gedp has
+ * ownership of all solid objects created and stored here, and should we
+ * then free them when ged_free is called? (don't appear to be currently,
+ * just calling FREE_SOLID which doesn't de-allocate... */
+ BU_PTBL_INIT(&gedp->free_solids);
+
+ /* Initialize callbacks */
+ BU_GET(gedp->ged_cbs, struct ged_callback_state);
+ gedp->ged_refresh_handler = NULL;
+ gedp->ged_refresh_clientdata = NULL;
+ gedp->ged_output_handler = NULL;
+ gedp->ged_create_vlist_solid_callback = NULL;
+ gedp->ged_create_vlist_display_list_callback = NULL;
+ gedp->ged_destroy_vlist_callback = NULL;
+ gedp->ged_create_io_handler = NULL;
+ gedp->ged_delete_io_handler = NULL;
+ gedp->ged_io_data = NULL;
+
+ /* Out of the gate we don't have display managers or views */
gedp->ged_gvp = NULL;
gedp->ged_dmp = NULL;
- gedp->ged_refresh_clientdata = NULL;
- gedp->ged_refresh_handler = NULL;
- gedp->ged_output_handler = NULL;
+
+ /* ? */
gedp->ged_output_script = NULL;
gedp->ged_internal_call = 0;
+
}
@@ -252,6 +310,8 @@
if (gvp == GED_VIEW_NULL)
return;
+ gvp->magic = BVIEW_MAGIC;
+
gvp->gv_scale = 500.0;
gvp->gv_size = 2.0 * gvp->gv_scale;
gvp->gv_isize = 1.0 / gvp->gv_size;
@@ -654,6 +714,81 @@
rt_db_free_internal(&intern);
}
+/* Callback wrapper functions */
+
+void
+ged_refresh_cb(struct ged *gedp)
+{
+ if (gedp->ged_refresh_handler != GED_REFRESH_FUNC_NULL) {
+ gedp->ged_cbs->ged_refresh_handler_cnt++;
+ if (gedp->ged_cbs->ged_refresh_handler_cnt > 1) {
+ bu_log("Warning - recursive call of gedp->ged_refresh_handler!\n");
+ }
+ (*gedp->ged_refresh_handler)(gedp->ged_refresh_clientdata);
+ gedp->ged_cbs->ged_refresh_handler_cnt--;
+ }
+}
+
+void
+ged_output_handler_cb(struct ged *gedp, char *str)
+{
+ if (gedp->ged_output_handler != (void (*)(struct ged *, char *))0) {
+ gedp->ged_cbs->ged_output_handler_cnt++;
+ if (gedp->ged_cbs->ged_output_handler_cnt > 1) {
+ bu_log("Warning - recursive call of gedp->ged_output_handler!\n");
+ }
+ (*gedp->ged_output_handler)(gedp, str);
+ gedp->ged_cbs->ged_output_handler_cnt--;
+ }
+}
+
+void
+ged_create_vlist_solid_cb(struct ged *gedp, struct solid *s)
+{
+ if (gedp->ged_create_vlist_solid_callback !=
GED_CREATE_VLIST_SOLID_FUNC_NULL) {
+ gedp->ged_cbs->ged_create_vlist_solid_callback_cnt++;
+ if (gedp->ged_cbs->ged_create_vlist_solid_callback_cnt > 1) {
+ bu_log("Warning - recursive call of
gedp->ged_create_vlist_solid_callback!\n");
+ }
+ (*gedp->ged_create_vlist_solid_callback)(s);
+ gedp->ged_cbs->ged_create_vlist_solid_callback_cnt--;
+ }
+}
+
+void
+ged_create_vlist_display_list_cb(struct ged *gedp, struct display_list *dl)
+{
+ if (gedp->ged_create_vlist_display_list_callback !=
GED_CREATE_VLIST_DISPLAY_LIST_FUNC_NULL) {
+ gedp->ged_cbs->ged_create_vlist_display_list_callback_cnt++;
+ if (gedp->ged_cbs->ged_create_vlist_display_list_callback_cnt > 1) {
+ bu_log("Warning - recursive call of
gedp->ged_create_vlist_callback!\n");
+ }
+ (*gedp->ged_create_vlist_display_list_callback)(dl);
+ gedp->ged_cbs->ged_create_vlist_display_list_callback_cnt--;
+ }
+}
+
+void
+ged_destroy_vlist_cb(struct ged *gedp, unsigned int i, int j)
+{
+ if (gedp->ged_destroy_vlist_callback != GED_DESTROY_VLIST_FUNC_NULL) {
+ gedp->ged_cbs->ged_destroy_vlist_callback_cnt++;
+ if (gedp->ged_cbs->ged_destroy_vlist_callback_cnt > 1) {
+ bu_log("Warning - recursive call of
gedp->ged_destroy_vlist_callback!\n");
+ }
+ (*gedp->ged_destroy_vlist_callback)(i, j);
+ gedp->ged_cbs->ged_destroy_vlist_callback_cnt--;
+ }
+}
+
+#if 0
+int
+ged_io_handler_cb(struct ged *, ged_io_handler_callback_t *cb, void *, int)
+{
+ if (
+}
+#endif
+
/*
* Local Variables:
* mode: C
Modified: brlcad/trunk/src/libged/ged_private.h
===================================================================
--- brlcad/trunk/src/libged/ged_private.h 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/ged_private.h 2020-08-02 20:15:01 UTC (rev
76646)
@@ -82,6 +82,37 @@
/* Default libged column width assumption */
#define GED_TERMINAL_WIDTH 80
+
+/* Callback management related structures */
+#define GED_REFRESH_FUNC_NULL ((ged_refresh_func_t)0)
+#define GED_CREATE_VLIST_SOLID_FUNC_NULL ((ged_create_vlist_solid_func_t)0)
+#define GED_CREATE_VLIST_DISPLAY_LIST_FUNC_NULL
((ged_create_vlist_display_list_func_t)0)
+#define GED_DESTROY_VLIST_FUNC_NULL ((ged_destroy_vlist_func_t)0)
+
+// Private bookkeeping structure used by callback handlers
+struct ged_callback_state {
+ int ged_refresh_handler_cnt;
+ int ged_output_handler_cnt;
+ int ged_create_vlist_solid_callback_cnt;
+ int ged_create_vlist_display_list_callback_cnt;
+ int ged_destroy_vlist_callback_cnt;
+ int ged_io_handler_callback_cnt;
+};
+
+/* These are wrapper functions, that should be called by libged code instead of
+ * the callback pointers supplied by the client (if any). They will do the
boilerplate
+ * bookkeeping and validation required by callbacks.
+ */
+GED_EXPORT extern void ged_refresh_cb(struct ged *);
+GED_EXPORT extern void ged_output_handler_cb(struct ged *, char *);
+GED_EXPORT extern void ged_create_vlist_solid_cb(struct ged *, struct solid *);
+GED_EXPORT extern void ged_create_vlist_display_list_cb(struct ged *, struct
display_list *);
+GED_EXPORT extern void ged_destroy_vlist_cb(struct ged *, unsigned int, int);
+GED_EXPORT extern void ged_io_handler_cb(struct ged *, void *, int);
+
+
+
+
struct _ged_funtab {
char *ft_name;
char *ft_parms;
@@ -181,30 +212,22 @@
int validate);
/* defined in display_list.c */
-GED_EXPORT extern void _dl_eraseAllNamesFromDisplay(struct bu_list *hdlp,
struct db_i *dbip,
- void (*callback)(unsigned int, int),
- const char *name,
- const int skip_first, struct solid
*freesolid);
-GED_EXPORT extern void _dl_eraseAllPathsFromDisplay(struct bu_list *hdlp,
struct db_i *dbip,
- void (*callback)(unsigned int, int),
- const char *path,
- const int skip_first, struct solid
*freesolid);
-extern void _dl_freeDisplayListItem(struct db_i *dbip,
- void (*callback)(unsigned int, int),
- struct display_list *gdlp, struct solid
*freesolid);
+GED_EXPORT extern void _dl_eraseAllNamesFromDisplay(struct ged *gedp, const
char *name, const int skip_first);
+GED_EXPORT extern void _dl_eraseAllPathsFromDisplay(struct ged *gedp, const
char *path, const int skip_first);
+extern void _dl_freeDisplayListItem(struct ged *gedp, struct display_list
*gdlp);
extern int headsolid_splitGDL(struct bu_list *hdlp, struct db_i *dbip, struct
display_list *gdlp, struct db_full_path *path);
GED_EXPORT extern int dl_bounding_sph(struct bu_list *hdlp, vect_t *min,
vect_t *max, int pflag);
/* Returns a bu_ptbl of all solids referenced by the display list */
extern struct bu_ptbl *dl_get_solids(struct display_list *gdlp);
-GED_EXPORT extern void dl_add_path(struct display_list *gdlp, int dashflag,
fastf_t transparency, int dmode, int hiddenLine, struct bu_list *vhead, const
struct db_full_path *pathp, struct db_tree_state *tsp, unsigned char
*wireframe_color_override, void (*callback)(struct solid *), struct solid
*freesolid);
+GED_EXPORT extern void dl_add_path(int dashflag, struct bu_list *vhead, const
struct db_full_path *pathp, struct db_tree_state *tsp, unsigned char
*wireframe_color_override, struct _ged_client_data *dgcdp);
-GED_EXPORT extern int dl_redraw(struct display_list *gdlp, struct db_i *dbip,
struct db_tree_state *tsp, struct bview *gvp, void (*callback)(struct
display_list *), int skip_subtractions);
+GED_EXPORT extern int dl_redraw(struct display_list *gdlp, struct ged *gedp,
int skip_subtractions);
GED_EXPORT extern union tree * append_solid_to_display_list(struct
db_tree_state *tsp, const struct db_full_path *pathp, struct rt_db_internal
*ip, void *client_data);
GED_EXPORT int dl_set_illum(struct display_list *gdlp, const char *obj, int
illum);
GED_EXPORT void dl_set_flag(struct bu_list *hdlp, int flag);
GED_EXPORT void dl_set_wflag(struct bu_list *hdlp, int wflag);
-GED_EXPORT void dl_zap(struct bu_list *hdlp, struct db_i *dbip, void
(*callback)(unsigned int, int), struct solid *freesolid);
+GED_EXPORT void dl_zap(struct ged *gedp, struct solid *freesolid);
GED_EXPORT int dl_how(struct bu_list *hdlp, struct bu_vls *vls, struct
directory **dpp, int both);
GED_EXPORT void dl_plot(struct bu_list *hdlp, FILE *fp, mat_t model2view, int
floating, mat_t center, fastf_t scale, int Three_D, int Z_clip);
GED_EXPORT void dl_png(struct bu_list *hdlp, mat_t model2view, fastf_t
perspective, vect_t eye_pos, size_t size, size_t half_size, unsigned char
**image);
@@ -222,7 +245,7 @@
GED_EXPORT int dl_select(struct bu_list *hdlp, mat_t model2view, struct bu_vls
*vls, double vx, double vy, double vwidth, double vheight, int rflag);
GED_EXPORT int dl_select_partial(struct bu_list *hdlp, mat_t model2view,
struct bu_vls *vls, double vx, double vy, double vwidth, double vheight, int
rflag);
-GED_EXPORT void dl_set_transparency(struct bu_list *hdlp, struct directory
**dpp, double transparency, void (*callback)(struct display_list *));
+GED_EXPORT void dl_set_transparency(struct ged *gedp, struct directory **dpp,
double transparency);
/* defined in draw.c */
GED_EXPORT extern void _ged_cvt_vlblock_to_solids(struct ged *gedp,
@@ -626,6 +649,10 @@
GED_EXPORT extern int ged_view_snap(struct ged *gedp, int argc, const char
*argv[]);
GED_EXPORT extern int ged_view_data_lines(struct ged *gedp, int argc, const
char *argv[]);
+
+GED_EXPORT extern void ged_push_solid(struct ged *gedp, struct solid *sp);
+GED_EXPORT extern struct solid *ged_pop_solid(struct ged *gedp);
+
__END_DECLS
#endif /* LIBGED_GED_PRIVATE_H */
Modified: brlcad/trunk/src/libged/ged_util.c
===================================================================
--- brlcad/trunk/src/libged/ged_util.c 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/src/libged/ged_util.c 2020-08-02 20:15:01 UTC (rev 76646)
@@ -50,6 +50,42 @@
#include "ged.h"
#include "./ged_private.h"
+struct bview *
+ged_find_view(struct ged *gedp, const char *key)
+{
+ struct bview *gdvp = NULL;
+ for (size_t i = 0; i < BU_PTBL_LEN(&gedp->ged_views); i++) {
+ gdvp = (struct bview *)BU_PTBL_GET(&gedp->ged_views, i);
+ if (BU_STR_EQUAL(bu_vls_addr(&gdvp->gv_name), key))
+ break;
+ gdvp = NULL;
+ }
+
+ return gdvp;
+}
+
+void
+ged_push_solid(struct ged *gedp, struct solid *sp)
+{
+ RT_FREE_VLIST(&(sp->s_vlist));
+ sp->s_fullpath.fp_len = 0; // Don't free memory, but implicitly clear
contents
+ bu_ptbl_ins(&gedp->free_solids, (long *)sp);
+}
+
+struct solid *
+ged_pop_solid(struct ged *gedp)
+{
+ struct solid *sp = NULL;
+ if (BU_PTBL_LEN(&gedp->free_solids)) {
+ sp = (struct solid *)BU_PTBL_GET(&gedp->free_solids,
(BU_PTBL_LEN(&gedp->free_solids) - 1));
+ bu_ptbl_rm(&gedp->free_solids, (long *)sp);
+ } else {
+ BU_ALLOC(sp, struct solid); // from GET_SOLID in rt/solid.h
+ db_full_path_init(&(sp)->s_fullpath);
+ }
+ return sp;
+}
+
int
_ged_results_init(struct ged_results *results)
{
@@ -1018,9 +1054,9 @@
wcolor[0] = (unsigned char)dgcdp->wireframe_color[0];
wcolor[1] = (unsigned char)dgcdp->wireframe_color[1];
wcolor[2] = (unsigned char)dgcdp->wireframe_color[2];
- dl_add_path(dgcdp->gdlp, dashflag, dgcdp->transparency, dgcdp->dmode,
dgcdp->hiddenLine, vhead, pathp, tsp, wcolor,
dgcdp->gedp->ged_create_vlist_solid_callback, dgcdp->freesolid);
+ dl_add_path(dashflag, vhead, pathp, tsp, wcolor, dgcdp);
} else {
- dl_add_path(dgcdp->gdlp, dashflag, dgcdp->transparency, dgcdp->dmode,
dgcdp->hiddenLine, vhead, pathp, tsp, NULL,
dgcdp->gedp->ged_create_vlist_solid_callback, dgcdp->freesolid);
+ dl_add_path(dashflag, vhead, pathp, tsp, NULL, dgcdp);
}
}
@@ -1037,7 +1073,7 @@
if (BU_LIST_IS_EMPTY(&(vbp->head[i])))
continue;
snprintf(namebuf, 64, "%s%lx", shortname, vbp->rgb[i]);
- invent_solid(gedp->ged_gdp->gd_headDisplay, gedp->ged_wdbp->dbip,
gedp->ged_create_vlist_solid_callback, gedp->ged_free_vlist_callback, namebuf,
&vbp->head[i], vbp->rgb[i], copy, 1.0, 0, gedp->freesolid, 0);
+ invent_solid(gedp, namebuf, &vbp->head[i], vbp->rgb[i], copy, 1.0, 0,
0);
}
}
@@ -1297,30 +1333,24 @@
}
}
-struct _ged_rt_client_data {
- struct ged_subprocess *rrtp;
- struct ged *gedp;
-};
-
void
_ged_rt_output_handler(void *clientData, int UNUSED(mask))
{
- struct _ged_rt_client_data *drcdp = (struct _ged_rt_client_data
*)clientData;
- struct ged_subprocess *run_rtp;
+ struct ged_subprocess *rrtp = (struct ged_subprocess *)clientData;
int count = 0;
int retcode = 0;
int read_failed = 0;
char line[RT_MAXLINE+1] = {0};
- if (drcdp == (struct _ged_rt_client_data *)NULL ||
- drcdp->gedp == (struct ged *)NULL ||
- drcdp->rrtp == (struct ged_subprocess *)NULL)
+ if ((rrtp == (struct ged_subprocess *)NULL) || (rrtp->gedp == (struct ged
*)NULL))
return;
- run_rtp = drcdp->rrtp;
+ BU_CKMAG(rrtp, GED_CMD_MAGIC, "ged subprocess");
+ struct ged *gedp = rrtp->gedp;
+
/* Get data from rt */
- if (bu_process_read((char *)line, &count, run_rtp->p, BU_PROCESS_STDERR,
RT_MAXLINE) <= 0) {
+ if (bu_process_read((char *)line, &count, rrtp->p, BU_PROCESS_STDERR,
RT_MAXLINE) <= 0) {
read_failed = 1;
}
@@ -1328,14 +1358,14 @@
int aborted;
/* Done watching for output, undo subprocess I/O hooks. */
- if (drcdp->gedp->ged_delete_io_handler) {
- (*drcdp->gedp->ged_delete_io_handler)(drcdp->gedp->ged_interp,
run_rtp->chan,
- run_rtp->p, BU_PROCESS_STDERR, (void *)drcdp,
- _ged_rt_output_handler);
+ if (gedp->ged_delete_io_handler) {
+ (*gedp->ged_delete_io_handler)(rrtp, BU_PROCESS_STDERR);
}
+
+
/* Either EOF has been sent or there was a read error.
* there is no need to block indefinitely */
- retcode = bu_process_wait(&aborted, run_rtp->p, 120);
+ retcode = bu_process_wait(&aborted, rrtp->p, 120);
if (aborted)
bu_log("Raytrace aborted.\n");
@@ -1344,13 +1374,12 @@
else
bu_log("Raytrace complete.\n");
- if (drcdp->gedp->ged_gdp->gd_rtCmdNotify != (void (*)(int))0)
- drcdp->gedp->ged_gdp->gd_rtCmdNotify(aborted);
+ if (gedp->ged_gdp->gd_rtCmdNotify != (void (*)(int))0)
+ gedp->ged_gdp->gd_rtCmdNotify(aborted);
- /* free run_rtp */
- BU_LIST_DEQUEUE(&run_rtp->l);
- BU_PUT(run_rtp, struct ged_subprocess);
- BU_PUT(drcdp, struct _ged_rt_client_data);
+ /* free rrtp */
+ bu_ptbl_rm(&gedp->ged_subp, (long *)rrtp);
+ BU_PUT(rrtp, struct ged_subprocess);
return;
}
@@ -1359,10 +1388,11 @@
line[count] = '\0';
/* handle (i.e., probably log to stderr) the resulting line */
- if (drcdp->gedp->ged_output_handler != (void (*)(struct ged *, char *))0)
- drcdp->gedp->ged_output_handler(drcdp->gedp, line);
+ if (gedp->ged_output_handler != (void (*)(struct ged *, char *))0)
+ ged_output_handler_cb(gedp, line);
else
- bu_vls_printf(drcdp->gedp->ged_result_str, "%s", line);
+ bu_vls_printf(gedp->ged_result_str, "%s", line);
+
}
void
@@ -1431,7 +1461,6 @@
FILE *fp_in;
vect_t eye_model;
struct ged_subprocess *run_rtp;
- struct _ged_rt_client_data *drcdp;
struct bu_process *p = NULL;
bu_process_exec(&p, gd_rt_cmd[0], cmd_len, gd_rt_cmd, 0, 0);
@@ -1452,19 +1481,16 @@
bu_process_close(p, BU_PROCESS_STDIN);
BU_GET(run_rtp, struct ged_subprocess);
- BU_LIST_INIT(&run_rtp->l);
- BU_LIST_APPEND(&gedp->gd_headSubprocess.l, &run_rtp->l);
+ run_rtp->magic = GED_CMD_MAGIC;
+ bu_ptbl_ins(&gedp->ged_subp, (long *)run_rtp);
run_rtp->p = p;
run_rtp->aborted = 0;
+ run_rtp->gedp = gedp;
- BU_GET(drcdp, struct _ged_rt_client_data);
- drcdp->gedp = gedp;
- drcdp->rrtp = run_rtp;
-
/* If we know how, set up hooks so the parent process knows to watch for
output. */
if (gedp->ged_create_io_handler) {
- (*gedp->ged_create_io_handler)(&(run_rtp->chan), p, BU_PROCESS_STDERR,
gedp->io_mode, (void *)drcdp, _ged_rt_output_handler);
+ (*gedp->ged_create_io_handler)(run_rtp, BU_PROCESS_STDERR,
_ged_rt_output_handler, (void *)run_rtp);
}
return GED_OK;
}
@@ -1525,7 +1551,7 @@
av[0] = objp->d_namep;
av[1] = NULL;
- if (_ged_combadd2(gedp, combname, ac, av, region_flag, relation, ident,
air, NULL, 1) == GED_ERROR)
+ if (_ged_combadd2(gedp, combname, ac, av, region_flag, relation, ident,
air, NULL, 1) & GED_ERROR)
return RT_DIR_NULL;
/* Done changing stuff - update nref. */
Modified: brlcad/trunk/src/libged/get/get.c
===================================================================
--- brlcad/trunk/src/libged/get/get.c 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/src/libged/get/get.c 2020-08-02 20:15:01 UTC (rev 76646)
@@ -63,7 +63,7 @@
return GED_ERROR;
}
- if (wdb_import_from_path(gedp->ged_result_str, &intern, argv[1],
gedp->ged_wdbp) == GED_ERROR)
+ if (wdb_import_from_path(gedp->ged_result_str, &intern, argv[1],
gedp->ged_wdbp) & GED_ERROR)
return GED_ERROR;
if (!intern.idb_meth->ft_get) {
Modified: brlcad/trunk/src/libged/get_obj_bounds.c
===================================================================
--- brlcad/trunk/src/libged/get_obj_bounds.c 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/get_obj_bounds.c 2020-08-02 20:15:01 UTC (rev
76646)
@@ -245,7 +245,7 @@
VSETALL(rpp_min, MAX_FASTF);
VREVERSE(rpp_max, rpp_min);
- if (get_objpath_mat(gedp, argc, argv, gtdp) == GED_ERROR)
+ if (get_objpath_mat(gedp, argc, argv, gtdp) & GED_ERROR)
return GED_ERROR;
dp = gtdp->gtd_obj[gtdp->gtd_objpos-1];
Modified: brlcad/trunk/src/libged/get_type/get_type.c
===================================================================
--- brlcad/trunk/src/libged/get_type/get_type.c 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/get_type/get_type.c 2020-08-02 20:15:01 UTC (rev
76646)
@@ -56,7 +56,7 @@
return GED_ERROR;
}
- if (wdb_import_from_path(gedp->ged_result_str, &intern, argv[1],
gedp->ged_wdbp) == GED_ERROR)
+ if (wdb_import_from_path(gedp->ged_result_str, &intern, argv[1],
gedp->ged_wdbp) & GED_ERROR)
return GED_ERROR;
if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD) {
Modified: brlcad/trunk/src/libged/include/plugin.h
===================================================================
--- brlcad/branches/bioh/src/libged/include/plugin.h 2020-07-26 02:18:58 UTC
(rev 76506)
+++ brlcad/trunk/src/libged/include/plugin.h 2020-08-02 20:15:01 UTC (rev
76646)
@@ -47,18 +47,21 @@
* flags &= &( flag2 | flag3 );
*/
+/* Unsigned long long (which we get from C99) must be at least 64 bits, so we
+ * may define up to 64 flags here. (although we probably don't want that many,
+ * using that type for future proofing...) */
#define GED_CMD_DEFAULT 0
-#define GED_CMD_INTERACTIVE 1 << 0
-#define GED_CMD_UPDATE_SCENE 1 << 1
-#define GED_CMD_UPDATE_VIEW 1 << 2
-#define GED_CMD_AUTOVIEW 1 << 3
-#define GED_CMD_ALL_VIEWS 1 << 4
-#define GED_CMD_VIEW_CALLBACK 1 << 5
+#define GED_CMD_INTERACTIVE 1ULL << 0
+#define GED_CMD_UPDATE_SCENE 1ULL << 1
+#define GED_CMD_UPDATE_VIEW 1ULL << 2
+#define GED_CMD_AUTOVIEW 1ULL << 3
+#define GED_CMD_ALL_VIEWS 1ULL << 4
+#define GED_CMD_VIEW_CALLBACK 1ULL << 5
struct ged_cmd_impl {
const char *cname;
ged_func_ptr cmd;
- int64_t opts;
+ unsigned long long opts;
};
Modified: brlcad/trunk/src/libged/joint/joint.c
===================================================================
--- brlcad/trunk/src/libged/joint/joint.c 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/joint/joint.c 2020-08-02 20:15:01 UTC (rev
76646)
@@ -3231,8 +3231,7 @@
if (domesh) {
joint_mesh(gedp, 0, 0);
/* refreshing the screen */
- if (gedp->ged_refresh_handler !=
GED_REFRESH_CALLBACK_PTR_NULL)
-
(*gedp->ged_refresh_handler)(gedp->ged_refresh_clientdata);
+ ged_refresh_cb(gedp);
}
joint_clear();
}
@@ -3292,8 +3291,7 @@
joint_mesh(gedp, 0, 0);
/* refreshing the screen */
- if (gedp->ged_refresh_handler != GED_REFRESH_CALLBACK_PTR_NULL)
- (*gedp->ged_refresh_handler)(gedp->ged_refresh_clientdata);
+ ged_refresh_cb(gedp);
}
}
if (count < loops) {
@@ -3325,8 +3323,7 @@
joint_mesh(gedp, 0, 0);
/* refreshing the screen */
- if (gedp->ged_refresh_handler != GED_REFRESH_CALLBACK_PTR_NULL)
- (*gedp->ged_refresh_handler)(gedp->ged_refresh_clientdata);
+ ged_refresh_cb(gedp);
}
}
}
@@ -3342,8 +3339,7 @@
joint_mesh(gedp, 0, 0);
/* refreshing the screen */
- if (gedp->ged_refresh_handler != GED_REFRESH_CALLBACK_PTR_NULL)
- (*gedp->ged_refresh_handler)(gedp->ged_refresh_clientdata);
+ ged_refresh_cb(gedp);
}
return GED_OK;
}
@@ -3462,8 +3458,7 @@
joint_mesh(gedp, 0, 0);
/* refreshing the screen */
- if (gedp->ged_refresh_handler != GED_REFRESH_CALLBACK_PTR_NULL)
- (*gedp->ged_refresh_handler)(gedp->ged_refresh_clientdata);
+ ged_refresh_cb(gedp);
return GED_OK;
}
Modified: brlcad/trunk/src/libged/kill/kill.c
===================================================================
--- brlcad/trunk/src/libged/kill/kill.c 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/src/libged/kill/kill.c 2020-08-02 20:15:01 UTC (rev 76646)
@@ -107,7 +107,7 @@
if (is_phony)
continue;
- _dl_eraseAllNamesFromDisplay(gedp->ged_gdp->gd_headDisplay,
gedp->ged_wdbp->dbip, gedp->ged_free_vlist_callback, argv[i], 0,
gedp->freesolid);
+ _dl_eraseAllNamesFromDisplay(gedp, argv[i], 0);
if (db_delete(gedp->ged_wdbp->dbip, dp) != 0 ||
db_dirdelete(gedp->ged_wdbp->dbip, dp) != 0) {
/* Abort kill processing on first error */
Modified: brlcad/trunk/src/libged/killrefs/killrefs.c
===================================================================
--- brlcad/trunk/src/libged/killrefs/killrefs.c 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/killrefs/killrefs.c 2020-08-02 20:15:01 UTC (rev
76646)
@@ -69,7 +69,7 @@
if (!nflag && !gedp->ged_internal_call) {
for (k = 1; k < argc; k++)
- _dl_eraseAllNamesFromDisplay(gedp->ged_gdp->gd_headDisplay,
gedp->ged_wdbp->dbip, gedp->ged_free_vlist_callback, argv[k], 1,
gedp->freesolid);
+ _dl_eraseAllNamesFromDisplay(gedp, argv[k], 1);
}
ret = GED_OK;
Modified: brlcad/trunk/src/libged/killtree/killtree.c
===================================================================
--- brlcad/trunk/src/libged/killtree/killtree.c 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/killtree/killtree.c 2020-08-02 20:15:01 UTC (rev
76646)
@@ -111,7 +111,7 @@
bu_vls_printf(gktdp->gedp->ged_result_str, "%s ", dp->d_namep);
}
} else {
- _dl_eraseAllNamesFromDisplay(gktdp->gedp->ged_gdp->gd_headDisplay,
gktdp->gedp->ged_wdbp->dbip, gktdp->gedp->ged_free_vlist_callback, dp->d_namep,
0, gktdp->gedp->freesolid);
+ _dl_eraseAllNamesFromDisplay(gktdp->gedp, dp->d_namep, 0);
bu_vls_printf(gktdp->gedp->ged_result_str, "KILL %s: %s\n",
(dp->d_flags & RT_DIR_COMB) ? "COMB" : "Solid",
Modified: brlcad/trunk/src/libged/mater/mater.cpp
===================================================================
--- brlcad/trunk/src/libged/mater/mater.cpp 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/mater/mater.cpp 2020-08-02 20:15:01 UTC (rev
76646)
@@ -390,7 +390,7 @@
}
// As a first cut, do a fault intolerant read - if there are any problems
we want to know
- if (_ged_read_densities(&a, &dsource, gedp, densities_filename, 0) ==
GED_ERROR) {
+ if (_ged_read_densities(&a, &dsource, gedp, densities_filename, 0) &
GED_ERROR) {
a = NULL;
}
Modified: brlcad/trunk/src/libged/metaball/metaball.c
===================================================================
--- brlcad/trunk/src/libged/metaball/metaball.c 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/metaball/metaball.c 2020-08-02 20:15:01 UTC (rev
76646)
@@ -149,7 +149,7 @@
/* convert from double to fastf_t */
VMOVE(model_pt, scan);
- if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1],
gedp->ged_wdbp, mat) == GED_ERROR)
+ if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1],
gedp->ged_wdbp, mat) & GED_ERROR)
return GED_ERROR;
nearest = find_metaball_pnt_nearest_pnt(&((struct rt_metaball_internal
*)intern.idb_ptr)->metaball_ctrl_head,
Modified: brlcad/trunk/src/libged/move_arb_edge/move_arb_edge.c
===================================================================
--- brlcad/trunk/src/libged/move_arb_edge/move_arb_edge.c 2020-08-02
19:53:00 UTC (rev 76645)
+++ brlcad/trunk/src/libged/move_arb_edge/move_arb_edge.c 2020-08-02
20:15:01 UTC (rev 76646)
@@ -102,7 +102,7 @@
return GED_ERROR;
}
- if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1],
gedp->ged_wdbp, mat) == GED_ERROR)
+ if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1],
gedp->ged_wdbp, mat) & GED_ERROR)
return GED_ERROR;
if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD ||
Modified: brlcad/trunk/src/libged/move_arb_face/move_arb_face.c
===================================================================
--- brlcad/trunk/src/libged/move_arb_face/move_arb_face.c 2020-08-02
19:53:00 UTC (rev 76645)
+++ brlcad/trunk/src/libged/move_arb_face/move_arb_face.c 2020-08-02
20:15:01 UTC (rev 76646)
@@ -126,7 +126,7 @@
return GED_ERROR;
}
- if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1],
gedp->ged_wdbp, mat) == GED_ERROR)
+ if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1],
gedp->ged_wdbp, mat) & GED_ERROR)
return GED_ERROR;
if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD ||
Modified: brlcad/trunk/src/libged/ocenter/ocenter.c
===================================================================
--- brlcad/trunk/src/libged/ocenter/ocenter.c 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/ocenter/ocenter.c 2020-08-02 20:15:01 UTC (rev
76646)
@@ -68,7 +68,7 @@
* One of the get bounds routines needs to be fixed to
* work with all cases. In the meantime...
*/
- if (_ged_get_obj_bounds2(gedp, 1, argv+1, >d, rpp_min, rpp_max) ==
GED_ERROR)
+ if (_ged_get_obj_bounds2(gedp, 1, argv+1, >d, rpp_min, rpp_max) &
GED_ERROR)
return GED_ERROR;
dp = gtd.gtd_obj[gtd.gtd_objpos-1];
Modified: brlcad/trunk/src/libged/orotate/orotate.c
===================================================================
--- brlcad/trunk/src/libged/orotate/orotate.c 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/orotate/orotate.c 2020-08-02 20:15:01 UTC (rev
76646)
@@ -85,7 +85,7 @@
if (argc == 5) {
/* Use the object's center as the keypoint. */
- if (_ged_get_obj_bounds2(gedp, 1, argv+1, >d, rpp_min, rpp_max) ==
GED_ERROR)
+ if (_ged_get_obj_bounds2(gedp, 1, argv+1, >d, rpp_min, rpp_max) &
GED_ERROR)
return GED_ERROR;
dp = gtd.gtd_obj[gtd.gtd_objpos-1];
Modified: brlcad/trunk/src/libged/oscale/oscale.c
===================================================================
--- brlcad/trunk/src/libged/oscale/oscale.c 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/oscale/oscale.c 2020-08-02 20:15:01 UTC (rev
76646)
@@ -75,7 +75,7 @@
}
if (argc == 3) {
- if (_ged_get_obj_bounds2(gedp, 1, argv+1, >d, rpp_min, rpp_max) ==
GED_ERROR)
+ if (_ged_get_obj_bounds2(gedp, 1, argv+1, >d, rpp_min, rpp_max) &
GED_ERROR)
return GED_ERROR;
dp = gtd.gtd_obj[gtd.gtd_objpos-1];
Modified: brlcad/trunk/src/libged/otranslate/otranslate.c
===================================================================
--- brlcad/trunk/src/libged/otranslate/otranslate.c 2020-08-02 19:53:00 UTC
(rev 76645)
+++ brlcad/trunk/src/libged/otranslate/otranslate.c 2020-08-02 20:15:01 UTC
(rev 76646)
@@ -63,7 +63,7 @@
return GED_ERROR;
}
- if (_ged_get_obj_bounds2(gedp, 1, argv+1, >d, rpp_min, rpp_max) ==
GED_ERROR)
+ if (_ged_get_obj_bounds2(gedp, 1, argv+1, >d, rpp_min, rpp_max) &
GED_ERROR)
return GED_ERROR;
dp = gtd.gtd_obj[gtd.gtd_objpos-1];
Modified: brlcad/trunk/src/libged/pipe/pipe.c
===================================================================
--- brlcad/trunk/src/libged/pipe/pipe.c 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/src/libged/pipe/pipe.c 2020-08-02 20:15:01 UTC (rev 76646)
@@ -191,7 +191,7 @@
/* convert from double to fastf_t */
VMOVE(model_pt, scan);
- if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1],
gedp->ged_wdbp, mat) == GED_ERROR)
+ if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1],
gedp->ged_wdbp, mat) & GED_ERROR)
return GED_ERROR;
nearest = find_pipe_pnt_nearest_pnt(&((struct rt_pipe_internal
*)intern.idb_ptr)->pipe_segs_head,
Modified: brlcad/trunk/src/libged/pipe.c
===================================================================
--- brlcad/trunk/src/libged/pipe.c 2020-08-02 19:53:00 UTC (rev 76645)
+++ brlcad/trunk/src/libged/pipe.c 2020-08-02 20:15:01 UTC (rev 76646)
@@ -628,7 +628,7 @@
/* convert from double to fastf_t */
VMOVE(view_ps_pt, scan);
- if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1],
gedp->ged_wdbp, mat) == GED_ERROR)
+ if (wdb_import_from_path2(gedp->ged_result_str, &intern, argv[1],
gedp->ged_wdbp, mat) & GED_ERROR)
return GED_ERROR;
if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD ||
Modified: brlcad/trunk/src/libged/polyclip.cpp
===================================================================
--- brlcad/trunk/src/libged/polyclip.cpp 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/polyclip.cpp 2020-08-02 20:15:01 UTC (rev
76646)
@@ -158,7 +158,7 @@
struct contour_node *curr_cnode;
struct bg_polygon *gpp;
- if (wdb_import_from_path(gedp->ged_result_str, &intern, sname,
gedp->ged_wdbp) == GED_ERROR)
+ if (wdb_import_from_path(gedp->ged_result_str, &intern, sname,
gedp->ged_wdbp) & GED_ERROR)
return (struct bg_polygon *)0;
sketch_ip = (rt_sketch_internal *)intern.idb_ptr;
Property changes on: brlcad/trunk/src/libged/polyclip.cpp
___________________________________________________________________
Modified: svn:mergeinfo
## -1,7 +1,7 ##
/brlcad/branches/RELEASE/src/libged/polyclip/polyclip.cpp:57439,57447-57860,69901-69913,70323-70333,71915-72242,72525-72534,72826-72858,74376-74454,74964-75140,75372-75685
/brlcad/branches/RELEASE/src/libged/polyclip.cpp:57439,57447-57860,69901-69913,70323-70333,71915-72242,72525-72534,72826-72858,74376-74454,74964-75140,75372-75685,76001-76451
/brlcad/branches/bioh/src/libged/polyclip/polyclip.cpp:75720-75736,75740-75742,75860-75891,75894-75986,76088-76153,76360-76365
-/brlcad/branches/bioh/src/libged/polyclip.cpp:75720-75736,75740-75742,75860-75891,75894-75986,76088-76153,76355-76365,76368-76376
+/brlcad/branches/bioh/src/libged/polyclip.cpp:75720-75736,75740-75742,75860-75891,75894-75986,76088-76153,76354-76365,76368-76376,76506
/brlcad/branches/brep-debug/src/libged/polyclip/polyclip.cpp:61373,61375,61404,61427,61429,61470,61544,61567,61576,61999,62018,62094,62098,62107,62117,62406,62416-62519,62521-62584,62593-62614,62623,62658,62660-62674,62681-62771,62876,62901,62907,62910,62925,62928,62931-63025,63027,63051,63054-63056,63069,63071-63073,63122,63160-63161,63165,63171,63184,63187,63189-63190,63193-63196,63200,63202,63205-63210,63213,63219-63225,63232-63233,63236,63238,63338,63350-63353,63481,63618,63669,64173-64174,64176-64177,64229-64233,64242,64244,64360-64362,65165,65245,65249,65334,65833-65834,66370-66375,66931-66932,66934,67012-67015,67018-67019,67021-67022,67406,67740,67746-67748,67950,67952,68144-68145,68636,68640-68643,68820,69081,69109,69168,69206,69289,69346,69460-69461,69582-69583,69719-69721,69857-69859,69927,69995-69996,70148-70149,70347-70349,70377,70526-70527,71006-71007,71009-71022,71046-71047,71049,71096-71100
/brlcad/branches/brep-debug/src/libged/polyclip.cpp:61373,61375,61404,61427,61429,61470,61544,61567,61576,61999,62018,62094,62098,62107,62117,62406,62416-62519,62521-62584,62593-62614,62623,62658,62660-62674,62681-62771,62876,62901,62907,62910,62925,62928,62931-63025,63027,63051,63054-63056,63069,63071-63073,63122,63160-63161,63165,63171,63184,63187,63189-63190,63193-63196,63200,63202,63205-63210,63213,63219-63225,63232-63233,63236,63238,63338,63350-63353,63481,63618,63669,64173-64174,64176-64177,64229-64233,64242,64244,64360-64362,65165,65245,65249,65334,65833-65834,66370-66375,66931-66932,66934,67012-67015,67018-67019,67021-67022,67406,67740,67746-67748,67950,67952,68144-68145,68636,68640-68643,68820,69081,69109,69168,69206,69289,69346,69460-69461,69582-69583,69719-69721,69857-69859,69927,69995-69996,70148-70149,70347-70349,70377,70526-70527,71006-71007,71009-71022,71046-71047,71049,71096-71100
/brlcad/branches/bullet/src/libged/polyclip/polyclip.cpp:62518
Modified: brlcad/trunk/src/libged/process/process.c
===================================================================
--- brlcad/trunk/src/libged/process/process.c 2020-08-02 19:53:00 UTC (rev
76645)
+++ brlcad/trunk/src/libged/process/process.c 2020-08-02 20:15:01 UTC (rev
76646)
@@ -57,7 +57,8 @@
unsigned int longest_pid = 0;
/* Find the largest pid we'll have to print */
- for (BU_LIST_FOR(rrp, ged_subprocess, &gedp->gd_headSubprocess.l)) {
+ for (size_t i = 0; i < BU_PTBL_LEN(&gedp->ged_subp); i++) {
+ rrp = (struct ged_subprocess *)BU_PTBL_GET(&gedp->ged_subp, i);
int pid = bu_process_pid(rrp->p);
bu_vls_sprintf(&pid_str, "%d", pid);
longest_pid = (bu_vls_strlen(&pid_str) > longest_pid) ?
bu_vls_strlen(&pid_str) : longest_pid;
@@ -65,7 +66,8 @@
bu_vls_free(&pid_str);
/* For each process print a line */
- for (BU_LIST_FOR(rrp, ged_subprocess, &gedp->gd_headSubprocess.l)) {
+ for (size_t i = 0; i < BU_PTBL_LEN(&gedp->ged_subp); i++) {
+ rrp = (struct ged_subprocess *)BU_PTBL_GET(&gedp->ged_subp, i);
struct bu_vls pline = BU_VLS_INIT_ZERO;
struct bu_vls cmdroot = BU_VLS_INIT_ZERO;
const char * const *argv;
@@ -73,8 +75,8 @@
int pid = bu_process_pid(rrp->p);
(void)bu_path_component(&cmdroot, argv[0], BU_PATH_BASENAME_EXTLESS);
bu_vls_sprintf(&pline, "%*d %s", longest_pid, pid,
bu_vls_cstr(&cmdroot));
@@ 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