BRL-CAD
|
Structures and routines for collecting and manipulating paths through the database tree. More...
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) |
Structures and routines for collecting and manipulating paths through the database tree.
#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.
#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.
#define DB_FULL_PATH_CUR_BOOL | ( | _pp | ) | ((_pp)->fp_bool[(_pp)->fp_len-1]) |
Definition at line 66 of file db_fullpath.h.
#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.
#define DB_FULL_PATH_CUR_COMB_INST | ( | _pp | ) | ((_pp)->fp_cinst[(_pp)->fp_len-1]) |
Definition at line 69 of file db_fullpath.h.
#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.
#define DB_FULL_PATH_LEN | ( | _pp | ) | ((_pp)->fp_len) |
Definition at line 72 of file db_fullpath.h.
#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.
#define DB_FULL_PATH_GET | ( | _pp, | |
_i | |||
) | ((_pp)->fp_names[(_i)]) |
Definition at line 75 of file db_fullpath.h.
#define DB_FULL_PATH_GET_BOOL | ( | _pp, | |
_i | |||
) | ((_pp)->fp_bool[(_i)]) |
Definition at line 76 of file db_fullpath.h.
#define DB_FULL_PATH_SET_BOOL | ( | _pp, | |
_i, | |||
_j | |||
) | ((_pp)->fp_bool[(_i)] = _j) |
Definition at line 77 of file db_fullpath.h.
#define DB_FULL_PATH_GET_COMB_INST | ( | _pp, | |
_i | |||
) | ((_pp)->fp_cinst[(_i)]) |
Definition at line 78 of file db_fullpath.h.
#define DB_FULL_PATH_SET_COMB_INST | ( | _pp, | |
_i, | |||
_j | |||
) | ((_pp)->fp_cinst[(_i)] = _j) |
Definition at line 79 of file db_fullpath.h.
#define DB_FULL_PATH_ROOT_DIR | ( | _pp | ) | ((_pp)->fp_names[0]) |
Definition at line 81 of file db_fullpath.h.
#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.
#define DB_FP_PRINT_TYPE 0x2 /* print object types */ |
Definition at line 131 of file db_fullpath.h.
#define DB_FP_PRINT_MATRIX 0x4 /* print notice that a matrix is present */ |
Definition at line 132 of file db_fullpath.h.
#define DB_FP_PRINT_COMB_INDEX 0x8 /* print non-zero comb tree instance specifiers */ |
Definition at line 133 of file db_fullpath.h.
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 | ||
) |
Extend "pathp" so that it can grow from current fp_len by incr more names.
This is intended primarily as an internal method.
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 | ||
) |
Dup old path from starting index to end.
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.
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().
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 | ||
) |
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
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
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.
int db_identical_full_paths | ( | const struct db_full_path * | a, |
const struct db_full_path * | b | ||
) |
Returns - 1 match 0 different
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.
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.
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
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.
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. |
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.
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
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.
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.