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

Reply via email to