本文整理汇总了C++中bu_log函数的典型用法代码示例。如果您正苦于以下问题:C++ bu_log函数的具体用法?C++ bu_log怎么用?C++ bu_log使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了bu_log函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: rt_ehy_brep
extern "C" void
rt_ehy_brep(ON_Brep **b, const struct rt_db_internal *ip, const struct bn_tol *)
{
struct rt_ehy_internal *eip;
RT_CK_DB_INTERNAL(ip);
eip = (struct rt_ehy_internal *)ip->idb_ptr;
RT_EHY_CK_MAGIC(eip);
// Check the parameters
if (!NEAR_ZERO(VDOT(eip->ehy_Au, eip->ehy_H), RT_DOT_TOL)) {
bu_log("rt_ehy_brep: Au and H are not perpendicular!\n");
return;
}
if (!NEAR_EQUAL(MAGNITUDE(eip->ehy_Au), 1.0, RT_LEN_TOL)) {
bu_log("rt_ehy_brep: Au not a unit vector!\n");
return;
}
if (MAGNITUDE(eip->ehy_H) < RT_LEN_TOL
|| eip->ehy_c < RT_LEN_TOL
|| eip->ehy_r1 < RT_LEN_TOL
|| eip->ehy_r2 < RT_LEN_TOL) {
bu_log("rt_ehy_brep: not all dimensions positive!\n");
return;
}
if (eip->ehy_r2 > eip->ehy_r1) {
bu_log("rt_ehy_brep: semi-minor axis cannot be longer than semi-major axis!\n");
return;
}
point_t p1_origin;
ON_3dPoint plane1_origin, plane2_origin;
ON_3dVector plane_x_dir, plane_y_dir;
// First, find plane in 3 space corresponding to the bottom face of the EPA.
vect_t x_dir, y_dir;
VMOVE(x_dir, eip->ehy_Au);
VCROSS(y_dir, eip->ehy_Au, eip->ehy_H);
VUNITIZE(y_dir);
VMOVE(p1_origin, eip->ehy_V);
plane1_origin = ON_3dPoint(p1_origin);
plane_x_dir = ON_3dVector(x_dir);
plane_y_dir = ON_3dVector(y_dir);
const ON_Plane ehy_bottom_plane(plane1_origin, plane_x_dir, plane_y_dir);
// Next, create an ellipse in the plane corresponding to the edge of the ehy.
ON_Ellipse ellipse1(ehy_bottom_plane, eip->ehy_r1, eip->ehy_r2);
ON_NurbsCurve* ellcurve1 = ON_NurbsCurve::New();
ellipse1.GetNurbForm((*ellcurve1));
ellcurve1->SetDomain(0.0, 1.0);
// Generate the bottom cap
ON_SimpleArray<ON_Curve*> boundary;
boundary.Append(ON_Curve::Cast(ellcurve1));
ON_PlaneSurface* bp = new ON_PlaneSurface();
bp->m_plane = ehy_bottom_plane;
bp->SetDomain(0, -100.0, 100.0);
bp->SetDomain(1, -100.0, 100.0);
bp->SetExtents(0, bp->Domain(0));
bp->SetExtents(1, bp->Domain(1));
(*b)->m_S.Append(bp);
const int bsi = (*b)->m_S.Count() - 1;
ON_BrepFace& bface = (*b)->NewFace(bsi);
(*b)->NewPlanarFaceLoop(bface.m_face_index, ON_BrepLoop::outer, boundary, true);
const ON_BrepLoop* bloop = (*b)->m_L.Last();
bp->SetDomain(0, bloop->m_pbox.m_min.x, bloop->m_pbox.m_max.x);
bp->SetDomain(1, bloop->m_pbox.m_min.y, bloop->m_pbox.m_max.y);
bp->SetExtents(0, bp->Domain(0));
bp->SetExtents(1, bp->Domain(1));
(*b)->SetTrimIsoFlags(bface);
delete ellcurve1;
// Now, the hard part. Need an elliptical hyperbolic NURBS surface
// First step is to create a nurbs curve.
double intercept_calc = (eip->ehy_c)*(eip->ehy_c)/(MAGNITUDE(eip->ehy_H) + eip->ehy_c);
double intercept_dist = MAGNITUDE(eip->ehy_H) + eip->ehy_c - intercept_calc;
double intercept_length = intercept_dist - MAGNITUDE(eip->ehy_H);
double MX = MAGNITUDE(eip->ehy_H);
double MP = MX + intercept_length;
double w = (MX/MP)/(1-MX/MP);
point_t ep1, ep2, ep3;
VSET(ep1, -eip->ehy_r1, 0, 0);
VSET(ep2, 0, 0, w*intercept_dist);
VSET(ep3, eip->ehy_r1, 0, 0);
ON_3dPoint onp1 = ON_3dPoint(ep1);
ON_3dPoint onp2 = ON_3dPoint(ep2);
ON_3dPoint onp3 = ON_3dPoint(ep3);
ON_3dPointArray cpts(3);
cpts.Append(onp1);
cpts.Append(onp2);
//.........这里部分代码省略.........
开发者ID:kanzure,项目名称:brlcad,代码行数:101,代码来源:ehy_brep.cpp
示例2: server_helo
/**
* callback when a HELO message packet is received.
*
* We should not encounter this packet specifically since we listened
* for it before beginning processing of packets as part of a simple
* handshake setup.
*/
void
server_helo(struct pkg_conn *UNUSED(connection), char *buf)
{
bu_log("Unexpected HELO encountered\n");
free(buf);
}
开发者ID:cogitokat,项目名称:brlcad,代码行数:13,代码来源:server.c
示例3: server_ciao
/**
* callback when a CIAO message packet is received
*/
void
server_ciao(struct pkg_conn *UNUSED(connection), char *buf)
{
bu_log("CIAO encountered\n");
free(buf);
}
开发者ID:cogitokat,项目名称:brlcad,代码行数:9,代码来源:server.c
示例4: nmg_radial_join_eu
/**
* Make all the edgeuses around eu2's edge to refer to eu1's edge,
* taking care to organize them into the proper angular orientation,
* so that the attached faces are correctly arranged radially
* around the edge.
*
* This depends on both edges being part of face loops,
* with vertex and face geometry already associated.
*
* The two edgeuses being joined might well be from separate shells,
* so the issue of preserving (simple) faceuse orientation parity
* (SAME, OPPOSITE, OPPOSITE, SAME, ...)
* can't be used here -- that only applies to faceuses from the same shell.
*
* Some of the edgeuses around both edges may be wires.
*
* Call to nmg_check_radial at end has been deleted.
* Note that after two radial EU's have been joined
* a third cannot be joined to them without creating
* unclosed space that nmg_check_radial will find.
*/
void
nmg_radial_join_eu(struct edgeuse *eu1, struct edgeuse *eu2, const struct bn_tol *tol)
{
NMG_CK_EDGEUSE(eu1);
NMG_CK_EDGEUSE(eu1->radial_p);
NMG_CK_EDGEUSE(eu1->eumate_p);
NMG_CK_EDGEUSE(eu2);
NMG_CK_EDGEUSE(eu2->radial_p);
NMG_CK_EDGEUSE(eu2->eumate_p);
BN_CK_TOL(tol);
if (eu1->e_p == eu2->e_p) return;
if (!NMG_ARE_EUS_ADJACENT(eu1, eu2))
bu_bomb("nmg_radial_join_eu() edgeuses don't share vertices.\n");
if (eu1->vu_p->v_p == eu1->eumate_p->vu_p->v_p) bu_bomb("nmg_radial_join_eu(): 0 length edge (topology)\n");
if (bn_pt3_pt3_equal(eu1->vu_p->v_p->vg_p->coord,
eu1->eumate_p->vu_p->v_p->vg_p->coord, tol))
{
bu_log("vertices should have been fused:\n");
bu_log("\tvertex %p (%.12f %.12f %.12f)\n",
(void *)eu1->vu_p->v_p,
V3ARGS(eu1->vu_p->v_p->vg_p->coord));
bu_log("\tvertex %p (%.12f %.12f %.12f)\n",
(void *)eu1->eumate_p->vu_p->v_p,
V3ARGS(eu1->eumate_p->vu_p->v_p->vg_p->coord));
bu_bomb("nmg_radial_join_eu(): 0 length edge (geometry)\n");
}
#if 1
nmg_radial_join_eu_NEW(eu1, eu2, tol);
return;
#else
/* Ensure faces are of same orientation, if both eu's have faces */
fu1 = nmg_find_fu_of_eu(eu1);
fu2 = nmg_find_fu_of_eu(eu2);
if (fu1 && fu2) {
if (fu1->orientation != fu2->orientation) {
eu2 = eu2->eumate_p;
fu2 = nmg_find_fu_of_eu(eu2);
if (fu1->orientation != fu2->orientation)
bu_bomb("nmg_radial_join_eu(): Cannot find matching orientations for faceuses\n");
}
}
/* XXX This angle-based algorithm can't handle snurb faces! */
if (fu1 && fu1->f_p->g.magic_p && *fu1->f_p->g.magic_p == NMG_FACE_G_SNURB_MAGIC) return;
if (fu2 && fu2->f_p->g.magic_p && *fu2->f_p->g.magic_p == NMG_FACE_G_SNURB_MAGIC) return;
/* Construct local coordinate system for this edge,
* so all angles can be measured relative to a common reference.
*/
nmg_eu_2vecs_perp(xvec, yvec, zvec, original_eu1, tol);
if (RTG.NMG_debug & DEBUG_MESH_EU) {
bu_log("nmg_radial_join_eu(eu1=%p, eu2=%p) e1=%p, e2=%p\n",
(void *)eu1, (void *)eu2,
(void *)eu1->e_p, (void *)eu2->e_p);
nmg_euprint("\tJoining", eu1);
nmg_euprint("\t to", eu2);
bu_log("Faces around eu1:\n");
nmg_pr_fu_around_eu_vecs(eu1, xvec, yvec, zvec, tol);
bu_log("Faces around eu2:\n");
nmg_pr_fu_around_eu_vecs(eu2, xvec, yvec, zvec, tol);
}
best_eg = nmg_pick_best_edge_g(eu1, eu2, tol);
for (iteration1=0; eu2 && iteration1 < 10000; iteration1++) {
int code = 0;
struct edgeuse *first_eu1 = eu1;
int wire_skip = 0;
/* Resume where we left off from last eu2 insertion */
/* find a place to insert eu2 around eu1's edge */
//.........这里部分代码省略.........
开发者ID:kanzure,项目名称:brlcad,代码行数:101,代码来源:nmg_mesh.c
示例5: main
//.........这里部分代码省略.........
case 'P':
ncpu = atoi(bu_optarg);
break;
case 'x':
sscanf(bu_optarg, "%x", (unsigned int *)&RTG.debug);
break;
case 'D':
conv_data.tol.dist = atof(bu_optarg);
conv_data.tol.dist_sq = conv_data.tol.dist * conv_data.tol.dist;
rt_pr_tol(&conv_data.tol);
break;
case 'X':
sscanf(bu_optarg, "%x", (unsigned int *)&RTG.NMG_debug);
break;
case '8':
use_mc = 1;
break;
case '9':
use_bottess = 1;
break;
default:
usage(argv[0]);
}
}
if (bu_optind+1 >= argc)
usage(argv[0]);
conv_data.fp = stdout;
if (output_file) {
if ((conv_data.fp=fopen(output_file, "wb+")) == NULL) {
perror(argv[0]);
bu_exit(1, "Cannot open ASCII output file (%s) for writing\n", output_file);
}
}
/* Open brl-cad database */
argc -= bu_optind;
argv += bu_optind;
if (argc < 2 || argv[0] == NULL || argv[1] == NULL)
usage(argv[0]);
gcvwriter.write_region = nmg_to_egg;
if ((dbip = db_open(argv[0], DB_OPEN_READONLY)) == DBI_NULL) {
perror(argv[0]);
bu_exit(1, "Unable to open geometry database file (%s)\n", argv[0]);
}
if (db_dirbuild(dbip)) {
bu_exit(1, "ERROR: db_dirbuild failed\n");
}
BN_CK_TOL(tree_state.ts_tol);
RT_CK_TESS_TOL(tree_state.ts_ttol);
if (verbose) {
bu_log("Model: %s\n", argv[0]);
bu_log("Objects:");
for (i=1; i<argc; i++)
bu_log(" %s", argv[i]);
bu_log("\nTessellation tolerances:\n\tabs = %g mm\n\trel = %g\n\tnorm = %g\n",
tree_state.ts_ttol->abs, tree_state.ts_ttol->rel, tree_state.ts_ttol->norm);
bu_log("Calculational tolerances:\n\tdist = %g mm perp = %g\n",
tree_state.ts_tol->dist, tree_state.ts_tol->perp);
}
/* print the egg header stuff, including the command line to execute it */
fprintf(conv_data.fp, "<CoordinateSystem> { Z-Up }\n\n");
fprintf(conv_data.fp, "<Comment> {\n \"%s", *argv);
for (i=1; i<argc; i++)
fprintf(conv_data.fp, " %s", argv[i]);
fprintf(conv_data.fp, "\"\n}\n");
/* Walk indicated tree(s). Each region will be output separately */
while (--argc) {
fprintf(conv_data.fp, "<Group> %s {\n", *(argv+1));
(void) db_walk_tree(dbip, /* db_i */
1, /* argc */
(const char **)(++argv), /* argv */
ncpu, /* ncpu */
&tree_state, /* state */
NULL, /* start func */
use_mc?gcv_region_end_mc:use_bottess?gcv_bottess_region_end:gcv_region_end, /* end func */
use_mc?NULL:nmg_booltree_leaf_tess, /* leaf func */
(void *)&gcvwriter); /* client_data */
fprintf(conv_data.fp, "}\n");
}
bu_log("%ld triangles written\n", conv_data.tot_polygons);
if (output_file)
fclose(conv_data.fp);
/* Release dynamic storage */
nmg_km(the_model);
rt_vlist_cleanup();
db_close(dbip);
return 0;
}
开发者ID:behollis,项目名称:brlcad-svn-rev65072-gsoc2015,代码行数:101,代码来源:g-egg.c
示例6: main
int
main(int argc, char *argv[])
{
size_t i;
int ret;
int c;
double percent;
char copy_buffer[CP_BUF_SIZE] = {0};
struct directory *dp;
bu_setprogname(argv[0]);
bu_setlinebuf(stderr);
bu_log("%s", brlcad_ident("BRL-CAD to IGES Translator"));
bu_log("Please direct bug reports to <[email protected]>\n\n");
tree_state = rt_initial_tree_state; /* struct copy */
tree_state.ts_tol = &tol;
tree_state.ts_ttol = &ttol;
tree_state.ts_m = &the_model;
ttol.magic = RT_TESS_TOL_MAGIC;
/* Defaults, updated by command line options. */
ttol.abs = 0.0;
ttol.rel = 0.01;
ttol.norm = 0.0;
/* FIXME: These need to be improved */
tol.magic = BN_TOL_MAGIC;
tol.dist = 0.0005;
tol.dist_sq = tol.dist * tol.dist;
tol.perp = 1e-6;
tol.para = 1 - tol.perp;
the_model = nmg_mm();
BU_LIST_INIT(&RTG.rtg_vlfree); /* for vlist macros */
rt_init_resource(&rt_uniresource, 0, NULL);
prog_name = argv[0];
/* Get command line arguments. */
while ((c = bu_getopt(argc, argv, "ftsmd:a:n:o:p:r:vx:P:X:")) != -1) {
switch (c) {
case 'f': /* Select facetized output */
mode = FACET_MODE;
multi_file = 0;
break;
case 't':
mode = TRIMMED_SURF_MODE;
multi_file = 0;
break;
case 'm': /* multi-file mode */
multi_file = 1;
mode = TRIMMED_SURF_MODE;
break;
case 's': /* Select NURB output */
do_nurbs = 1;
break;
case 'v':
verbose++;
break;
case 'a': /* Absolute tolerance. */
ttol.abs = atof(bu_optarg);
break;
case 'r': /* Relative tolerance. */
ttol.rel = atof(bu_optarg);
break;
case 'n': /* Surface normal tolerance. */
ttol.norm = atof(bu_optarg);
break;
case 'd': /* distance tolerance */
tol.dist = atof(bu_optarg);
tol.dist_sq = tol.dist * tol.dist;
break;
case 'x':
sscanf(bu_optarg, "%x", (unsigned int *)&RTG.debug);
break;
case 'X':
sscanf(bu_optarg, "%x", (unsigned int *)&RTG.NMG_debug);
NMG_debug = RTG.NMG_debug;
break;
case 'o': /* Output file name. */
output_file = bu_optarg;
break;
case 'P':
ncpu = atoi(bu_optarg);
break;
default:
usage(argv[0]);
break;
}
}
if (bu_optind+1 >= argc) {
usage(argv[0]);
}
/* Open BRL-CAD database */
argc -= bu_optind;
//.........这里部分代码省略.........
开发者ID:kanzure,项目名称:brlcad,代码行数:101,代码来源:g-iges.c
示例7: csg_comb_func
void
csg_comb_func(struct db_i *dbip, struct directory *dp, void *UNUSED(ptr))
{
struct rt_db_internal intern;
struct rt_comb_internal *comb;
struct iges_properties props;
int comb_len;
size_t i;
int dependent = 1;
int *de_pointers;
int id;
/* when this is called in facet mode, we only want groups */
if (mode == FACET_MODE && (dp->d_flags & RT_DIR_REGION))
return;
/* check if already written */
if (dp->d_uses < 0)
return;
for (i = 0; i < no_of_indeps; i++) {
if (!bu_strncmp(dp->d_namep, independent[i], NAMESIZE+1)) {
dependent = 0;
break;
}
}
id = rt_db_get_internal(&intern, dp, dbip, (matp_t)NULL, &rt_uniresource);
if (id < 0)
return;
if (id != ID_COMBINATION) {
bu_log("Directory/Database mismatch! is %s a combination or not?\n", dp->d_namep);
return;
}
comb = (struct rt_comb_internal *)intern.idb_ptr;
RT_CK_COMB(comb);
if (verbose)
bu_log("Combination - %s\n", dp->d_namep);
if (!comb->tree) {
bu_log("Warning: empty combination (%s)\n", dp->d_namep);
dp->d_uses = 0;
return;
}
comb_len = db_tree_nleaves(comb->tree);
de_pointers = (int *)bu_calloc(comb_len, sizeof(int), "csg_comb_func");
comb_form = 0;
de_pointer_number = 0;
if (get_de_pointers(comb->tree, dp, comb_len, de_pointers)) {
bu_log("Error in combination %s\n", dp->d_namep);
bu_free((char *)de_pointers, "csg_comb_func de_pointers");
rt_db_free_internal(&intern);
return;
}
bu_strlcpy(props.name, dp->d_namep, NAMESIZE+1);
props.material_name[0] = '\0';
props.material_params[0] = '\0';
props.region_flag = ' ';
props.ident = 0;
props.air_code = 0;
props.material_code = 0;
props.los_density = 0;
props.color[0] = 0;
props.color[1] = 0;
props.color[2] = 0;
get_props(&props, comb);
dp->d_uses = (-comb_to_iges(comb, comb_len, dependent, &props, de_pointers, fp_dir, fp_param));
if (!dp->d_uses) {
comb_error++;
bu_log("g-iges: combination (%s) not written to iges file\n", dp->d_namep);
}
rt_db_free_internal(&intern);
bu_free((char *)de_pointers, "csg_comb_func de_pointers");
}
开发者ID:kanzure,项目名称:brlcad,代码行数:83,代码来源:g-iges.c
示例8: spline
int
spline(int entityno, struct face_g_snurb **b_patch)
{
int k1; /* upper index of first sum */
int k2; /* upper index of second sum */
int m1; /* degree of 1st set of basis functions */
int m2; /* degree of 2nd set of basis functions */
int prop1; /* !0 if closed in first direction */
int prop2; /* !0 if closed in second direction */
int prop3; /* !0 if polynomial (else rational) */
int prop4; /* !0 if periodic in first direction */
int prop5; /* !0 if periodic in second direction */
int sol_num; /* IGES solid type number */
int n1, n2;
int i, j, k;
int count = 0;
int point_size;
fastf_t min_knot;
double max_wt;
double scan;
/* Acquiring Data */
if (dir[entityno]->param <= pstart) {
bu_log("Illegal parameter pointer for entity D%07d (%s)\n" ,
dir[entityno]->direct, dir[entityno]->name);
return 0;
}
Readrec(dir[entityno]->param);
Readint(&sol_num, "");
Readint(&k1, "");
Readint(&k2, "");
Readint(&m1, "");
Readint(&m2, "");
Readint(&prop1, "");
Readint(&prop2, "");
Readint(&prop3, "");
Readint(&prop4, "");
Readint(&prop5, "");
n1 = k1 - m1 + 1;
n2 = k2 - m2 + 1;
/* spl_new: Creates a spline surface data structure
* u_order (e.g. cubic = order 4)
* v_order
* num_u (e.g. num control points + order)
* num_v
* num_rows num control points in V direction
* num_cols num control points in U direction
* point_size number of values in a point (e.g. 3 or 4)
*/
if (prop3 == 0) {
point_size = 4;
} else {
point_size = 3;
}
(*b_patch) = rt_nurb_new_snurb(
m1+1, m2+1,
n1+2*m1+1, n2+2*m2+1,
k2+1, k1+1,
RT_NURB_MAKE_PT_TYPE(point_size, 2,
(prop3 == 0 ? RT_NURB_PT_RATIONAL : RT_NURB_PT_NONRAT)),
(struct resource *)NULL);
/* U knot vector */
min_knot = 0.0;
for (i = 0; i <= n1+2*m1; i++) {
Readdbl(&scan, "");
(*b_patch)->u.knots[i] = scan; /* double to fastf_t */
if ((*b_patch)->u.knots[i] < min_knot)
min_knot = (*b_patch)->u.knots[i];
}
if (min_knot < 0.0) {
for (i = 0; i <= n1+2*m1; i++) {
(*b_patch)->u.knots[i] -= min_knot;
}
}
min_knot = 0.0;
/* V knot vector */
for (i = 0; i <= n2+2*m2; i++) {
Readdbl(&scan, "");
(*b_patch)->v.knots[i] = scan; /* double to fastf_t */
if ((*b_patch)->v.knots[i] < min_knot)
min_knot = (*b_patch)->v.knots[i];
}
if (min_knot < 0.0) {
for (i = 0; i <= n2+2*m2; i++) {
(*b_patch)->v.knots[i] -= min_knot;
}
}
/* weights */
max_wt = 0.0;
//.........这里部分代码省略.........
开发者ID:kanzure,项目名称:brlcad,代码行数:101,代码来源:spline.c
示例9: db_close
void
db_close(register struct db_i *dbip)
{
register int i;
register struct directory *dp, *nextdp;
if (!dbip)
return;
RT_CK_DBI(dbip);
if (RT_G_DEBUG&DEBUG_DB) bu_log("db_close(%s) %p uses=%d\n",
dbip->dbi_filename, (void *)dbip, dbip->dbi_uses);
bu_semaphore_acquire(BU_SEM_LISTS);
if ((--dbip->dbi_uses) > 0) {
bu_semaphore_release(BU_SEM_LISTS);
/* others are still using this database */
return;
}
bu_semaphore_release(BU_SEM_LISTS);
/* ready to free the database -- use count is now zero */
/* free up any mapped files */
if (dbip->dbi_mf) {
/*
* We're using an instance of a memory mapped file.
* We have two choices:
* Either dissociate from the memory mapped file
* by clearing dbi_mf->apbuf, or
* keeping our already-scanned dbip ready for
* further use, with our dbi_uses counter at 0.
* For speed of re-open, at the price of some address space,
* the second choice is taken.
*/
bu_close_mapped_file(dbip->dbi_mf);
bu_free_mapped_files(0);
dbip->dbi_mf = (struct bu_mapped_file *)NULL;
}
/* try to ensure/encourage that the file is written out */
db_sync(dbip);
if (dbip->dbi_fp) {
fclose(dbip->dbi_fp);
}
if (dbip->dbi_title)
bu_free(dbip->dbi_title, "dbi_title");
if (dbip->dbi_filename)
bu_free(dbip->dbi_filename, "dbi_filename");
db_free_anim(dbip);
rt_color_free(); /* Free MaterHead list */
/* Release map of database holes */
rt_mempurge(&(dbip->dbi_freep));
rt_memclose();
dbip->dbi_inmem = NULL; /* sanity */
bu_ptbl_free(&dbip->dbi_clients);
/* Free all directory entries */
for (i = 0; i < RT_DBNHASH; i++) {
for (dp = dbip->dbi_Head[i]; dp != RT_DIR_NULL;) {
RT_CK_DIR(dp);
nextdp = dp->d_forw;
RT_DIR_FREE_NAMEP(dp); /* frees d_namep */
if ((dp->d_flags & RT_DIR_INMEM) && (dp->d_un.ptr != NULL)) {
bu_free(dp->d_un.ptr, "db_close d_un.ptr");
dp->d_un.ptr = NULL;
dp->d_len = 0;
}
/* Put 'dp' back on the freelist */
dp->d_forw = rt_uniresource.re_directory_hd;
rt_uniresource.re_directory_hd = dp;
/* null'ing the forward pointer here is a huge
* memory leak as it causes the loss of all
* nodes on the freelist except the first.
* (so don't do it)
*/
dp = nextdp;
}
dbip->dbi_Head[i] = RT_DIR_NULL; /* sanity*/
}
if (dbip->dbi_filepath != NULL) {
bu_free_argv(2, dbip->dbi_filepath);
dbip->dbi_filepath = NULL; /* sanity */
}
bu_free((char *)dbip, "struct db_i");
}
开发者ID:kanzure,项目名称:brlcad,代码行数:98,代码来源:db_open.c
示例10: db_open
struct db_i *
db_open(const char *name, const char *mode)
{
register struct db_i *dbip = DBI_NULL;
register int i;
char **argv;
if (name == NULL) return DBI_NULL;
if (RT_G_DEBUG & DEBUG_DB) {
bu_log("db_open(%s, %s)\n", name, mode);
}
if (mode && mode[0] == 'r' && mode[1] == '\0') {
/* Read-only mode */
struct bu_mapped_file *mfp;
mfp = bu_open_mapped_file(name, "db_i");
if (mfp == NULL) {
if (RT_G_DEBUG & DEBUG_DB) {
bu_log("db_open(%s) FAILED, unable to open as a mapped file\n", name);
}
return DBI_NULL;
}
/* Is this a re-use of a previously mapped file? */
if (mfp->apbuf) {
dbip = (struct db_i *)mfp->apbuf;
RT_CK_DBI(dbip);
dbip->dbi_uses++;
/*
* decrement the mapped file reference counter by 1,
* references are already counted in dbip->dbi_uses
*/
bu_close_mapped_file(mfp);
if (RT_G_DEBUG & DEBUG_DB) {
bu_log("db_open(%s) dbip=%p: reused previously mapped file\n", name, (void *)dbip);
}
return dbip;
}
BU_ALLOC(dbip, struct db_i);
dbip->dbi_mf = mfp;
dbip->dbi_eof = (off_t)mfp->buflen;
dbip->dbi_inmem = mfp->buf;
dbip->dbi_mf->apbuf = (void *)dbip;
/* Do this too, so we can seek around on the file */
if ((dbip->dbi_fp = fopen(name, "rb")) == NULL) {
if (RT_G_DEBUG & DEBUG_DB) {
bu_log("db_open(%s) FAILED, unable to open file for reading\n", name);
}
bu_free((char *)dbip, "struct db_i");
return DBI_NULL;
}
dbip->dbi_read_only = 1;
} else {
/* Read-write mode */
BU_ALLOC(dbip, struct db_i);
dbip->dbi_eof = (off_t)-1L;
if ((dbip->dbi_fp = fopen(name, "r+b")) == NULL) {
if (RT_G_DEBUG & DEBUG_DB) {
bu_log("db_open(%s) FAILED, unable to open file for reading/writing\n", name);
}
bu_free((char *)dbip, "struct db_i");
return DBI_NULL;
}
dbip->dbi_read_only = 0;
}
/* Initialize fields */
for (i = 0; i < RT_DBNHASH; i++)
dbip->dbi_Head[i] = RT_DIR_NULL;
dbip->dbi_local2base = 1.0; /* mm */
dbip->dbi_base2local = 1.0;
dbip->dbi_title = (char *)0;
dbip->dbi_uses = 1;
/* FIXME: At some point, expand argv search paths with
* getenv("BRLCAD_FILE_PATH") paths
*/
/* intentionally acquiring dynamic memory here since we set
* dbip->dbi_filepath to argv. arg values and array memory are
* released during db_close.
*/
argv = (char **)bu_malloc(3 * sizeof(char *), "dbi_filepath[3]");
argv[0] = bu_strdup(".");
argv[1] = bu_dirname(name);
argv[2] = NULL;
dbip->dbi_filepath = argv;
//.........这里部分代码省略.........
开发者ID:kanzure,项目名称:brlcad,代码行数:101,代码来源:db_open.c
示例11: osl_parse
/**
* This function parses the input shaders
* Example:
* shadername=color#Cin#point#0.0#0.0#1.0
* shadername=glass
* shadername=checker#K#float#4.0
* join=color#Cout#shader#Cin1
* join=glass#Cout#shader#Cin1
**/
int
osl_parse(const struct bu_vls *in_vls, ShaderGroupInfo &group_info)
{
struct bu_vls vls = BU_VLS_INIT_ZERO;
register char *cp;
char *name;
char *value;
int retval;
BU_CK_VLS(in_vls);
/* Duplicate the input string. This algorithm is destructive. */
bu_vls_vlscat(&vls, in_vls);
cp = bu_vls_addr(&vls);
while (*cp) {
/* NAME = VALUE white-space-separator */
/* skip any leading whitespace */
while (*cp != '\0' && isspace(*cp))
cp++;
/* Find equal sign */
name = cp;
while (*cp != '\0' && *cp != '=')
cp++;
if (*cp == '\0') {
if (name == cp) break;
/* end of string in middle of arg */
bu_log("bu_structparse: input keyword '%s' is not followed by '=' in '%s'\nInput must be in keyword=value format.\n",
name, bu_vls_addr(in_vls));
bu_vls_free(&vls);
return -2;
}
*cp++ = '\0';
/* Find end of value. */
if (*cp == '"') {
/* strings are double-quote (") delimited skip leading " &
* find terminating " while skipping escaped quotes (\")
*/
for (value = ++cp; *cp != '\0'; ++cp)
if (*cp == '"' &&
(cp == value || *(cp-1) != '\\'))
break;
if (*cp != '"') {
bu_log("bu_structparse: keyword '%s'=\" without closing \"\n",
name);
bu_vls_free(&vls);
return -3;
}
} else {
/* non-strings are white-space delimited */
value = cp;
while (*cp != '\0' && !isspace(*cp))
cp++;
}
if (*cp != '\0')
*cp++ = '\0';
if (BU_STR_EQUAL(name, "shadername")) {
ShaderInfo sh_info;
osl_parse_shader(value, sh_info);
group_info.shader_layers.push_back(sh_info);
}
else if (BU_STR_EQUAL(name, "join")) {
ShaderEdge sh_edge;
osl_parse_edge(value, sh_edge);
group_info.shader_edges.push_back(sh_edge);
}
}
bu_vls_free(&vls);
return 0;
}
开发者ID:behollis,项目名称:brlcad-svn-rev65072-gsoc2015,代码行数:88,代码来源:sh_osl.cpp
示例12: make_shape
static int
make_shape(struct rt_wdb *fd, int verbose, int debug, size_t idx, size_t num, point2d_t *v)
{
size_t i;
point_t V = VINIT_ZERO;
vect_t h = VINIT_ZERO;
struct bu_vls str_sketch = BU_VLS_INIT_ZERO;
struct bu_vls str_extrude = BU_VLS_INIT_ZERO;
struct rt_sketch_internal skt;
struct line_seg *lsg = NULL;
/* nothing to do? */
if (num == 0 || !v)
return 0;
if (!fd) {
if (debug)
bu_log("ERROR: unable to write out shape\n");
return 1;
}
if (verbose || debug)
bu_log("%zu vertices\n", num);
skt.magic = RT_SKETCH_INTERNAL_MAGIC;
VMOVE(skt.V, V);
VSET(skt.u_vec, 1.0, 0.0, 0.0);
VSET(skt.v_vec, 0.0, 1.0, 0.0);
skt.vert_count = num;
skt.verts = v;
/* Specify number of segments */
skt.curve.count = num;
/* FIXME: investigate allocation */
skt.curve.reverse = (int *)bu_calloc(skt.curve.count, sizeof(int), "sketch: reverse");
skt.curve.segment = (void **)bu_calloc(skt.curve.count, sizeof(void *), "segs");
/* Insert all line segments except the last one */
for (i = 0; i < num-1; i++) {
BU_ALLOC(lsg, struct line_seg);
lsg->magic = CURVE_LSEG_MAGIC;
lsg->start = i;
lsg->end = i + 1;
skt.curve.segment[i] = (void *)lsg;
}
/* Connect the last connected vertex to the first vertex */
BU_ALLOC(lsg, struct line_seg);
lsg->magic = CURVE_LSEG_MAGIC;
lsg->start = num - 1;
lsg->end = 0;
skt.curve.segment[num - 1] = (void *)lsg;
/* write out sketch shape */
bu_vls_sprintf(&str_sketch, "shape-%zu.sketch", idx);
mk_sketch(fd, bu_vls_addr(&str_sketch), &skt);
/* extrude the shape */
bu_vls_sprintf(&str_extrude, "shape-%zu.extrude", idx);
VSET(h, 0.0, 0.0, 10.0); /* FIXME: arbitrary height */
mk_extrusion(fd, bu_vls_addr(&str_extrude), bu_vls_addr(&str_sketch), skt.V, h, skt.u_vec, skt.v_vec, 0);
/* clean up */
bu_vls_free(&str_sketch);
bu_vls_free(&str_extrude);
rt_curve_free(&skt.curve);
return 0;
}
开发者ID:kanzure,项目名称:brlcad,代码行数:73,代码来源:shp-g.c
示例13: main
int
main(int argc, char *argv[])
{
int opt;
size_t i;
const char *argv0 = argv[0];
struct rt_wdb *fd_out;
struct bu_vls vls_in = BU_VLS_INIT_ZERO;
struct bu_vls vls_out = BU_VLS_INIT_ZERO;
int opt_debug = 0;
int opt_verbose = 0;
/* shapelib vars */
SHPHandle shapefile;
size_t shp_num_invalid = 0;
int shp_num_entities = 0;
int shp_type = 0;
/* intentionally double for scan */
double shp_min[4] = HINIT_ZERO;
double shp_max[4] = HINIT_ZERO;
/* geometry */
point2d_t *verts = NULL;
size_t num_verts = 0;
if (argc < 2) {
usage(argv0);
bu_exit(1, NULL);
}
while ((opt = bu_getopt(argc, argv, "dxv")) != -1) {
switch (opt) {
case 'd':
opt_debug = 1;
break;
case 'x':
sscanf(bu_optarg, "%x", (unsigned int *) &RTG.debug);
bu_printb("librt RT_G_DEBUG", RT_G_DEBUG, DEBUG_FORMAT);
bu_log("\n");
break;
case 'v':
opt_verbose++;
break;
default:
usage(argv0);
bu_exit(1, NULL);
break;
}
}
argv += bu_optind;
argc -= bu_optind;
if (opt_verbose)
bu_log("Verbose output enabled.\n");
if (opt_debug)
bu_log("Debugging output enabled.\n");
/* validate input/output file specifiers */
if (argc < 1) {
usage(argv0);
bu_exit(1, "ERROR: Missing input and output file names\n");
}
bu_vls_strcat(&vls_in, argv[0]);
if (argc < 2) {
bu_vls_printf(&vls_out, "%s.g", argv[0]);
} else {
bu_vls_strcat(&vls_out, argv[1]);
}
if (opt_verbose) {
bu_log("Reading from [%s]\n", bu_vls_addr(&vls_in));
bu_log("Writing to [%s]\n\n", bu_vls_addr(&vls_out));
}
/* initialize single threaded resource */
rt_init_resource(&rt_uniresource, 0, NULL);
/* open the input */
shapefile = SHPOpen(bu_vls_addr(&vls_in), "rb");
if (!shapefile) {
bu_log("ERROR: Unable to open shapefile [%s]\n", bu_vls_addr(&vls_in));
bu_vls_free(&vls_in);
bu_vls_free(&vls_out);
bu_exit(4, NULL); }
/* print shapefile details */
if (opt_verbose) {
SHPGetInfo(shapefile, &shp_num_entities, &shp_type, shp_min, shp_max);
bu_log("Shapefile Type: %s\n", SHPTypeName(shp_type));
bu_log("# of Shapes: %d\n\n", shp_num_entities);
bu_log("File Bounds: (%12.3f,%12.3f, %.3g, %.3g)\n"
" to (%12.3f,%12.3f, %.3g, %.3g)\n",
shp_min[0], shp_min[1], shp_min[2], shp_min[3],
shp_max[0], shp_max[1], shp_max[2], shp_max[3]);
//.........这里部分代码省略.........
开发者ID:kanzure,项目名称:brlcad,代码行数:101,代码来源:shp-g.c
示例14: make_hole
int
make_hole(struct rt_wdb *wdbp, /* database to be modified */
point_t hole_start, /* center of start of hole */
vect_t hole_depth, /* depth and direction of hole */
fastf_t hole_radius, /* radius of hole */
int num_objs, /* number of objects that this hole affects */
struct directory **dp) /* array of directory pointers
* [num_objs] of objects to
* get this hole applied
*/
{
struct bu_vls tmp_name = BU_VLS_INIT_ZERO;
int i, base_len, count=0;
RT_CHECK_WDB(wdbp);
/* make sure we are only making holes in combinations, they do not
* have to be regions
*/
for (i=0; i<num_objs; i++) {
RT_CK_DIR(dp[i]);
if (!(dp[i]->d_flags & RT_DIR_COMB)) {
bu_log("make_hole(): can only make holes in combinations\n");
bu_log("\t%s is not a combination\n", dp[i]->d_namep);
return 4;
}
}
/* make a unique name for the RCC we will use (of the form
* "make_hole_%d")
*/
bu_vls_strcat(&tmp_name, "make_hole_");
base_len = bu_vls_strlen(&tmp_name);
bu_vls_strcat(&tmp_name, "0");
while ((db_lookup(wdbp->dbip, bu_vls_addr(&tmp_name), LOOKUP_QUIET)) != RT_DIR_NULL) {
count++;
bu_vls_trunc(&tmp_name, base_len);
bu_vls_printf(&tmp_name, "%d", count);
}
/* build the RCC based on parameters passed in */
if (mk_rcc(wdbp, bu_vls_addr(&tmp_name), hole_start, hole_depth, hole_radius)) {
bu_log("Failed to create hole cylinder!!!\n");
bu_vls_free(&tmp_name);
return 2;
}
/* subtract this RCC from each combination in the list passed in */
for (i=0; i<num_objs; i++) {
struct rt_db_internal intern;
struct rt_comb_internal *comb;
union tree *tree;
/* get the internal form of the combination */
if (rt_db_get_internal(&intern, dp[i], wdbp->dbip, NULL, wdbp->wdb_resp) < 0) {
bu_log("Failed to get %s\n", dp[i]->d_namep);
bu_vls_free(&tmp_name);
return 3;
}
comb = (struct rt_comb_internal *)intern.idb_ptr;
/* Build a new "subtract" node (will be the root of the new tree) */
BU_ALLOC(tree, union tree);
RT_TREE_INIT(tree);
tree->tr_b.tb_op = OP_SUBTRACT;
tree->tr_b.tb_left = comb->tree; /* subtract from the original tree */
comb->tree = tree;
/* Build a node for the RCC to be subtracted */
BU_ALLOC(tree, union tree);
RT_TREE_INIT(tree);
tree->tr_l.tl_op = OP_DB_LEAF;
tree->tr_l.tl_mat = NULL;
tree->tr_l.tl_name = bu_strdup(bu_vls_addr(&tmp_name)); /* copy name of RCC */
/* Put the RCC node to the right of the root */
comb->tree->tr_b.tb_right = tree;
/* Save the modified combination. This will overwrite the
* original combination if wdbp was opened with the
* RT_WDB_TYPE_DB_DISK flag. If wdbp was opened with the
* RT_WDB_TYPE_DB_INMEM flag, then the combination will be
* temporarily over-written in memory only and the disk file
* will not be modified.
*/
wdb_put_internal(wdbp, dp[i]->d_namep, &intern, 1.0);
}
return 0;
}
开发者ID:kanzure,项目名称:brlcad,代码行数:89,代码来源:dynamic_geometry.c
示例15: fbo_cell_tcl
/*
*
* Usage:
* procname cell xmin ymin width height color
*/
HIDDEN int
fbo_cell_tcl(void *clientData, int argc, const char **argv)
{
struct fb_obj *fbop = (struct fb_obj *)clientData;
int xmin, ymin;
long width;
long height;
size_t i;
RGBpixel pixel;
unsigned char *pp;
if (argc != 7) {
bu_log("ERROR: expecting seven arguments\n");
return BRLCAD_ERROR;
}
if (sscanf(argv[2], "%d", &xmin) != 1) {
bu_log("fb_cell: bad xmin value - %s", argv[2]);
return BRLCAD_ERROR;
}
if (sscanf(argv[3], "%d", &ymin) != 1) {
bu_log("fb_cell: bad ymin value - %s", argv[3]);
return BRLCAD_ERROR;
}
/* check coordinates */
if (!fbo_coords_ok(fbop->fbo_fbs.fbs_fbp, xmin, ymin)) {
bu_log("fb_cell: coordinates (%s, %s) are invalid.", argv[2], argv[3]);
return BRLCAD_ERROR;
}
if (sscanf(argv[4], "%ld", &width) != 1) {
bu_log("fb_cell: bad width - %s", argv[4]);
return BRLCAD_ERROR;
}
if (sscanf(argv[5], "%ld", &height) != 1) {
bu_log("fb_cell: bad height - %s", argv[5]);
return BRLCAD_ERROR;
}
/* check width and height */
if (width <=0 || height <=0) {
bu_log("fb_cell: width and height must be > 0");
return BRLCAD_ERROR;
}
/*
* Decompose the color list into its constituents.
* For now must be in the form of rrr ggg bbb.
*/
if (fbo_tcllist2color(argv[6], pixel) == BRLCAD_ERROR) {
bu_log("fb_cell: invalid color spec: %s", argv[6]);
return BRLCAD_ERROR;
}
pp = (unsigned char *)bu_calloc(width*height, sizeof(RGBpixel), "allocate pixel array");
for (i = 0; i < width*height*sizeof(RGBpixel); i+=sizeof(RGBpixel)) {
pp[i] = pixel[0];
pp[i+1] = pixel[1];
pp[i+2] = pixel[2];
}
fb_writerect(fbop->fbo_fbs.fbs_fbp, xmin, ymin, width, height, pp);
bu_free((void *)pp, "free pixel array");
return BRLCAD_OK;
}
开发者ID:kanzure,项目名称:brlcad,代码行数:75,代码来源:fb_obj.c
示例16: interact
/**
* Handle user interaction. Interact() prompts on stdin for a key
* word, looks the key word up in the command table and, if it finds
* the key word, the command is executed.
*/
void
interact(int input_source, void *sPtr, struct rt_i *rtip)
{
int Ch; /* individual characters of the input line */
int Prev_ch=0; /* previous character */
char line_buffer[256]; /* line of text the user types */
int i; /* position on the line_buffer[] */
com_table *ctp; /* command table pointer */
int key_len; /* the length of the key word */
int in_cmt; /* are we now within a comment? */
int more_on_line = 0; /* are we withing a multi-command line? */
#define next_char(s) (input_source == READING_FILE) ? \
fgetc((FILE *) s) : \
(input_source == READING_STRING) ? \
sgetc((char *) s) : \
(bu_log("next_char(%d) error. Shouldn't happen\n", \
input_source), EOF)
if (nirt_debug & DEBUG_INTERACT) {
bu_log("interact(%s, %p)...\n",
(input_source == READING_FILE) ? "READING_FILE" :
(input_source == READING_STRING) ? "READING_STRING" : "???",
sPtr);
}
/* Prime the pump when reading from a string */
if (input_source == READING_STRING)
sgetc((char *)0);
for (;;) {
in_cmt = 0;
key_len = 0;
if ((input_source == READING_FILE) && (sPtr == stdin)
&& (silent_flag != SILENT_YES) && (! more_on_line))
(void) fputs(NIRT_PROMPT, stdout);
more_on_line = 0;
while (((Ch = next_char(sPtr)) == ' ') || (Ch == '\t')) {
if (nirt_debug & DEBUG_INTERACT)
bu_log("Skipping '%c'\n", Ch);
}
if (Ch == '\n' || Ch == '\r')
continue;
for (i = 0; (Ch != '\n') && (Ch != '\r') && (i < 255); ++i) {
if (Ch == CMT_CHAR) {
if ( Prev_ch == '\\' ) {
i--;
} else {
in_cmt = 1;
while (((Ch = next_char(sPtr)) != EOF) && (Ch != '\n') && (Ch != '\r'))
;
}
}
if (Ch == SEP_CHAR) {
more_on_line = 1;
break;
} else if ((Ch == '\n') || (Ch == '\r')) {
break;
}
if ((input_source == READING_STRING) && (Ch == '\0'))
break;
if (Ch == EOF) {
if ((input_source == READING_FILE) && (sPtr == stdin))
bu_exit(1, "Unexpected EOF in input!!\n");
else
return;
}
if (key_len == 0 && (Ch == ' ' || Ch == '\t'))
key_len = i; /* length of key word */
line_buffer[i] = Ch;
Prev_ch = Ch;
if (nirt_debug & DEBUG_INTERACT)
bu_log("line_buffer[%d] = '%c' (o%o)\n", i, Ch, Ch);
Ch = next_char(sPtr);
}
if (key_len == 0) {
/* length of key word */
if (in_cmt)
continue;
key_len = i;
}
line_buffer[i] = '\0';
if (nirt_debug & DEBUG_INTERACT)
bu_log("Line buffer contains '%s'\n", line_buffer);
ctp = get_comtab_ent(line_buffer, key_len);
//.........这里部分代码省略.........
开发者ID:kanzure,项目名称:brlcad,代码行数:101,代码来源:interact.c
示例17: fbo_rect_tcl
/*
*
* Usage:
* procname cell xmin ymin width height color
*/
HIDDEN int
fbo_rect_tcl(void *clientData, int argc, const char **argv)
{
struct fb_obj *fbop = (struct fb_obj *)clientData;
int xmin, ymin;
int xmax, ymax;
int width;
int height;
int i;
RGBpixel pixel;
if (argc != 7) {
bu_log("ERROR: expecting seven arguments\n");
return BRLCAD_ERROR;
}
if (sscanf(argv[2], "%d", &xmin) != 1) {
bu_log("fb_rect: bad xmin value - %s", argv[2]);
return BRLCAD_ERROR;
}
if (sscanf(argv[3], "%d", &ymin) != 1) {
bu_log("fb_rect: bad ymin value - %s", argv[3]);
return BRLCAD_ERROR;
}
/* check coordinates */
if (!fbo_coords_ok(fbop->fbo_fbs.fbs_fbp, xmin, ymin)) {
bu_log("fb_rect: coordinates (%s, %s) are invalid.", argv[2], argv[3]);
return BRLCAD_ERROR;
}
if (sscanf(argv[4], "%d", &width) != 1) {
bu_log("fb_rect: bad width - %s", argv[4]);
return BRLCAD_ERROR;
}
if (sscanf(argv[5], "%d", &height) != 1) {
bu_log("fb_rect: bad height - %s", argv[5]);
return BRLCAD_ERROR;
|
请发表评论