[GRASS-SVN] r69085 - in grass/trunk: display/d.mon display/d.vect gui/images gui/images/symbols gui/images/symbols/legend gui/wxpython/core gui/wxpython/gui_core gui/wxpython/lmgr gui/wxpython/mapdisp gui/wxpython/mapwin lib/symbol lib/symbol/symbol lib/symbol/symbol/legend

svn_grass at osgeo.org svn_grass at osgeo.org
Thu Aug 4 18:38:54 PDT 2016


Author: annakrat
Date: 2016-08-04 18:38:54 -0700 (Thu, 04 Aug 2016)
New Revision: 69085

Added:
   grass/trunk/gui/images/symbols/legend/
   grass/trunk/gui/images/symbols/legend/area.png
   grass/trunk/gui/images/symbols/legend/area_curved.png
   grass/trunk/gui/images/symbols/legend/line.png
   grass/trunk/gui/images/symbols/legend/line_crooked.png
   grass/trunk/lib/symbol/symbol/legend/
   grass/trunk/lib/symbol/symbol/legend/area
   grass/trunk/lib/symbol/symbol/legend/area_curved
   grass/trunk/lib/symbol/symbol/legend/line
   grass/trunk/lib/symbol/symbol/legend/line_crooked
Modified:
   grass/trunk/display/d.mon/render_cmd.py
   grass/trunk/display/d.mon/start.c
   grass/trunk/display/d.vect/main.c
   grass/trunk/gui/images/Makefile
   grass/trunk/gui/wxpython/core/render.py
   grass/trunk/gui/wxpython/core/utils.py
   grass/trunk/gui/wxpython/gui_core/forms.py
   grass/trunk/gui/wxpython/lmgr/frame.py
   grass/trunk/gui/wxpython/mapdisp/frame.py
   grass/trunk/gui/wxpython/mapdisp/toolbars.py
   grass/trunk/gui/wxpython/mapwin/decorations.py
   grass/trunk/lib/symbol/Makefile
Log:
wxGUI: initial vector legend support, currently needs d.legend.vect addon, author Adam Laza

Modified: grass/trunk/display/d.mon/render_cmd.py
===================================================================
--- grass/trunk/display/d.mon/render_cmd.py	2016-08-04 20:28:44 UTC (rev 69084)
+++ grass/trunk/display/d.mon/render_cmd.py	2016-08-05 01:38:54 UTC (rev 69085)
@@ -8,7 +8,7 @@
 
 # read environment variables from file
 def read_env_file(env_file):
-    width = height = None
+    width = height = legfile = None
     fd = open(env_file, 'r')
     if fd is None:
         grass.fatal("Unable to open file '{}'".format(env_file))
@@ -22,16 +22,19 @@
             width = int(v)
         if height is None and k == 'GRASS_RENDER_HEIGHT':
             height = int(v)
+        if legfile is None and k == 'GRASS_LEGEND_FILE':
+            legfile = v
     fd.close()
 
     if width is None or height is None:
         grass.fatal("Unknown monitor size")
 
-    return width, height
+    return width, height, legfile
 
 # run display command
 def render(cmd, mapfile):
     env = os.environ.copy()
+
     if mapfile:
         env['GRASS_RENDER_FILE'] = mapfile
     try:
@@ -101,7 +104,7 @@
     path = os.path.dirname(os.path.abspath(__file__))
     mon = os.path.split(path)[-1]
 
-    width, height = read_env_file(os.path.join(path, 'env'))
+    width, height, legfile = read_env_file(os.path.join(path, 'env'))
     if mon.startswith('wx'):
         mapfile = tempfile.NamedTemporaryFile(dir=path).name
         if cmd[0] in ('d.barscale', 'd.legend', 'd.northarrow'):
@@ -114,5 +117,8 @@
 
     render(cmd, mapfile)
     update_cmd_file(os.path.join(path, 'cmd'), cmd, mapfile)
+    if cmd[0] == 'd.erase':
+        os.remove(legfile)
 
