Browse Source

nviz: change scalebar appearance

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@48618 15284696-431f-4ddb-bdfa-cd5b030d7da7
Anna Petrášová 13 năm trước cách đây
mục cha
commit
68ca9378d8
4 tập tin đã thay đổi với 71 bổ sung2 xóa
  1. 1 0
      include/ogsf_proto.h
  2. 1 1
      lib/nviz/draw.c
  3. 1 1
      lib/nviz/nviz.c
  4. 68 0
      lib/ogsf/gsd_objs.c

+ 1 - 0
include/ogsf_proto.h

@@ -514,6 +514,7 @@ int gsd_arrow(float *, unsigned long, float, float *, float, geosurf *);
 int gsd_arrow_onsurf(float *, float *, unsigned long, int, geosurf *);
 void gsd_3darrow(float *, unsigned long, float, float, float *, float);
 int gsd_scalebar(float *, float, GLuint, unsigned long, unsigned long);
+int gsd_scalebar_v2(float *, float, GLuint, unsigned long, unsigned long);
 void primitive_cone(unsigned long);
 void primitive_cylinder(unsigned long, int);
 

+ 1 - 1
lib/nviz/draw.c

@@ -248,7 +248,7 @@ int Nviz_draw_all(nv_data * data)
     /* scale bar */
     for (i = 0; i < data->num_scalebars; i++) {
 	struct scalebar_data *s = data->scalebar[i];
-	gsd_scalebar(s->where, s->size, 0, s->color, s->color);
+	gsd_scalebar_v2(s->where, s->size, 0, s->color, s->color);
     }
     
     GS_done_draw();

+ 1 - 1
lib/nviz/nviz.c

@@ -417,7 +417,7 @@ void Nviz_draw_scalebar(nv_data *data)
     for (i = 0; i < data->num_scalebars; i++) {
 	struct scalebar_data *s = data->scalebar[i];
 
-	gsd_scalebar(s->where, s->size, FontBase, s->color, s->color);
+	gsd_scalebar_v2(s->where, s->size, FontBase, s->color, s->color);
     }
 }
 

+ 68 - 0
lib/ogsf/gsd_objs.c

@@ -1236,6 +1236,74 @@ int gsd_scalebar(float *pos2, float len, GLuint fontbase,
 }
 
 /*!
+   \brief Draw Scalebar (as lines)
+
+   Adapted from gsd_scalebar A.Kratochvilova 2011
+
+   \param pos2 scalebar position
+   \param fontbase font-base (unused)
+   \param bar_clr barscale color
+   \param text_clr text color (unused)
+
+   \return 1
+ */
+int gsd_scalebar_v2(float *pos, float len, GLuint fontbase,
+		 unsigned long bar_clr, unsigned long text_clr)
+{
+    float base[6][3];
+    float Ntop[] = { 0.0, 0.0, 1.0 };
+
+    base[0][Z] = base[1][Z] = base[2][Z] = pos[Z];
+    base[3][Z] = base[4][Z] = base[5][Z] = pos[Z];
+
+    /* simple scalebar: |------| */
+    base[0][X] = base[2][X] = base[3][X] = pos[X] - len / 2.;
+    base[1][X] = base[4][X] = base[5][X] = pos[X] + len / 2.;
+    base[0][Y] = base[1][Y] = pos[Y];
+    base[2][Y] = base[4][Y] = pos[Y] - len / 12;
+    base[3][Y] = base[5][Y] = pos[Y] + len / 12;
+
+    /* make sure we are drawing in front buffer */
+    GS_set_draw(GSD_FRONT);
+
+    gsd_pushmatrix();
+    gsd_do_scale(1);		/* get map scale factor */
+
+    glNormal3fv(Ntop);
+
+    gsd_color_func(bar_clr);
+
+    gsd_linewidth(3); /* could be optional */
+
+    /* ------- */
+    gsd_bgnline();
+    gsd_vert_func(base[0]);
+    gsd_vert_func(base[1]);
+    gsd_endline();
+
+    /* |------- */
+    gsd_bgnline();
+    gsd_vert_func(base[2]);
+    gsd_vert_func(base[3]);
+    gsd_endline();
+
+    /* |-------| */
+    gsd_bgnline();
+    gsd_vert_func(base[4]);
+    gsd_vert_func(base[5]);
+    gsd_endline();
+
+    /* TODO -- draw units */
+
+    GS_done_draw();
+
+    gsd_popmatrix();
+    gsd_flush();
+
+    return 1;
+}
+
+/*!
    \brief Primitives only called after transforms
 
    Center is actually center at base of 8 sided cone