Revision: 41497
http://brlcad.svn.sourceforge.net/brlcad/?rev=41497&view=rev
Author: bob1961
Date: 2010-12-03 18:22:32 +0000 (Fri, 03 Dec 2010)
Log Message:
-----------
Added a -a option to showmats for getting only the Accumulated matrix of the
specified path.
Modified Paths:
--------------
brlcad/trunk/src/libged/showmats.c
Modified: brlcad/trunk/src/libged/showmats.c
===================================================================
--- brlcad/trunk/src/libged/showmats.c 2010-12-02 23:00:43 UTC (rev 41496)
+++ brlcad/trunk/src/libged/showmats.c 2010-12-03 18:22:32 UTC (rev 41497)
@@ -40,43 +40,58 @@
mat_t smd_mat;
};
-static void Do_showmats(struct db_i *dbip,
- struct rt_comb_internal *comb,
- union tree *comb_leaf,
- genptr_t user_ptr1,
- genptr_t user_ptr2,
- genptr_t user_ptr3);
-
-int
-ged_showmats(struct ged *gedp, int argc, const char *argv[])
+static void
+Do_showmats(struct db_i *dbip,
+ struct rt_comb_internal *comb,
+ union tree *comb_leaf,
+ genptr_t user_ptr1,
+ genptr_t user_ptr2,
+ genptr_t user_ptr3)
{
- struct showmats_data sm_data;
- char *parent;
- struct directory *dp;
- int max_count=1;
- static const char *usage = "path";
+ struct showmats_data *smdp;
+ int aflag;
+ char obuf[1024];
- GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
- GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR);
+ RT_CK_DBI(dbip);
+ RT_CK_TREE(comb_leaf);
- /* initialize result */
- bu_vls_trunc(&gedp->ged_result_str, 0);
+ smdp = (struct showmats_data *)user_ptr1;
+ aflag = *((int *)user_ptr2);
- /* must be wanting help */
- if (argc == 1) {
- bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_HELP;
+ if (strcmp(comb_leaf->tr_l.tl_name, smdp->smd_child))
+ return;
+
+ smdp->smd_count++;
+ if (!aflag) {
+ if (smdp->smd_count > 1) {
+ bu_vls_printf(&smdp->smd_gedp->ged_result_str, "\n\tOccurrence
#%d:\n", smdp->smd_count);
+ }
+
+ bn_mat_print_guts("", comb_leaf->tr_l.tl_mat, obuf, 1024);
+ bu_vls_printf(&smdp->smd_gedp->ged_result_str, "%s", obuf);
}
- if (argc != 2) {
- bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
- return GED_ERROR;
+ if (smdp->smd_count == 1) {
+ mat_t tmp_mat;
+ if (comb_leaf->tr_l.tl_mat) {
+ bn_mat_mul(tmp_mat, smdp->smd_mat, comb_leaf->tr_l.tl_mat);
+ MAT_COPY(smdp->smd_mat, tmp_mat);
+ }
}
+}
+static int
+Run_showmats(struct ged *gedp, char *path, int aflag)
+{
+ struct showmats_data sm_data;
+ char *parent;
+ struct directory *dp;
+ int max_count=1;
+
sm_data.smd_gedp = gedp;
MAT_IDN(sm_data.smd_mat);
- parent = strtok((char *)argv[1], "/");
+ parent = strtok((char *)path, "/");
while ((sm_data.smd_child = strtok((char *)NULL, "/")) != NULL) {
struct rt_db_internal intern;
struct rt_comb_internal *comb;
@@ -84,10 +99,12 @@
if ((dp = db_lookup(gedp->ged_wdbp->dbip, parent, LOOKUP_NOISY)) ==
DIR_NULL)
return TCL_ERROR;
- bu_vls_printf(&gedp->ged_result_str, "%s\n", parent);
+ if (!aflag)
+ bu_vls_printf(&gedp->ged_result_str, "%s\n", parent);
if (!(dp->d_flags & DIR_COMB)) {
- bu_vls_printf(&gedp->ged_result_str, "\tThis is not a
combination\n");
+ if (!aflag)
+ bu_vls_printf(&gedp->ged_result_str, "\tThis is not a
combination\n");
break;
}
@@ -101,7 +118,7 @@
if (comb->tree)
db_tree_funcleaf(gedp->ged_wdbp->dbip, comb, comb->tree,
Do_showmats,
- (genptr_t)&sm_data, (genptr_t)NULL,
(genptr_t)NULL);
+ (genptr_t)&sm_data, (genptr_t)&aflag,
(genptr_t)NULL);
rt_db_free_internal(&intern);
if (!sm_data.smd_count) {
@@ -113,57 +130,56 @@
parent = sm_data.smd_child;
}
- bu_vls_printf(&gedp->ged_result_str, "%s\n", parent);
- if (max_count > 1)
- bu_vls_printf(&gedp->ged_result_str, "\nAccumulated matrix (using first
occurrence of each object):\n");
- else
- bu_vls_printf(&gedp->ged_result_str, "\nAccumulated matrix:\n");
-
- {
+ if (!aflag) {
char obuf[1024];
+ bu_vls_printf(&gedp->ged_result_str, "%s\n", parent);
+
+ if (max_count > 1)
+ bu_vls_printf(&gedp->ged_result_str, "\nAccumulated matrix (using
first occurrence of each object):\n");
+ else
+ bu_vls_printf(&gedp->ged_result_str, "\nAccumulated matrix:\n");
+
bn_mat_print_guts("", sm_data.smd_mat, obuf, 1024);
bu_vls_printf(&gedp->ged_result_str, "%s", obuf);
+ } else {
+ int i;
+
+ for (i=0; i<16; ++i)
+ bu_vls_printf(&gedp->ged_result_str, " %lf", sm_data.smd_mat[i]);
}
return GED_OK;
}
-static void
-Do_showmats(struct db_i *dbip,
- struct rt_comb_internal *comb,
- union tree *comb_leaf,
- genptr_t user_ptr1,
- genptr_t user_ptr2,
- genptr_t user_ptr3)
+int
+ged_showmats(struct ged *gedp, int argc, const char *argv[])
{
- struct showmats_data *smdp;
- char obuf[1024];
+ int aflag = 0;
+ static const char *usage = "path";
- RT_CK_DBI(dbip);
- RT_CK_TREE(comb_leaf);
+ GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
+ GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR);
- smdp = (struct showmats_data *)user_ptr1;
+ /* initialize result */
+ bu_vls_trunc(&gedp->ged_result_str, 0);
- if (strcmp(comb_leaf->tr_l.tl_name, smdp->smd_child))
- return;
+ /* must be wanting help */
+ if (argc == 1) {
+ bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+ return GED_HELP;
+ }
- smdp->smd_count++;
- if (smdp->smd_count > 1) {
- bu_vls_printf(&smdp->smd_gedp->ged_result_str, "\n\tOccurrence #%d:\n",
smdp->smd_count);
+ if (argc == 3 && argv[1][0] == '-' && argv[1][1] == 'a' && argv[1][2] ==
'\0') {
+ aflag = 1;
+ ++argv;
+ } else if (argc != 2) {
+ bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+ return GED_ERROR;
}
- bn_mat_print_guts("", comb_leaf->tr_l.tl_mat, obuf, 1024);
- bu_vls_printf(&smdp->smd_gedp->ged_result_str, "%s", obuf);
-
- if (smdp->smd_count == 1) {
- mat_t tmp_mat;
- if (comb_leaf->tr_l.tl_mat) {
- bn_mat_mul(tmp_mat, smdp->smd_mat, comb_leaf->tr_l.tl_mat);
- MAT_COPY(smdp->smd_mat, tmp_mat);
- }
- }
+ return Run_showmats(gedp, argv[1], aflag);
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Increase Visibility of Your 3D Game App & Earn a Chance To Win $500!
Tap into the largest installed PC base & get more eyes on your game by
optimizing for Intel(R) Graphics Technology. Get started today with the
Intel(R) Software Partner Program. Five $500 cash prizes are up for grabs.
http://p.sf.net/sfu/intelisp-dev2dev
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits