BRL-CAD

Structures and routines for collecting and manipulating paths through the database tree. More...

Collaboration diagram for Full Paths:

Files

file  db_fullpath.h
 

Data Structures

struct  db_full_path
 

Macros

#define RT_CK_FULL_PATH(_p)   BU_CKMAG(_p, DB_FULL_PATH_MAGIC, "db_full_path")
 
#define DB_FULL_PATH_CUR_DIR(_pp)   (((_pp)->fp_len > 0) ? (_pp)->fp_names[(_pp)->fp_len-1] : NULL)
 
#define DB_FULL_PATH_CUR_BOOL(_pp)   ((_pp)->fp_bool[(_pp)->fp_len-1])
 
#define DB_FULL_PATH_SET_CUR_BOOL(_pp, _i)   ((_pp)->fp_bool[(_pp)->fp_len-1]) = _i
 
#define DB_FULL_PATH_CUR_COMB_INST(_pp)   ((_pp)->fp_cinst[(_pp)->fp_len-1])
 
#define DB_FULL_PATH_SET_CUR_COMB_INST(_pp, _i)   ((_pp)->fp_cinst[(_pp)->fp_len-1]) = _i
 
#define DB_FULL_PATH_LEN(_pp)   ((_pp)->fp_len)
 
#define DB_FULL_PATH_POP(_pp)   ((_pp)->fp_len > 0) ? (_pp)->fp_len-- : (_pp)->fp_len
 
#define DB_FULL_PATH_GET(_pp, _i)   ((_pp)->fp_names[(_i)])
 
#define DB_FULL_PATH_GET_BOOL(_pp, _i)   ((_pp)->fp_bool[(_i)])
 
#define DB_FULL_PATH_SET_BOOL(_pp, _i, _j)   ((_pp)->fp_bool[(_i)] = _j)
 
#define DB_FULL_PATH_GET_COMB_INST(_pp, _i)   ((_pp)->fp_cinst[(_i)])
 
#define DB_FULL_PATH_SET_COMB_INST(_pp, _i, _j)   ((_pp)->fp_cinst[(_i)] = _j)
 
#define DB_FULL_PATH_ROOT_DIR(_pp)   ((_pp)->fp_names[0])
 
#define DB_FP_PRINT_BOOL   0x1 /* print boolean operations */
 
#define DB_FP_PRINT_TYPE   0x2 /* print object types */
 
#define DB_FP_PRINT_MATRIX   0x4 /* print notice that a matrix is present */
 
#define DB_FP_PRINT_COMB_INDEX   0x8 /* print non-zero comb tree instance specifiers */
 

Functions

void db_full_path_init (struct db_full_path *pathp)
 
void db_add_node_to_full_path (struct db_full_path *pp, struct directory *dp)
 
void db_dup_full_path (struct db_full_path *newp, const struct db_full_path *oldp)
 
void db_extend_full_path (struct db_full_path *pathp, size_t incr)
 
void db_append_full_path (struct db_full_path *dest, const struct db_full_path *src)
 
void db_dup_path_tail (struct db_full_path *newp, const struct db_full_path *oldp, b_off_t start)
 
char * db_path_to_string (const struct db_full_path *pp)
 
void db_path_to_vls (struct bu_vls *str, const struct db_full_path *pp)
 
void db_fullpath_to_vls (struct bu_vls *vls, const struct db_full_path *full_path, const struct db_i *dbip, int fp_flags)
 
void db_pr_full_path (const char *msg, const struct db_full_path *pathp)
 
int db_string_to_path (struct db_full_path *pp, const struct db_i *dbip, const char *str)
 
int db_argv_to_path (struct db_full_path *pp, struct db_i *dbip, int argc, const char *const *argv)
 
void db_free_full_path (struct db_full_path *pp)
 
int db_identical_full_paths (const struct db_full_path *a, const struct db_full_path *b)
 
int db_full_path_subset (const struct db_full_path *a, const struct db_full_path *b, const int skip_first)
 
int db_full_path_match_top (const struct db_full_path *a, const struct db_full_path *b)
 
int db_full_path_search (const struct db_full_path *a, const struct directory *dp)
 
int db_full_path_cyclic (const struct db_full_path *fp, const char *lname, int full_check)
 
int db_path_to_mat (struct db_i *dbip, struct db_full_path *pathp, mat_t mat, int depth, struct resource *resp)
 
int db_fp_op (const struct db_full_path *pathp, struct db_i *dbip, int depth, struct resource *resp)
 
void db_full_path_color (struct bu_color *c, struct db_full_path *pathp, struct db_i *dbip, struct resource *resp)
 

Detailed Description

Structures and routines for collecting and manipulating paths through the database tree.

Macro Definition Documentation

◆ RT_CK_FULL_PATH

