Revision: 44192
          http://brlcad.svn.sourceforge.net/brlcad/?rev=44192&view=rev
Author:   bob1961
Date:     2011-04-04 19:16:06 +0000 (Mon, 04 Apr 2011)

Log Message:
-----------
Mods to get libtclcad compiling again.

Modified Paths:
--------------
    brlcad/trunk/include/ged.h
    brlcad/trunk/include/tclcad.h
    brlcad/trunk/src/libtclcad/tclcad_obj.c

Modified: brlcad/trunk/include/ged.h
===================================================================
--- brlcad/trunk/include/ged.h  2011-04-04 18:49:53 UTC (rev 44191)
+++ brlcad/trunk/include/ged.h  2011-04-04 19:16:06 UTC (rev 44192)
@@ -35,6 +35,7 @@
 #endif
 
 #include "raytrace.h"
+#include "fbserv_obj.h"
 
 
 __BEGIN_DECLS
@@ -73,6 +74,7 @@
 #define GED_DISPLAY_LIST_NULL (struct ged_display_list *)0
 #define GED_DRAWABLE_NULL (struct ged_drawable *)0
 #define GED_VIEW_NULL (struct ged_view *)0
+#define GED_OBJ_NULL (struct ged_obj *)0
 
 #define GED_VIEW_OBJ_NULL ((struct view_obj *)0)
 #define GED_RESULT_NULL ((void *)0)
@@ -97,6 +99,11 @@
 #define GED_PTRANSLATE_MODE 14
 #define GED_RECTANGLE_MODE 15
 
+#define GED_OBJ_FB_MODE_OFF 0
+#define GED_OBJ_FB_MODE_UNDERLAY 1
+#define GED_OBJ_FB_MODE_INTERLAY 2
+#define GED_OBJ_FB_MODE_OVERLAY  3
+
 /**
  * S E M A P H O R E S
  *
@@ -451,7 +458,6 @@
 #endif
 };
 
-
 struct ged_view {
     struct bu_list             l;
     fastf_t                    gv_scale;
@@ -501,7 +507,6 @@
     struct ged_rect_state      gv_rect;
 };
 
-
 struct ged {
     struct bu_list             l;
     struct rt_wdb              *ged_wdbp;
@@ -560,7 +565,28 @@
     int                        vo_zclip;
 };
 
+struct ged_dm_view {
+    struct bu_list             l;
+    struct bu_vls              gdv_callback;
+    struct bu_vls              gdv_name;
+    struct ged_view            *gdv_view;
+    struct dm                  *gdv_dmp;
+    struct fbserv_obj          gdv_fbs;
+    struct ged_obj             *gdv_gop; /* Pointer back to its ged object */
+};
 
+struct ged_obj {
+    struct ged         *go_gedp;
+    struct ged_dm_view go_head_views;
+    struct bu_vls      go_name;
+    struct bu_observer go_observers;
+    struct bu_vls      go_more_args_callback;
+    struct bu_vls      go_rt_end_callback;
+    struct bu_vls      *go_prim_label_list;
+    int                        go_prim_label_list_size;
+    int                        go_refresh_on;
+};
+
 /* defined in adc.c */
 GED_EXPORT BU_EXTERN(void ged_calc_adc_pos,
                     (struct ged_view *gvp));
@@ -620,6 +646,14 @@
 GED_EXPORT BU_EXTERN(void ged_view_init,
                     (struct ged_view *gvp));
 
+/* defined in go_refresh.c */
+GED_EXPORT BU_EXTERN(void go_refresh,
+                    (struct ged_obj *gop,
+                     struct ged_dm_view *gdvp));
+GED_EXPORT BU_EXTERN(void go_refresh_draw,
+                    (struct ged_obj *gop,
+                     struct ged_dm_view *gdvp));
+
 /* defined in grid.c */
 GED_EXPORT BU_EXTERN(void ged_snap_to_grid,
                     (struct ged *gedp, fastf_t *vx, fastf_t *vy));