+
     sys.exit(0)

Modified: grass/trunk/display/d.mon/start.c
===================================================================
--- grass/trunk/display/d.mon/start.c	2016-08-04 20:28:44 UTC (rev 69084)
+++ grass/trunk/display/d.mon/start.c	2016-08-05 01:38:54 UTC (rev 69085)
@@ -133,7 +133,7 @@
 	      int truecolor, int x_only, int update)
 {
     char *mon_path;
-    char *out_file, *env_file, *cmd_file;
+    char *out_file, *env_file, *cmd_file, *leg_file;
     char  buf[1024];
     char file_path[GPATH_MAX], render_cmd_path[GPATH_MAX];
     int  fd;
@@ -158,6 +158,8 @@
     env_file = G_store(file_path);
     G_file_name(file_path, mon_path, "cmd", G_mapset());
     cmd_file = G_store(file_path);
+    G_file_name(file_path, mon_path, "leg", G_mapset());
+    leg_file = G_store(file_path);
 
     /* create py file (renderer) */
     sprintf(render_cmd_path, "%s/etc/d.mon/render_cmd.py", getenv("GISBASE"));
@@ -199,6 +201,10 @@
     write(fd, buf, strlen(buf));
     sprintf(buf, "GRASS_RENDER_HEIGHT=%d\n", height);
     write(fd, buf, strlen(buf));
+    sprintf(buf, "GRASS_LEGEND_FILE=%s\n", leg_file);
+    write(fd, buf, strlen(buf));
+
+
     if (bgcolor) {
 	if (strcmp(bgcolor, "none") == 0)
 	    sprintf(buf, "GRASS_RENDER_TRANSPARENT=TRUE\n");

Modified: grass/trunk/display/d.vect/main.c
===================================================================
--- grass/trunk/display/d.vect/main.c	2016-08-04 20:28:44 UTC (rev 69084)
+++ grass/trunk/display/d.vect/main.c	2016-08-05 01:38:54 UTC (rev 69085)
@@ -4,6 +4,7 @@
  * MODULE:       d.vect
  * AUTHOR(S):    CERL, Radim Blazek, others
  *               Updated to GRASS7 by Martin Landa <landa.martin gmail.com>
+ *               Support for vector legend by Adam Laza <ad.laza32 gmail.com >
  * PURPOSE:      Display the vector map in map display
  * COPYRIGHT:    (C) 2004-2014 by the GRASS Development Team
  *
@@ -52,8 +53,11 @@
     struct Option *lsize_opt, *font_opt, *enc_opt, *xref_opt, *yref_opt;
     struct Option *attrcol_opt, *maxreg_opt, *minreg_opt;
     struct Option *width_opt, *wcolumn_opt, *wscale_opt;
+    struct Option *leglab_opt;
+    struct Option *icon_line_opt, *icon_area_opt;
     struct Flag *id_flag, *cats_acolors_flag, *sqrt_flag;
     char *desc;
+    char *leg_file;
     
     struct cat_list *Clist;
     LATTR lattr;
@@ -61,7 +65,10 @@
     struct Cell_head window;
     struct bound_box box;
     double overlap;
+    int gv_point, gv_line, gv_boundary, gv_centroid;
 
+    FILE *fd;
+
     stat = 0;
     /* Initialize the GIS calls */
     G_gisinit(argv[0]);
@@ -189,6 +196,32 @@
     rotcolumn_opt->description =
 	_("Measured in degrees CCW from east");
 
+    icon_area_opt = G_define_option();
+    icon_area_opt->key = "icon_area";
+    icon_area_opt->type = TYPE_STRING;
+    icon_area_opt->required = NO;
+    icon_area_opt->multiple = NO;
+    icon_area_opt->guisection = _("Legend");
+    icon_area_opt->answer = "legend/area";
+    icon_area_opt->options = icon_files();
+    icon_area_opt->description = _("Area/boundary symbol for legend");
+
+    icon_line_opt = G_define_option();
+    icon_line_opt->key = "icon_line";
+    icon_line_opt->type = TYPE_STRING;
+    icon_line_opt->required = NO;
+    icon_line_opt->multiple = NO;
+    icon_line_opt->guisection = _("Legend");
+    icon_line_opt->answer = "legend/line";
+    icon_line_opt->options = icon_files();
+    icon_line_opt->description = _("Line symbol for legend");
+
+    leglab_opt = G_define_option();
+    leglab_opt->key = "legend_label";
+    leglab_opt->type = TYPE_STRING;
+    leglab_opt->guisection = _("Legend");
+    leglab_opt->description = _("Label to display after symbol in vector legend");
+
     /* Labels */
     lfield_opt = G_define_standard_option(G_OPT_V_FIELD);
     lfield_opt->key = "label_layer";
@@ -424,6 +457,85 @@
 		stat += display_dir(&Map, type, Clist, chcat, size);
 	}
 
+        /* Write into legend file */
+        leg_file = getenv("GRASS_LEGEND_FILE");
+        if (leg_file) {
+            fd = fopen(leg_file, "a");
+            
+            /* Point */
+            if (strstr(type_opt->answer, "point") != NULL){
+                gv_point = Vect_get_num_primitives(&Map, GV_POINT);
+                if (gv_point > 0) {
+                    if (leglab_opt->answer)
+                        fprintf(fd, "%s|", leglab_opt->answer);
+                    else {
+                        char map[128];
+                        char *ptr;
+                        strcpy(map, map_opt->answer);
+                        strtok_r(map, "@", &ptr);
+                        fprintf(fd, "%s|", map);
+                    }
+                    fprintf(fd, "%s|%s|%s|%s|%s", icon_opt->answer, size_opt->answer, color_opt->answer, fcolor_opt->answer, width_opt->answer);
+                    fprintf(fd, "|%s|%d\n", "point", gv_point);
+                }
+            }
+            
+            /* Line */
+            if (strstr(type_opt->answer, "line") != NULL){
+                gv_line = Vect_get_num_primitives(&Map, GV_LINE);
+                if (gv_line > 0){
+                    if (leglab_opt->answer)
+                        fprintf(fd, "%s|", leglab_opt->answer);
+                    else {
+                        char map[128];
+                        char *ptr;
+                        strcpy(map, map_opt->answer);
+                        strtok_r(map, "@", &ptr);
+                        fprintf(fd, "%s|", map);
+                    }
+                    fprintf(fd, "%s|%s|%s|%s|%s", icon_line_opt->answer, size_opt->answer, color_opt->answer, fcolor_opt->answer, width_opt->answer);
+                    fprintf(fd, "|%s|%d\n", "line", gv_line);
+                }
+            }
+            
+            /* Area */
+            if (strstr(type_opt->answer, "area") != NULL){
+                gv_boundary = Vect_get_num_primitives(&Map, GV_BOUNDARY);
+                if (gv_boundary > 0) {
+                    if (leglab_opt->answer)
+                        fprintf(fd, "%s|", leglab_opt->answer);
+                    else {
+                        char map[128];
+                        char *ptr;
+                        strcpy(map, map_opt->answer);
+                        strtok_r(map, "@", &ptr);
+                        fprintf(fd, "%s|", map);
+                    }
+                    fprintf(fd, "%s|%s|%s|%s|%s", icon_area_opt->answer, size_opt->answer, color_opt->answer, fcolor_opt->answer, width_opt->answer);
+                    fprintf(fd, "|%s|%d\n", "area", gv_boundary);
+                }
+            }
+            /* Centroid */
+            if (strstr(type_opt->answer, "centroid") != NULL){
+                gv_centroid = Vect_get_num_primitives(&Map, GV_CENTROID);
+                if (gv_centroid > 0) {
+                    if (leglab_opt->answer)
+                        fprintf(fd, "%s|", leglab_opt->answer);
+                    else {
+                        char map[128];
+                        char *ptr;
+                        strcpy(map, map_opt->answer);
+                        strtok_r(map, "@", &ptr);
+                        fprintf(fd, "%s|", map);
+                    }
+                    fprintf(fd, "%s|%s|%s|%s|%s", icon_opt->answer, size_opt->answer, color_opt->answer, fcolor_opt->answer, width_opt->answer);
+                    fprintf(fd, "|%s|%d\n", "centroid", gv_centroid);
+                }
+            }
+            
+            fclose(fd);
+        }
+
 	/* reset line width: Do we need to get line width from display
 	 * driver (not implemented)?  It will help restore previous line
 	 * width (not just 0) determined by another module (e.g.,

Modified: grass/trunk/gui/images/Makefile
===================================================================
--- grass/trunk/gui/images/Makefile	2016-08-04 20:28:44 UTC (rev 69084)
+++ grass/trunk/gui/images/Makefile	2016-08-05 01:38:54 UTC (rev 69085)
@@ -9,7 +9,7 @@
 IMGDST := $(patsubst %,$(DSTDIR)/%,$(IMGSRC))
 
 # symbols
-CATEGORIES = basic demo extra geology n_arrows
+CATEGORIES = basic demo extra geology legend n_arrows
 SYMSRC := $(foreach dir,$(CATEGORIES),$(wildcard symbols/$(dir)/*.png))
 SYMDST := $(patsubst symbols/%,$(DSTDIR)/symbols/%,$(SYMSRC))
 

Added: grass/trunk/gui/images/symbols/legend/area.png
===================================================================
(Binary files differ)


Property changes on: grass/trunk/gui/images/symbols/legend/area.png
___________________________________________________________________
Added: svn:mime-type
   + image/png

Added: grass/trunk/gui/images/symbols/legend/area_curved.png
===================================================================
(Binary files differ)


Property changes on: grass/trunk/gui/images/symbols/legend/area_curved.png
___________________________________________________________________
Added: svn:mime-type
   + image/png

Added: grass/trunk/gui/images/symbols/legend/line.png
===================================================================
(Binary files differ)


Property changes on: grass/trunk/gui/images/symbols/legend/line.png
___________________________________________________________________
Added: svn:mime-type
   + image/png

Added: grass/trunk/gui/images/symbols/legend/line_crooked.png
===================================================================
(Binary files differ)


Property changes on: grass/trunk/gui/images/symbols/legend/line_crooked.png
___________________________________________________________________
Added: svn:mime-type
   + image/png

Modified: grass/trunk/gui/wxpython/core/render.py
===================================================================
--- grass/trunk/gui/wxpython/core/render.py	2016-08-04 20:28:44 UTC (rev 69084)
+++ grass/trunk/gui/wxpython/core/render.py	2016-08-05 01:38:54 UTC (rev 69085)
@@ -324,6 +324,7 @@
         """Represents map layer in the map canvas
         """
         Layer.__init__(self, *args, **kwargs)
+        self.legrow = grass.tempfile(create=True)
 
     def GetMapset(self):
         """Get mapset of map layer
@@ -384,6 +385,10 @@
         env_cmd = env.copy()
         env_cmd.update(self._render_env)
         env_cmd['GRASS_RENDER_FILE'] = self.layer.mapfile
+        if type(self.layer).__name__ == "MapLayer":
+            if os.path.isfile(self.layer.legrow):
+                os.remove(self.layer.legrow)
+            env_cmd['GRASS_LEGEND_FILE'] = self.layer.legrow
 
         cmd_render = copy.deepcopy(cmd)
         cmd_render[1]['quiet'] = True  # be quiet
@@ -455,7 +460,9 @@
         self._render_env = {"GRASS_RENDER_BACKGROUNDCOLOR": "000000",
                             "GRASS_RENDER_FILE_COMPRESSION": "0",
                             "GRASS_RENDER_TRUECOLOR": "TRUE",
-                            "GRASS_RENDER_TRANSPARENT": "TRUE"}
+                            "GRASS_RENDER_TRANSPARENT": "TRUE",
+                            "GRASS_LEGEND_FILE": self.Map.legfile
+                            }
 
         self._init()
         self._rendering = False
@@ -516,6 +523,7 @@
         env['GRASS_REGION'] = self.Map.SetRegion(windres)
         env['GRASS_RENDER_WIDTH'] = str(self.Map.width)
         env['GRASS_RENDER_HEIGHT'] = str(self.Map.height)
+
         if UserSettings.Get(group='display', key='driver',
                             subkey='type') == 'png':
             env['GRASS_RENDER_IMMEDIATE'] = 'png'
@@ -562,6 +570,7 @@
         if self._renderLayers(env, force) == 0:
             self.renderDone.emit()
 
+
     def OnRenderDone(self):
         """Rendering process done
 
@@ -608,6 +617,17 @@
         Debug.msg(1, "RenderMapMgr.OnRenderDone() time=%f sec (comp: %f)" %
                   (stop - self._startTime, stop - startCompTime))
 
+        # Update legfile
+        with open(self.Map.legfile, "w") as outfile:
+            for layer in reversed(self.layers):
+                if layer.GetType() == 'overlay':
+                    continue
+
+                if os.path.isfile(layer.legrow) and layer.legrow[-1].isdigit() \
+                   and layer.hidden is False:
+                    with open(layer.legrow) as infile:
+                        outfile.write(infile.read())
+
         self._rendering = False
         if wx.IsBusy():
             wx.EndBusyCursor()
@@ -704,8 +724,11 @@
         self.gisrc = gisrc
 
         # generated file for g.pnmcomp output for rendering the map
+        self.legfile = grass.tempfile(create=False) + '.leg'
+        self.tmpdir = os.path.dirname(self.legfile)
         self.mapfile = grass.tempfile(create=False) + '.ppm'
 
+
         # setting some initial env. variables
         if not self.GetWindow():
             sys.stderr.write(_("Trying to recover from default region..."))
@@ -1276,6 +1299,10 @@
                 basefile = os.path.join(base, tempbase) + r'.*'
                 for f in glob.glob(basefile):
                     os.remove(f)
+
+            if not overlay:
+                os.remove(layer.legrow)
+
             list.remove(layer)
 
             self.layerRemoved.emit(layer=layer)

Modified: grass/trunk/gui/wxpython/core/utils.py
===================================================================
--- grass/trunk/gui/wxpython/core/utils.py	2016-08-04 20:28:44 UTC (rev 69084)
+++ grass/trunk/gui/wxpython/core/utils.py	2016-08-05 01:38:54 UTC (rev 69085)
@@ -1022,7 +1022,8 @@
                  'd.to.rast': 'torast',
                  'd.text': 'text',
                  'd.northarrow': 'northarrow',
-                 'd.polar': 'polar'
+                 'd.polar': 'polar',
+                 'd.legend.vect': 'vectleg'
                  }
 ltype2command = {}
 for (cmd, ltype) in command2ltype.items():

Modified: grass/trunk/gui/wxpython/gui_core/forms.py
===================================================================
--- grass/trunk/gui/wxpython/gui_core/forms.py	2016-08-04 20:28:44 UTC (rev 69084)
+++ grass/trunk/gui/wxpython/gui_core/forms.py	2016-08-05 01:38:54 UTC (rev 69085)
@@ -873,7 +873,7 @@
                                           'MapWindow'):
             # display decorations and
             # pressing OK or cancel after setting layer properties
-            if self.task.name in ['d.barscale', 'd.legend', 'd.northarrow', 'd.histogram', 'd.text'] \
+            if self.task.name in ['d.barscale', 'd.legend', 'd.northarrow', 'd.histogram', 'd.text', 'd.legend.vect'] \
                     or len(self.parent.GetLayerInfo(self.layer, key='cmd')) >= 1:
                 self.Hide()
             # canceled layer with nothing set
@@ -1230,7 +1230,7 @@
                         title_txt.SetLabel(title + ':')
                         value = self._getValue(p)
 
-                        if p['name'] == 'icon':  # symbols
+                        if p['name'] in ('icon', 'icon_area', 'icon_line'):  # symbols
                             bitmap = wx.Bitmap(
                                 os.path.join(
                                     globalvar.SYMBDIR,

Modified: grass/trunk/gui/wxpython/lmgr/frame.py
===================================================================
--- grass/trunk/gui/wxpython/lmgr/frame.py	2016-08-04 20:28:44 UTC (rev 69084)
+++ grass/trunk/gui/wxpython/lmgr/frame.py	2016-08-05 01:38:54 UTC (rev 69085)
@@ -757,6 +757,11 @@
                 self.GetMapDisplay().AddLegend(cmd=command)
             else:
                 self.GetMapDisplay().AddLegend()
+        elif layertype == 'vectleg':
+            if len(command) > 1:
+                self.GetMapDisplay().AddLegendVect(cmd=command, showDialog=False)
+            else:
+                self.GetMapDisplay().AddLegendVect(showDialog=True)
         elif layertype == 'northarrow':
             if len(command) > 1:
                 self.GetMapDisplay().AddArrow(cmd=command)
@@ -1485,6 +1490,8 @@
                 # overlay["cmd"][0] name of command e.g. d.barscale, d.legend
                 # overlay["cmd"][1:] parameters and flags
                 if overlay['display'] == i:
+                    if overlay['cmd'][0] == "d.legend.vect":
+                        mapdisplay[i].AddLegendVect(overlay['cmd'])
                     if overlay['cmd'][0] == "d.legend":
                         mapdisplay[i].AddLegend(overlay['cmd'])
                     if overlay['cmd'][0] == "d.barscale":

Modified: grass/trunk/gui/wxpython/mapdisp/frame.py
===================================================================
--- grass/trunk/gui/wxpython/mapdisp/frame.py	2016-08-04 20:28:44 UTC (rev 69084)
+++ grass/trunk/gui/wxpython/mapdisp/frame.py	2016-08-05 01:38:54 UTC (rev 69085)
@@ -44,7 +44,7 @@
 from gui_core.query import QueryDialog, PrepareQueryResults
 from mapwin.buffered import BufferedMapWindow
 from mapwin.decorations import LegendController, BarscaleController, \
-    ArrowController, DtextController
+    ArrowController, DtextController, LegendVectController
 from modules.histogram import HistogramFrame
 from wxplot.histogram import HistogramPlotFrame
 from wxplot.profile import ProfileFrame
@@ -1247,6 +1247,22 @@
 
         self.MapWindow.mouse['use'] = 'pointer'
 
+    def AddLegendVect(self, cmd=None, showDialog=None):
+        """Handler for legend map decoration menu selection."""
+
+        if cmd:
+            show = False
+        else:
+            show = True
+            cmd = ['d.legend.vect']
+            layers = self._giface.GetLayerList().GetSelectedLayers()
+
+        GUI(parent=self, giface=self._giface, show=show, modal=False).ParseCommand(
+            cmd, completed=(self.GetOptData, None, None))
+
+        self.MapWindow.mouse['use'] = 'pointer'
+
+
     def AddArrow(self, cmd=None):
         """Handler for north arrow menu selection."""
         if self.IsPaneShown('3d'):
@@ -1303,6 +1319,8 @@
                 overlay = BarscaleController(self.Map, self._giface)
             elif cmd == 'd.legend':
                 overlay = LegendController(self.Map, self._giface)
+            elif cmd == 'd.legend.vect':
+                overlay = LegendVectController(self.Map, self._giface)
             elif cmd == 'd.text':
                 overlay = DtextController(self.Map, self._giface)
 

Modified: grass/trunk/gui/wxpython/mapdisp/toolbars.py
===================================================================
--- grass/trunk/gui/wxpython/mapdisp/toolbars.py	2016-08-04 20:28:44 UTC (rev 69084)
+++ grass/trunk/gui/wxpython/mapdisp/toolbars.py	2016-08-05 01:38:54 UTC (rev 69085)
@@ -35,6 +35,8 @@
                             label=_('Add scale bar')),
     'addLegend': MetaIcon(img='legend-add',
                           label=_('Add legend')),
+    'addVectorLegend': MetaIcon(img='legend-add',
+                                label=_('Add vector legend')),
     'addNorthArrow': MetaIcon(img='north-arrow-add',
                               label=_('Add north arrow')),
     'analyze': MetaIcon(img='layer-raster-analyze',
@@ -269,6 +271,8 @@
         self._onMenu(
             ((MapIcons["addLegend"],
               lambda evt: self.parent.AddLegend()),
+             (MapIcons["addVectorLegend"],
+              lambda evt: self.parent.AddLegendVect()),
              (MapIcons["addBarscale"],
               lambda evt: self.parent.AddBarscale()),
              (MapIcons["addNorthArrow"],

Modified: grass/trunk/gui/wxpython/mapwin/decorations.py
===================================================================
--- grass/trunk/gui/wxpython/mapwin/decorations.py	2016-08-04 20:28:44 UTC (rev 69084)
+++ grass/trunk/gui/wxpython/mapwin/decorations.py	2016-08-05 01:38:54 UTC (rev 69085)
@@ -236,6 +236,18 @@
         self._cmd = ['d.northarrow', self._defaultAt]
 
 
+class LegendVectController(OverlayController):
+
+    def __init__(self, renderer, giface):
+        OverlayController.__init__(self, renderer, giface)
+        self._name = 'vectleg'
+        self._removeLabel = _("Remove vector legend")
+        # different from default because the reference point is not in the
+        # middle
+        self._defaultAt = 'at=20.0,80.0'
+        self._cmd = ['d.legend.vect', self._defaultAt]
+
+
 class LegendController(OverlayController):
 
     def __init__(self, renderer, giface):

Modified: grass/trunk/lib/symbol/Makefile
===================================================================
--- grass/trunk/lib/symbol/Makefile	2016-08-04 20:28:44 UTC (rev 69084)
+++ grass/trunk/lib/symbol/Makefile	2016-08-05 01:38:54 UTC (rev 69085)
@@ -7,7 +7,7 @@
 
 SYMBOL_SRC := $(wildcard symbol/*/*)
 SYMBOL_DST := $(patsubst symbol/%,$(ETC)/symbol/%,$(SYMBOL_SRC))