#define RT_CK_FULL_PATH (   _p)    BU_CKMAG(_p, DB_FULL_PATH_MAGIC, "db_full_path")

Definition at line 63 of file db_fullpath.h.

◆ DB_FULL_PATH_CUR_DIR

#define DB_FULL_PATH_CUR_DIR (   _pp)    (((_pp)->fp_len > 0) ? (_pp)->fp_names[(_pp)->fp_len-1] : NULL)

Definition at line 65 of file db_fullpath.h.

◆ DB_FULL_PATH_CUR_BOOL

#define DB_FULL_PATH_CUR_BOOL (   _pp)    ((_pp)->fp_bool[(_pp)->fp_len-1])

Definition at line 66 of file db_fullpath.h.

◆ DB_FULL_PATH_SET_CUR_BOOL

#define DB_FULL_PATH_SET_CUR_BOOL (   _pp,
  _i 
)    ((_pp)->fp_bool[(_pp)->fp_len-1]) = _i

Definition at line 67 of file db_fullpath.h.

◆ DB_FULL_PATH_CUR_COMB_INST

#define DB_FULL_PATH_CUR_COMB_INST (   _pp)    ((_pp)->fp_cinst[(_pp)->fp_len-1])

Definition at line 69 of file db_fullpath.h.

◆ DB_FULL_PATH_SET_CUR_COMB_INST

#define DB_FULL_PATH_SET_CUR_COMB_INST (   _pp,
  _i 
)    ((_pp)->fp_cinst[(_pp)->fp_len-1]) = _i

Definition at line 70 of file db_fullpath.h.

◆ DB_FULL_PATH_LEN

#define DB_FULL_PATH_LEN (   _pp)    ((_pp)->fp_len)

Definition at line 72 of file db_fullpath.h.

◆ DB_FULL_PATH_POP

#define DB_FULL_PATH_POP (   _pp)    ((_pp)->fp_len > 0) ? (_pp)->fp_len-- : (_pp)->fp_len

Definition at line 73 of file db_fullpath.h.

◆ DB_FULL_PATH_GET

#define DB_FULL_PATH_GET (   _pp,
  _i 
)    ((_pp)->fp_names[(_i)])

Definition at line 75 of file db_fullpath.h.

◆ DB_FULL_PATH_GET_BOOL

#define DB_FULL_PATH_GET_BOOL (   _pp,
  _i 
)    ((_pp)->fp_bool[(_i)])

Definition at line 76 of file db_fullpath.h.

◆ DB_FULL_PATH_SET_BOOL

#define DB_FULL_PATH_SET_BOOL (   _pp,
  _i,
  _j 
)    ((_pp)->fp_bool[(_i)] = _j)

Definition at line 77 of file db_fullpath.h.

◆ DB_FULL_PATH_GET_COMB_INST

#define DB_FULL_PATH_GET_COMB_INST (   _pp,
  _i 
)    ((_pp)->fp_cinst[(_i)])

Definition at line 78 of file db_fullpath.h.

◆ DB_FULL_PATH_SET_COMB_INST

#define DB_FULL_PATH_SET_COMB_INST (   _pp,
  _i,
  _j 
)    ((_pp)->fp_cinst[(_i)] = _j)

Definition at line 79 of file db_fullpath.h.

◆ DB_FULL_PATH_ROOT_DIR

#define DB_FULL_PATH_ROOT_DIR (   _pp)    ((_pp)->fp_names[0])

Definition at line 81 of file db_fullpath.h.

◆ DB_FP_PRINT_BOOL

#define DB_FP_PRINT_BOOL   0x1 /* print boolean operations */

Append a string representation of the path onto the vls, with options to decorate nodes with additional information.

Definition at line 130 of file db_fullpath.h.

◆ DB_FP_PRINT_TYPE

#define DB_FP_PRINT_TYPE   0x2 /* print object types */

Definition at line 131 of file db_fullpath.h.

◆ DB_FP_PRINT_MATRIX

#define DB_FP_PRINT_MATRIX   0x4 /* print notice that a matrix is present */

Definition at line 132 of file db_fullpath.h.

◆ DB_FP_PRINT_COMB_INDEX

#define DB_FP_PRINT_COMB_INDEX   0x8 /* print non-zero comb tree instance specifiers */

Definition at line 133 of file db_fullpath.h.

Function Documentation

◆ db_full_path_init()

void db_full_path_init ( struct db_full_path pathp)

◆ db_add_node_to_full_path()

void db_add_node_to_full_path ( struct db_full_path pp,
struct directory dp 
)

◆ db_dup_full_path()

void db_dup_full_path ( struct db_full_path newp,
const struct db_full_path oldp 
)

◆ db_extend_full_path()

void db_extend_full_path ( struct db_full_path pathp,
size_t  incr 
)

