Revision: 54977
http://brlcad.svn.sourceforge.net/brlcad/?rev=54977&view=rev
Author: n_reed
Date: 2013-03-29 17:23:45 +0000 (Fri, 29 Mar 2013)
Log Message:
-----------
save pointers to the display lists that we want to draw so we don't have to
search for them later
Modified Paths:
--------------
brlcad/trunk/src/libged/draw.c
Modified: brlcad/trunk/src/libged/draw.c
===================================================================
--- brlcad/trunk/src/libged/draw.c 2013-03-29 16:57:07 UTC (rev 54976)
+++ brlcad/trunk/src/libged/draw.c 2013-03-29 17:23:45 UTC (rev 54977)
@@ -719,7 +719,29 @@
return 0;
}
+static int
+redraw_solid(struct ged *gedp, struct solid *sp)
+{
+ if (sp->s_dmode == _GED_WIREFRAME) {
+ /* replot wireframe */
+ if (BU_LIST_NON_EMPTY(&sp->s_vlist)) {
+ RT_FREE_VLIST(&sp->s_vlist);
+ }
+ return draw_solid_wireframe(gedp, sp);
+ } else {
+ /* non-wireframe replot - let's not and say we did */
+ if (gedp->ged_create_vlist_callback !=
+ GED_CREATE_VLIST_CALLBACK_PTR_NULL)
+ {
+ (*gedp->ged_create_vlist_callback)(sp);
+ }
+ }
+ return 0;
+}
+
+
+
/**
* G E D _ N M G _ R E G I O N _ S T A R T
*
@@ -1243,10 +1265,21 @@
(genptr_t)&dgcdp);
}
} else {
+ struct ged_display_list **paths_to_draw;
+ struct ged_display_list *gdlp;
+ struct solid *sp;
+
+ paths_to_draw = (struct ged_display_list **)
+ bu_malloc(sizeof(struct ged_display_list *) * argc,
+ "redraw paths");
+
/* create solids */
for (i = 0; i < argc; ++i) {
dgcdp.gdlp = ged_addToDisplay(gedp, argv[i]);
+ /* store draw path */
+ paths_to_draw[i] = dgcdp.gdlp;
+
if (dgcdp.gdlp == GED_DISPLAY_LIST_NULL) {
continue;
}
@@ -1274,12 +1307,25 @@
ged_autoview(gedp, 1, autoview_args);
}
- /* calculate plot vlists for solids */
- av[0] = "redraw";
+ /* calculate plot vlists for solids of each draw path */
for (i = 0; i < argc; ++i) {
- av[1] = (char *)argv[i];
- ged_redraw(gedp, 2, (const char **)av);
+ gdlp = paths_to_draw[i];
+
+ if (gdlp == GED_DISPLAY_LIST_NULL) {
+ continue;
+ }
+
+ for (BU_LIST_FOR(sp, solid, &gdlp->gdl_headSolid)) {
+ ret = redraw_solid(gedp, sp);
+ if (ret < 0) {
+ bu_vls_printf(gedp->ged_result_str,
+ "%s: %s redraw failure\n", argv[0],
argv[i]);
+ return GED_ERROR;
+ }
+ }
}
+
+ bu_free(paths_to_draw, "draw paths");
}
break;
case 2: /* Big-E */
@@ -1726,27 +1772,6 @@
return gdlp;
}
-static int
-redraw_solid(struct ged *gedp, struct solid *sp)
-{
- if (sp->s_dmode == _GED_WIREFRAME) {
- /* replot wireframe */
- if (BU_LIST_NON_EMPTY(&sp->s_vlist)) {
- RT_FREE_VLIST(&sp->s_vlist);
- }
- return draw_solid_wireframe(gedp, sp);
- } else {
- /* non-wireframe replot - let's not and say we did */
- if (gedp->ged_create_vlist_callback !=
- GED_CREATE_VLIST_CALLBACK_PTR_NULL)
- {
- (*gedp->ged_create_vlist_callback)(sp);
- }
- }
-
- return 0;
-}
-
int
ged_redraw(struct ged *gedp, int argc, const char *argv[])
{
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Own the Future-Intel(R) Level Up Game Demo Contest 2013
Rise to greatness in Intel's independent game demo contest. Compete
for recognition, cash, and the chance to get your game on Steam.
$5K grand prize plus 10 genre and skill prizes. Submit your demo
by 6/6/13. http://altfarm.mediaplex.com/ad/ck/12124-176961-30367-2
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits