BRL-CAD
defines.h
Go to the documentation of this file.
1 /* D E F I N E S . H
2  * BRL-CAD
3  *
4  * Copyright (c) 2008-2024 United States Government as represented by
5  * the U.S. Army Research Laboratory.
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public License
9  * version 2.1 as published by the Free Software Foundation.
10  *
11  * This library is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this file; see the file named COPYING for more
18  * information.
19  */
20 /** @addtogroup ged_defines
21  *
22  * Geometry EDiting Library specific definitions.
23  *
24  */
25 /** @{ */
26 /** @file ged/defines.h */
27 
28 #ifndef GED_DEFINES_H
29 #define GED_DEFINES_H
30 
31 #include "common.h"
32 #include "bu/hash.h"
33 #include "bu/list.h"
34 #include "bu/process.h"
35 #include "bu/vls.h"
36 #include "bv/defines.h"
37 #include "rt/search.h"
38 #include "bv/defines.h"
39 #include "bv/lod.h"
40 #include "dm/fbserv.h" // for fbserv_obj
41 #include "rt/wdb.h" // for struct rt_wdb
42 
43 
44 #ifndef GED_EXPORT
45 # if defined(GED_DLL_EXPORTS) && defined(GED_DLL_IMPORTS)
46 # error "Only GED_DLL_EXPORTS or GED_DLL_IMPORTS can be defined, not both."
47 # elif defined(GED_DLL_EXPORTS)
48 # define GED_EXPORT COMPILER_DLLEXPORT
49 # elif defined(GED_DLL_IMPORTS)
50 # define GED_EXPORT COMPILER_DLLIMPORT
51 # else
52 # define GED_EXPORT
53 # endif
54 #endif
55 
56 #define GED_VMIN -2048.0
57 #define GED_VMAX 2047.0
58 #define GED_VRANGE 4095.0
59 #define INV_GED_V 0.00048828125
60 #define INV_4096_V 0.000244140625
61 
62 #define GED_NULL ((struct ged *)0)
63 #define GED_DISPLAY_LIST_NULL ((struct display_list *)0)
64 #define GED_DRAWABLE_NULL ((struct ged_drawable *)0)
65 #define GED_VIEW_NULL ((struct bview *)0)
66 
67 #define GED_RESULT_NULL ((void *)0)
68 
69 /* Sequence starts after BRLCAD_ERROR, to be compatible with
70  * BU return codes */
71 #define GED_HELP 0x0002 /**< invalid specification, result contains usage */
72 #define GED_MORE 0x0004 /**< incomplete specification, can specify again interactively */
73 #define GED_QUIET 0x0008 /**< don't set or modify the result string */
74 #define GED_UNKNOWN 0x0010 /**< argv[0] was not a known command */
75 #define GED_EXIT 0x0020 /**< command is requesting a clean application shutdown */
76 
77 /* Forward declaration */
78 struct ged;
79 struct ged_selection_set;
80 
81 typedef int (*ged_func_ptr)(struct ged *, int, const char *[]);
82 #define GED_FUNC_PTR_NULL ((ged_func_ptr)0)
83 
84 /* Callback related definitions */
85 typedef void (*ged_io_func_t)(void *, int);
86 typedef void (*ged_refresh_func_t)(void *);
87 typedef void (*ged_create_vlist_solid_func_t)(struct bv_scene_obj *);
89 typedef void (*ged_destroy_vlist_func_t)(unsigned int, int);
90 struct ged_callback_state;
91 
92 /**
93  * Definition of global parallel-processing semaphores.
94  *
95  */
96 #define GED_SEM_WORKER ANALYZE_SEM_LAST
97 #define GED_SEM_STATS GED_SEM_WORKER+1
98 #define GED_SEM_LIST GED_SEM_STATS+1
99 #define GED_SEM_LAST GED_SEM_LIST+1
100 
101 #define GED_INIT(_gedp, _wdbp) { \
102  ged_init((_gedp)); \
103  (_gedp)->dbip = NULL; \
104  if ((struct rt_wdb *)(_wdbp) != NULL) {\
105  (_gedp)->dbip = ((struct rt_wdb *)(_wdbp))->dbip; \
106  } \
107 }
108 
109 #define GED_INITIALIZED(_gedp) ((_gedp)->dbip != NULL)
110 #define GED_LOCAL2BASE(_gedp) ((_gedp)->dbip->dbi_local2base)
111 #define GED_BASE2LOCAL(_gedp) ((_gedp)->dbip->dbi_base2local)
112 
113 /* From include/dm.h */
114 #define GED_MAX 2047.0
115 #define GED_MIN -2048.0
116 #define GED_RANGE 4095.0
117 #define INV_GED 0.00048828125
118 #define INV_4096 0.000244140625
119 
120 /* FIXME: leftovers from dg.h */
121 #define RT_VDRW_PREFIX "_VDRW"
122 #define RT_VDRW_PREFIX_LEN 6
123 #define RT_VDRW_MAXNAME 31
124 #define RT_VDRW_DEF_COLOR 0xffff00
125 
126 
127 struct ged_subprocess {
128  uint32_t magic; /**< @brief magic number */
129  struct bu_process *p;
130  void *chan;
131  int aborted;
132  struct ged *gedp;
133  void (*end_clbk)(int, void *); /**< @brief function called when process completes */
138 };
139 
140 /* FIXME: should be private */
141 struct ged_qray_color {
142  unsigned char r;
143  unsigned char g;
144  unsigned char b;
145 };
146 
147 /* FIXME: should be private */
148 struct ged_qray_fmt {
149  char type;
150  struct bu_vls fmt;
151 };
152 
153 struct vd_curve {
154  struct bu_list l;
155  char vdc_name[RT_VDRW_MAXNAME+1]; /**< @brief name array */
156  long vdc_rgb; /**< @brief color */
157  struct bu_list vdc_vhd; /**< @brief head of list of vertices */
158 };
159 #define VD_CURVE_NULL ((struct vd_curve *)NULL)
160 
161 /* FIXME: should be private */
162 struct ged_drawable {
163  struct bu_list *gd_headDisplay; /**< @brief head of display list */
164  struct bu_list *gd_headVDraw; /**< @brief head of vdraw list */
165  struct vd_curve *gd_currVHead; /**< @brief current vdraw head */
166 
167  char **gd_rt_cmd; /* DEPRECATED - will be removed, do not use */
168  int gd_rt_cmd_len; /* DEPRECATED - will be removed, do not use */
169 
170  void (*gd_rtCmdNotify)(int aborted); /**< @brief function called when rt command completes */
171 
172  int gd_uplotOutputMode; /**< @brief output mode for unix plots */
173 
174  /* qray state */
175  struct bu_vls gd_qray_basename; /**< @brief basename of query ray vlist */
176  struct bu_vls gd_qray_script; /**< @brief query ray script */
177  char gd_qray_effects; /**< @brief t for text, g for graphics or b for both */
178  int gd_qray_cmd_echo; /**< @brief 0 - don't echo command, 1 - echo command */
179  struct ged_qray_fmt *gd_qray_fmts;
184  int gd_shaded_mode; /**< @brief 1 - draw bots shaded by default */
185 };
186 
187 /* Experimental work on a high-performance in-memory representation of
188  * database, view and selection states. We want this to be visible to C++ APIs
189  * like libqtcad, so they can reflect the state of the .g hierarchy in their
190  * own structures without us or them having to make copies of the data.
191  */
192 #include "ged/dbi.h"
193 
194 __BEGIN_DECLS
195 
196 struct ged_cmd;
197 
198 /* struct details are private - use accessor functions to manipulate */
199 struct ged_results;
200 
201 struct ged {
202  struct bu_vls go_name;
203  struct db_i *dbip;
205 
206  /*************************************************************/
207  /* Information pertaining to views and view objects . */
208  /*************************************************************/
209  /* The current view */
210  struct bview *ged_gvp;
211  /* The full set of views associated with this ged object */
212  struct bview_set ged_views;
213  /* Sometimes applications will supply GED views, and sometimes GED commands
214  * may create views. In the latter case, ged_close will also need to free
215  * the views. We define a container to hold those views that libged is
216  * managing, since ged_views views may belong to the application rather
217  * than GED. */
218  struct bu_ptbl ged_free_views;
219 
220  /* Drawing data associated with this .g file */
222 
223 
224  void *u_data; /**< @brief User data associated with this ged instance */
225 
226  /** for catching log messages */
227  struct bu_vls *ged_log;
228 
229 
230  /* @todo: add support for returning an array of objects, not just a
231  * simple string.
232  *
233  * the calling application needs to be able to distinguish the
234  * individual object names from the "ls" command without resorting
235  * to quirky string encoding or format-specific quote wrapping.
236  *
237  * want to consider whether we need a json-style dictionary, but
238  * probably a literal null-terminated array will suffice here.
239  */
240  struct bu_vls *ged_result_str;
241  struct ged_results *ged_results;
242 
243  struct ged_drawable *ged_gdp;
244  struct bu_ptbl free_solids;
245 
246  char *ged_output_script; /**< @brief script for use by the outputHandler */
247 
248  /* Old selection data containers used by joint and brep*/
249  struct bu_hash_tbl *ged_selections; /**< @brief object name -> struct rt_object_selections */
250 
251  /* FIXME -- this ugly hack needs to die. the result string should
252  * be stored before the call.
253  */
255 
256 
257  /* TODO: hide all callback related symbols, callback typedefs
258  * (above), and eventually most if not all of the remaining fields
259  * into an _impl structure so callers are not tightly coupled to
260  * the ged structure. access via public functions that have been
261  * given design consideration.
262  */
263 
264  /* FOR LIBGED INTERNAL USE */
265  struct ged_cmd *cmds;
266  int (*add)(struct ged *gedp, const struct ged_cmd *cmd);
267  int (*del)(struct ged *gedp, const char *name);
268  int (*run)(struct ged *gedp, int ac, char *av[]);
269 
270  struct bu_ptbl ged_subp; /**< @brief forked sub-processes */
271 
272  /* Callbacks */
273 
274  struct ged_callback_state *ged_cbs;
275  void (*ged_refresh_handler)(void *); /**< @brief function for handling refresh requests */
276  void *ged_refresh_clientdata; /**< @brief client data passed to refresh handler */
277  void (*ged_output_handler)(struct ged *, char *); /**< @brief function for handling output */
278  void (*ged_create_vlist_scene_obj_callback)(struct bv_scene_obj *); /**< @brief function to call after creating a vlist to create display list for solid */
279  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 */
280  void (*ged_destroy_vlist_callback)(unsigned int, int); /**< @brief function to call after freeing a vlist */
281 
282  /* Functions related to database open/close - if the parent application
283  * needs to take any action upon database opening or closing, it should
284  * register these callbacks so GED's opendb/closedb commands trigger
285  * the correct logic. */
286  void (*ged_pre_opendb_callback)(struct ged *, void *);
287  void (*ged_post_opendb_callback)(struct ged *, void *);
288  void (*ged_pre_closedb_callback)(struct ged *, void *);
289  void (*ged_post_closedb_callback)(struct ged *, void *);
290  void *ged_db_callback_udata;
291 
292  /* Functions assigned to ged_subprocess init_clbk and end_clbk
293  * slots when the ged_subprocess is created. TODO - eventually
294  * this should be command-specific callback registrations, but
295  * first we'll get the basic mechanism working, then introduce
296  * that extra complication... */
297  void (*ged_subprocess_init_callback)(int, void *); /**< @brief function called when process starts */
298  void (*ged_subprocess_end_callback)(int, void *); /**< @brief function called when process completes */
300 
301  /* Handler functions for I/O communication with asynchronous subprocess commands. There
302  * are two opaque data structures at play here, with different scopes. One is the "data"
303  * pointer passed to ged_create_io_handler, which is used to store command-specific
304  * information internal to the library (the simplest thing to do is pass ged_subprocess
305  * in as the data pointer, but if that's not enough - see for example rtcheck - this
306  * mechanism allows for more elaborate measures.
307  *
308  * The second is ged_io_data, which is set in gedp by the calling application. This is where
309  * information specific to the parent's I/O environment (which by definition the library
310  * can't know about as it is application specific) lives. It should be assigned in the
311  * applications gedp before any calls to ged_create_io_handler are made.
312  * */
313  void (*ged_create_io_handler)(struct ged_subprocess *gp, bu_process_io_t d, ged_io_func_t callback, void *data);
314  void (*ged_delete_io_handler)(struct ged_subprocess *gp, bu_process_io_t fd);
315  void *ged_io_data; /**< brief caller supplied data */
316 
317  /* fbserv server and I/O callbacks. These must hook into the application's event
318  * loop, and so cannot be effectively supplied by low-level libraries - the
319  * application must tell us how to tie in with the toplevel event
320  * processing system it is using (typically toolkit specific). */
322  int (*fbs_is_listening)(struct fbserv_obj *); /**< @brief return 1 if listening, else 0 */
323  int (*fbs_listen_on_port)(struct fbserv_obj *, int); /**< @brief return 1 on success, 0 on failure */
324  void (*fbs_open_server_handler)(struct fbserv_obj *); /**< @brief platform/toolkit method to open listener handler */
325  void (*fbs_close_server_handler)(struct fbserv_obj *); /**< @brief platform/toolkit method to close handler listener */
326  void (*fbs_open_client_handler)(struct fbserv_obj *, int, void *); /**< @brief platform/toolkit specific client handler setup (called by fbs_new_client) */
327  void (*fbs_close_client_handler)(struct fbserv_obj *, int); /**< @brief platform/toolkit method to close handler for client at index client_id */
328 
329  // Other callbacks...
330  // Tcl command strings - these are libtclcad level callbacks that execute user supplied Tcl commands if set:
331  // gdv_callback, gdv_edit_motion_delta_callback, go_more_args_callback, go_rt_end_callback
332  //
333  // fbserv_obj: fbs_callback
334  // bv.h gv_callback (only used by MGED?)
335  // db_search_callback_t
336 
337  // TODO - this probably should be handled with a registration function of some kind
338  // that assigns contexts based on dm type - right now the dms more or less have to
339  // assume that whatever is in here is intended for their initialization, and if a
340  // program wants to attach multiple types of DMs a single pointer is not a great way
341  // to manage things. A map would be better, but that's a C++ construct so we can't
342  // expose it directly here - need some sort of means to manage the setting and getting,
343  // maybe with functions like:
344  // ged_ctx_set(const char *dm_type, void *ctx)
345  // ged_ctx_get(const char *dm_type)
346  void *ged_ctx; /* Temporary - do not rely on when designing new functionality */
347 
348  void *ged_interp; /* Temporary - do not rely on when designing new functionality */
349  db_search_callback_t ged_interp_eval; /* FIXME: broke the rule written on the previous line */
350 
351 };
352 
353 /* accessor functions for ged_results - calling
354  * applications should not work directly with the
355  * internals of ged_results, which are not guaranteed
356  * to stay the same.
357  * defined in ged_util.c */
358 GED_EXPORT extern size_t ged_results_count(struct ged_results *results);
359 GED_EXPORT extern const char *ged_results_get(struct ged_results *results, size_t index);
360 GED_EXPORT extern void ged_results_clear(struct ged_results *results);
361 GED_EXPORT extern void ged_results_free(struct ged_results *results);
362 
363 
364 
365 GED_EXPORT extern void ged_close(struct ged *gedp);
366 GED_EXPORT extern void ged_free(struct ged *gedp);
367 GED_EXPORT extern void ged_init(struct ged *gedp);
368 /* Call BU_PUT to release returned ged structure */
369 GED_EXPORT extern struct ged *ged_open(const char *dbtype,
370  const char *filename,
371  int existing_only);
372 
373 
374 /**
375  * make sure there is a command name given
376  *
377  * @todo - where should this go?
378  */
379 #define GED_CHECK_ARGC_GT_0(_gedp, _argc, _flags) \
380  if ((_argc) < 1) { \
381  int ged_check_argc_gt_0_quiet = (_flags) & GED_QUIET; \
382  if (!ged_check_argc_gt_0_quiet) { \
383  bu_vls_trunc((_gedp)->ged_result_str, 0); \
384  bu_vls_printf((_gedp)->ged_result_str, "Command name not provided on (%s:%d).", __FILE__, __LINE__); \
385  } \
386  return (_flags); \
387  }
388 
389 
390 struct ged_cmd_impl;
391 struct ged_cmd {
392  struct ged_cmd_impl *i;
393 };
394 
395 struct ged_plugin {
396  uint32_t api_version; /* must be first in struct */
397  const struct ged_cmd ** const cmds;
398  int cmd_cnt;
399 };
400 
401 
402 struct ged_cmd_process_impl;
404  struct ged_cmd_process_impl *i;
405 };
406 
408  uint32_t api_version; /* must be first in struct */
409  const struct ged_cmd_process * const p;
410 };
411 
412 typedef int (*ged_process_ptr)(int, const char *[]);
413 
414 /* Report any messages from libged when plugins were initially loaded.
415  * Can be important when diagnosing command errors. */
416 GED_EXPORT const char * ged_init_msgs(void);
417 
418 
419 __END_DECLS
420 
421 #endif /* GED_DEFINES_H */
422 
423 /** @} */
424 
425 /*
426  * Local Variables:
427  * tab-width: 8
428  * mode: C
429  * indent-tabs-mode: t
430  * c-file-style: "stroustrup"
431  * End:
432  * ex: shiftwidth=4 tabstop=8
433  */
Definition: dbi.h:277
Header file for the BRL-CAD common definitions.
This header holds generic routines and data structures used for TCP based communication between a fra...
struct bu_hash_tbl bu_hash_tbl
Definition: hash.h:48
bu_process_io_t
Definition: process.h:42
int(* db_search_callback_t)(int, const char *[], void *)
Definition: search.h:40
void ged_close(struct ged *gedp)
struct ged * ged_open(const char *dbtype, const char *filename, int existing_only)
const char * ged_results_get(struct ged_results *results, size_t index)
int(* ged_process_ptr)(int, const char *[])
Definition: defines.h:423
void(* ged_refresh_func_t)(void *)
Definition: defines.h:86
#define RT_VDRW_MAXNAME
Definition: defines.h:124
int(* ged_func_ptr)(struct ged *, int, const char *[])
Definition: defines.h:81
size_t ged_results_count(struct ged_results *results)
void ged_results_clear(struct ged_results *results)
void ged_free(struct ged *gedp)
void(* ged_destroy_vlist_func_t)(unsigned int, int)
Definition: defines.h:89
void(* ged_create_vlist_display_list_func_t)(struct display_list *)
Definition: defines.h:88
void ged_results_free(struct ged_results *results)
void(* ged_create_vlist_solid_func_t)(struct bv_scene_obj *)
Definition: defines.h:87
const char * ged_init_msgs(void)
void(* ged_io_func_t)(void *, int)
Definition: defines.h:85
void ged_init(struct ged *gedp)
Definition: list.h:132
Definition: ptbl.h:53
Definition: vls.h:53
Definition: defines.h:489
struct ged_cmd_process_impl * i
Definition: defines.h:415
struct ged_cmd_impl * i
Definition: defines.h:403
int gd_rt_cmd_len
Definition: defines.h:172
struct bu_vls gd_qray_basename
basename of query ray vlist
Definition: defines.h:179
int gd_qray_cmd_echo
0 - don't echo command, 1 - echo command
Definition: defines.h:182
struct bu_list * gd_headVDraw
head of vdraw list
Definition: defines.h:168
struct ged_qray_color gd_qray_odd_color
Definition: defines.h:184
struct ged_qray_color gd_qray_overlap_color
Definition: defines.h:187
struct bu_vls gd_qray_script
query ray script
Definition: defines.h:180
void(* gd_rtCmdNotify)(int aborted)
function called when rt command completes
Definition: defines.h:174
int gd_shaded_mode
1 - draw bots shaded by default
Definition: defines.h:188
struct ged_qray_color gd_qray_void_color
Definition: defines.h:186
char ** gd_rt_cmd
Definition: defines.h:171
struct ged_qray_color gd_qray_even_color
Definition: defines.h:185
struct ged_qray_fmt * gd_qray_fmts
Definition: defines.h:183
char gd_qray_effects
t for text, g for graphics or b for both
Definition: defines.h:181
struct bu_list * gd_headDisplay
head of display list
Definition: defines.h:167
int gd_uplotOutputMode
output mode for unix plots
Definition: defines.h:176
struct vd_curve * gd_currVHead
current vdraw head
Definition: defines.h:169
const struct ged_cmd **const cmds
Definition: defines.h:408
uint32_t api_version
Definition: defines.h:407
int cmd_cnt
Definition: defines.h:409
const struct ged_cmd_process *const p
Definition: defines.h:420
uint32_t api_version
Definition: defines.h:419
unsigned char b
Definition: defines.h:146
unsigned char g
Definition: defines.h:145
unsigned char r
Definition: defines.h:144
struct bu_vls fmt
Definition: defines.h:153
char type
Definition: defines.h:152
int stdin_active
Definition: defines.h:136
struct bu_process * p
Definition: defines.h:130
int stderr_active
Definition: defines.h:138
uint32_t magic
magic number
Definition: defines.h:129
int stdout_active
Definition: defines.h:137
void(* end_clbk)(int, void *)
function called when process completes
Definition: defines.h:134
struct ged * gedp
Definition: defines.h:133
void * chan
Definition: defines.h:131
void * end_clbk_data
Definition: defines.h:135
Definition: defines.h:205
struct fbserv_obj * ged_fbs
Definition: defines.h:329
void(* ged_output_handler)(struct ged *, char *)
function for handling output
Definition: defines.h:284
void(* fbs_open_server_handler)(struct fbserv_obj *)
platform/toolkit method to open listener handler
Definition: defines.h:332
struct bu_vls * ged_result_str
Definition: defines.h:245
void(* ged_create_vlist_scene_obj_callback)(struct bv_scene_obj *)
function to call after creating a vlist to create display list for solid
Definition: defines.h:285
void * ged_subprocess_clbk_context
Definition: defines.h:307
int(* run)(struct ged *gedp, int ac, char *av[])
Definition: defines.h:275
struct ged_cmd * cmds
Definition: defines.h:272
int(* del)(struct ged *gedp, const char *name)
Definition: defines.h:274
int(* fbs_listen_on_port)(struct fbserv_obj *, int)
return 1 on success, 0 on failure
Definition: defines.h:331
struct ged_results * ged_results
Definition: defines.h:246
int ged_internal_call
Definition: defines.h:260
DbiState * dbi_state
Definition: defines.h:208
void(* ged_subprocess_end_callback)(int, void *)
function called when process completes
Definition: defines.h:306
void(* fbs_close_server_handler)(struct fbserv_obj *)
platform/toolkit method to close handler listener
Definition: defines.h:333
db_search_callback_t ged_interp_eval
Definition: defines.h:358
struct bu_vls * ged_log
Definition: defines.h:231
void(* ged_pre_closedb_callback)(struct ged *, void *)
Definition: defines.h:295
struct ged_callback_state * ged_cbs
Definition: defines.h:281
struct bview * ged_gvp
Definition: defines.h:214
void(* ged_create_io_handler)(struct ged_subprocess *gp, bu_process_io_t d, ged_io_func_t callback, void *data)
Definition: defines.h:321
void(* ged_post_closedb_callback)(struct ged *, void *)
Definition: defines.h:296
void * ged_db_callback_udata
Definition: defines.h:297
struct bu_vls go_name
Definition: defines.h:206
todo this probably should be handled with a registration function of some kind void * ged_ctx
Definition: defines.h:355
struct bu_ptbl free_solids
Definition: defines.h:249
void * ged_interp
Definition: defines.h:357
void(* ged_post_opendb_callback)(struct ged *, void *)
Definition: defines.h:294
void(* ged_delete_io_handler)(struct ged_subprocess *gp, bu_process_io_t fd)
Definition: defines.h:322
void * ged_refresh_clientdata
client data passed to refresh handler
Definition: defines.h:283
int(* add)(struct ged *gedp, const struct ged_cmd *cmd)
Definition: defines.h:273
struct bu_hash_tbl * ged_selections
object name -> struct rt_object_selections
Definition: defines.h:254
struct ged_drawable * ged_gdp
Definition: defines.h:248
void(* ged_subprocess_init_callback)(int, void *)
function called when process starts
Definition: defines.h:305
void(* ged_refresh_handler)(void *)
function for handling refresh requests
Definition: defines.h:282
void(* fbs_close_client_handler)(struct fbserv_obj *, int)
platform/toolkit method to close handler for client at index client_id
Definition: defines.h:335
struct bu_ptbl ged_subp
forked sub-processes
Definition: defines.h:277
char * ged_output_script
script for use by the outputHandler
Definition: defines.h:251
struct bview_set ged_views
Definition: defines.h:216
struct db_i * dbip
Definition: defines.h:207
void * ged_io_data
Definition: defines.h:323
void(* ged_create_vlist_display_list_callback)(struct display_list *)
function to call after all vlist created that loops through creating display list for each solid
Definition: defines.h:286
struct bu_ptbl ged_free_views
Definition: defines.h:222
void * u_data
User data associated with this ged instance.
Definition: defines.h:228
void(* ged_pre_opendb_callback)(struct ged *, void *)
Definition: defines.h:293
struct bv_mesh_lod_context * ged_lod
Definition: defines.h:225
void(* fbs_open_client_handler)(struct fbserv_obj *, int, void *)
platform/toolkit specific client handler setup (called by fbs_new_client)
Definition: defines.h:334
void(* ged_destroy_vlist_callback)(unsigned int, int)
function to call after freeing a vlist
Definition: defines.h:287
int(* fbs_is_listening)(struct fbserv_obj *)
return 1 if listening, else 0
Definition: defines.h:330
char vdc_name[RT_VDRW_MAXNAME+1]
name array
Definition: defines.h:158
long vdc_rgb
color
Definition: defines.h:159
struct bu_list vdc_vhd
head of list of vertices
Definition: defines.h:160
struct bu_list l
Definition: defines.h:157