Extend "pathp" so that it can grow from current fp_len by incr more names.

This is intended primarily as an internal method.

◆ db_append_full_path()

void db_append_full_path ( struct db_full_path dest,
const struct db_full_path src 
)

◆ db_dup_path_tail()

void db_dup_path_tail ( struct db_full_path newp,
const struct db_full_path oldp,
b_off_t  start 
)

Dup old path from starting index to end.

◆ db_path_to_string()

char* db_path_to_string ( const struct db_full_path pp)

Unlike rt_path_str(), this version can be used in parallel. Caller is responsible for freeing the returned buffer.

◆ db_path_to_vls()

void db_path_to_vls ( struct bu_vls str,
const struct db_full_path pp 
)

Append a string representation of the path onto the vls. Must have exactly the same formatting conventions as db_path_to_string().

◆ db_fullpath_to_vls()

void db_fullpath_to_vls ( struct bu_vls vls,
const struct db_full_path full_path,
const struct db_i dbip,
int  fp_flags 
)

◆ db_pr_full_path()

void db_pr_full_path ( const char *  msg,
const struct db_full_path pathp 
)

◆ db_string_to_path()

int db_string_to_path ( struct db_full_path pp,
const struct db_i dbip,
const char *  str 
)

Reverse the effects of db_path_to_string().

The db_full_path structure will be initialized. If it was already in use, user should call db_free_full_path() first.

Returns - -1 One or more components of path did not exist in the directory. 0 OK

◆ db_argv_to_path()

int db_argv_to_path ( struct db_full_path pp,
struct db_i dbip,
int  argc,
const char *const *  argv 
)

Treat elements from argv[0] to argv[argc-1] as a path specification.

The path structure will be fully initialized. If it was already in use, user should call db_free_full_path() first.

Returns - -1 One or more components of path did not exist in the directory. 0 OK

◆ db_free_full_path()

void db_free_full_path ( struct db_full_path pp)

Free the contents of the db_full_path structure, but not the structure itself, which might be automatic.

◆ db_identical_full_paths()

int db_identical_full_paths ( const struct db_full_path a,
const struct db_full_path b 
)

Returns - 1 match 0 different

◆ db_full_path_subset()

int db_full_path_subset ( const struct db_full_path a,
const struct db_full_path b,
const int  skip_first 
)

Returns - 1 if 'b' is a proper subset of 'a' 0 if not.

◆ db_full_path_match_top()

int db_full_path_match_top ( const struct db_full_path a,
const struct db_full_path b 
)

Returns - 1 if 'a' matches the top part of 'b' 0 if not.

For example, /a/b matches both the top part of /a/b/c and /a/b.

◆ db_full_path_search()

int db_full_path_search ( const struct db_full_path a,
const struct directory dp 
)

Returns - 1 'dp' is found on this path 0 not found

◆ db_full_path_cyclic()

int db_full_path_cyclic ( const struct db_full_path fp,
const char *  lname,
int  full_check 
)

Function to test whether a path has a cyclic entry in it.

Parameters
fp[i] Full path to test
lname[i] String to use when checking path (optional). If NULL, use the name of the current directory pointer in fp.
full_check[i] Flag to instruct the cyclic test to check using all directory pointers in fp, not just the lname/current dp test.
Returns
1 if the path is cyclic, 0 if it is not.

By default, only the leaf (or test_name if supplied) will be used to test if the path is cyclic. If full_check is set, all object names in the path will be checked, as well as lname if set. This more expensive check is not necessary if calling code is checking for cyclic paths as paths are being built, but is necessary to fully "clear" a db_full_path from an arbitrary source. Calling code must use its knowledge of the origins of the full path (or lack thereof) to determine how much validation work is needed.

◆ db_path_to_mat()

int db_path_to_mat ( struct db_i dbip,
struct db_full_path pathp,
mat_t  mat,
int  depth,
struct resource resp 
)

Build the transformation matrix obtained when traversing the path to the specified depth.

Returns - 1 OK, path matrix written into 'mat'. 0 FAIL

Called in librt/db_tree.c, mged/dodraw.c, and mged/animedit.c

◆ db_fp_op()

int db_fp_op ( const struct db_full_path pathp,
struct db_i dbip,
int  depth,
struct resource resp 
)

For a given path, return the "net" boolean operation of the path. If a subtraction is found along the path, overall path is regarded as a subtraction. Else, if an intersection is found op is reported as an intersection. Else, union is reported.

◆ db_full_path_color()

void db_full_path_color ( struct bu_color c,
struct db_full_path pathp,
struct db_i dbip,
struct resource resp 
)

Determine the color operative at the current directory pointer (the leaf node) of the path according to available information and rules.

If nothing can be determined default color is set.