-SYMBOL_DIRS := $(patsubst %,$(ETC)/symbol/%, demo basic extra geology n_arrows)
+SYMBOL_DIRS := $(patsubst %,$(ETC)/symbol/%, demo basic extra geology legend n_arrows)
 
 default: lib
 	$(MAKE) $(SYMBOL_DST)

Added: grass/trunk/lib/symbol/symbol/legend/area
===================================================================
--- grass/trunk/lib/symbol/symbol/legend/area	                        (rev 0)
+++ grass/trunk/lib/symbol/symbol/legend/area	2016-08-05 01:38:54 UTC (rev 69085)
@@ -0,0 +1,13 @@
+VERSION 1.0
+BOX -1 -1 1 1
+POLYGON
+  RING
+    LINE
+      -1 -0.75
+      1 -0.75
+      1 0.75
+      -1 0.75
+    END
+  END
+END
+

Added: grass/trunk/lib/symbol/symbol/legend/area_curved
===================================================================
--- grass/trunk/lib/symbol/symbol/legend/area_curved	                        (rev 0)
+++ grass/trunk/lib/symbol/symbol/legend/area_curved	2016-08-05 01:38:54 UTC (rev 69085)
@@ -0,0 +1,114 @@
+VERSION 1.0
+BOX -1 -1 1 1
+POLYGON
+  RING
+    LINE
+      -00.030 000.615
+      000.064 000.656
+      000.128 000.696
+      000.200 000.768
+      000.260 000.813
+      000.321 000.865
+      000.375 000.903
+      000.431 000.917
+      000.488 000.944
+      000.547 000.944
+      000.605 000.913
+      000.661 000.873
+      000.721 000.835
+      000.773 000.770
+      000.821 000.696
+      000.872 000.648
+      000.909 000.561
+      000.944 000.472
+      000.978 000.366
+      000.992 000.261
+      000.998 000.166
+      001.000 000.094
+      001.000 000.013
+      000.998 -00.071
+      000.976 -00.148
+      000.954 -00.223
+      000.932 -00.297
+      000.903 -00.376
+      000.876 -00.454
+      000.838 -00.527
+      000.804 -00.595
+      000.767 -00.660
+      000.727 -00.726
+      000.681 -00.801
+      000.644 -00.854
+      000.603 -00.903
+      000.551 -00.946
+      000.509 -00.976
+      000.471 -00.996
+      000.429 -01.000
+      000.388 -00.998
+      000.338 -00.996
+      000.289 -00.964
+      000.249 -00.923
+      000.204 -00.875
+      000.163 -00.825
+      000.126 -00.748
+      000.074 -00.670
+      000.038 -00.601
+      -00.008 -00.539
+      -00.051 -00.486
+      -00.095 -00.462
+      -00.144 -00.446
+      -00.194 -00.428
+      -00.242 -00.428
+      -00.286 -00.430
+      -00.337 -00.432
+      -00.377 -00.448
+      -00.420 -00.466
+      -00.461 -00.478
+      -00.509 -00.480
+      -00.552 -00.480
+      -00.595 -00.488
+      -00.642 -00.496
+      -00.687 -00.498
+      -00.731 -00.498
+      -00.779 -00.488
+      -00.822 -00.462
+      -00.864 -00.450
+      -00.925 -00.416
+      -00.953 -00.347
+      -00.984 -00.267
+      -00.995 -00.196
+      -01.000 -00.108
+      -01.000 -00.013
+      -01.000 000.078
+      -00.985 000.182
+      -00.972 000.273
+      -00.958 000.357
+      -00.941 000.431
+      -00.912 000.519
+      -00.892 000.599
+      -00.878 000.670
+      -00.852 000.728
+      -00.834 000.778
+      -00.800 000.839
+      -00.773 000.889
+      -00.739 000.942
+      -00.703 000.976
+      -00.667 000.994
+      -00.624 001.000
+      -00.586 000.992
+      -00.541 000.980
+      -00.495 000.956
+      -00.445 000.942
+      -00.403 000.919
+      -00.365 000.881
+      -00.332 000.835
+      -00.289 000.797
+      -00.239 000.760
+      -00.200 000.720
+      -00.157 000.672
+      -00.115 000.629
+      -00.075 000.617
+      000.023 000.629
+    END
+  END
+END
+

Added: grass/trunk/lib/symbol/symbol/legend/line
===================================================================
--- grass/trunk/lib/symbol/symbol/legend/line	                        (rev 0)
+++ grass/trunk/lib/symbol/symbol/legend/line	2016-08-05 01:38:54 UTC (rev 69085)
@@ -0,0 +1,8 @@
+VERSION 1.0
+BOX -1 -1 1 1
+STRING
+  LINE
+    -1 0
+    1 0
+  END
+END

Added: grass/trunk/lib/symbol/symbol/legend/line_crooked
===================================================================
--- grass/trunk/lib/symbol/symbol/legend/line_crooked	                        (rev 0)
+++ grass/trunk/lib/symbol/symbol/legend/line_crooked	2016-08-05 01:38:54 UTC (rev 69085)
@@ -0,0 +1,13 @@
+VERSION 1.0
+BOX -1 -1 1 1
+STRING
+  LINE
+    -1 -0.33
+    -0.33  0.33
+     0.33 -0.33
+     1  0.33
+	 0.33 -0.33
+	-0.33  0.33
+	-1 -0.33
+  END
+END



More information about the grass-commit mailing list