本文整理汇总了C++中bu_free函数的典型用法代码示例。如果您正苦于以下问题:C++ bu_free函数的具体用法?C++ bu_free怎么用?C++ bu_free使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了bu_free函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: db_dirdelete
int
db_dirdelete(struct db_i *dbip, struct directory *dp)
{
struct directory *findp;
struct directory **headp;
RT_CK_DBI(dbip);
RT_CK_DIR(dp);
headp = &(dbip->dbi_Head[db_dirhash(dp->d_namep)]);
if (dp->d_flags & RT_DIR_INMEM) {
if (dp->d_un.ptr != NULL)
bu_free(dp->d_un.ptr, "db_dirdelete() inmem ptr");
}
if (*headp == dp) {
RT_DIR_FREE_NAMEP(dp); /* frees d_namep */
*headp = dp->d_forw;
/* Put 'dp' back on the freelist */
dp->d_forw = rt_uniresource.re_directory_hd;
rt_uniresource.re_directory_hd = dp;
return 0;
}
for (findp = *headp; findp != RT_DIR_NULL; findp = findp->d_forw) {
if (findp->d_forw != dp)
continue;
RT_DIR_FREE_NAMEP(dp); /* frees d_namep */
findp->d_forw = dp->d_forw;
/* Put 'dp' back on the freelist */
dp->d_forw = rt_uniresource.re_directory_hd;
rt_uniresource.re_directory_hd = dp;
return 0;
}
return -1;
}
开发者ID:behollis,项目名称:brlcad-svn-rev65072-gsoc2015,代码行数:38,代码来源:db_lookup.c
示例2: bw_write
int
bw_write(icv_image_t *bif, const char *filename)
{
unsigned char *data;
FILE *fp;
size_t ret, size;
if (bif->color_space == ICV_COLOR_SPACE_RGB) {
icv_rgb2gray_ntsc(bif);
} else if (bif->color_space != ICV_COLOR_SPACE_GRAY) {
bu_log("bw_write : Color Space conflict");
return -1;
}
data = data2uchar(bif);
size = bif->height*bif->width;
if (filename == NULL) {
fp = stdout;
} else {
fp = fopen(filename, "wb");
if (fp == NULL) {
bu_log("bw_write: Cannot open file for saving\n");
return -1;
}
}
ret = fwrite(data, 1, size, fp);
fclose(fp);
bu_free(data, "bw_write : Unsigned Char data");
if (ret != size) {
bu_log("bw_write : Short Write\n");
return -1;
}
return 0;
}
开发者ID:behollis,项目名称:brlcad-svn-rev65072-gsoc2015,代码行数:38,代码来源:bw.c
示例3: process_point
void
process_point(point_line_t *plt) {
static int code_state = INT32_MAX;
static int points = 0;
static point_line_t *plta = NULL;
if (!plt) {
printf("WARNING: Unexpected call to process_point with a NULL point structure\n");
return;
}
/* state change, we're either starting or ending */
if (code_state != plt->code) {
if (points > 0) {
process_multi_group(&plta, points, TOL);
printf("END OF BLOCK %d\n", code_state);
/* finish up this batch */
bu_free((genptr_t)plta, "end point_line_t group");
plta = NULL;
}
if (plt->type)
printf("BEGIN OF BLOCK %s (%d)\n", plt->type, plt->code);
/* get ready for the new batch */
code_state = plt->code;
points = 0;
}
/* allocate room for the new point */
if (!plta)
plta = (point_line_t *) bu_malloc(sizeof(point_line_t), "begin point_line_t group");
else
plta = (point_line_t *) bu_realloc(plta, sizeof(point_line_t) * (points + 1), "add point_line_t");
COPY_POINT_LINE_T(plta[points], *plt);
points++;
}
开发者ID:cciechad,项目名称:brlcad,代码行数:38,代码来源:process.c
示例4: process_triangulation
static int
process_triangulation(struct db_tree_state *tsp, const struct db_full_path *pathp, struct _ged_client_data *dgcdp)
{
int result = 1;
if (!BU_SETJUMP) {
/* try */
nmg_triangulate_model(*tsp->ts_m, tsp->ts_tol);
result = 0;
} else {
/* catch */
char *sofar = db_path_to_string(pathp);
bu_vls_printf(dgcdp->gedp->ged_result_str, "WARNING: Triangulation of %s failed!\n", sofar);
bu_free((void *)sofar, "path string");
} BU_UNSETJUMP;
return result;
}
开发者ID:behollis,项目名称:brlcad-svn-rev65072-gsoc2015,代码行数:23,代码来源:draw.c
示例5: diff_free_result
void
diff_free_result(struct diff_result *result)
{
unsigned int i = 0;
if (result->obj_name) {
bu_free(result->obj_name, "free name copy in diff result");
}
BU_PUT(result->diff_tol, struct bn_tol);
for (i = 0; i < BU_PTBL_LEN(result->param_diffs); i++) {
struct diff_avp *avp = (struct diff_avp *)BU_PTBL_GET(result->param_diffs, i);
diff_free_avp(avp);
BU_PUT(avp, struct diff_avp);
}
bu_ptbl_free(result->param_diffs);
BU_PUT(result->param_diffs, struct bu_ptbl);
for (i = 0; i < BU_PTBL_LEN(result->attr_diffs); i++) {
struct diff_avp *avp = (struct diff_avp *)BU_PTBL_GET(result->attr_diffs, i);
diff_free_avp(avp);
BU_PUT(avp, struct diff_avp);
}
bu_ptbl_free(result->attr_diffs);
BU_PUT(result->attr_diffs, struct bu_ptbl);
}
开发者ID:kanzure,项目名称:brlcad,代码行数:23,代码来源:db_diff.c
示例6: wdb_eval_bool
HIDDEN union tree *
wdb_eval_bool(struct bu_list *hp)
{
int done=0;
union tree *final_tree;
struct tokens *tok;
while (done != 1) {
wdb_do_inter(hp);
wdb_do_union_subtr(hp);
done = wdb_do_paren(hp);
}
if (done == 1) {
tok = BU_LIST_NEXT(tokens, hp);
final_tree = tok->tp;
BU_LIST_DEQUEUE(&tok->l);
bu_free((char *)tok, "tok");
return(final_tree);
}
return (union tree *)NULL;
}
开发者ID:cciechad,项目名称:brlcad,代码行数:23,代码来源:wdb_comb_std.c
示例7: process_triangulation
static void
process_triangulation(struct nmgregion *r, const struct db_full_path *pathp, struct db_tree_state *tsp)
{
if (!BU_SETJUMP) {
/* try */
/* Write the facetized region to the output file */
output_nmg(r, pathp, tsp->ts_regionid, tsp->ts_gmater);
} else {
/* catch */
char *sofar;
sofar = db_path_to_string(pathp);
bu_log("FAILED in triangulator: %s\n", sofar);
bu_free((char *)sofar, "sofar");
/* Sometimes the NMG library adds debugging bits when
* it detects an internal error, before bombing out.
*/
RTG.NMG_debug = NMG_debug; /* restore mode */
/* Release any intersector 2d tables */
nmg_isect2d_final_cleanup();
/* Get rid of (m)any other intermediate structures */
if ((*tsp->ts_m)->magic == NMG_MODEL_MAGIC) {
nmg_km(*tsp->ts_m);
} else {
bu_log("WARNING: tsp->ts_m pointer corrupted, ignoring it.\n");
}
/* Now, make a new, clean model structure for next pass. */
*tsp->ts_m = nmg_mm();
} BU_UNSETJUMP;
}
开发者ID:kanzure,项目名称:brlcad,代码行数:37,代码来源:g-xxx_facets.c
示例8: bu_dirname
/**
* B U _ D I R N A M E
*
* Given a filesystem pathname, return a pointer to a dynamic string
* which is the parent directory of that file/directory.
*
* /usr/dir/file /usr/dir
* @n /usr/dir/ /usr
* @n /usr/file /usr
* @n /usr/ /
* @n /usr /
* @n / /
* @n . .
* @n .. .
* @n usr .
* @n a/b a
* @n a/ .
* @n ../a/b ../a
*/
char *
bu_dirname(const char *cp)
{
char *ret;
char *slash;
int len;
/* Special cases */
if ( cp == NULL ) return bu_strdup(".");
if ( strcmp( cp, "/" ) == 0 )
return bu_strdup("/");
if ( strcmp( cp, "." ) == 0 ||
strcmp( cp, ".." ) == 0 ||
strrchr(cp, '/') == NULL )
return bu_strdup(".");
/* Make a duplicate copy of the string, and shorten it in place */
ret = bu_strdup(cp);
/* A trailing slash doesn't count */
len = strlen(ret);
if ( ret[len-1] == '/' ) ret[len-1] = '\0';
/* If no slashes remain, return "." */
if ( (slash = strrchr(ret, '/')) == NULL ) {
bu_free( ret, "bu_dirname" );
return bu_strdup(".");
}
/* Remove trailing slash, unless it's at front */
if ( slash == ret )
ret[1] = '\0'; /* ret == "/" */
else
*slash = '\0';
return ret;
}
开发者ID:cciechad,项目名称:brlcad,代码行数:56,代码来源:dirname.c
示例9: nmg_to_psurf
static void
nmg_to_psurf(struct nmgregion *r, FILE *fp_psurf)
/* NMG region to be converted. */
/* Jack format file to write vertex list to. */
{
int i;
int *map; /* map from v->index to Jack vert # */
struct bu_ptbl vtab; /* vertex table */
map = (int *)bu_calloc(r->m_p->maxindex, sizeof(int *), "Jack vert map");
/* Built list of vertex structs */
nmg_vertex_tabulate( &vtab, &r->l.magic );
/* XXX What to do if 0 vertices? */
/* Print list of unique vertices and convert from mm to cm. */
for (i = 0; i < BU_PTBL_END(&vtab); i++) {
struct vertex *v;
register struct vertex_g *vg;
v = (struct vertex *)BU_PTBL_GET(&vtab, i);
NMG_CK_VERTEX(v);
vg = v->vg_p;
NMG_CK_VERTEX_G(vg);
NMG_INDEX_ASSIGN( map, v, i+1 ); /* map[v->index] = i+1 */
fprintf(fp_psurf, "%f\t%f\t%f\n",
vg->coord[X] / 10.,
vg->coord[Y] / 10.,
vg->coord[Z] / 10.);
}
fprintf(fp_psurf, ";;\n");
jack_faces(r, fp_psurf, map);
bu_ptbl( &vtab, BU_PTBL_FREE, 0 );
bu_free( (char *)map, "Jack vert map" );
}
开发者ID:cciechad,项目名称:brlcad,代码行数:37,代码来源:g-off.c
示例10: rt_nurb_region_from_srf
struct face_g_snurb *
rt_nurb_region_from_srf(const struct face_g_snurb *srf, int dir, fastf_t param1, fastf_t param2, struct resource *res)
{
register int i;
struct face_g_snurb *region;
struct knot_vector new_knots;
fastf_t *knot_vec = NULL;
size_t maxorder = FMAX(srf->order[0], srf->order[1]);
knot_vec = (fastf_t *)bu_calloc(maxorder * 2, sizeof(fastf_t), "knot vector");
/* Build the new knot vector in a local array, which gets copied
* later in rt_nurb_s_refine(). */
new_knots.knots = &knot_vec[0];
if (dir == RT_NURB_SPLIT_ROW) {
new_knots.k_size = srf->order[0] * 2;
for (i = 0; i < srf->order[0]; i++) {
knot_vec[i] = param1;
knot_vec[i+srf->order[0]] = param2;
}
} else {
new_knots.k_size = srf->order[1] * 2;
for (i = 0; i < srf->order[1]; i++) {
knot_vec[i] = param1;
knot_vec[i+srf->order[1]] = param2;
}
}
region = rt_nurb_s_refine(srf, dir, &new_knots, res);
bu_free(knot_vec, "knot vector");
return region;
}
开发者ID:kanzure,项目名称:brlcad,代码行数:36,代码来源:nurb_ray.c
示例11: region_start
/**
* @brief This routine is called when a region is first encountered in the
* hierarchy when processing a tree
*
* @param tsp tree state (for parsing the tree)
* @param pathp A listing of all the nodes traversed to get to this node in the database
* @param combp the combination record for this region
*/
int
region_start(struct db_tree_state *tsp,
const struct db_full_path *pathp,
const struct rt_comb_internal *combp,
void *client_data)
{
char *name;
struct directory *dp;
struct bu_vls str = BU_VLS_INIT_ZERO;
struct user_data *your_stuff = (struct user_data *)client_data;
RT_CK_DBTS(tsp);
name = db_path_to_string(pathp);
bu_log("region_start %s\n", name);
bu_free(name, "reg_start name");
bu_log("data = %ld\n", your_stuff->data);
rt_pr_tol(&your_stuff->tol);
dp = DB_FULL_PATH_CUR_DIR(pathp);
/* here is where the conversion should be done */
if (combp->region_flag)
printf("Write this region (name=%s) as a part in your format:\n", dp->d_namep);
else
printf("Write this combination (name=%s) as an assembly in your format:\n", dp->d_namep);
describe_tree(combp->tree, &str);
printf("\t%s\n\n", bu_vls_addr(&str));
bu_vls_free(&str);
return 0;
}
开发者ID:behollis,项目名称:brlcad-svn-rev65072-gsoc2015,代码行数:44,代码来源:g-xxx.c
示例12: RT_CK_FULL_PATH
/*
* Called from db_walk_tree().
*
* This routine must be prepared to run in parallel.
*/
union tree *do_region_end(struct db_tree_state *tsp, const struct db_full_path *pathp, union tree *curtree, void *UNUSED(client_data))
{
union tree *ret_tree;
struct bu_list vhead;
struct nmgregion *r;
RT_CK_FULL_PATH(pathp);
RT_CK_TREE(curtree);
RT_CK_TESS_TOL(tsp->ts_ttol);
BN_CK_TOL(tsp->ts_tol);
NMG_CK_MODEL(*tsp->ts_m);
BU_LIST_INIT(&vhead);
{
char *sofar = db_path_to_string(pathp);
bu_log("\ndo_region_end(%d %d%%) %s\n",
regions_tried,
regions_tried>0 ? (regions_converted * 100) / regions_tried : 0,
sofar);
bu_free(sofar, "path string");
}
if (curtree->tr_op == OP_NOP)
return curtree;
regions_tried++;
if (verbose)
bu_log("Attempting to process region %s\n", db_path_to_string(pathp));
ret_tree= process_boolean(curtree, tsp, pathp);
if (ret_tree)
r = ret_tree->tr_d.td_r;
else
{
if (verbose)
bu_log("\tNothing left of this region after Boolean evaluation\n");
regions_written++; /* don't count as a failure */
r = (struct nmgregion *)NULL;
}
regions_converted++;
if (r != (struct nmgregion *)NULL)
{
struct shell *s;
int empty_region=0;
int empty_model=0;
/* Kill cracks */
s = BU_LIST_FIRST(shell, &r->s_hd);
while (BU_LIST_NOT_HEAD(&s->l, &r->s_hd))
{
struct shell *next_s;
next_s = BU_LIST_PNEXT(shell, &s->l);
if (nmg_kill_cracks(s))
{
if (nmg_ks(s))
{
empty_region = 1;
break;
}
}
s = next_s;
}
/* kill zero length edgeuses */
if (!empty_region) {
empty_model = nmg_kill_zero_length_edgeuses(*tsp->ts_m);
}
if (!empty_region && !empty_model) {
process_triangulation(r, pathp, tsp);
regions_written++;
}
if (!empty_model)
nmg_kr(r);
}
/*
* Dispose of original tree, so that all associated dynamic
* memory is released now, not at the end of all regions.
* A return of TREE_NULL from this routine signals an error,
* and there is no point to adding _another_ message to our output,
* so we need to cons up an OP_NOP node to return.
*/
db_free_tree(curtree, &rt_uniresource); /* Does an nmg_kr() */
//.........这里部分代码省略.........
开发者ID:kanzure,项目名称:brlcad,代码行数:101,代码来源:g-xxx_facets.c
示例13: output_nmg
/* routine to output the faceted NMG representation of a BRL-CAD region */
static void
output_nmg(struct nmgregion *r, const struct db_full_path *pathp, int UNUSED(region_id), int UNUSED(material_id))
{
struct model *m;
struct shell *s;
struct vertex *v;
char *region_name;
NMG_CK_REGION(r);
RT_CK_FULL_PATH(pathp);
region_name = db_path_to_string(pathp);
m = r->m_p;
NMG_CK_MODEL(m);
/* triangulate model */
nmg_triangulate_model(m, &tol);
/* Output triangles */
if (verbose) {
printf("Convert these triangles to your format for region %s\n", region_name);
} else {
printf("Converted %s\n", region_name);
}
for (BU_LIST_FOR(s, shell, &r->s_hd))
{
struct faceuse *fu;
NMG_CK_SHELL(s);
for (BU_LIST_FOR(fu, faceuse, &s->fu_hd))
{
struct loopuse *lu;
/* vect_t facet_normal; */
NMG_CK_FACEUSE(fu);
if (fu->orientation != OT_SAME)
continue;
/* Grab the face normal if needed */
/* NMG_GET_FU_NORMAL(facet_normal, fu); */
for (BU_LIST_FOR(lu, loopuse, &fu->lu_hd))
{
struct edgeuse *eu;
NMG_CK_LOOPUSE(lu);
if (BU_LIST_FIRST_MAGIC(&lu->down_hd) != NMG_EDGEUSE_MAGIC)
continue;
/* loop through the edges in this loop (facet) */
if (verbose)
printf("\tfacet:\n");
for (BU_LIST_FOR(eu, edgeuse, &lu->down_hd))
{
NMG_CK_EDGEUSE(eu);
v = eu->vu_p->v_p;
NMG_CK_VERTEX(v);
if (verbose)
printf("\t\t(%g %g %g)\n", V3ARGS(v->vg_p->coord));
}
tot_polygons++;
}
}
}
bu_free(region_name, "region name");
}
开发者ID:kanzure,项目名称:brlcad,代码行数:73,代码来源:g-xxx_facets.c
示例14: fbm_free
/*
* F B M _ F R E E
*/
HIDDEN void
fbm_free(char *cp)
{
bu_free( cp, "fbm_specific" );
}
开发者ID:cciechad,项目名称:brlcad,代码行数:8,代码来源:sh_fbm.c
示例15: rt_vshootray
//.........这里部分代码省略.........
}
/*
* Ray has finally left known space.
*/
if (InitialPart.pt_forw == &InitialPart) {
if (ap->a_miss)
ret = ap->a_miss(ap);
else
ret = 0;
status = "MISSed all primitives";
goto freeup;
}
/*
* All intersections of the ray with the model have been computed.
* Evaluate the boolean trees over each partition.
*/
done = rt_boolfinal(&InitialPart, &FinalPart, BACKING_DIST, INFINITY, regionbits, ap, solidbits);
if (done > 0) goto hitit;
if (FinalPart.pt_forw == &FinalPart) {
if (ap->a_miss)
ret = ap->a_miss(ap);
else
ret = 0;
status = "MISS bool";
goto freeup;
}
/*
* Ray/model intersections exist. Pass the list to the user's
* a_hit() routine. Note that only the hit_dist elements of
* pt_inhit and pt_outhit have been computed yet. To compute both
* hit_point and hit_normal, use the
*
* RT_HIT_NORMAL(NULL, hitp, stp, rayp, 0);
*
* macro. To compute just hit_point, use
*
* VJOIN1(hitp->hit_point, rp->r_pt, hitp->hit_dist, rp->r_dir);
*/
hitit:
if (RT_G_DEBUG&DEBUG_SHOOT) rt_pr_partitions(rtip, &FinalPart, "a_hit()");
if (ap->a_hit)
ret = ap->a_hit(ap, &FinalPart, HeadSeg/* &finished_segs */);
else
ret = 0;
status = "HIT";
/*
* Processing of this ray is complete. Free dynamic resources.
*/
freeup:
{
register struct partition *pp;
/* Free up initial partition list */
for (pp = InitialPart.pt_forw; pp != &InitialPart;) {
register struct partition *newpp;
newpp = pp;
pp = pp->pt_forw;
FREE_PT(newpp, ap->a_resource);
}
/* Free up final partition list */
for (pp = FinalPart.pt_forw; pp != &FinalPart;) {
register struct partition *newpp;
newpp = pp;
pp = pp->pt_forw;
FREE_PT(newpp, ap->a_resource);
}
}
/* Segs can't be freed until after a_hit() has returned */
#if 0
/* FIXME: depends on commented out code above */
if (HeadSeg)
RT_FREE_SEG_LIST(HeadSeg, ap->a_resource);
#endif
out:
bu_free((char *)ary_stp, "*ary_stp[]");
bu_free((char *)ary_rp, "*ary_rp[]");
bu_free((char *)ary_seg, "ary_seg[]");
if (solidbits != NULL) {
bu_bitv_free(solidbits);
}
if (RT_G_DEBUG&(DEBUG_ALLRAYS|DEBUG_SHOOT|DEBUG_PARTITION)) {
bu_log("----------mshootray cpu=%d %d, %d lvl=%d (%s) %s ret=%d\n",
ap->a_resource->re_cpu,
ap->a_x, ap->a_y,
ap->a_level,
ap->a_purpose != (char *)0 ? ap->a_purpose : "?",
status, ret);
}
return ret;
}
开发者ID:kanzure,项目名称:brlcad,代码行数:101,代码来源:vshoot.c
示例16: main
//.........这里部分代码省略.........
/* See if we have input and output files specified */
if (!extract_path(&in_path, av[ac-2])) {
bu_vls_printf(&log, "Error: no input path identified: %s\n", av[ac-2]);
ret = 1;
}
if (!extract_path(&out_path, av[ac-1])) {
bu_vls_printf(&log, "Error: no output path identified: %s\n", av[ac-1]);
ret = 1;
}
/* Make sure we have distinct input and output paths */
if (bu_vls_strlen(&in_path) > 0 && BU_STR_EQUAL(bu_vls_addr(&in_path), bu_vls_addr(&out_path))) {
bu_vls_printf(&log, "Error: identical path specified for both input and output: %s\n", bu_vls_addr(&out_path));
ret = 1;
}
/* Find out what input file type we are dealing with */
if (options[IN_FORMAT]) {
in_fmt = options[IN_FORMAT].arg;
} else {
/* If we aren't overridden by an option, it's worth doing file
* introspection to see if the file contents identify the input
* type solidly, provided we have that capability.*/
/* fake type introspection for testing: */
//bu_vls_sprintf(&in_format, "step");
}
fmt = parse_model_string(&in_format, &log, in_fmt, av[ac-2]);
in_type = (fmt < 0) ? MIME_MODEL_UNKNOWN : (mime_model_t)fmt;
in_fmt = NULL;
/* Identify output file type */
if (options[OUT_FORMAT]) out_fmt = options[OUT_FORMAT].arg;
fmt = parse_model_string(&out_format, &log, out_fmt, av[ac-1]);
out_type = (fmt < 0) ? MIME_MODEL_UNKNOWN : (mime_model_t)fmt;
out_fmt = NULL;
/* If we get to this point without knowing both input and output types, we've got a problem */
if (in_type == MIME_MODEL_UNKNOWN) {
bu_vls_printf(&log, "Error: no format type identified for input path: %s\n", bu_vls_addr(&in_path));
ret = 1;
}
if (out_type == MIME_MODEL_UNKNOWN) {
bu_vls_printf(&log, "Error: no format type identified for output path: %s\n", bu_vls_addr(&out_path));
ret = 1;
}
/* If everything isn't OK, we're done - report and clean up memory */
if (ret == 1) goto cleanup;
/* If we've gotten this far, we know enough to try to convert. Until we
* hook in conversion calls to libgcv, print a summary of the option
* parsing results for debugging. */
in_fmt = bu_file_mime_str((int)in_type, MIME_MODEL);
out_fmt = bu_file_mime_str((int)out_type, MIME_MODEL);
bu_log("Input file format: %s\n", in_fmt);
bu_log("Output file format: %s\n", out_fmt);
bu_log("Input file path: %s\n", bu_vls_addr(&in_path));
bu_log("Output file path: %s\n", bu_vls_addr(&out_path));
switch (in_type) {
case MIME_MODEL_VND_FASTGEN:
fast4_arg_process(bu_vls_addr(&input_opts));
break;
case MIME_MODEL_STL:
stl_arg_process(bu_vls_addr(&input_opts));
default:
break;
}
switch (out_type) {
case MIME_MODEL_VND_FASTGEN:
fast4_arg_process(bu_vls_addr(&output_opts));
break;
case MIME_MODEL_STL:
stl_arg_process(bu_vls_addr(&output_opts));
default:
break;
}
/* Clean up */
cleanup:
if (bu_vls_strlen(&log) > 0) bu_log("%s", bu_vls_addr(&log));
if (in_fmt) bu_free((char *)in_fmt, "input format string");
if (out_fmt) bu_free((char *)out_fmt, "output format string");
bu_free(options, "free options");
bu_free(buffer, "free buffer");
bu_vls_free(&in_format);
bu_vls_free(&in_path);
bu_vls_free(&out_format);
bu_vls_free(&out_path);
bu_vls_free(&log);
bu_vls_free(&input_opts);
bu_vls_free(&output_opts);
return ret;
}
开发者ID:behollis,项目名称:brlcad-svn-rev65072-gsoc2015,代码行数:101,代码来源:gcv.cpp
示例17: ged_killtree
int
ged_killtree(struct ged *gedp, int argc, const char *argv[])
{
struct directory *dp;
int i;
int c;
struct killtree_data gktd;
static const char *usage = "[-a|-f|-n] object(s)";
GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
GED_CHECK_READ_ONLY(gedp, GED_ERROR);
GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR);
/* initialize result */
bu_vls_trunc(gedp->ged_result_str, 0);
/* must be wanting help */
if (argc == 1) {
bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
return GED_HELP;
}
gktd.gedp = gedp;
gktd.killrefs = 0;
gktd.print = 0;
gktd.force = 0;
gktd.ac = 1;
gktd.top = NULL;
gktd.av = (char **)bu_calloc(1, sizeof(char *) * AV_STEP, "alloc av");
gktd.av_capacity = AV_STEP;
BU_ASSERT(gktd.ac + argc + 2 < AV_STEP); /* potential -n opts */
gktd.av[0] = "killrefs";
gktd.av[1] = (char *)0;
bu_optind = 1;
while ((c = bu_getopt(argc, (char * const *)argv, "afn")) != -1) {
switch (c) {
case 'a':
gktd.killrefs = 1;
break;
case 'n':
gktd.print = 1;
gktd.av[gktd.ac++] = bu_strdup("-n");
gktd.av[gktd.ac] = (char *)0;
break;
case 'f':
gktd.force = 1;
break;
default:
bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
bu_free(gktd.av, "free av (error)");
gktd.av = NULL;
return GED_ERROR;
}
}
argc -= (bu_optind - 1);
argv += (bu_optind - 1);
/* Objects that would be killed are in the first sublist */
if (gktd.print)
bu_vls_printf(gedp->ged_result_str, "{");
for (i = 1; i < argc; i++) {
if ((dp = db_lookup(gedp->ged_wdbp->dbip, argv[i], LOOKUP_NOISY)) == RT_DIR_NULL)
continue;
/* ignore phony objects */
if (dp->d_addr == RT_DIR_PHONY_ADDR)
continue;
/* stash the what's killed so we can find refs elsewhere */
gktd.top = argv[i];
db_functree(gedp->ged_wdbp->dbip, dp,
killtree_callback, killtree_callback,
gedp->ged_wdbp->wdb_resp, (void *)&gktd);
}
/* Close the sublist of would-be killed objects. Also open the
* sublist of objects that reference the would-be killed objects.
*/
if (gktd.print)
bu_vls_printf(gedp->ged_result_str, "} {");
if (gktd.killrefs && gktd.ac > 1) {
gedp->ged_internal_call = 1;
(void)ged_killrefs(gedp, gktd.ac, (const char **)gktd.av);
gedp->ged_internal_call = 0;
for (i = 1; i < gktd.ac; i++) {
if (!gktd.print)
bu_vls_printf(gedp->ged_result_str, "Freeing %s\n", gktd.av[i]);
bu_free((void *)gktd.av[i], "killtree_data");
gktd.av[i] = NULL;
}
}
if (gktd.print)
//.........这里部分代码省略.........
开发者ID:behollis,项目名称:brlcad-svn-rev65072-gsoc2015,代码行数:101,代码来源:killtree.c
示例18: Add_new_name
static struct name_conv_list *
Add_new_name(char *name, unsigned int obj, int type)
{
struct name_conv_list *ptr;
if ( debug )
bu_log( "Add_new_name( %s, x%x, %d )\n", name, obj, type );
if ( type != ASSEMBLY_TYPE && type != PART_TYPE && type != CUT_SOLID_TYPE )
{
bu_exit(EXIT_FAILURE, "Bad type for name (%s) in Add_new_name\n", name );
}
/* Add a new name */
ptr = (struct name_conv_list *)bu_calloc( 1, sizeof( struct name_conv_list ), "Add_new_name: prev->next" );
ptr->next = (struct name_conv_list *)NULL;
ptr->brlcad_name = bu_strdup( name );
ptr->obj = obj;
if ( do_regex && type != CUT_SOLID_TYPE )
{
regmatch_t pmatch;
if ( regexec( ®_cmp, ptr->brlcad_name, 1, &pmatch, 0 ) == 0 )
{
/* got a match */
bu_strlcpy( &ptr->brlcad_name[pmatch.rm_so], &ptr->brlcad_name[pmatch.rm_eo], MAX_LINE_SIZE );
}
if ( debug )
bu_log( "\tafter reg_ex, name is %s\n", ptr->brlcad_name );
}
else if ( type == CUT_SOLID_TYPE ) {
bu_free( (char *)ptr->brlcad_name, "brlcad_name" );
ptr->brlcad_name = NULL;
}
ptr->solid_use_no = 0;
ptr->comb_use_no = 0;
if ( type != CUT_SOLID_TYPE )
{
/* make sure brlcad_name is unique */
char *tmp;
tmp = ptr->brlcad_name;
ptr->brlcad_name = bu_strdup( Build_unique_name( ptr->brlcad_name ) );
bu_free( (char *)tmp, "brlcad_name" );
}
if ( type == ASSEMBLY_TYPE )
{
ptr->solid_name = NULL;
return( ptr );
}
else if ( type == PART_TYPE )
{
struct bu_vls vls;
bu_vls_init( &vls );
bu_vls_strcpy( &vls, "s." );
bu_vls_strcat( &vls, ptr->brlcad_name );
ptr->solid_name = bu_vls_strgrab( &vls );
}
else
{
struct bu_vls vls;
bu_vls_init( &vls );
bu_vls_strcpy( &vls, "s." );
bu_vls_strcat( &vls, ptr->brlcad_name );
ptr->solid_name = bu_vls_strgrab( &vls );
}
/* make sure solid name is unique */
ptr->solid_name = bu_strdup( Build_unique_name( ptr->solid_name ) );
return( ptr );
}
开发者ID:cciechad,项目名称:brlcad,代码行数:80,代码来源:proe-g.c
示例19: rt_nmg_brep
//.........这里部分代码省略.........
// With the surface and the face defined, make
// trimming loops and create faces. To generate UV
// coordinates for each from and to for the
// edgecurves, the UV origin is defined to be v1,
// v1->v2 is defined as the U domain, and v1->v4 is
// defined as the V domain.
vect_t u_axis, v_axis;
VSUB2(u_axis, uv2, uv1);
VSUB2(v_axis, uv4, uv1);
fastf_t u_axis_dist = MAGNITUDE(u_axis);
fastf_t v_axis_dist = MAGNITUDE(v_axis);
// Now that the surface context is set up, add the loops.
for (BU_LIST_FOR(lu, loopuse, &fu->lu_hd)) {
int edges=0;
if (BU_LIST_FIRST_MAGIC(&lu->down_hd) != NMG_EDGEUSE_MAGIC) continue; // loop is a single vertex
ON_BrepLoop::TYPE looptype;
// Check if this is an inner or outer loop
if (lu->orientation == OT_SAME) {
looptype = ON_BrepLoop::outer;
} else {
looptype = ON_BrepLoop::inner;
}
ON_BrepLoop& loop = (*b)->NewLoop(looptype, face);
for (BU_LIST_FOR(eu, edgeuse, &lu->down_hd)) {
++edges;
vect_t ev1, ev2;
struct vertex_g *vg1, *vg2;
vg1 = eu->vu_p->v_p->vg_p;
NMG_CK_VERTEX_G(vg1);
int vert1 = brepi[vg1->index];
VMOVE(ev1, vg1->coord);
vg2 = eu->eumate_p->vu_p->v_p->vg_p;
NMG_CK_VERTEX_G(vg2);
int vert2 = brepi[vg2->index];
VMOVE(ev2, vg2->coord);
// Add edge if not already added
if (brepi[eu->e_p->index] == -INT_MAX) {
/* always add edges with the small vertex index as from */
if (vg1->index > vg2->index) {
int tmpvert = vert1;
vert1 = vert2;
vert2 = tmpvert;
}
// Create and add 3D curve
ON_Curve* c3d = new ON_LineCurve((*b)->m_V[vert1].Point(), (*b)->m_V[vert2].Point());
c3d->SetDomain(0.0, 1.0);
(*b)->m_C3.Append(c3d);
// Create and add 3D edge
ON_BrepEdge& e = (*b)->NewEdge((*b)->m_V[vert1], (*b)->m_V[vert2] , (*b)->m_C3.Count() - 1);
e.m_tolerance = 0.0;
brepi[eu->e_p->index] = e.m_edge_index;
}
// Regardless of whether the edge existed as
// an object, it needs to be added to the
// trimming loop
vect_t u_component, v_component;
ON_3dPoint vg1pt(vg1->coord);
int orientation = 0;
edge_index = brepi[eu->e_p->index];
if (vg1pt != (*b)->m_V[(*b)->m_E[edge_index].m_vi[0]].Point()) {
orientation = 1;
}
// Now, make 2d trimming curves
vect_t vect1, vect2;
VSUB2(vect1, ev1, uv1);
VSUB2(vect2, ev2, uv1);
ON_2dPoint from_uv, to_uv;
double u0, u1, v0, v1;
surf->GetDomain(0, &u0, &u1);
surf->GetDomain(1, &v0, &v1);
VPROJECT(vect1, u_axis, u_component, v_component);
from_uv.y = u0 + MAGNITUDE(u_component)/u_axis_dist*(u1-u0);
from_uv.x = v0 + MAGNITUDE(v_component)/v_axis_dist*(v1-v0);
VPROJECT(vect2, u_axis, u_component, v_component);
to_uv.y = u0 + MAGNITUDE(u_component)/u_axis_dist*(u1-u0);
to_uv.x = v0 + MAGNITUDE(v_component)/v_axis_dist*(v1-v0);
ON_3dPoint S1, S2;
ON_3dVector Su, Sv;
surf->Ev1Der(from_uv.x, from_uv.y, S1, Su, Sv);
surf->Ev1Der(to_uv.x, to_uv.y, S2, Su, Sv);
ON_Curve* c2d = new ON_LineCurve(from_uv, to_uv);
c2d->SetDomain(0.0, 1.0);
int c2i = (*b)->m_C2.Count();
(*b)->m_C2.Append(c2d);
edge_index = brepi[eu->e_p->index];
ON_BrepTrim& trim = (*b)->NewTrim((*b)->m_E[edge_index], orientation, loop, c2i);
trim.m_type = ON_BrepTrim::mated;
trim.m_tolerance[0] = 0.0;
trim.m_tolerance[1] = 0.0;
}
}
}
(*b)->SetTrimIsoFlags();
}
}
bu_free(brepi, "rt_nmg_brep: brepi[]");
}
开发者ID:cogitokat,项目名称:brlcad,代码行数:101,代码来源:nmg_brep.cpp
示例20: killtree_callback
HIDDEN void
killtree_callback(struct db_i *dbip, struct directory *dp, void *ptr)
{
struct killtree_data *gktdp = (struct killtree_data *)ptr;
int ref_exists = 0;
if (dbip == DBI_NULL)
return;
/* don't bother checking for references if the -f or -a flags are
* presented to force a full kill and all references respectively.
*/
if (!gktdp->force && !gktdp->killrefs)
ref_exists = find_reference(dbip, gktdp->top, dp->d_namep);
/* if a reference exists outside of the subtree we're killing, we
* don't kill this object or it'll create invalid reference
* elsewhere in the database. do nothing.
*/
if (ref_exists)
return;
if (gktdp->print) {
if (!gktdp->killrefs)
bu_vls_printf(gktdp->gedp->ged_result_str, "%s ", dp->d_namep);
else {
if ((size_t)(gktdp->ac + 2) >= gktdp->av_capacity) {
gktdp->av = (char **)bu_realloc(gktdp->av, sizeof(char *) * (gktdp->av_capacity + AV_STEP), "realloc av");
gktdp->av_capacity += AV_STEP;
}
gktdp->av[gktdp->ac++] = bu_strdup(dp->d_namep);
gktdp->av[gktdp->ac] = (char *)0;
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);
bu_vls_printf(gktdp->gedp->ged_result_str, "KILL %s: %s\n",
(dp->d_flags & RT_DIR_COMB) ? "COMB" : "Solid",
dp->d_namep);
if (!gktdp->killrefs) {
if (db_delete(dbip, dp) != 0 || db_dirdelete(dbip, dp) != 0) {
bu_vls_printf(gktdp->gedp->ged_result_str, "an error occurred while deleting %s\n", dp->d_namep);
}
} else {
if ((size_t)(gktdp->ac + 2) >= gktdp->av_capacity) {
gktdp->av = (char **)bu_realloc(gktdp->av, sizeof(char *) * (gktdp->av_capacity + AV_STEP), "realloc av");
gktdp->av_capacity += AV_STEP;
}
gktdp->av[gktdp->ac++] = bu_strdup(dp->d_namep);
gktdp->av[gktdp->ac] = (char *)0;
if (db_delete(dbip, dp) != 0 || db_dirdelete(dbip, dp) != 0) {
bu_vls_printf(gktdp->gedp->ged_result_str, "an error occurred while deleting %s\n", dp->d_namep);
/* Remove from list */
bu_free((void *)gktdp->av[--gktdp->ac], "killtree_callback");
gktdp->av[gktdp->ac] = (char *)0;
}
}
}
}
开发者ID:behollis,项目名称:brlcad-svn-rev65072-gsoc2015,代码行数:64,代码来源:killtree.c
注:本文中的bu_free函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论