Modified: brlcad/trunk/include/tclcad.h
===================================================================
--- brlcad/trunk/include/tclcad.h       2011-04-04 18:49:53 UTC (rev 44191)
+++ brlcad/trunk/include/tclcad.h       2011-04-04 19:16:06 UTC (rev 44192)
@@ -61,39 +61,14 @@
 #define TCLCAD_EXTERN(type_and_name, args) extern type_and_name args
 #define TCLCAD_ARGS(args) args
 
-#define GED_OBJ_NUM_VIEWS 4
-#define GED_OBJ_FB_MODE_OFF 0
-#define GED_OBJ_FB_MODE_UNDERLAY 1
-#define GED_OBJ_FB_MODE_INTERLAY 2
-#define GED_OBJ_FB_MODE_OVERLAY  3
-
-struct ged_dm_view {
-    struct bu_list             l;
-    struct bu_vls              gdv_callback;
-    struct bu_vls              gdv_name;
-    struct ged_view            *gdv_view;
-    struct dm                  *gdv_dmp;
-    struct fbserv_obj          gdv_fbs;
-    struct ged_obj             *gdv_gop; /* Pointer back to its ged object */
-};
-
-struct ged_obj {
+struct tclcad_obj {
     struct bu_list     l;
-    struct ged         *go_gedp;
-    struct ged_dm_view go_head_views;
-    struct bu_vls      go_name;
-    struct bu_observer go_observers;
-    struct bu_vls      go_more_args_callback;
-    struct bu_vls      go_rt_end_callback;
-    struct bu_vls      *go_prim_label_list;
-    int                        go_prim_label_list_size;
-    int                        go_refresh_on;
-    Tcl_Interp         *go_interp;
+    struct ged_obj     *to_gop;
+    Tcl_Interp         *to_interp;
 };
 
-#define GED_OBJ_NULL (struct ged_obj *)0
+#define TCLCAD_OBJ_NULL (struct tclcad_obj *)0
 
-
 TCLCAD_EXPORT TCLCAD_EXTERN(int tclcad_tk_setup, (Tcl_Interp *interp));
 TCLCAD_EXPORT TCLCAD_EXTERN(void tclcad_auto_path, (Tcl_Interp *interp));
 TCLCAD_EXPORT TCLCAD_EXTERN(void tclcad_tcl_library, (Tcl_Interp *interp));

Modified: brlcad/trunk/src/libtclcad/tclcad_obj.c
===================================================================
--- brlcad/trunk/src/libtclcad/tclcad_obj.c     2011-04-04 18:49:53 UTC (rev 
44191)
+++ brlcad/trunk/src/libtclcad/tclcad_obj.c     2011-04-04 19:16:06 UTC (rev 
44192)
@@ -89,6 +89,13 @@
 #endif /* DM_WGL */
 
 
+GED_EXPORT BU_EXTERN(void go_refresh,
+                    (struct ged_obj *gop,
+                     struct ged_dm_view *gdvp));
+GED_EXPORT BU_EXTERN(void go_refresh_draw,
+                    (struct ged_obj *gop,
+                     struct ged_dm_view *gdvp));
+
 HIDDEN int to_open_tcl(ClientData clientData,
                       Tcl_Interp *interp,
                       int argc,
@@ -8812,6 +8819,531 @@
 }
 
 
+HIDDEN void go_dm_draw_arrows(struct dm *dmp, struct ged_data_arrow_state 
*gdasp);
+HIDDEN void go_dm_draw_labels(struct dm *dmp, struct ged_data_label_state 
*gdlsp, matp_t m2vmat);
+HIDDEN void go_dm_draw_lines(struct dm *dmp, struct ged_data_line_state 
*gdasp);
+
+HIDDEN void go_draw(struct ged_dm_view *gdvp);
+#if 1
+int go_draw_dlist(struct dm *dmp, struct bu_list *hsp);
+#else
+HIDDEN int go_draw_dlist(struct dm *dmp, struct bu_list *hsp);
+#endif
+HIDDEN void go_draw_faceplate(struct ged_obj *gop, struct ged_dm_view *gdvp);
+HIDDEN void go_draw_solid(struct dm *dmp, struct solid *sp);
+
+
+HIDDEN void
+go_dm_draw_arrows(struct dm *dmp, struct ged_data_arrow_state *gdasp)
+{
+    register int i;
+    int saveLineWidth;
+    int saveLineStyle;
+
+    if (gdasp->gdas_num_points < 1)
+       return;
+
+    saveLineWidth = dmp->dm_lineWidth;
+    saveLineStyle = dmp->dm_lineStyle;
+
+    /* set color */
+    DM_SET_FGCOLOR(dmp,
+                  gdasp->gdas_color[0],
+                  gdasp->gdas_color[1],
+                  gdasp->gdas_color[2], 1, 1.0);
+
+    /* set linewidth */
+    DM_SET_LINE_ATTR(dmp, gdasp->gdas_line_width, 0);  /* solid lines */
+
+    DM_DRAW_LINES_3D(dmp,
+                    gdasp->gdas_num_points,
+                    gdasp->gdas_points);
+
+    for (i = 0; i < gdasp->gdas_num_points; i += 2) {
+       point_t points[16];
+       point_t A, B;
+       point_t BmA;
+       point_t offset;
+       point_t perp1, perp2;
+       point_t a_base;
+       point_t a_pt1, a_pt2, a_pt3, a_pt4;
+
+       VMOVE(A, gdasp->gdas_points[i]);
+       VMOVE(B, gdasp->gdas_points[i+1]);
+       VSUB2(BmA, B, A);
+
+       VUNITIZE(BmA);
+       VSCALE(offset, BmA, -gdasp->gdas_tip_length);
+
+       bn_vec_perp(perp1, BmA);
+       VUNITIZE(perp1);
+
+       VCROSS(perp2, BmA, perp1);
+       VUNITIZE(perp2);
+
+       VSCALE(perp1, perp1, gdasp->gdas_tip_width);
+       VSCALE(perp2, perp2, gdasp->gdas_tip_width);
+
+       VADD2(a_base, B, offset);
+       VADD2(a_pt1, a_base, perp1);
+       VADD2(a_pt2, a_base, perp2);
+       VSUB2(a_pt3, a_base, perp1);
+       VSUB2(a_pt4, a_base, perp2);
+
+       VMOVE(points[0], B);
+       VMOVE(points[1], a_pt1);
+       VMOVE(points[2], B);
+       VMOVE(points[3], a_pt2);
+       VMOVE(points[4], B);
+       VMOVE(points[5], a_pt3);
+       VMOVE(points[6], B);
+       VMOVE(points[7], a_pt4);
+       VMOVE(points[8], a_pt1);
+       VMOVE(points[9], a_pt2);
+       VMOVE(points[10], a_pt2);
+       VMOVE(points[11], a_pt3);
+       VMOVE(points[12], a_pt3);
+       VMOVE(points[13], a_pt4);
+       VMOVE(points[14], a_pt4);
+       VMOVE(points[15], a_pt1);
+
+       DM_DRAW_LINES_3D(dmp, 16, points);
+    }
+
+    /* Restore the line attributes */
+    DM_SET_LINE_ATTR(dmp, saveLineWidth, saveLineStyle);
+}
+
+
+HIDDEN void
+go_dm_draw_labels(struct dm *dmp, struct ged_data_label_state *gdlsp, matp_t 
m2vmat)
+{
+    register int i;
+
+    /* set color */
+    DM_SET_FGCOLOR(dmp,
+                  gdlsp->gdls_color[0],
+                  gdlsp->gdls_color[1],
+                  gdlsp->gdls_color[2], 1, 1.0);
+
+    for (i = 0; i < gdlsp->gdls_num_labels; ++i) {
+       point_t vpoint;
+
+       MAT4X3PNT(vpoint, m2vmat,
+                 gdlsp->gdls_points[i]);
+       DM_DRAW_STRING_2D(dmp, gdlsp->gdls_labels[i],
+                         vpoint[X], vpoint[Y], 0, 1);
+    }
+}
+
+
+HIDDEN void
+go_dm_draw_lines(struct dm *dmp, struct ged_data_line_state *gdlsp)
+{
+    int saveLineWidth;
+    int saveLineStyle;
+
+    if (gdlsp->gdls_num_points < 1)
+       return;
+
+    saveLineWidth = dmp->dm_lineWidth;
+    saveLineStyle = dmp->dm_lineStyle;
+
+    /* set color */
+    DM_SET_FGCOLOR(dmp,
+                  gdlsp->gdls_color[0],
+                  gdlsp->gdls_color[1],
+                  gdlsp->gdls_color[2], 1, 1.0);
+
+    /* set linewidth */
+    DM_SET_LINE_ATTR(dmp, gdlsp->gdls_line_width, 0);  /* solid lines */
+
+    DM_DRAW_LINES_3D(dmp,
+                    gdlsp->gdls_num_points,
+                    gdlsp->gdls_points);
+
+    /* Restore the line attributes */
+    DM_SET_LINE_ATTR(dmp, saveLineWidth, saveLineStyle);
+}
+
+
+HIDDEN void
+go_draw(struct ged_dm_view *gdvp)
+{
+    mat_t new;
+    matp_t mat;
+    mat_t perspective_mat;
+
+    mat = gdvp->gdv_view->gv_model2view;
+
+    if (0 < gdvp->gdv_view->gv_perspective) {
+#if 1
+       point_t l, h;
+
+       VSET(l, -1.0, -1.0, -1.0);
+       VSET(h, 1.0, 1.0, 200.0);
+
+       if (ZERO(gdvp->gdv_view->gv_eye_pos[Z] - 1.0)) {
+           /* This way works, with reasonable Z-clipping */
+           ged_persp_mat(perspective_mat, gdvp->gdv_view->gv_perspective,
+                         (fastf_t)1.0f, (fastf_t)0.01f, (fastf_t)1.0e10f, 
(fastf_t)1.0f);
+       } else {
+           /* This way does not have reasonable Z-clipping,
+            * but includes shear, for GDurf's testing.
+            */
+           ged_deering_persp_mat(perspective_mat, l, h, 
gdvp->gdv_view->gv_eye_pos);
+       }
+#else
+       /*
+        * There are two strategies that could be used:
+        *
+        * 1) Assume a standard head location w.r.t. the screen, and
+        * fix the perspective angle.
+        *
+        * 2) Based upon the perspective angle, compute where the head
+        * should be to achieve that field of view.
+        *
+        * Try strategy #2 for now.
+        */
+       fastf_t to_eye_scr;     /* screen space dist to eye */
+       point_t l, h, eye;
+
+       /* Determine where eye should be */
+       to_eye_scr = 1 / tan(gdvp->gdv_view->gv_perspective * bn_degtorad * 
0.5);
+
+       VSET(l, -1.0, -1.0, -1.0);
+       VSET(h, 1.0, 1.0, 200.0);
+       VSET(eye, 0.0, 0.0, to_eye_scr);
+
+       /* Non-stereo case */
+       ged_mike_persp_mat(perspective_mat, gdvp->gdv_view->gv_eye_pos);
+#endif
+
+       bn_mat_mul(new, perspective_mat, mat);
+       mat = new;
+    }
+
+    DM_LOADMATRIX(gdvp->gdv_dmp, mat, 0);
+    go_draw_dlist(gdvp->gdv_dmp, 
&gdvp->gdv_gop->go_gedp->ged_gdp->gd_headDisplay);
+}
+
+
+/* Draw all display lists */
+#if 1
+int
+#else
+HIDDEN int
+#endif
+go_draw_dlist(struct dm *dmp, struct bu_list *hdlp)
+{
+    register struct ged_display_list *gdlp;
+    register struct ged_display_list *next_gdlp;
+    struct solid *sp;
+    int line_style = -1;
+
+    if (dmp->dm_transparency) {
+       /* First, draw opaque stuff */
+       gdlp = BU_LIST_NEXT(ged_display_list, hdlp);
+       while (BU_LIST_NOT_HEAD(gdlp, hdlp)) {
+           next_gdlp = BU_LIST_PNEXT(ged_display_list, gdlp);
+
+           FOR_ALL_SOLIDS(sp, &gdlp->gdl_headSolid) {
+               if (sp->s_transparency < 1.0)
+                   continue;
+
+               if (line_style != sp->s_soldash) {
+                   line_style = sp->s_soldash;
+                   DM_SET_LINE_ATTR(dmp, dmp->dm_lineWidth, line_style);
+               }
+
+               go_draw_solid(dmp, sp);
+           }
+
+           gdlp = next_gdlp;
+       }
+
+       /* disable write to depth buffer */
+       DM_SET_DEPTH_MASK(dmp, 0);
+
+       /* Second, draw transparent stuff */
+       gdlp = BU_LIST_NEXT(ged_display_list, hdlp);
+       while (BU_LIST_NOT_HEAD(gdlp, hdlp)) {
+           next_gdlp = BU_LIST_PNEXT(ged_display_list, gdlp);
+
+           FOR_ALL_SOLIDS(sp, &gdlp->gdl_headSolid) {
+               /* already drawn above */
+               if (ZERO(sp->s_transparency - 1.0))
+                   continue;
+
+               if (line_style != sp->s_soldash) {
+                   line_style = sp->s_soldash;
+                   DM_SET_LINE_ATTR(dmp, dmp->dm_lineWidth, line_style);
+               }
+
+               go_draw_solid(dmp, sp);
+           }
+
+           gdlp = next_gdlp;
+       }
+
+       /* re-enable write to depth buffer */
+       DM_SET_DEPTH_MASK(dmp, 1);
+    } else {
+       gdlp = BU_LIST_NEXT(ged_display_list, hdlp);
+       while (BU_LIST_NOT_HEAD(gdlp, hdlp)) {
+           next_gdlp = BU_LIST_PNEXT(ged_display_list, gdlp);
+
+           FOR_ALL_SOLIDS(sp, &gdlp->gdl_headSolid) {
+               if (line_style != sp->s_soldash) {
+                   line_style = sp->s_soldash;
+                   DM_SET_LINE_ATTR(dmp, dmp->dm_lineWidth, line_style);
+               }
+
+               go_draw_solid(dmp, sp);
+           }
+
+           gdlp = next_gdlp;
+       }
+    }
+
+    return BRLCAD_OK;
+}
+
+
+HIDDEN void
+go_draw_faceplate(struct ged_obj *gop, struct ged_dm_view *gdvp)
+{
+    /* Center dot */
+    if (gdvp->gdv_view->gv_center_dot.gos_draw) {
+       DM_SET_FGCOLOR(gdvp->gdv_dmp,
+                      gdvp->gdv_view->gv_center_dot.gos_line_color[0],
+                      gdvp->gdv_view->gv_center_dot.gos_line_color[1],
+                      gdvp->gdv_view->gv_center_dot.gos_line_color[2],
+                      1, 1.0);
+       DM_DRAW_POINT_2D(gdvp->gdv_dmp, 0.0, 0.0);
+    }
+
+    /* Model axes */
+    if (gdvp->gdv_view->gv_model_axes.gas_draw) {
+       point_t map;
+       point_t save_map;
+
+       VMOVE(save_map, gdvp->gdv_view->gv_model_axes.gas_axes_pos);
+       VSCALE(map, gdvp->gdv_view->gv_model_axes.gas_axes_pos, 
gop->go_gedp->ged_wdbp->dbip->dbi_local2base);
+       MAT4X3PNT(gdvp->gdv_view->gv_model_axes.gas_axes_pos, 
gdvp->gdv_view->gv_model2view, map);
+
+       dm_draw_axes(gdvp->gdv_dmp,
+                    gdvp->gdv_view->gv_size,
+                    gdvp->gdv_view->gv_rotation,
+                    &gdvp->gdv_view->gv_model_axes);
+
+       VMOVE(gdvp->gdv_view->gv_model_axes.gas_axes_pos, save_map);
+    }
+
+    /* View axes */
+    if (gdvp->gdv_view->gv_view_axes.gas_draw) {
+       fastf_t inv_aspect;
+       fastf_t save_ypos;
+
+       save_ypos = gdvp->gdv_view->gv_view_axes.gas_axes_pos[Y];
+       inv_aspect = (fastf_t)gdvp->gdv_dmp->dm_height / 
(fastf_t)gdvp->gdv_dmp->dm_width;
+       gdvp->gdv_view->gv_view_axes.gas_axes_pos[Y] = save_ypos * inv_aspect;
+       dm_draw_axes(gdvp->gdv_dmp,
+                    gdvp->gdv_view->gv_size,
+                    gdvp->gdv_view->gv_rotation,
+                    &gdvp->gdv_view->gv_view_axes);
+
+       gdvp->gdv_view->gv_view_axes.gas_axes_pos[Y] = save_ypos;
+    }
+
+    /* View scale */
+    if (gdvp->gdv_view->gv_view_scale.gos_draw)
+       dm_draw_scale(gdvp->gdv_dmp,
+                     
gdvp->gdv_view->gv_size*gop->go_gedp->ged_wdbp->dbip->dbi_base2local,
+                     gdvp->gdv_view->gv_view_scale.gos_line_color,
+                     gdvp->gdv_view->gv_view_scale.gos_text_color);
+
+    /* View parameters */
+    if (gdvp->gdv_view->gv_view_params.gos_draw) {
+       struct bu_vls vls;
+       point_t center;
+       char *ustr;
+
+       MAT_DELTAS_GET_NEG(center, gdvp->gdv_view->gv_center);
+       VSCALE(center, center, gop->go_gedp->ged_wdbp->dbip->dbi_base2local);
+
+       bu_vls_init(&vls);
+       ustr = (char 
*)bu_units_string(gop->go_gedp->ged_wdbp->dbip->dbi_local2base);
+       bu_vls_printf(&vls, "units:%s  size:%.2f  center:(%.2f, %.2f, %.2f)  
az:%.2f  el:%.2f  tw::%.2f",
+                     ustr,
+                     gdvp->gdv_view->gv_size * 
gop->go_gedp->ged_wdbp->dbip->dbi_base2local,
+                     V3ARGS(center),
+                     V3ARGS(gdvp->gdv_view->gv_aet));
+       DM_SET_FGCOLOR(gdvp->gdv_dmp,
+                      gdvp->gdv_view->gv_view_params.gos_text_color[0],
+                      gdvp->gdv_view->gv_view_params.gos_text_color[1],
+                      gdvp->gdv_view->gv_view_params.gos_text_color[2],
+                      1, 1.0);
+       DM_DRAW_STRING_2D(gdvp->gdv_dmp, bu_vls_addr(&vls), -0.98, -0.965, 10, 
0);
+       bu_vls_free(&vls);
+    }
+
+    /* Draw the angle distance cursor */
+    if (gdvp->gdv_view->gv_adc.gas_draw)
+       dm_draw_adc(gdvp->gdv_dmp, gdvp->gdv_view);
+
+    /* Draw grid */
+    if (gdvp->gdv_view->gv_grid.ggs_draw)
+       dm_draw_grid(gdvp->gdv_dmp, &gdvp->gdv_view->gv_grid, gdvp->gdv_view, 
gdvp->gdv_gop->go_gedp->ged_wdbp->dbip->dbi_base2local);
+
+    /* Draw rect */
+    if (gdvp->gdv_view->gv_rect.grs_draw && 
gdvp->gdv_view->gv_rect.grs_line_width)
+       dm_draw_rect(gdvp->gdv_dmp, &gdvp->gdv_view->gv_rect);
+}
+
+
+HIDDEN void
+go_draw_solid(struct dm *dmp, struct solid *sp)
+{
+    if (sp->s_iflag == UP)
+       DM_SET_FGCOLOR(dmp, 255, 255, 255, 0, sp->s_transparency);
+    else
+       DM_SET_FGCOLOR(dmp,
+                      (unsigned char)sp->s_color[0],
+                      (unsigned char)sp->s_color[1],
+                      (unsigned char)sp->s_color[2], 0, sp->s_transparency);
+
+    if (sp->s_hiddenLine) {
+       DM_DRAW_VLIST_HIDDEN_LINE(dmp, (struct bn_vlist *)&sp->s_vlist);
+    } else {
+       DM_DRAW_VLIST(dmp, (struct bn_vlist *)&sp->s_vlist);
+    }
+}
+
+
+HIDDEN void
+go_draw_other(struct ged_obj *gop, struct ged_dm_view *gdvp)
+{
+
+    if (gdvp->gdv_view->gv_data_arrows.gdas_draw)
+       go_dm_draw_arrows(gdvp->gdv_dmp, &gdvp->gdv_view->gv_data_arrows);
+
+    if (gdvp->gdv_view->gv_sdata_arrows.gdas_draw)
+       go_dm_draw_arrows(gdvp->gdv_dmp, &gdvp->gdv_view->gv_sdata_arrows);
+
+    if (gdvp->gdv_view->gv_data_axes.gdas_draw)
+       dm_draw_data_axes(gdvp->gdv_dmp,
+                         gdvp->gdv_view->gv_size,
+                         &gdvp->gdv_view->gv_data_axes);
+
+    if (gdvp->gdv_view->gv_sdata_axes.gdas_draw)
+       dm_draw_data_axes(gdvp->gdv_dmp,
+                         gdvp->gdv_view->gv_size,
+                         &gdvp->gdv_view->gv_sdata_axes);
+
+    if (gdvp->gdv_view->gv_data_lines.gdls_draw)
+       go_dm_draw_lines(gdvp->gdv_dmp, &gdvp->gdv_view->gv_data_lines);
+
+    if (gdvp->gdv_view->gv_sdata_lines.gdls_draw)
+       go_dm_draw_lines(gdvp->gdv_dmp, &gdvp->gdv_view->gv_sdata_lines);
+
+    /* Restore to non-rotated, full brightness */
+    DM_NORMAL(gdvp->gdv_dmp);
+    go_draw_faceplate(gop, gdvp);
+
+    if (gdvp->gdv_view->gv_data_labels.gdls_draw)
+       go_dm_draw_labels(gdvp->gdv_dmp, &gdvp->gdv_view->gv_data_labels, 
gdvp->gdv_view->gv_model2view);
+
+    if (gdvp->gdv_view->gv_sdata_labels.gdls_draw)
+       go_dm_draw_labels(gdvp->gdv_dmp, &gdvp->gdv_view->gv_sdata_labels, 
gdvp->gdv_view->gv_model2view);
+
+    /* Draw labels */
+    if (gdvp->gdv_view->gv_prim_labels.gos_draw) {
+       register int i;
+
+       for (i = 0; i < gop->go_prim_label_list_size; ++i) {
+           dm_draw_labels(gdvp->gdv_dmp,
+                          gop->go_gedp->ged_wdbp,
+                          bu_vls_addr(&gop->go_prim_label_list[i]),
+                          gdvp->gdv_view->gv_model2view,
+                          gdvp->gdv_view->gv_prim_labels.gos_text_color,
+                          NULL, NULL);
+       }
+    }
+}
+
+
+void
+go_refresh(struct ged_obj *gop, struct ged_dm_view *gdvp)
+{
+    int restore_zbuffer = 0;
+
+    /* Turn off the zbuffer if the framebuffer is active AND the zbuffer is 
on. */
+    if (gdvp->gdv_fbs.fbs_mode != GED_OBJ_FB_MODE_OFF &&
+       gdvp->gdv_dmp->dm_zbuffer) {
+       DM_SET_ZBUFFER(gdvp->gdv_dmp, 0);
+       restore_zbuffer = 1;
+    }
+
+    DM_DRAW_BEGIN(gdvp->gdv_dmp);
+    go_refresh_draw(gop, gdvp);
+    DM_DRAW_END(gdvp->gdv_dmp);
+
+    if (restore_zbuffer) {
+       DM_SET_ZBUFFER(gdvp->gdv_dmp, 1);
+    }
+}
+
+
+void
+go_refresh_draw(struct ged_obj *gop, struct ged_dm_view *gdvp)
+{
+    if (gdvp->gdv_fbs.fbs_mode == GED_OBJ_FB_MODE_OVERLAY) {
+       if (gdvp->gdv_view->gv_rect.grs_draw) {
+           go_draw(gdvp);
+
+           go_draw_other(gop, gdvp);
+
+           fb_refresh(gdvp->gdv_fbs.fbs_fbp,
+                      gdvp->gdv_view->gv_rect.grs_pos[X], 
gdvp->gdv_view->gv_rect.grs_pos[Y],
+                      gdvp->gdv_view->gv_rect.grs_dim[X], 
gdvp->gdv_view->gv_rect.grs_dim[Y]);
+
+           if (gdvp->gdv_view->gv_rect.grs_line_width)
+               dm_draw_rect(gdvp->gdv_dmp, &gdvp->gdv_view->gv_rect);
+       } else
+           fb_refresh(gdvp->gdv_fbs.fbs_fbp, 0, 0,
+                      gdvp->gdv_dmp->dm_width, gdvp->gdv_dmp->dm_height);
+
+       return;
+    } else if (gdvp->gdv_fbs.fbs_mode == GED_OBJ_FB_MODE_INTERLAY) {
+       go_draw(gdvp);
+
+       if (gdvp->gdv_view->gv_rect.grs_draw) {
+           go_draw(gdvp);
+           fb_refresh(gdvp->gdv_fbs.fbs_fbp,
+                      gdvp->gdv_view->gv_rect.grs_pos[X], 
gdvp->gdv_view->gv_rect.grs_pos[Y],
+                      gdvp->gdv_view->gv_rect.grs_dim[X], 
gdvp->gdv_view->gv_rect.grs_dim[Y]);
+       } else
+           fb_refresh(gdvp->gdv_fbs.fbs_fbp, 0, 0,
+                      gdvp->gdv_dmp->dm_width, gdvp->gdv_dmp->dm_height);
+    } else {
+       if (gdvp->gdv_fbs.fbs_mode == GED_OBJ_FB_MODE_UNDERLAY) {
+           if (gdvp->gdv_view->gv_rect.grs_draw) {
+               fb_refresh(gdvp->gdv_fbs.fbs_fbp,
+                          gdvp->gdv_view->gv_rect.grs_pos[X], 
gdvp->gdv_view->gv_rect.grs_pos[Y],
+                          gdvp->gdv_view->gv_rect.grs_dim[X], 
gdvp->gdv_view->gv_rect.grs_dim[Y]);
+           } else
+               fb_refresh(gdvp->gdv_fbs.fbs_fbp, 0, 0,
+                          gdvp->gdv_dmp->dm_width, gdvp->gdv_dmp->dm_height);
+       }
+
+       go_draw(gdvp);
+    }
+
+    go_draw_other(gop, gdvp);
+}
+
+
 /*
  * Local Variables:
  * mode: C
@@ -8821,3 +9353,14 @@
  * End:
  * ex: shiftwidth=4 tabstop=8
  */
+
+
+/*
+ * Local Variables:
+ * mode: C
+ * tab-width: 8
+ * indent-tabs-mode: t
+ * c-file-style: "stroustrup"
+ * End:
+ * ex: shiftwidth=4 tabstop=8
+ */


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Create and publish websites with WebMatrix
Use the most popular FREE web apps or write code yourself; 
WebMatrix provides all the features you need to develop and 
publish your website. http://p.sf.net/sfu/ms-webmatrix-sf
_______________________________________________
BRL-CAD Source Commits mailing list
brlcad-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to