Thread: [brlcad-commits] SF.net SVN: brlcad:[44815] brlcad/trunk/src/libged/analyze.c
Open Source Solid Modeling CAD
Brought to you by:
brlcad
From: <br...@us...> - 2011-06-08 04:25:34
|
Revision: 44815 http://brlcad.svn.sourceforge.net/brlcad/?rev=44815&view=rev Author: brlcad Date: 2011-06-08 04:25:28 +0000 (Wed, 08 Jun 2011) Log Message: ----------- use M_PI instead of an overly-truncated similarity. Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2011-06-08 04:22:51 UTC (rev 44814) +++ brlcad/trunk/src/libged/analyze.c 2011-06-08 04:25:28 UTC (rev 44815) @@ -456,9 +456,7 @@ return vol; } -static double pi = 3.1415926535898; - /* analyze a torus */ static void ged_tor_anal(struct ged *gedp, const struct rt_db_internal *ip) @@ -471,8 +469,8 @@ r1 = tor->r_a; r2 = tor->r_h; - vol = 2.0 * pi * pi * r1 * r2 * r2; - sur_area = 4.0 * pi * pi * r1 * r2; + vol = 2.0 * M_PI * M_PI * r1 * r2 * r2; + sur_area = 4.0 * M_PI * M_PI * r1 * r2; bu_vls_printf(&gedp->ged_result_str, "TOR Vol = %.8f (%.8f gal) Surface Area = %.8f\n", vol*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, @@ -509,14 +507,14 @@ type = 0; - vol = 4.0 * pi * ma * mb * mc / 3.0; + vol = 4.0 * M_PI * ma * mb * mc / 3.0; bu_vls_printf(&gedp->ged_result_str, "ELL Volume = %.8f (%.8f gal)", vol*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, vol/GALLONS_TO_MM3); if ( fabs(ma-mb) < .00001 && fabs(mb-mc) < .00001 ) { /* have a sphere */ - sur_area = 4.0 * pi * ma * ma; + sur_area = 4.0 * M_PI * ma * ma; bu_vls_printf(&gedp->ged_result_str, " Surface Area = %.8f\n", sur_area*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local); return; @@ -574,11 +572,11 @@ } ecc = sqrt(major*major - minor*minor) / major; if ( type == PROLATE ) { - sur_area = 2.0 * pi * minor * minor + - (2.0 * pi * (major*minor/ecc) * asin(ecc)); + sur_area = 2.0 * M_PI * minor * minor + + (2.0 * M_PI * (major*minor/ecc) * asin(ecc)); } else if ( type == OBLATE ) { - sur_area = 2.0 * pi * major * major + - (pi * (minor*minor/ecc) * log( (1.0+ecc)/(1.0-ecc) )); + sur_area = 2.0 * M_PI * major * major + + (M_PI * (minor*minor/ecc) * log( (1.0+ecc)/(1.0-ecc) )); } else { sur_area = 0.0; } @@ -612,14 +610,14 @@ type = 0; - vol = 4.0 * pi * ma * mb * mc / 3.0; + vol = 4.0 * M_PI * ma * mb * mc / 3.0; bu_vls_printf(&gedp->ged_result_str, "SUPERELL Volume = %.8f (%.8f gal)", vol*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, vol/GALLONS_TO_MM3); if ( fabs(ma-mb) < .00001 && fabs(mb-mc) < .00001 ) { /* have a sphere */ - sur_area = 4.0 * pi * ma * ma; + sur_area = 4.0 * M_PI * ma * ma; bu_vls_printf(&gedp->ged_result_str, " Surface Area = %.8f\n", sur_area*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local); return; @@ -677,11 +675,11 @@ } ecc = sqrt(major*major - minor*minor) / major; if ( type == PROLATE ) { - sur_area = 2.0 * pi * minor * minor + - (2.0 * pi * (major*minor/ecc) * asin(ecc)); + sur_area = 2.0 * M_PI * minor * minor + + (2.0 * M_PI * (major*minor/ecc) * asin(ecc)); } else if ( type == OBLATE ) { - sur_area = 2.0 * pi * major * major + - (pi * (minor*minor/ecc) * log( (1.0+ecc)/(1.0-ecc) )); + sur_area = 2.0 * M_PI * major * major + + (M_PI * (minor*minor/ecc) * log( (1.0+ecc)/(1.0-ecc) )); } else { sur_area = 0.0; } @@ -737,27 +735,27 @@ switch ( cgtype ) { case GED_ANAL_RCC: - area_base = pi * ma * ma; + area_base = M_PI * ma * ma; area_top = area_base; - area_side = 2.0 * pi * ma * mh; - vol = pi * ma * ma * mh; + area_side = 2.0 * M_PI * ma * mh; + vol = M_PI * ma * ma * mh; bu_vls_printf(&gedp->ged_result_str, "RCC "); break; case GED_ANAL_TRC: - area_base = pi * ma * ma; - area_top = pi * mc * mc; - area_side = pi * (ma+mc) * sqrt((ma-mc)*(ma-mc)+(mh*mh)); - vol = pi * mh * (ma*ma + mc*mc + ma*mc) / 3.0; + area_base = M_PI * ma * ma; + area_top = M_PI * mc * mc; + area_side = M_PI * (ma+mc) * sqrt((ma-mc)*(ma-mc)+(mh*mh)); + vol = M_PI * mh * (ma*ma + mc*mc + ma*mc) / 3.0; bu_vls_printf(&gedp->ged_result_str, "TRC "); break; case GED_ANAL_REC: - area_base = pi * ma * mb; - area_top = pi * mc * md; + area_base = M_PI * ma * mb; + area_top = M_PI * mc * md; /* approximate */ - area_side = 2.0 * pi * mh * sqrt(0.5 * (ma*ma + mb*mb)); - vol = pi * ma * mb * mh; + area_side = 2.0 * M_PI * mh * sqrt(0.5 * (ma*ma + mb*mb)); + vol = M_PI * ma * mb * mh; bu_vls_printf(&gedp->ged_result_str, "REC "); break; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2011-06-29 06:59:27
|
Revision: 45295 http://brlcad.svn.sourceforge.net/brlcad/?rev=45295&view=rev Author: brlcad Date: 2011-06-29 06:59:20 +0000 (Wed, 29 Jun 2011) Log Message: ----------- reorder in order to eliminate forward references and disambiguate private functions from public API by not using ged_ prefix. Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2011-06-29 06:48:02 UTC (rev 45294) +++ brlcad/trunk/src/libged/analyze.c 2011-06-29 06:59:20 UTC (rev 45295) @@ -40,207 +40,17 @@ /* Conversion factor for Gallons to cubic millimeters */ #define GALLONS_TO_MM3 3785411.784 -static void ged_do_anal(struct ged *gedp, const struct rt_db_internal *ip); -static void ged_arb_anal(struct ged *gedp, const struct rt_db_internal *ip); -static double ged_anal_face(struct ged *gedp, int face, fastf_t *center_pt, const struct rt_arb_internal *arb, int type, const struct bn_tol *tol); -static void ged_anal_edge(struct ged *gedp, int edge, const struct rt_arb_internal *arb, int type); -static double ged_find_vol(int loc, struct rt_arb_internal *arb, struct bn_tol *tol); -static void ged_tgc_anal(struct ged *gedp, const struct rt_db_internal *ip); -static void ged_ell_anal(struct ged *gedp, const struct rt_db_internal *ip); -static void ged_tor_anal(struct ged *gedp, const struct rt_db_internal *ip); -static void ged_ars_anal(struct ged *gedp, const struct rt_db_internal *ip); -static void ged_rpc_anal(struct ged *gedp, const struct rt_db_internal *ip); -static void ged_rhc_anal(struct ged *gedp, const struct rt_db_internal *ip); -static void ged_part_anal(struct ged *gedp, const struct rt_db_internal *ip); -static void ged_superell_anal(struct ged *gedp, const struct rt_db_internal *ip); -/* - * Analyze command - prints loads of info about a solid - * Format: analyze [name] - * if 'name' is missing use solid being edited - */ - -int -ged_analyze(struct ged *gedp, int argc, const char *argv[]) -{ - struct directory *ndp; - int i; - struct rt_db_internal intern; - static const char *usage = "object(s)"; - - GED_CHECK_DATABASE_OPEN(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; - } - - if (argc < 2) { - bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage); - return GED_ERROR; - } - - /* use the names that were input */ - for (i = 1; i < argc; i++) { - if ((ndp = db_lookup(gedp->ged_wdbp->dbip, argv[i], LOOKUP_NOISY)) == RT_DIR_NULL) - continue; - - GED_DB_GET_INTERNAL(gedp, &intern, ndp, bn_mat_identity, &rt_uniresource, GED_ERROR); - - _ged_do_list(gedp, ndp, 1); - ged_do_anal(gedp, &intern); - rt_db_free_internal(&intern); - } - - return GED_OK; -} - - -/* Analyze solid in internal form */ -static void -ged_do_anal(struct ged *gedp, const struct rt_db_internal *ip) -{ - /* XXX Could give solid name, and current units, here */ - - switch (ip->idb_type) { - - case ID_ARS: - ged_ars_anal(gedp, ip); - break; - - case ID_ARB8: - ged_arb_anal(gedp, ip); - break; - - case ID_TGC: - ged_tgc_anal(gedp, ip); - break; - - case ID_ELL: - ged_ell_anal(gedp, ip); - break; - - case ID_TOR: - ged_tor_anal(gedp, ip); - break; - - case ID_RPC: - ged_rpc_anal(gedp, ip); - break; - - case ID_RHC: - ged_rhc_anal(gedp, ip); - break; - - case ID_PARTICLE: - ged_part_anal(gedp, ip); - break; - - case ID_SUPERELL: - ged_superell_anal(gedp, ip); - break; - - default: - bu_vls_printf(&gedp->ged_result_str, "analyze: unable to process %s solid\n", - rt_functab[ip->idb_type].ft_name); - break; - } -} - - -/* edge definition array */ -static const int nedge[5][24] = { - {0, 1, 1, 2, 2, 0, 0, 3, 3, 2, 1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* ARB4 */ - {0, 1, 1, 2, 2, 3, 0, 3, 0, 4, 1, 4, 2, 4, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1}, /* ARB5 */ - {0, 1, 1, 2, 2, 3, 0, 3, 0, 4, 1, 4, 2, 5, 3, 5, 4, 5, -1, -1, -1, -1, -1, -1}, /* ARB6 */ - {0, 1, 1, 2, 2, 3, 0, 3, 0, 4, 3, 4, 1, 5, 2, 6, 4, 5, 5, 6, 4, 6, -1, -1}, /* ARB7 */ - {0, 1, 1, 2, 2, 3, 0, 3, 0, 4, 4, 5, 1, 5, 5, 6, 6, 7, 4, 7, 3, 7, 2, 6}, -}; - - -/* - * A R B _ A N A L - */ -static void -ged_arb_anal(struct ged *gedp, const struct rt_db_internal *ip) -{ - struct rt_arb_internal *arb = (struct rt_arb_internal *)ip->idb_ptr; - int i; - point_t center_pt; - double tot_vol; - double tot_area; - int cgtype; /* COMGEOM arb type: # of vertices */ - int type; - - /* find the specific arb type, in GIFT order. */ - if ((cgtype = rt_arb_std_type(ip, &gedp->ged_wdbp->wdb_tol)) == 0) { - bu_vls_printf(&gedp->ged_result_str, "ged_arb_anal: bad ARB\n"); - return; - } - - tot_area = tot_vol = 0.0; - - type = cgtype - 4; - - /* analyze each face, use center point of arb for reference */ - bu_vls_printf(&gedp->ged_result_str, "\n------------------------------------------------------------------------------\n"); - bu_vls_printf(&gedp->ged_result_str, "| FACE | ROT FB | PLANE EQUATION | SURFACE AREA |\n"); - bu_vls_printf(&gedp->ged_result_str, "|------|---------------|----------------------------------|------------------|\n"); - rt_arb_centroid(center_pt, arb, cgtype); - - for (i=0; i<6; i++) - tot_area += ged_anal_face(gedp, i, center_pt, arb, type, &gedp->ged_wdbp->wdb_tol); - - bu_vls_printf(&gedp->ged_result_str, "------------------------------------------------------------------------------\n"); - - /* analyze each edge */ - bu_vls_printf(&gedp->ged_result_str, " | EDGE LEN | EDGE LEN | EDGE LEN | EDGE LEN |\n"); - bu_vls_printf(&gedp->ged_result_str, " |----------------|----------------|----------------|----------------|\n "); - - /* set up the records for arb4's and arb6's */ - { - struct rt_arb_internal earb; - - earb = *arb; /* struct copy */ - if (cgtype == 4) { - VMOVE(earb.pt[3], earb.pt[4]); - } else if (cgtype == 6) { - VMOVE(earb.pt[5], earb.pt[6]); - } - for (i=0; i<12; i++) { - ged_anal_edge(gedp, i, &earb, type); - if (nedge[type][i*2] == -1) - break; - } - } - bu_vls_printf(&gedp->ged_result_str, " ---------------------------------------------------------------------\n"); - - /* find the volume - break arb8 into 6 arb4s */ - for (i=0; i<6; i++) - tot_vol += ged_find_vol(i, arb, &gedp->ged_wdbp->wdb_tol); - - bu_vls_printf(&gedp->ged_result_str, " | Volume = %18.8f Surface Area = %15.8f |\n", - tot_vol*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, - tot_area*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local); - bu_vls_printf(&gedp->ged_result_str, " | %18.8f gal |\n", - tot_vol/GALLONS_TO_MM3); - bu_vls_printf(&gedp->ged_result_str, " -----------------------------------------------------------------\n"); -} - - /* ARB face printout array */ static const int prface[5][6] = { - {123, 124, 234, 134, -111, -111}, /* ARB4 */ - {1234, 125, 235, 345, 145, -111}, /* ARB5 */ - {1234, 2365, 1564, 512, 634, -111}, /* ARB6 */ - {1234, 567, 145, 2376, 1265, 4375}, /* ARB7 */ + {123, 124, 234, 134, -111, -111}, /* ARB4 */ + {1234, 125, 235, 345, 145, -111}, /* ARB5 */ + {1234, 2365, 1564, 512, 634, -111}, /* ARB6 */ + {1234, 567, 145, 2376, 1265, 4375}, /* ARB7 */ {1234, 5678, 1584, 2376, 1265, 4378}, /* ARB8 */ }; + + /* division of an arb8 into 6 arb4s */ static const int farb4[6][4] = { {0, 1, 2, 4}, @@ -252,6 +62,16 @@ }; +/* edge definition array */ +static const int nedge[5][24] = { + {0, 1, 1, 2, 2, 0, 0, 3, 3, 2, 1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* ARB4 */ + {0, 1, 1, 2, 2, 3, 0, 3, 0, 4, 1, 4, 2, 4, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1}, /* ARB5 */ + {0, 1, 1, 2, 2, 3, 0, 3, 0, 4, 1, 4, 2, 5, 3, 5, 4, 5, -1, -1, -1, -1, -1, -1}, /* ARB6 */ + {0, 1, 1, 2, 2, 3, 0, 3, 0, 4, 3, 4, 1, 5, 2, 6, 4, 5, 5, 6, 4, 6, -1, -1}, /* ARB7 */ + {0, 1, 1, 2, 2, 3, 0, 3, 0, 4, 4, 5, 1, 5, 5, 6, 6, 7, 4, 7, 3, 7, 2, 6}, /* ARB8 */ +}; + + /* * F I N D A N G * @@ -307,7 +127,7 @@ /* Analyzes an arb face */ static double -ged_anal_face(struct ged *gedp, int face, fastf_t *center_pt, const struct rt_arb_internal *arb, int type, const struct bn_tol *tol) +analyze_face(struct ged *gedp, int face, fastf_t *center_pt, const struct rt_arb_internal *arb, int type, const struct bn_tol *tol) /* reference center point */ @@ -392,7 +212,7 @@ /* Analyzes arb edges - finds lengths */ static void -ged_anal_edge(struct ged *gedp, int edge, const struct rt_arb_internal *arb, int type) +analyze_edge(struct ged *gedp, int edge, const struct rt_arb_internal *arb, int type) { int a, b; static vect_t v_temp; @@ -427,7 +247,7 @@ /* Finds volume of an arb4 defined by farb4[loc][] */ static double -ged_find_vol(int loc, struct rt_arb_internal *arb, struct bn_tol *tol) +analyze_find_vol(int loc, struct rt_arb_internal *arb, struct bn_tol *tol) { int a, b, c, d; fastf_t vol, height, len[3], temp, areabase; @@ -461,9 +281,79 @@ } +/* + * A R B _ A N A L + */ +static void +analyze_arb(struct ged *gedp, const struct rt_db_internal *ip) +{ + struct rt_arb_internal *arb = (struct rt_arb_internal *)ip->idb_ptr; + int i; + point_t center_pt; + double tot_vol; + double tot_area; + int cgtype; /* COMGEOM arb type: # of vertices */ + int type; + + /* find the specific arb type, in GIFT order. */ + if ((cgtype = rt_arb_std_type(ip, &gedp->ged_wdbp->wdb_tol)) == 0) { + bu_vls_printf(&gedp->ged_result_str, "analyze_arb: bad ARB\n"); + return; + } + + tot_area = tot_vol = 0.0; + + type = cgtype - 4; + + /* analyze each face, use center point of arb for reference */ + bu_vls_printf(&gedp->ged_result_str, "\n------------------------------------------------------------------------------\n"); + bu_vls_printf(&gedp->ged_result_str, "| FACE | ROT FB | PLANE EQUATION | SURFACE AREA |\n"); + bu_vls_printf(&gedp->ged_result_str, "|------|---------------|----------------------------------|------------------|\n"); + rt_arb_centroid(center_pt, arb, cgtype); + + for (i=0; i<6; i++) + tot_area += analyze_face(gedp, i, center_pt, arb, type, &gedp->ged_wdbp->wdb_tol); + + bu_vls_printf(&gedp->ged_result_str, "------------------------------------------------------------------------------\n"); + + /* analyze each edge */ + bu_vls_printf(&gedp->ged_result_str, " | EDGE LEN | EDGE LEN | EDGE LEN | EDGE LEN |\n"); + bu_vls_printf(&gedp->ged_result_str, " |----------------|----------------|----------------|----------------|\n "); + + /* set up the records for arb4's and arb6's */ + { + struct rt_arb_internal earb; + + earb = *arb; /* struct copy */ + if (cgtype == 4) { + VMOVE(earb.pt[3], earb.pt[4]); + } else if (cgtype == 6) { + VMOVE(earb.pt[5], earb.pt[6]); + } + for (i=0; i<12; i++) { + analyze_edge(gedp, i, &earb, type); + if (nedge[type][i*2] == -1) + break; + } + } + bu_vls_printf(&gedp->ged_result_str, " ---------------------------------------------------------------------\n"); + + /* find the volume - break arb8 into 6 arb4s */ + for (i=0; i<6; i++) + tot_vol += analyze_find_vol(i, arb, &gedp->ged_wdbp->wdb_tol); + + bu_vls_printf(&gedp->ged_result_str, " | Volume = %18.8f Surface Area = %15.8f |\n", + tot_vol*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, + tot_area*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local); + bu_vls_printf(&gedp->ged_result_str, " | %18.8f gal |\n", + tot_vol/GALLONS_TO_MM3); + bu_vls_printf(&gedp->ged_result_str, " -----------------------------------------------------------------\n"); +} + + /* analyze a torus */ static void -ged_tor_anal(struct ged *gedp, const struct rt_db_internal *ip) +analyze_tor(struct ged *gedp, const struct rt_db_internal *ip) { struct rt_tor_internal *tor = (struct rt_tor_internal *)ip->idb_ptr; fastf_t r1, r2, vol, sur_area; @@ -490,7 +380,7 @@ /* analyze an ell */ static void -ged_ell_anal(struct ged *gedp, const struct rt_db_internal *ip) +analyze_ell(struct ged *gedp, const struct rt_db_internal *ip) { struct rt_ell_internal *ell = (struct rt_ell_internal *)ip->idb_ptr; fastf_t ma, mb, mc; @@ -587,7 +477,7 @@ /* analyze an superell */ static void -ged_superell_anal(struct ged *gedp, const struct rt_db_internal *ip) +analyze_superell(struct ged *gedp, const struct rt_db_internal *ip) { struct rt_superell_internal *superell = (struct rt_superell_internal *)ip->idb_ptr; fastf_t ma, mb, mc; @@ -688,7 +578,7 @@ /* analyze tgc */ static void -ged_tgc_anal(struct ged *gedp, const struct rt_db_internal *ip) +analyze_tgc(struct ged *gedp, const struct rt_db_internal *ip) { struct rt_tgc_internal *tgc = (struct rt_tgc_internal *)ip->idb_ptr; fastf_t maxb, ma, mb, mc, md, mh; @@ -773,7 +663,7 @@ /* analyze ars */ static void -ged_ars_anal(struct ged *gedp, const struct rt_db_internal *ip) +analyze_ars(struct ged *gedp, const struct rt_db_internal *ip) { if (ip) RT_CK_DB_INTERNAL(ip); @@ -783,7 +673,7 @@ /* XXX analyze spline needed * static void - * ged_spline_anal(&gedp->ged_result_str, ip) + * analyze_spline(&gedp->ged_result_str, ip) * struct bu_vls *vp; * const struct rt_db_internal *ip; * { @@ -793,7 +683,7 @@ /* analyze particle */ static void -ged_part_anal(struct ged *gedp, const struct rt_db_internal *ip) +analyze_part(struct ged *gedp, const struct rt_db_internal *ip) { if (ip) RT_CK_DB_INTERNAL(ip); @@ -805,7 +695,7 @@ /* analyze rpc */ static void -ged_rpc_anal(struct ged *gedp, const struct rt_db_internal *ip) +analyze_rpc(struct ged *gedp, const struct rt_db_internal *ip) { fastf_t area_parab, area_body, b, h, r, vol_parab; struct rt_rpc_internal *rpc = (struct rt_rpc_internal *)ip->idb_ptr; @@ -839,7 +729,7 @@ /* analyze rhc */ static void -ged_rhc_anal(struct ged *gedp, const struct rt_db_internal *ip) +analyze_rhc(struct ged *gedp, const struct rt_db_internal *ip) { fastf_t area_hyperb, area_body, b, c, h, r, vol_hyperb, work1; struct rt_rhc_internal *rhc = (struct rt_rhc_internal *)ip->idb_ptr; @@ -880,6 +770,105 @@ /* + * Analyze command - prints loads of info about a solid + * Format: analyze [name] + * if 'name' is missing use solid being edited + */ + +/* Analyze solid in internal form */ +static void +analyze_do(struct ged *gedp, const struct rt_db_internal *ip) +{ + /* XXX Could give solid name, and current units, here */ + + switch (ip->idb_type) { + + case ID_ARS: + analyze_ars(gedp, ip); + break; + + case ID_ARB8: + analyze_arb(gedp, ip); + break; + + case ID_TGC: + analyze_tgc(gedp, ip); + break; + + case ID_ELL: + analyze_ell(gedp, ip); + break; + + case ID_TOR: + analyze_tor(gedp, ip); + break; + + case ID_RPC: + analyze_rpc(gedp, ip); + break; + + case ID_RHC: + analyze_rhc(gedp, ip); + break; + + case ID_PARTICLE: + analyze_part(gedp, ip); + break; + + case ID_SUPERELL: + analyze_superell(gedp, ip); + break; + + default: + bu_vls_printf(&gedp->ged_result_str, "analyze: unable to process %s solid\n", + rt_functab[ip->idb_type].ft_name); + break; + } +} + + +int +ged_analyze(struct ged *gedp, int argc, const char *argv[]) +{ + struct directory *ndp; + int i; + struct rt_db_internal intern; + static const char *usage = "object(s)"; + + GED_CHECK_DATABASE_OPEN(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; + } + + if (argc < 2) { + bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage); + return GED_ERROR; + } + + /* use the names that were input */ + for (i = 1; i < argc; i++) { + if ((ndp = db_lookup(gedp->ged_wdbp->dbip, argv[i], LOOKUP_NOISY)) == RT_DIR_NULL) + continue; + + GED_DB_GET_INTERNAL(gedp, &intern, ndp, bn_mat_identity, &rt_uniresource, GED_ERROR); + + _ged_do_list(gedp, ndp, 1); + analyze_do(gedp, &intern); + rt_db_free_internal(&intern); + } + + return GED_OK; +} + + +/* * Local Variables: * mode: C * tab-width: 8 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tbr...@us...> - 2011-12-22 22:18:59
|
Revision: 48157 http://brlcad.svn.sourceforge.net/brlcad/?rev=48157&view=rev Author: tbrowder2 Date: 2011-12-22 22:18:53 +0000 (Thu, 22 Dec 2011) Log Message: ----------- fix typo Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2011-12-22 22:14:43 UTC (rev 48156) +++ brlcad/trunk/src/libged/analyze.c 2011-12-22 22:18:53 UTC (rev 48157) @@ -159,7 +159,7 @@ return 0; } - /* the plane equations returned by planeqn above do not + /* The plane equations returned by planeqn above do not * necessarily point outward. Use the reference center * point for the arb and reverse direction for * any errant planes. This corrects the output rotation, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2012-01-13 14:30:15
|
Revision: 48661 http://brlcad.svn.sourceforge.net/brlcad/?rev=48661&view=rev Author: bob1961 Date: 2012-01-13 14:30:03 +0000 (Fri, 13 Jan 2012) Log Message: ----------- run 8, CID 1734, DEADCODE. Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2012-01-13 14:27:26 UTC (rev 48660) +++ brlcad/trunk/src/libged/analyze.c 2012-01-13 14:30:03 UTC (rev 48661) @@ -560,11 +560,9 @@ if (type == PROLATE) { sur_area = 2.0 * M_PI * minor * minor + (2.0 * M_PI * (major*minor/ecc) * asin(ecc)); - } else if (type == OBLATE) { + } else { /* type == OBLATE */ sur_area = 2.0 * M_PI * major * major + (M_PI * (minor*minor/ecc) * log((1.0+ecc)/(1.0-ecc))); - } else { - sur_area = 0.0; } bu_vls_printf(gedp->ged_result_str, " Surface Area = %.8f\n", This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2012-01-13 14:32:48
|
Revision: 48665 http://brlcad.svn.sourceforge.net/brlcad/?rev=48665&view=rev Author: bob1961 Date: 2012-01-13 14:32:37 +0000 (Fri, 13 Jan 2012) Log Message: ----------- run 8, CID 1733, DEADCODE. Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2012-01-13 14:31:47 UTC (rev 48664) +++ brlcad/trunk/src/libged/analyze.c 2012-01-13 14:32:37 UTC (rev 48665) @@ -463,11 +463,9 @@ if (type == PROLATE) { sur_area = 2.0 * M_PI * minor * minor + (2.0 * M_PI * (major*minor/ecc) * asin(ecc)); - } else if (type == OBLATE) { + } else { /* type == OBLATE */ sur_area = 2.0 * M_PI * major * major + (M_PI * (minor*minor/ecc) * log((1.0+ecc)/(1.0-ecc))); - } else { - sur_area = 0.0; } bu_vls_printf(gedp->ged_result_str, " Surface Area = %.8f\n", This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2012-01-13 15:17:25
|
Revision: 48685 http://brlcad.svn.sourceforge.net/brlcad/?rev=48685&view=rev Author: bob1961 Date: 2012-01-13 15:17:16 +0000 (Fri, 13 Jan 2012) Log Message: ----------- run 8, CID 191, DEADCODE. Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2012-01-13 15:14:06 UTC (rev 48684) +++ brlcad/trunk/src/libged/analyze.c 2012-01-13 15:17:16 UTC (rev 48685) @@ -843,11 +843,6 @@ return GED_HELP; } - if (argc < 2) { - bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); - return GED_ERROR; - } - /* use the names that were input */ for (i = 1; i < argc; i++) { if ((ndp = db_lookup(gedp->ged_wdbp->dbip, argv[i], LOOKUP_NOISY)) == RT_DIR_NULL) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tbr...@us...> - 2012-01-17 20:16:22
|
Revision: 48889 http://brlcad.svn.sourceforge.net/brlcad/?rev=48889&view=rev Author: tbrowder2 Date: 2012-01-17 20:16:11 +0000 (Tue, 17 Jan 2012) Log Message: ----------- starting on cleaning up analyze table formatting; some ws and style fixes, too Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2012-01-17 19:40:25 UTC (rev 48888) +++ brlcad/trunk/src/libged/analyze.c 2012-01-17 20:16:11 UTC (rev 48889) @@ -167,7 +167,7 @@ * pointing normal vector. */ if ((plane[W] - VDOT(center_pt, &plane[0])) < 0.0) { - for (i=0; i<4; i++) + for (i = 0; i < 4; i++) plane[i] *= -1.0; } @@ -177,7 +177,7 @@ findang(angles, &plane[0]); /* find the surface area of this face */ - for (i=0; i<3; i++) { + for (i = 0; i < 3; i++) { j = rt_arb_faces[type][face*4+i]; k = rt_arb_faces[type][face*4+i+1]; VSUB2(v_temp, arb->pt[k], arb->pt[j]); @@ -185,26 +185,26 @@ } len[4] = len[2]; j = rt_arb_faces[type][face*4+0]; - for (i=2; i<4; i++) { + for (i = 2; i < 4; i++) { k = rt_arb_faces[type][face*4+i]; VSUB2(v_temp, arb->pt[k], arb->pt[j]); len[((i*2)-1)] = MAGNITUDE(v_temp); } len[2] = len[3]; - for (i=0; i<2; i++) { - j = i*3; + for (i = 0; i < 2; i++) { + j = i * 3; temp = .5 * (len[j] + len[j+1] + len[j+2]); area[i] = sqrt(temp * (temp - len[j]) * (temp - len[j+1]) * (temp - len[j+2])); face_area += area[i]; } bu_vls_printf(gedp->ged_result_str, "| %4d |", prface[type][face]); - bu_vls_printf(gedp->ged_result_str, " %6.8f %6.8f | %6.8f %6.8f %6.8f %11.8f |", + bu_vls_printf(gedp->ged_result_str, " %13.8f %13.8f | %11.8f %11.8f %11.8f %12.8f |", angles[3], angles[4], plane[X], plane[Y], plane[Z], plane[W]*gedp->ged_wdbp->dbip->dbi_base2local); - bu_vls_printf(gedp->ged_result_str, " %13.8f |\n", + bu_vls_printf(gedp->ged_result_str, " %15.8f |\n", (area[0]+area[1])*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local); return face_area; } @@ -225,19 +225,19 @@ if ((a = edge%4) == 0) return; if (a == 1) { - bu_vls_printf(gedp->ged_result_str, " | | | |\n "); + bu_vls_printf(gedp->ged_result_str, " | | | |\n "); return; } if (a == 2) { - bu_vls_printf(gedp->ged_result_str, " | | |\n "); + bu_vls_printf(gedp->ged_result_str, " | | |\n "); return; } - bu_vls_printf(gedp->ged_result_str, " | |\n "); + bu_vls_printf(gedp->ged_result_str, " | |\n "); return; } VSUB2(v_temp, arb->pt[b], arb->pt[a]); - bu_vls_printf(gedp->ged_result_str, " | %d%d %9.8f", + bu_vls_printf(gedp->ged_result_str, " | %d%d %12.8f", a+1, b+1, MAGNITUDE(v_temp)*gedp->ged_wdbp->dbip->dbi_base2local); if (++edge%4 == 0) @@ -306,19 +306,20 @@ type = cgtype - 4; /* analyze each face, use center point of arb for reference */ - bu_vls_printf(gedp->ged_result_str, "\n------------------------------------------------------------------------------\n"); - bu_vls_printf(gedp->ged_result_str, "| FACE | ROT FB | PLANE EQUATION | SURFACE AREA |\n"); - bu_vls_printf(gedp->ged_result_str, "|------|---------------|----------------------------------|------------------|\n"); + bu_vls_printf(gedp->ged_result_str,"\n-----------------------------------------------------------------------------------------------------------\n"); + bu_vls_printf(gedp->ged_result_str, "| FACE | ROT FB | PLANE EQUATION | SURFACE AREA |\n"); + bu_vls_printf(gedp->ged_result_str, "|------|-----------------------------|--------------------------------------------------|-----------------|\n"); rt_arb_centroid(center_pt, arb, cgtype); - for (i=0; i<6; i++) + for (i = 0; i < 6; i++) tot_area += analyze_face(gedp, i, center_pt, arb, type, &gedp->ged_wdbp->wdb_tol); - bu_vls_printf(gedp->ged_result_str, "------------------------------------------------------------------------------\n"); + bu_vls_printf(gedp->ged_result_str, "-----------------------------------------------------------------------------------------------------------\n\n"); /* analyze each edge */ - bu_vls_printf(gedp->ged_result_str, " | EDGE LEN | EDGE LEN | EDGE LEN | EDGE LEN |\n"); - bu_vls_printf(gedp->ged_result_str, " |----------------|----------------|----------------|----------------|\n "); + bu_vls_printf(gedp->ged_result_str, " -------------------------------------------------------------------------------------\n"); + bu_vls_printf(gedp->ged_result_str, " | EDGE LEN | EDGE LEN | EDGE LEN | EDGE LEN |\n"); + bu_vls_printf(gedp->ged_result_str, " |--------------------|--------------------|--------------------|--------------------|\n "); /* set up the records for arb4's and arb6's */ { @@ -330,24 +331,25 @@ } else if (cgtype == 6) { VMOVE(earb.pt[5], earb.pt[6]); } - for (i=0; i<12; i++) { + for (i = 0; i < 12; i++) { analyze_edge(gedp, i, &earb, type); if (nedge[type][i*2] == -1) break; } } - bu_vls_printf(gedp->ged_result_str, " ---------------------------------------------------------------------\n"); + bu_vls_printf(gedp->ged_result_str, " -------------------------------------------------------------------------------------\n\n"); /* find the volume - break arb8 into 6 arb4s */ - for (i=0; i<6; i++) + for (i = 0; i < 6; i++) tot_vol += analyze_find_vol(i, arb, &gedp->ged_wdbp->wdb_tol); - bu_vls_printf(gedp->ged_result_str, " | Volume = %18.8f Surface Area = %15.8f |\n", + bu_vls_printf(gedp->ged_result_str, " -------------------------------------\n"); + bu_vls_printf(gedp->ged_result_str, " | Volume = %18.8f |\n | Surface Area = %18.8f |\n", tot_vol*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, tot_area*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local); - bu_vls_printf(gedp->ged_result_str, " | %18.8f gal |\n", + bu_vls_printf(gedp->ged_result_str, " | gal = %18.8f |\n", tot_vol/GALLONS_TO_MM3); - bu_vls_printf(gedp->ged_result_str, " -----------------------------------------------------------------\n"); + bu_vls_printf(gedp->ged_result_str, " -------------------------------------\n"); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tbr...@us...> - 2012-01-19 00:08:20
|
Revision: 48900 http://brlcad.svn.sourceforge.net/brlcad/?rev=48900&view=rev Author: tbrowder2 Date: 2012-01-19 00:08:13 +0000 (Thu, 19 Jan 2012) Log Message: ----------- start to tidy analyze output formatting: add some global values and subroutines for handling dynamic table creation Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2012-01-18 23:41:02 UTC (rev 48899) +++ brlcad/trunk/src/libged/analyze.c 2012-01-19 00:08:13 UTC (rev 48900) @@ -26,6 +26,9 @@ #include "common.h" #include <math.h> +#include <string.h> +#include <assert.h> + #include "bio.h" #include "bu.h" @@ -36,7 +39,6 @@ #include "./ged_private.h" - /* Conversion factor for Gallons to cubic millimeters */ #define GALLONS_TO_MM3 3785411.784 @@ -71,7 +73,559 @@ {0, 1, 1, 2, 2, 3, 0, 3, 0, 4, 4, 5, 1, 5, 5, 6, 6, 7, 4, 7, 3, 7, 2, 6}, /* ARB8 */ }; +/* structures and subroutines for analyze pretty printing */ +#define FBUFSIZ 100 +#define NFIELDS 9 +#define NROWS 12 +#define NOT_A_PLANE -1 +typedef struct row_field +{ + int nchars; + char buf[FBUFSIZ]; +} field_t; + +typedef struct table_row +{ + int nfields; + field_t fields[NFIELDS]; +} row_t; + +typedef struct table +{ + int nrows; + row_t rows[NROWS]; +} table_t; + +void get_dashes(field_t *f, const int ndashes) +{ + int i; + f->buf[0] = '\0'; + for (i = 0; i < ndashes; ++i) { + strcat(f->buf, "-"); + } + f->nchars = ndashes; +} + +void print_volume_table(struct ged *gedp + , const fastf_t tot_vol + , const fastf_t tot_area + , const fastf_t tot_gallons + ) +{ + +/* table format + + +------------------------------------+ + | Volume = 7999999999.99999905 | + | Surface Area = 24000000.00000000 | + | Gallons = 2113.37641887 | + +------------------------------------+ + +*/ + /* track actual table column widths */ + /* this table has 1 column (plus a name column) */ + int maxwidth[2] = {0, 0}; + field_t dashes; + char* fnames[3] = {"Volume", + "Surface Area", + "Gallons"}; + int indent = 4; /* number spaces to indent the table */ + int table_width_chars; + table_t table; + int i, nd, field; + + table.nrows = 3; + for (i = 0; i < table.nrows; ++i) { + double val; + + /* field 0 */ + field = 0; + table.rows[i].fields[0].nchars = sprintf(table.rows[i].fields[field].buf, "%s", + fnames[i]); + if (maxwidth[field] < table.rows[i].fields[field].nchars) + maxwidth[field] = table.rows[i].fields[field].nchars; + + if (i == 0) { + val = tot_vol; + } else if (i == 1) { + val = tot_area; + } else if (i == 2) { + val = tot_gallons; + } + + /* field 1 */ + field = 1; + table.rows[i].fields[1].nchars = sprintf(table.rows[i].fields[field].buf, "%10.8f", + val); + if (maxwidth[field] < table.rows[i].fields[field].nchars) + maxwidth[field] = table.rows[i].fields[field].nchars; + } + + /* get total table width */ + table_width_chars = maxwidth[0] + maxwidth[1]; + table_width_chars += 2 + 2; /* 2 chars at each end of a row */ + table_width_chars += 3; /* ' = ' between the two fields of a row */ + + /* header row 1 */ + nd = table_width_chars - 4; + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "%-*.*s+-%-*.*s-+\n", + indent, indent, " ", + nd, nd, dashes.buf); + + /* the three data rows */ + for (i = 0; i < table.nrows; ++i) { +#if 1 + char tbuf[FBUFSIZ]; + sprintf(tbuf, "%-*.*s| %-*.*s = %*.*s |\n", + indent, indent, " ", + maxwidth[0], maxwidth[0], table.rows[i].fields[0].buf, + maxwidth[1], maxwidth[1], table.rows[i].fields[1].buf); + bu_vls_printf(gedp->ged_result_str, "%s", tbuf); +#else + /* bu_vls_printf can't handle this at the moment */ + bu_vls_printf(gedp->ged_result_str, "%-*.*s| %-*.*s = %*.*s |\n", + indent, indent, " ", + maxwidth[0], maxwidth[0], table.rows[i].fields[0].buf, + maxwidth[1], maxwidth[1], table.rows[i].fields[1].buf); +#endif + } + + /* closing table row */ + bu_vls_printf(gedp->ged_result_str, "%-*.*s+-%-*.*s-+\n", + indent, indent, " ", + nd, nd, dashes.buf); + +} + +void print_edges_table(struct ged *gedp, table_t *table) +{ + +/* table header + + +--------------------+--------------------+--------------------+--------------------+ + | EDGE LEN | EDGE LEN | EDGE LEN | EDGE LEN | + +--------------------+--------------------+--------------------+--------------------+ + +*/ + + int i; //j, k + int tcol, ntcols, nd, nrow, nrows; + int maxwidth[] = {0, 0, 0, + 0, 0, 0, + 0, 0}; + int indent = 2; + field_t dashes; + char EDGE[] = {"EDGE"}; + int elen = strlen(EDGE); + char LEN[] = {"LENGTH"}; + int llen = strlen(LEN); + char buf[FBUFSIZ]; + + /* put four edges per row making 8 columns */ + /* this table has 8 columns per row: 2 columns per edge; 4 edges per row */ + ntcols = 8; + //bu_vls_printf(gedp->ged_result_str, " "); + + /* collect max table column widths */ + tcol = 0; + for (i = 0; i < table->nrows; ++i) { + /* field 0 */ + int field = 0; + if (maxwidth[tcol] < table->rows[i].fields[field].nchars) + maxwidth[tcol] = table->rows[i].fields[field].nchars; + if (maxwidth[tcol] < elen) + maxwidth[tcol] = elen; + + /* field 1 */ + field = 1; + if (maxwidth[tcol+1] < table->rows[i].fields[field].nchars) + maxwidth[tcol+1] = table->rows[i].fields[field].nchars; + if (maxwidth[tcol] < llen) + maxwidth[tcol] = llen; + + /* iterate on columns */ + tcol += 2; + tcol = tcol > 6 ? 0 : tcol; + } + + /* header row 1 */ + /* print dashes in 4 sets */ + nd = maxwidth[0] + maxwidth[1] + 3; /* 1 space between numbers and one at each end */ + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "%-*.*s+%-*.*s", + indent, indent, " ", + nd, nd, dashes.buf); + nd = maxwidth[2] + maxwidth[3] + 3; /* 1 space between numbers and one at each end */ + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "+%-*.*s", + nd, nd, dashes.buf); + nd = maxwidth[4] + maxwidth[5] + 3; /* 1 space between numbers and one at each end */ + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "+%-*.*s", + nd, nd, dashes.buf); + nd = maxwidth[6] + maxwidth[7] + 3; /* 1 space between numbers and one at each end */ + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "+%-*.*s+\n", + nd, nd, dashes.buf); + + /* header row 2 */ + /* print titles in 4 sets */ + +#if 1 + /* using sprintf because bu_vls_printf is broken for complex formats */ + sprintf(buf, "%-*.*s| %-*.*s %*.*s ", + indent, indent, " ", + maxwidth[0], maxwidth[0], EDGE, + maxwidth[1], maxwidth[1], LEN); + bu_vls_printf(gedp->ged_result_str, "%s", buf); + + sprintf(buf, "| %-*.*s %*.*s ", + maxwidth[2], maxwidth[2], EDGE, + maxwidth[3], maxwidth[3], LEN); + bu_vls_printf(gedp->ged_result_str, "%s", buf); + + sprintf(buf, "| %-*.*s %*.*s ", + maxwidth[4], maxwidth[4], EDGE, + maxwidth[5], maxwidth[5], LEN); + bu_vls_printf(gedp->ged_result_str, "%s", buf); + + sprintf(buf, "| %-*.*s %*.*s |\n", + maxwidth[6], maxwidth[6], EDGE, + maxwidth[7], maxwidth[7], LEN); + bu_vls_printf(gedp->ged_result_str, "%s", buf); + +#elif 0 + /* bu_vls_printf can't handle this at the moment */ + bu_vls_printf(gedp->ged_result_str, "%-*.*s| %-*.*s %*.*s ", + indent, indent, " ", + maxwidth[0], maxwidth[0], EDGE, + maxwidth[1], maxwidth[1], LEN); + bu_vls_printf(gedp->ged_result_str, "| %-*.*s %*.*s ", + maxwidth[2], maxwidth[2], EDGE, + maxwidth[3], maxwidth[3], LEN); + bu_vls_printf(gedp->ged_result_str, "| %-*.*s %*.*s ", + maxwidth[4], maxwidth[4], EDGE, + maxwidth[5], maxwidth[5], LEN); + bu_vls_printf(gedp->ged_result_str, "| %-*.*s %*.*s |\n", + maxwidth[6], maxwidth[6], EDGE, + maxwidth[7], maxwidth[7], LEN); +#endif + + /* header row 3 */ + /* print dashes in 4 sets */ + nd = maxwidth[0] + maxwidth[1] + 3; /* 1 space between numbers and one at each end */ + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "%-*.*s+%-*.*s", + indent, indent, " ", + nd, nd, dashes.buf); + nd = maxwidth[2] + maxwidth[3] + 3; /* 1 space between numbers and one at each end */ + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "+%-*.*s", + nd, nd, dashes.buf); + nd = maxwidth[4] + maxwidth[5] + 3; /* 1 space between numbers and one at each end */ + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "+%-*.*s", + nd, nd, dashes.buf); + nd = maxwidth[6] + maxwidth[7] + 3; /* 1 space between numbers and one at each end */ + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "+%-*.*s+\n", + nd, nd, dashes.buf); + + /* print the data lines */ + /* collect max table column widths */ + tcol = 0; + nrow = 0; + for (i = 0; i < table->nrows; ++i) { + + if (tcol == 0) { + /* need to start a row */ + sprintf(buf, "%-*.*s|", + indent, indent, " "); + bu_vls_printf(gedp->ged_result_str, "%s", buf); + } + + /* data in sets of two */ + /* field 0 */ + int field = 0; + /* using sprintf because bu_vls_printf is broken for complex formats */ + sprintf(buf, " %-*.*s", + maxwidth[tcol], maxwidth[tcol], table->rows[i].fields[field].buf); + bu_vls_printf(gedp->ged_result_str, "%s", buf); + + /* field 1 */ + field = 1; + /* using sprintf because bu_vls_printf is broken for complex formats */ + sprintf(buf, " %-*.*s |", + maxwidth[tcol+1], maxwidth[tcol+1], table->rows[i].fields[field].buf); + bu_vls_printf(gedp->ged_result_str, "%s", buf); + + /* iterate on columns */ + tcol += 2; + + if (tcol > 6) { + /* time for a newline to end the row */ + bu_vls_printf(gedp->ged_result_str, "\n"); + tcol = 0; + ++nrow; + } + } + + /* we may have a row to finish */ + nrows = table->nrows % 4; + if (nrows) { + assert(tcol < 8); + + /* write blanks */ + while (tcol < 7) { + + /* data in sets of two */ + /* field 0 */ + int field = 0; + /* using sprintf because bu_vls_printf is broken for complex formats */ + sprintf(buf, " %-*.*s", + maxwidth[tcol], maxwidth[tcol], " "); + bu_vls_printf(gedp->ged_result_str, "%s", buf); + + /* field 1 */ + field = 1; + /* using sprintf because bu_vls_printf is broken for complex formats */ + sprintf(buf, " %-*.*s |", + maxwidth[tcol+1], maxwidth[tcol+1], " "); + bu_vls_printf(gedp->ged_result_str, "%s", buf); + + /* iterate on columns */ + tcol += 2; + + if (tcol > 6) { + /* time for a newline to end the row */ + bu_vls_printf(gedp->ged_result_str, "\n"); + } + } + } + + /* close the table */ + /* print dashes in 4 sets */ + nd = maxwidth[0] + maxwidth[1] + 3; /* 1 space between numbers and one at each end */ + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "%-*.*s+%-*.*s", + indent, indent, " ", + nd, nd, dashes.buf); + nd = maxwidth[2] + maxwidth[3] + 3; /* 1 space between numbers and one at each end */ + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "+%-*.*s", + nd, nd, dashes.buf); + nd = maxwidth[4] + maxwidth[5] + 3; /* 1 space between numbers and one at each end */ + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "+%-*.*s", + nd, nd, dashes.buf); + nd = maxwidth[6] + maxwidth[7] + 3; /* 1 space between numbers and one at each end */ + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "+%-*.*s+\n", + nd, nd, dashes.buf); +} + +void print_faces_table(struct ged *gedp, table_t *table) +{ + +/* table header + + +------+-----------------------------+--------------------------------------------------+-----------------+ + | FACE | ROT FB | PLANE EQUATION | SURFACE AREA | + +------+-----------------------------+--------------------------------------------------+-----------------+ + +*/ + + /* track actual table column widths */ + /* this table has 8 columns */ + int maxwidth[8] = {0, 0, 0, + 0, 0, 0, + 0, 0}; + int i, j; + int c0, h1a, h1b, h1c; + int h2a, h2b, h2c; + int c2, c2a, c2b, c2c; + int f7, f7a, f7b, f7c; + int nd, tnd; + field_t dashes; + char ROT[] = {"ROT"}; + char FB[] = {"FB"}; + char PA[] = {"PLANE EQUATION"}; + char SA[] = {"SURFACE AREA"}; + + /* get max fields widths */ + for (i = 0; i < table->nrows; ++i) { + for (j = 0; j < table->rows[i].nfields; ++j) { + if (table->rows[i].fields[j].nchars > maxwidth[j]) + maxwidth[j] = table->rows[i].fields[j].nchars; + } + } + + /* blank line following previous table */ + bu_vls_printf(gedp->ged_result_str, "\n"); + + /* get max width of header columns (not counting single space on either side) */ + c0 = maxwidth[0] > 4 ? maxwidth[0] : 4; + + /* print "ROT" in center of field 1 space */ + h1b = strlen(ROT); + h1a = (maxwidth[1] - h1b)/2; + h1c = (maxwidth[1] - h1b - h1a); + + /* print "FB" in center of field 2 space */ + h2b = strlen(FB); + h2a = (maxwidth[2] - h2b)/2; + h2c = (maxwidth[2] - h2b - h2a); + + /* get width of subcolumns of header column 2 */ + /* print "PLANE EQUATION" in center of columns 2 space */ + c2 = maxwidth[3] + maxwidth[4] + maxwidth[5] + maxwidth[6] + 3; /* 3 spaces between fields */ + c2b = strlen(PA); + c2a = (c2 - c2b)/2; + c2c = (c2 - c2b - c2a); + + /* print "SURFACE AREA" in center of field 7 space */ + f7b = strlen(SA); + f7 = maxwidth[7] > f7b ? maxwidth[7] : f7b; + f7a = (f7 - f7b)/2; + f7c = (f7 - f7b - f7a); + + /* print the pieces */ + + /* header row 1 */ + bu_vls_printf(gedp->ged_result_str, "+-"); + nd = c0; tnd = nd; + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "%-*.*s", + nd, nd, dashes.buf); + bu_vls_printf(gedp->ged_result_str, "-+-"); + nd = h1a + h1b + h1c + 1 + h2a + h2b + h2c; tnd += nd + 3; + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "%*.*s", + nd, nd, dashes.buf); + bu_vls_printf(gedp->ged_result_str, "-+-"); + nd = c2a + c2b + c2c; tnd += nd + 3; + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "%*.*s", + nd, nd, dashes.buf); + bu_vls_printf(gedp->ged_result_str, "-+-"); + nd = f7a + f7b + f7c; tnd += nd + 3; + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "%*.*s", + nd, nd, dashes.buf); + bu_vls_printf(gedp->ged_result_str, "-+\n"); + + /* header row 2 */ + bu_vls_printf(gedp->ged_result_str, "| "); + + bu_vls_printf(gedp->ged_result_str, "%-*.*s", c0, c0, "FACE"); + + bu_vls_printf(gedp->ged_result_str, " | "); + + + + bu_vls_printf(gedp->ged_result_str, "%*.*s", h1a, h1a, " "); + + bu_vls_printf(gedp->ged_result_str, "%*.*s", h1b, h1b, ROT); + + bu_vls_printf(gedp->ged_result_str, "%*.*s", h1c+h2a, h1c+h2a, " "); + + bu_vls_printf(gedp->ged_result_str, "%*.*s", h2b, h2b, FB); + + bu_vls_printf(gedp->ged_result_str, "%*.*s ", h2c, h2c, " "); + + + bu_vls_printf(gedp->ged_result_str, " | "); + + + bu_vls_printf(gedp->ged_result_str, "%*.*s", c2a, c2a, " "); + + bu_vls_printf(gedp->ged_result_str, "%*.*s", c2b, c2b, PA); + + bu_vls_printf(gedp->ged_result_str, "%*.*s", c2c, c2c, " "); + + + + bu_vls_printf(gedp->ged_result_str, " | "); + + bu_vls_printf(gedp->ged_result_str, "%*.*s", f7a, f7a, " "); + + bu_vls_printf(gedp->ged_result_str, "%*.*s", f7b, f7b, SA); + + bu_vls_printf(gedp->ged_result_str, "%*.*s", f7c, f7c, " "); + + bu_vls_printf(gedp->ged_result_str, " |\n"); + + /* header row 3 */ + bu_vls_printf(gedp->ged_result_str, "+-"); + nd = c0; tnd = nd; + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "%-*.*s", + nd, nd, dashes.buf); + bu_vls_printf(gedp->ged_result_str, "-+-"); + nd = h1a + h1b + h1c + 1 + h2a + h2b + h2c; tnd += nd + 3; + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "%*.*s", + nd, nd, dashes.buf); + bu_vls_printf(gedp->ged_result_str, "-+-"); + nd = c2a + c2b + c2c; tnd += nd + 3; + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "%*.*s", + nd, nd, dashes.buf); + bu_vls_printf(gedp->ged_result_str, "-+-"); + nd = f7a + f7b + f7c; tnd += nd + 3; + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "%*.*s", + nd, nd, dashes.buf); + bu_vls_printf(gedp->ged_result_str, "-+\n"); + + /* output table data rows */ + for (i = 0; i < table->nrows; ++i) { + /* may not have a row with data */ + if (table->rows[i].nfields == 0) + continue; + if (table->rows[i].nfields == NOT_A_PLANE) + bu_vls_printf(gedp->ged_result_str, "***NOT A PLANE ***"); + + bu_vls_printf(gedp->ged_result_str, "|"); + for (j = 0; j < table->rows[i].nfields; ++j) { + assert(table->rows[i].fields[j].buf); + bu_vls_printf(gedp->ged_result_str, " %*.*s", + maxwidth[j], maxwidth[j], + table->rows[i].fields[j].buf); + /* do we need a separator? */ + if (j == 0 || j == 2 || j == 6 || j == 7) + bu_vls_printf(gedp->ged_result_str, " |"); + } + /* close the row */ + bu_vls_printf(gedp->ged_result_str, "\n"); + } + + /* close the table with the ender row */ + bu_vls_printf(gedp->ged_result_str, "+-"); + nd = c0; tnd = nd; + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "%-*.*s", + nd, nd, dashes.buf); + bu_vls_printf(gedp->ged_result_str, "-+-"); + nd = h1a + h1b + h1c + 1 + h2a + h2b + h2c; tnd += nd + 3; + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "%*.*s", + nd, nd, dashes.buf); + bu_vls_printf(gedp->ged_result_str, "-+-"); + nd = c2a + c2b + c2c; tnd += nd + 3; + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "%*.*s", + nd, nd, dashes.buf); + bu_vls_printf(gedp->ged_result_str, "-+-"); + nd = f7a + f7b + f7c; tnd += nd + 3; + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "%*.*s", + nd, nd, dashes.buf); + bu_vls_printf(gedp->ged_result_str, "-+\n"); +} + /* * F I N D A N G * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tbr...@us...> - 2012-01-19 00:21:12
|
Revision: 48901 http://brlcad.svn.sourceforge.net/brlcad/?rev=48901&view=rev Author: tbrowder2 Date: 2012-01-19 00:21:04 +0000 (Thu, 19 Jan 2012) Log Message: ----------- changes to get pretty printing for mged analyze (arbs for this first go); this has been tested on a tgm (analyze.asc) soon to be newly placed in the ./regress directory Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2012-01-19 00:08:13 UTC (rev 48900) +++ brlcad/trunk/src/libged/analyze.c 2012-01-19 00:21:04 UTC (rev 48901) @@ -211,7 +211,7 @@ */ int i; //j, k - int tcol, ntcols, nd, nrow, nrows; + int tcol, nd, nrow, nrows; int maxwidth[] = {0, 0, 0, 0, 0, 0, 0, 0}; @@ -225,8 +225,6 @@ /* put four edges per row making 8 columns */ /* this table has 8 columns per row: 2 columns per edge; 4 edges per row */ - ntcols = 8; - //bu_vls_printf(gedp->ged_result_str, " "); /* collect max table column widths */ tcol = 0; @@ -670,7 +668,8 @@ else angles[3] = bn_radtodeg * acos(f); } else - angles[3] = 0.0; + angles[3] = 0.0; + if (unitv[Y] < 0) angles[3] = 360.0 - angles[3]; @@ -681,7 +680,9 @@ /* Analyzes an arb face */ static double -analyze_face(struct ged *gedp, int face, fastf_t *center_pt, const struct rt_arb_internal *arb, int type, const struct bn_tol *tol) +analyze_face(struct ged *gedp, int face, fastf_t *center_pt, + const struct rt_arb_internal *arb, int type, + const struct bn_tol *tol, row_t *row) /* reference center point */ @@ -689,7 +690,7 @@ { int i, j, k; - int a, b, c, d; /* 4 points of face to look at */ + int a, b, c, d; /* 4 points of face to look at */ fastf_t angles[5]; /* direction cosines, rot, fb */ fastf_t temp; fastf_t area[2], len[6]; @@ -702,14 +703,20 @@ c = rt_arb_faces[type][face*4+2]; d = rt_arb_faces[type][face*4+3]; - if (a == -1) + if (a == -1) { + row->nfields = 0; return 0; + } /* find plane eqn for this face */ if (bn_mk_plane_3pts(plane, arb->pt[a], arb->pt[b], arb->pt[c], tol) < 0) { +#if 1 bu_vls_printf(gedp->ged_result_str, "| %d%d%d%d | ***NOT A PLANE*** |\n", a+1, b+1, c+1, d+1); +#endif + /* this row has 1 special fields */ + row->nfields = NOT_A_PLANE; return 0; } @@ -753,49 +760,57 @@ face_area += area[i]; } - bu_vls_printf(gedp->ged_result_str, "| %4d |", prface[type][face]); - bu_vls_printf(gedp->ged_result_str, " %13.8f %13.8f | %11.8f %11.8f %11.8f %12.8f |", - angles[3], angles[4], - plane[X], plane[Y], plane[Z], - plane[W]*gedp->ged_wdbp->dbip->dbi_base2local); - bu_vls_printf(gedp->ged_result_str, " %15.8f |\n", - (area[0]+area[1])*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local); + /* don't printf, just sprintf! */ + /* these rows have 8 fields */ + row->nfields = 8; + row->fields[0].nchars = sprintf(row->fields[0].buf, "%4d", prface[type][face]); + row->fields[1].nchars = sprintf(row->fields[1].buf, "%10.8f", angles[3]); + row->fields[2].nchars = sprintf(row->fields[2].buf, "%10.8f", angles[4]); + row->fields[3].nchars = sprintf(row->fields[3].buf, "%10.8f", plane[X]); + row->fields[4].nchars = sprintf(row->fields[4].buf, "%10.8f", plane[Y]); + row->fields[5].nchars = sprintf(row->fields[5].buf, "%10.8f", plane[Z]); + row->fields[6].nchars = sprintf(row->fields[6].buf, "%10.8f", + plane[W]*gedp->ged_wdbp->dbip->dbi_base2local); + row->fields[7].nchars = sprintf(row->fields[7].buf, "%10.8f", + (area[0]+area[1])*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local ); + return face_area; } /* Analyzes arb edges - finds lengths */ static void -analyze_edge(struct ged *gedp, int edge, const struct rt_arb_internal *arb, int type) +analyze_edge(struct ged *gedp, const int edge, const struct rt_arb_internal *arb, + const int type, row_t *row) { - int a, b; static vect_t v_temp; + int a = nedge[type][edge*2]; + int b = nedge[type][edge*2+1]; - a = nedge[type][edge*2]; - b = nedge[type][edge*2+1]; - if (b == -1) { /* fill out the line */ - if ((a = edge%4) == 0) + if ((a = edge % 4) == 0) { + row->nfields = 0; return; + } if (a == 1) { - bu_vls_printf(gedp->ged_result_str, " | | | |\n "); + row->nfields = 0; return; } if (a == 2) { - bu_vls_printf(gedp->ged_result_str, " | | |\n "); + row->nfields = 0; return; } - bu_vls_printf(gedp->ged_result_str, " | |\n "); + row->nfields = 0; return; } VSUB2(v_temp, arb->pt[b], arb->pt[a]); - bu_vls_printf(gedp->ged_result_str, " | %d%d %12.8f", - a+1, b+1, MAGNITUDE(v_temp)*gedp->ged_wdbp->dbip->dbi_base2local); - if (++edge%4 == 0) - bu_vls_printf(gedp->ged_result_str, " |\n "); + row->nfields = 2; + row->fields[0].nchars = sprintf(row->fields[0].buf, "%d%d", a + 1, b + 1); + row->fields[1].nchars = sprintf(row->fields[1].buf, "%10.8f", + MAGNITUDE(v_temp)*gedp->ged_wdbp->dbip->dbi_base2local); } @@ -834,7 +849,6 @@ return vol; } - /* * A R B _ A N A L */ @@ -849,6 +863,9 @@ int cgtype; /* COMGEOM arb type: # of vertices */ int type; + /* variables for pretty printing */ + table_t table; /* holds table data from child functions */ + /* find the specific arb type, in GIFT order. */ if ((cgtype = rt_arb_std_type(ip, &gedp->ged_wdbp->wdb_tol)) == 0) { bu_vls_printf(gedp->ged_result_str, "analyze_arb: bad ARB\n"); @@ -859,51 +876,76 @@ type = cgtype - 4; + /* to get formatting correct, we need to collect the actual string + lengths for each field BEFORE we start printing a table (fields + are allowed to overflow the stated printf field width) */ + + /* TABLE 1 =========================================== */ /* analyze each face, use center point of arb for reference */ - bu_vls_printf(gedp->ged_result_str,"\n-----------------------------------------------------------------------------------------------------------\n"); - bu_vls_printf(gedp->ged_result_str, "| FACE | ROT FB | PLANE EQUATION | SURFACE AREA |\n"); - bu_vls_printf(gedp->ged_result_str, "|------|-----------------------------|--------------------------------------------------|-----------------|\n"); rt_arb_centroid(center_pt, arb, cgtype); - for (i = 0; i < 6; i++) - tot_area += analyze_face(gedp, i, center_pt, arb, type, &gedp->ged_wdbp->wdb_tol); + /* collect table data */ + table.nrows = 0; + for (i = 0; i < 6; i++) { + tot_area += analyze_face(gedp, i, center_pt, arb, type, &gedp->ged_wdbp->wdb_tol, + &(table.rows[i])); + table.nrows += 1; + } - bu_vls_printf(gedp->ged_result_str, "-----------------------------------------------------------------------------------------------------------\n\n"); + /* and print it */ + print_faces_table(gedp, &table); + /* TABLE 2 =========================================== */ /* analyze each edge */ - bu_vls_printf(gedp->ged_result_str, " -------------------------------------------------------------------------------------\n"); - bu_vls_printf(gedp->ged_result_str, " | EDGE LEN | EDGE LEN | EDGE LEN | EDGE LEN |\n"); - bu_vls_printf(gedp->ged_result_str, " |--------------------|--------------------|--------------------|--------------------|\n "); + /* blank line following previous table */ + bu_vls_printf(gedp->ged_result_str, "\n"); + /* set up the records for arb4's and arb6's */ + /* also collect table data */ + table.nrows = 0; + { - struct rt_arb_internal earb; + struct rt_arb_internal earb = *arb; /* struct copy */ - earb = *arb; /* struct copy */ - if (cgtype == 4) { + if (cgtype == 4) { VMOVE(earb.pt[3], earb.pt[4]); } else if (cgtype == 6) { VMOVE(earb.pt[5], earb.pt[6]); } + for (i = 0; i < 12; i++) { - analyze_edge(gedp, i, &earb, type); + analyze_edge(gedp, i, &earb, type, &(table.rows[i])); if (nedge[type][i*2] == -1) break; + table.nrows += 1; } } - bu_vls_printf(gedp->ged_result_str, " -------------------------------------------------------------------------------------\n\n"); + print_edges_table(gedp, &table); + + /* TABLE 3 =========================================== */ /* find the volume - break arb8 into 6 arb4s */ + + /* blank line following previous table */ + bu_vls_printf(gedp->ged_result_str, "\n"); + for (i = 0; i < 6; i++) tot_vol += analyze_find_vol(i, arb, &gedp->ged_wdbp->wdb_tol); - bu_vls_printf(gedp->ged_result_str, " -------------------------------------\n"); - bu_vls_printf(gedp->ged_result_str, " | Volume = %18.8f |\n | Surface Area = %18.8f |\n", - tot_vol*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, - tot_area*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local); - bu_vls_printf(gedp->ged_result_str, " | gal = %18.8f |\n", - tot_vol/GALLONS_TO_MM3); - bu_vls_printf(gedp->ged_result_str, " -------------------------------------\n"); + print_volume_table(gedp, + tot_vol + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local, + + tot_area + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local, + + tot_vol/GALLONS_TO_MM3 + ); + } @@ -1414,7 +1456,6 @@ return GED_OK; } - /* * Local Variables: * mode: C This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tbr...@us...> - 2012-01-19 02:47:57
|
Revision: 48907 http://brlcad.svn.sourceforge.net/brlcad/?rev=48907&view=rev Author: tbrowder2 Date: 2012-01-19 02:47:51 +0000 (Thu, 19 Jan 2012) Log Message: ----------- add pretty print of torus volume table Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2012-01-19 02:21:38 UTC (rev 48906) +++ brlcad/trunk/src/libged/analyze.c 2012-01-19 02:47:51 UTC (rev 48907) @@ -964,10 +964,27 @@ vol = 2.0 * M_PI * M_PI * r1 * r2 * r2; sur_area = 4.0 * M_PI * M_PI * r1 * r2; + bu_vls_printf(gedp->ged_result_str, "\n"); + + print_volume_table(gedp, + vol + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local, + sur_area + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local, + vol/GALLONS_TO_MM3 + ); + +#if 0 + //OR Vol = %.8f (%.8f gal) Surface Area = %.8f\n", + bu_vls_printf(gedp->ged_result_str, "TOR Vol = %.8f (%.8f gal) Surface Area = %.8f\n", vol*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, vol/GALLONS_TO_MM3, sur_area*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local); +#endif return; } @@ -1012,6 +1029,7 @@ sur_area*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local); return; } + if (fabs(ma-mb) < .00001) { /* A == B */ if (mc > ma) { @@ -1057,6 +1075,7 @@ bu_vls_printf(gedp->ged_result_str, " Cannot find surface area\n"); return; } + ecc = sqrt(major*major - minor*minor) / major; if (type == PROLATE) { sur_area = 2.0 * M_PI * minor * minor + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tbr...@us...> - 2012-01-19 02:51:17
|
Revision: 48908 http://brlcad.svn.sourceforge.net/brlcad/?rev=48908&view=rev Author: tbrowder2 Date: 2012-01-19 02:51:11 +0000 (Thu, 19 Jan 2012) Log Message: ----------- add a newline to tgc output Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2012-01-19 02:47:51 UTC (rev 48907) +++ brlcad/trunk/src/libged/analyze.c 2012-01-19 02:51:11 UTC (rev 48908) @@ -1256,7 +1256,7 @@ break; default: - bu_vls_printf(gedp->ged_result_str, "TGC Cannot find areas and volume\n"); + bu_vls_printf(gedp->ged_result_str, "\nTGC Cannot find areas and volume\n"); return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tbr...@us...> - 2012-01-19 03:06:34
|
Revision: 48909 http://brlcad.svn.sourceforge.net/brlcad/?rev=48909&view=rev Author: tbrowder2 Date: 2012-01-19 03:06:27 +0000 (Thu, 19 Jan 2012) Log Message: ----------- add some strategic newlines Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2012-01-19 02:51:11 UTC (rev 48908) +++ brlcad/trunk/src/libged/analyze.c 2012-01-19 03:06:27 UTC (rev 48909) @@ -1017,8 +1017,10 @@ type = 0; + bu_vls_printf(gedp->ged_result_str, "\n"); + vol = 4.0 * M_PI * ma * mb * mc / 3.0; - bu_vls_printf(gedp->ged_result_str, "ELL Volume = %.8f (%.8f gal)", + bu_vls_printf(gedp->ged_result_str, "\nELL Volume = %.8f (%.8f gal)", vol*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, vol/GALLONS_TO_MM3); @@ -1235,7 +1237,7 @@ area_top = area_base; area_side = 2.0 * M_PI * ma * mh; vol = M_PI * ma * ma * mh; - bu_vls_printf(gedp->ged_result_str, "RCC "); + bu_vls_printf(gedp->ged_result_str, "\nRCC\n"); break; case GED_ANAL_TRC: @@ -1243,7 +1245,8 @@ area_top = M_PI * mc * mc; area_side = M_PI * (ma+mc) * sqrt((ma-mc)*(ma-mc)+(mh*mh)); vol = M_PI * mh * (ma*ma + mc*mc + ma*mc) / 3.0; - bu_vls_printf(gedp->ged_result_str, "TRC "); + + bu_vls_printf(gedp->ged_result_str, "\nTRC\n"); break; case GED_ANAL_REC: @@ -1252,7 +1255,7 @@ /* approximate */ area_side = 2.0 * M_PI * mh * sqrt(0.5 * (ma*ma + mb*mb)); vol = M_PI * ma * mb * mh; - bu_vls_printf(gedp->ged_result_str, "REC "); + bu_vls_printf(gedp->ged_result_str, "\nREC\n"); break; default: @@ -1260,6 +1263,8 @@ return; } + bu_vls_printf(gedp->ged_result_str, "\n"); + /* print the results */ bu_vls_printf(gedp->ged_result_str, "Surface Areas: base(AxB)=%.8f top(CxD)=%.8f side=%.8f\n", area_base*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, @@ -1329,6 +1334,8 @@ area_body = .5*sqrt(r*r + 4.*b*b) + .25*r*r/b*arcsinh(2.*b/r); area_body *= 2.; + bu_vls_printf(gedp->ged_result_str, "\n"); + bu_vls_printf(gedp->ged_result_str, "Surface Areas: front(BxR)=%.8f top(RxH)=%.8f body=%.8f\n", area_parab*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, 2*r*h*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, @@ -1371,6 +1378,8 @@ area_body = 2.*(L_eval(r) - L_eval(0.)); #endif + bu_vls_printf(gedp->ged_result_str, "\n"); + bu_vls_printf(gedp->ged_result_str, "Surface Areas: front(BxR)=%.8f top(RxH)=%.8f body=%.8f\n", area_hyperb*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, 2*r*h*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, @@ -1433,7 +1442,7 @@ break; default: - bu_vls_printf(gedp->ged_result_str, "analyze: unable to process %s solid\n", + bu_vls_printf(gedp->ged_result_str, "\nanalyze: unable to process %s solid\n", rt_functab[ip->idb_type].ft_name); break; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2012-01-19 18:44:05
|
Revision: 48924 http://brlcad.svn.sourceforge.net/brlcad/?rev=48924&view=rev Author: brlcad Date: 2012-01-19 18:43:58 +0000 (Thu, 19 Jan 2012) Log Message: ----------- quell compilation failure for 'field' being unused. mark the sprintf workarounds as FIXME items since bu_vls_printf() is apparently lacking. Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2012-01-19 17:33:34 UTC (rev 48923) +++ brlcad/trunk/src/libged/analyze.c 2012-01-19 18:43:58 UTC (rev 48924) @@ -272,7 +272,7 @@ /* print titles in 4 sets */ #if 1 - /* using sprintf because bu_vls_printf is broken for complex formats */ + /* FIXME: using sprintf because bu_vls_printf is broken for complex formats */ sprintf(buf, "%-*.*s| %-*.*s %*.*s ", indent, indent, " ", maxwidth[0], maxwidth[0], EDGE, @@ -347,14 +347,14 @@ /* data in sets of two */ /* field 0 */ int field = 0; - /* using sprintf because bu_vls_printf is broken for complex formats */ + /* FIXME: using sprintf because bu_vls_printf is broken for complex formats */ sprintf(buf, " %-*.*s", maxwidth[tcol], maxwidth[tcol], table->rows[i].fields[field].buf); bu_vls_printf(gedp->ged_result_str, "%s", buf); /* field 1 */ field = 1; - /* using sprintf because bu_vls_printf is broken for complex formats */ + /* FIXME: using sprintf because bu_vls_printf is broken for complex formats */ sprintf(buf, " %-*.*s |", maxwidth[tcol+1], maxwidth[tcol+1], table->rows[i].fields[field].buf); bu_vls_printf(gedp->ged_result_str, "%s", buf); @@ -379,16 +379,12 @@ while (tcol < 7) { /* data in sets of two */ - /* field 0 */ - int field = 0; - /* using sprintf because bu_vls_printf is broken for complex formats */ + /* FIXME: using sprintf because bu_vls_printf is broken for complex formats */ sprintf(buf, " %-*.*s", maxwidth[tcol], maxwidth[tcol], " "); bu_vls_printf(gedp->ged_result_str, "%s", buf); - /* field 1 */ - field = 1; - /* using sprintf because bu_vls_printf is broken for complex formats */ + /* FIXME: using sprintf because bu_vls_printf is broken for complex formats */ sprintf(buf, " %-*.*s |", maxwidth[tcol+1], maxwidth[tcol+1], " "); bu_vls_printf(gedp->ged_result_str, "%s", buf); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tbr...@us...> - 2012-01-19 20:12:48
|
Revision: 48925 http://brlcad.svn.sourceforge.net/brlcad/?rev=48925&view=rev Author: tbrowder2 Date: 2012-01-19 20:12:41 +0000 (Thu, 19 Jan 2012) Log Message: ----------- leave the note for future reference, please Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2012-01-19 18:43:58 UTC (rev 48924) +++ brlcad/trunk/src/libged/analyze.c 2012-01-19 20:12:41 UTC (rev 48925) @@ -379,11 +379,13 @@ while (tcol < 7) { /* data in sets of two */ + /* this is field 0 */ /* FIXME: using sprintf because bu_vls_printf is broken for complex formats */ sprintf(buf, " %-*.*s", maxwidth[tcol], maxwidth[tcol], " "); bu_vls_printf(gedp->ged_result_str, "%s", buf); + /* this is field 1 */ /* FIXME: using sprintf because bu_vls_printf is broken for complex formats */ sprintf(buf, " %-*.*s |", maxwidth[tcol+1], maxwidth[tcol+1], " "); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2012-01-19 23:22:58
|
Revision: 48930 http://brlcad.svn.sourceforge.net/brlcad/?rev=48930&view=rev Author: bob1961 Date: 2012-01-19 23:22:52 +0000 (Thu, 19 Jan 2012) Log Message: ----------- Move variable declarations to top of code block. Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2012-01-19 23:18:27 UTC (rev 48929) +++ brlcad/trunk/src/libged/analyze.c 2012-01-19 23:22:52 UTC (rev 48930) @@ -336,6 +336,8 @@ tcol = 0; nrow = 0; for (i = 0; i < table->nrows; ++i) { + /* field 0 */ + int field = 0; if (tcol == 0) { /* need to start a row */ @@ -345,8 +347,6 @@ } /* data in sets of two */ - /* field 0 */ - int field = 0; /* FIXME: using sprintf because bu_vls_printf is broken for complex formats */ sprintf(buf, " %-*.*s", maxwidth[tcol], maxwidth[tcol], table->rows[i].fields[field].buf); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tbr...@us...> - 2012-01-19 23:53:02
|
Revision: 48932 http://brlcad.svn.sourceforge.net/brlcad/?rev=48932&view=rev Author: tbrowder2 Date: 2012-01-19 23:52:55 +0000 (Thu, 19 Jan 2012) Log Message: ----------- declaration at top, but set value where it's used Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2012-01-19 23:34:48 UTC (rev 48931) +++ brlcad/trunk/src/libged/analyze.c 2012-01-19 23:52:55 UTC (rev 48932) @@ -336,8 +336,7 @@ tcol = 0; nrow = 0; for (i = 0; i < table->nrows; ++i) { - /* field 0 */ - int field = 0; + int field; if (tcol == 0) { /* need to start a row */ @@ -347,6 +346,8 @@ } /* data in sets of two */ + /* field 0 */ + field = 0; /* FIXME: using sprintf because bu_vls_printf is broken for complex formats */ sprintf(buf, " %-*.*s", maxwidth[tcol], maxwidth[tcol], table->rows[i].fields[field].buf); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <eri...@us...> - 2012-01-20 13:48:07
|
Revision: 48938 http://brlcad.svn.sourceforge.net/brlcad/?rev=48938&view=rev Author: erikgreenwald Date: 2012-01-20 13:47:55 +0000 (Fri, 20 Jan 2012) Log Message: ----------- quell uninitialized var warning Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2012-01-20 13:44:30 UTC (rev 48937) +++ brlcad/trunk/src/libged/analyze.c 2012-01-20 13:47:55 UTC (rev 48938) @@ -137,7 +137,7 @@ table.nrows = 3; for (i = 0; i < table.nrows; ++i) { - double val; + double val = 0.0; /* field 0 */ field = 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2012-02-02 17:10:21
|
Revision: 49191 http://brlcad.svn.sourceforge.net/brlcad/?rev=49191&view=rev Author: brlcad Date: 2012-02-02 17:10:15 +0000 (Thu, 02 Feb 2012) Log Message: ----------- no // comments in C files for portability Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2012-02-02 17:09:45 UTC (rev 49190) +++ brlcad/trunk/src/libged/analyze.c 2012-02-02 17:10:15 UTC (rev 49191) @@ -210,7 +210,7 @@ */ - int i; //j, k + int i; int tcol, nd, nrow, nrows; int maxwidth[] = {0, 0, 0, 0, 0, 0, @@ -977,7 +977,7 @@ ); #if 0 - //OR Vol = %.8f (%.8f gal) Surface Area = %.8f\n", + /* OR Vol = %.8f (%.8f gal) Surface Area = %.8f\n", */ bu_vls_printf(gedp->ged_result_str, "TOR Vol = %.8f (%.8f gal) Surface Area = %.8f\n", vol*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2012-02-07 06:42:07
|
Revision: 49292 http://brlcad.svn.sourceforge.net/brlcad/?rev=49292&view=rev Author: brlcad Date: 2012-02-07 06:42:01 +0000 (Tue, 07 Feb 2012) Log Message: ----------- bu_strlcat() instead of strcat() for safety Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2012-02-07 06:41:36 UTC (rev 49291) +++ brlcad/trunk/src/libged/analyze.c 2012-02-07 06:42:01 UTC (rev 49292) @@ -102,7 +102,7 @@ int i; f->buf[0] = '\0'; for (i = 0; i < ndashes; ++i) { - strcat(f->buf, "-"); + bu_strlcat(f->buf, "-", FBUFSIZ); } f->nchars = ndashes; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cr...@us...> - 2012-06-08 05:28:52
|
Revision: 51014 http://brlcad.svn.sourceforge.net/brlcad/?rev=51014&view=rev Author: crdueck Date: 2012-06-08 05:28:46 +0000 (Fri, 08 Jun 2012) Log Message: ----------- analyze_tor() now uses the new volume and surface area callbacks for tor Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2012-06-08 05:14:45 UTC (rev 51013) +++ brlcad/trunk/src/libged/analyze.c 2012-06-08 05:28:46 UTC (rev 51014) @@ -950,17 +950,11 @@ static void analyze_tor(struct ged *gedp, const struct rt_db_internal *ip) { - struct rt_tor_internal *tor = (struct rt_tor_internal *)ip->idb_ptr; - fastf_t r1, r2, vol, sur_area; + fastf_t vol, area; - RT_TOR_CK_MAGIC(tor); + rt_functab[ID_TOR].ft_volume(&vol, ip); + rt_functab[ID_TOR].ft_surf_area(&area, ip); - r1 = tor->r_a; - r2 = tor->r_h; - - vol = 2.0 * M_PI * M_PI * r1 * r2 * r2; - sur_area = 4.0 * M_PI * M_PI * r1 * r2; - bu_vls_printf(gedp->ged_result_str, "\n"); print_volume_table(gedp, @@ -968,7 +962,7 @@ * gedp->ged_wdbp->dbip->dbi_base2local * gedp->ged_wdbp->dbip->dbi_base2local * gedp->ged_wdbp->dbip->dbi_base2local, - sur_area + area * gedp->ged_wdbp->dbip->dbi_base2local * gedp->ged_wdbp->dbip->dbi_base2local, vol/GALLONS_TO_MM3 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cr...@us...> - 2012-06-08 19:29:17
|
Revision: 51031 http://brlcad.svn.sourceforge.net/brlcad/?rev=51031&view=rev Author: crdueck Date: 2012-06-08 19:29:11 +0000 (Fri, 08 Jun 2012) Log Message: ----------- updated analyze_tgc() to use the new callbacks for tgc Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2012-06-08 19:26:33 UTC (rev 51030) +++ brlcad/trunk/src/libged/analyze.c 2012-06-08 19:29:11 UTC (rev 51031) @@ -1102,95 +1102,33 @@ } -#define GED_ANAL_RCC 1 -#define GED_ANAL_TRC 2 -#define GED_ANAL_REC 3 - /* analyze tgc */ static void analyze_tgc(struct ged *gedp, const struct rt_db_internal *ip) { - struct rt_tgc_internal *tgc = (struct rt_tgc_internal *)ip->idb_ptr; - fastf_t maxb, ma, mb, mc, md, mh; - fastf_t area_base, area_top, area_side, vol; - vect_t axb; - int cgtype = 0; + fastf_t vol, area = -1; - RT_TGC_CK_MAGIC(tgc); + rt_functab[ID_TGC].ft_volume(&vol, ip); + rt_functab[ID_TGC].ft_surf_area(&area, ip); - VCROSS(axb, tgc->a, tgc->b); - maxb = MAGNITUDE(axb); - ma = MAGNITUDE(tgc->a); - mb = MAGNITUDE(tgc->b); - mc = MAGNITUDE(tgc->c); - md = MAGNITUDE(tgc->d); - mh = MAGNITUDE(tgc->h); + bu_vls_printf(gedp->ged_result_str, "\n"); - /* check for right cylinder */ - if (fabs(fabs(VDOT(tgc->h, axb)) - (mh*maxb)) < .00001) { - /* have a right cylinder */ - if (fabs(ma-mb) < .00001) { - /* have a circular base */ - if (fabs(mc-md) < .00001) { - /* have a circular top */ - if (fabs(ma-mc) < .00001) - cgtype = GED_ANAL_RCC; - else - cgtype = GED_ANAL_TRC; - } - } else { - /* have an elliptical base */ - if (fabs(ma-mc) < .00001 && fabs(mb-md) < .00001) - cgtype = GED_ANAL_REC; - } - } + /* reminder to add per-face analysis */ + /*bu_vls_printf(gedp->ged_result_str, "Surface Areas: base(AxB)=%.8f top(CxD)=%.8f side=%.8f\n",*/ + /*area_base*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local,*/ + /*area_top*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local,*/ + /*area_side*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local);*/ - switch (cgtype) { + bu_vls_printf(gedp->ged_result_str, "Volume=%.8f (%.8f gal)", + vol*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, + vol/GALLONS_TO_MM3); - case GED_ANAL_RCC: - area_base = M_PI * ma * ma; - area_top = area_base; - area_side = 2.0 * M_PI * ma * mh; - vol = M_PI * ma * ma * mh; - bu_vls_printf(gedp->ged_result_str, "\nRCC\n"); - break; - - case GED_ANAL_TRC: - area_base = M_PI * ma * ma; - area_top = M_PI * mc * mc; - area_side = M_PI * (ma+mc) * sqrt((ma-mc)*(ma-mc)+(mh*mh)); - vol = M_PI * mh * (ma*ma + mc*mc + ma*mc) / 3.0; - - bu_vls_printf(gedp->ged_result_str, "\nTRC\n"); - break; - - case GED_ANAL_REC: - area_base = M_PI * ma * mb; - area_top = M_PI * mc * md; - /* approximate */ - area_side = 2.0 * M_PI * mh * sqrt(0.5 * (ma*ma + mb*mb)); - vol = M_PI * ma * mb * mh; - bu_vls_printf(gedp->ged_result_str, "\nREC\n"); - break; - - default: - bu_vls_printf(gedp->ged_result_str, "\nTGC Cannot find areas and volume\n"); - return; + if (area < 0) { + bu_vls_printf(gedp->ged_result_str, "\nTGC Cannot find surface area\n"); + } else { + bu_vls_printf(gedp->ged_result_str, " Surface Area=%.8f\n", + area*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local); } - - bu_vls_printf(gedp->ged_result_str, "\n"); - - /* print the results */ - bu_vls_printf(gedp->ged_result_str, "Surface Areas: base(AxB)=%.8f top(CxD)=%.8f side=%.8f\n", - area_base*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, - area_top*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, - area_side*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local); - bu_vls_printf(gedp->ged_result_str, "Total Surface Area=%.8f Volume=%.8f (%.8f gal)\n", - (area_base+area_top+area_side)*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, - vol*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, vol/GALLONS_TO_MM3); - /* Print units? */ - return; - } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cr...@us...> - 2012-06-16 06:16:07
|
Revision: 51182 http://brlcad.svn.sourceforge.net/brlcad/?rev=51182&view=rev Author: crdueck Date: 2012-06-16 06:16:01 +0000 (Sat, 16 Jun 2012) Log Message: ----------- cleaned up formatting for bu_vls_printf in analyze_ell and analyze_tor, planning on using this format throughout analyze.c for consistency Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2012-06-16 05:32:57 UTC (rev 51181) +++ brlcad/trunk/src/libged/analyze.c 2012-06-16 06:16:01 UTC (rev 51182) @@ -991,15 +991,22 @@ rt_functab[ID_ELL].ft_volume(&vol, ip); bu_vls_printf(gedp->ged_result_str, "\nELL Volume = %.8f (%.8f gal)", - vol*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, - vol/GALLONS_TO_MM3); + vol + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local, + vol/GALLONS_TO_MM3 + ); rt_functab[ID_ELL].ft_surf_area(&area, ip); if (area < 0) { bu_vls_printf(gedp->ged_result_str, " Cannot find surface area\n"); } else { bu_vls_printf(gedp->ged_result_str, " Surface Area = %.8f\n", - area*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local); + area + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local + ); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cr...@us...> - 2012-06-16 06:18:43
|
Revision: 51183 http://brlcad.svn.sourceforge.net/brlcad/?rev=51183&view=rev Author: crdueck Date: 2012-06-16 06:18:37 +0000 (Sat, 16 Jun 2012) Log Message: ----------- cleaned up formatting in analyze_tgc Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2012-06-16 06:16:01 UTC (rev 51182) +++ brlcad/trunk/src/libged/analyze.c 2012-06-16 06:18:37 UTC (rev 51183) @@ -1127,14 +1127,21 @@ /*area_side*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local);*/ bu_vls_printf(gedp->ged_result_str, "Volume=%.8f (%.8f gal)", - vol*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, - vol/GALLONS_TO_MM3); + vol + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local, + vol/GALLONS_TO_MM3 + ); if (area < 0) { bu_vls_printf(gedp->ged_result_str, "\nTGC Cannot find surface area\n"); } else { bu_vls_printf(gedp->ged_result_str, " Surface Area=%.8f\n", - area*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local); + area + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local + ); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cr...@us...> - 2012-06-16 07:00:53
|
Revision: 51184 http://brlcad.svn.sourceforge.net/brlcad/?rev=51184&view=rev Author: crdueck Date: 2012-06-16 07:00:46 +0000 (Sat, 16 Jun 2012) Log Message: ----------- updated analyze_arb to use the new volume callback Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2012-06-16 06:18:37 UTC (rev 51183) +++ brlcad/trunk/src/libged/analyze.c 2012-06-16 07:00:46 UTC (rev 51184) @@ -53,17 +53,6 @@ }; -/* division of an arb8 into 6 arb4s */ -static const int farb4[6][4] = { - {0, 1, 2, 4}, - {4, 5, 6, 1}, - {1, 2, 6, 4}, - {0, 2, 3, 4}, - {4, 6, 7, 2}, - {2, 3, 7, 4}, -}; - - /* edge definition array */ static const int nedge[5][24] = { {0, 1, 1, 2, 2, 0, 0, 3, 3, 2, 1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* ARB4 */ @@ -811,41 +800,6 @@ } -/* Finds volume of an arb4 defined by farb4[loc][] */ -static double -analyze_find_vol(int loc, struct rt_arb_internal *arb, struct bn_tol *tol) -{ - int a, b, c, d; - fastf_t vol, height, len[3], temp, areabase; - vect_t v_temp; - plane_t plane; - - /* a, b, c = base of the arb4 */ - a = farb4[loc][0]; - b = farb4[loc][1]; - c = farb4[loc][2]; - - /* d = "top" point of arb4 */ - d = farb4[loc][3]; - - if (bn_mk_plane_3pts(plane, arb->pt[a], arb->pt[b], - arb->pt[c], tol) < 0) - return 0.0; - - /* have a good arb4 - find its volume */ - height = fabs(plane[W] - VDOT(&plane[0], arb->pt[d])); - VSUB2(v_temp, arb->pt[b], arb->pt[a]); - len[0] = MAGNITUDE(v_temp); - VSUB2(v_temp, arb->pt[c], arb->pt[a]); - len[1] = MAGNITUDE(v_temp); - VSUB2(v_temp, arb->pt[c], arb->pt[b]); - len[2] = MAGNITUDE(v_temp); - temp = 0.5 * (len[0] + len[1] + len[2]); - areabase = sqrt(temp * (temp-len[0]) * (temp-len[1]) * (temp-len[2])); - vol = areabase * height / 3.0; - return vol; -} - /* * A R B _ A N A L */ @@ -855,8 +809,7 @@ struct rt_arb_internal *arb = (struct rt_arb_internal *)ip->idb_ptr; int i; point_t center_pt; - double tot_vol; - double tot_area; + fastf_t tot_vol, tot_area; int cgtype; /* COMGEOM arb type: # of vertices */ int type; @@ -927,8 +880,7 @@ /* blank line following previous table */ bu_vls_printf(gedp->ged_result_str, "\n"); - for (i = 0; i < 6; i++) - tot_vol += analyze_find_vol(i, arb, &gedp->ged_wdbp->wdb_tol); + rt_functab[ID_ARB8].ft_volume(&tot_vol, ip); print_volume_table(gedp, tot_vol This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cr...@us...> - 2012-06-19 03:26:13
|
Revision: 51221 http://brlcad.svn.sourceforge.net/brlcad/?rev=51221&view=rev Author: crdueck Date: 2012-06-19 03:26:07 +0000 (Tue, 19 Jun 2012) Log Message: ----------- updated analyze_rpc() to use the new callbacks, use print_volume_table() for displaying results Modified Paths: -------------- brlcad/trunk/src/libged/analyze.c Modified: brlcad/trunk/src/libged/analyze.c =================================================================== --- brlcad/trunk/src/libged/analyze.c 2012-06-19 02:40:30 UTC (rev 51220) +++ brlcad/trunk/src/libged/analyze.c 2012-06-19 03:26:07 UTC (rev 51221) @@ -1128,41 +1128,32 @@ } -#define arcsinh(x) (log((x) + sqrt((x)*(x) + 1.))) - /* analyze rpc */ static void analyze_rpc(struct ged *gedp, const struct rt_db_internal *ip) { - fastf_t area_parab, area_body, b, h, r, vol_parab; - struct rt_rpc_internal *rpc = (struct rt_rpc_internal *)ip->idb_ptr; + fastf_t vol, area; - RT_RPC_CK_MAGIC(rpc); - - b = MAGNITUDE(rpc->rpc_B); - h = MAGNITUDE(rpc->rpc_H); - r = rpc->rpc_r; - - /* area of one parabolic side */ - area_parab = 4./3 * b*r; - /* volume of rpc */ - vol_parab = area_parab*h; + rt_functab[ID_RPC].ft_volume(&vol, ip); + /* surface area of rpc */ + rt_functab[ID_RPC].ft_surf_area(&area, ip); - /* surface area of parabolic body */ - area_body = .5*sqrt(r*r + 4.*b*b) + .25*r*r/b*arcsinh(2.*b/r); - area_body *= 2.; + /* reminder to implement per-face analysis */ + /*bu_vls_printf(gedp->ged_result_str, "Surface Areas: front(BxR)=%.8f top(RxH)=%.8f body=%.8f\n",*/ + /*area_parab*/ + /** gedp->ged_wdbp->dbip->dbi_base2local*/ + /** gedp->ged_wdbp->dbip->dbi_base2local,*/ + /*area_rect*/ + /** gedp->ged_wdbp->dbip->dbi_base2local*/ + /** gedp->ged_wdbp->dbip->dbi_base2local,*/ + /*area_body*/ + /** gedp->ged_wdbp->dbip->dbi_base2local*/ + /** gedp->ged_wdbp->dbip->dbi_base2local*/ + /*);*/ bu_vls_printf(gedp->ged_result_str, "\n"); - - bu_vls_printf(gedp->ged_result_str, "Surface Areas: front(BxR)=%.8f top(RxH)=%.8f body=%.8f\n", - area_parab*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, - 2*r*h*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, - area_body*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local); - bu_vls_printf(gedp->ged_result_str, "Total Surface Area=%.8f Volume=%.8f (%.8f gal)\n", - (2*area_parab+2*r*h+area_body)*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, - vol_parab*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local, - vol_parab/GALLONS_TO_MM3); + print_volume_table(gedp, vol, area, vol/GALLONS_TO_MM3); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |