Changeset 15


Ignore:
Timestamp:
Aug 17, 2008, 5:44:54 PM (6 years ago)
Author:
marius
Message:

adding support for naming ways

Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/osm05.c

    r14 r15  
    128128                        sscanf((char *) *(atts+1),"%hi",& cWay->layer); 
    129129                    return; 
     130                } else if(strcmp(cTag->key, "name") == 0) { 
     131                    free(cTag); 
     132                    cTag = NULL; 
     133                    if (cWay) 
     134                        cWay->name = strlist_get(valStrings,(char *) *(atts+1)); 
     135                    return; 
    130136                } 
    131137                cTag->value = strlist_get(valStrings,(char *) *(atts+1)); 
     
    160166       cWay->tag = NULL; 
    161167       cWay->nd = NULL; 
     168       cWay->name = NULL; 
    162169       cWay->layer = 0; 
    163170 
  • trunk/osm05.h

    r8 r15  
    4848        int id; 
    4949        short int layer; 
     50        char    *name; 
    5051        osmTag  *tag; 
    5152        osmNd   *nd; 
  • trunk/renderer.c

    r8 r15  
    3232#include "ruleset.h" 
    3333#include "strlist.h" 
     34#include "textpath.h" 
    3435 
    3536// External Vars 
     
    158159                                    (double)draw->color[2]/(double)255); 
    159160        cairo_stroke_preserve(info->cr[z]); 
     161    } 
     162} 
     163 
     164/* 
     165 * function: drawText 
     166 */ 
     167void drawText(renderInfo *info, char *text, cfgDraw *draw) { 
     168    if (opts->debug > 1) 
     169        fprintf(stdout,"drawText\n"); 
     170 
     171    int z; 
     172    for (z=0;z<=opts->maxlayer-opts->minlayer;z++) { 
     173        if (opts->minlayer+z<draw->minlayer || opts->minlayer+z>draw->maxlayer) 
     174            continue; 
     175             
     176        cairo_select_font_face (info->cr[z], "Sans", CAIRO_FONT_SLANT_NORMAL, 
     177                                        CAIRO_FONT_WEIGHT_NORMAL); 
     178        cairo_set_source_rgb (info->cr[z], (double)draw->color[0]/(double)255, 
     179                              (double)draw->color[1]/(double)255, 
     180                              (double)draw->color[2]/(double)255); 
     181        cairo_set_font_size (info->cr[z], draw->width*LINESIZE(z)); 
     182        textPath(info->cr[z], text); 
    160183    } 
    161184} 
     
    319342                } 
    320343                strokePath(info); 
     344                 
     345                paths = 0; 
     346                // Text Rendering 
     347                draw = rule->draw; 
     348                while(draw) { 
     349                    switch(draw->type) { 
     350                        case TEXT: 
     351                            paths++; 
     352                            break; 
     353                    } 
     354                    if(paths) 
     355                        break; 
     356                    draw = draw->next; 
     357                } 
     358                if(paths) { 
     359                    LIST_FOREACH(way, osm->ways) { 
     360                        //Only objects on current layer 
     361                        if(way->layer != l || way->name == NULL) 
     362                            continue; 
     363 
     364                        if( checkRule(rule, way->tag, WAY) == 1) { 
     365                            drawPath(info, way->nd); 
     366                            drawText(info, way->name, draw); 
     367                        } 
     368                    } 
     369 
     370                } 
     371                strokePath(info); 
    321372            } 
    322373            if (rule->ndraw != NULL) { // Draw Else after 
  • trunk/rule.xml

    r7 r15  
    122122        </rule> 
    123123        <rule e="way" k="highway" v="residential|unclassified|pedestrian"> 
    124             <line color="#777777" width="2" layer="12:17"/> 
    125             <line color="#ffffff" width="1" layer="12:17"/> 
     124            <line color="#777777" width="3" layer="12:17"/> 
     125            <line color="#ffffff" width="2" layer="12:17"/> 
     126            <text color="#000000" width="2"/> 
    126127        </rule> 
    127128        <rule e="way" k="highway" v="tertiary"> 
    128129            <line color="#777777" width="3"/> 
    129130            <line color="#f7f496" width="2"/> 
     131            <text color="#000000" width="2"/> 
    130132        </rule> 
    131133        <rule e="way" k="highway" v="secondary"> 
    132134            <line color="#777777" width="4"/> 
    133135            <line color="#FDBF6F" width="3"/> 
     136            <text color="#000000" width="3"/> 
    134137        </rule> 
    135138        <rule e="way" k="highway" v="primary"> 
    136139            <line color="#777777" width="4"/> 
    137140            <line color="#e46d71" width="3"/> 
     141            <text color="#000000" width="3"/> 
    138142        </rule> 
    139143        <rule e="way" k="highway" v="trunk"> 
  • trunk/ruleset.c

    r14 r15  
    157157    else if ( 
    158158        strcmp(name, "polygone") == 0 || 
    159         strcmp(name, "line") == 0 
     159        strcmp(name, "line") == 0 || 
     160        strcmp(name, "text") == 0 
    160161    ) { 
    161162        // Create Draw 
     
    171172        else if (strcmp(name, "line") == 0) 
    172173            new->type = LINE; 
     174        else if (strcmp(name, "text") == 0) 
     175            new->type = TEXT; 
    173176 
    174177        while (*atts != NULL) { 
     
    181184                sscanf((char *) *(atts+1),"%f",&new->width); 
    182185            } else if(strcmp((char *) *(atts), "pattern") == 0) { 
    183                 new->pattern = strlist_get(patternStrings,*(atts+1)); 
     186                new->pattern = strlist_get(patternStrings,(char *)*(atts+1)); 
    184187            } else if(strcmp((char *) *(atts), "layer") == 0) { 
    185188                sscanf((char *) *(atts+1),"%hi:%hi", 
  • trunk/ruleset.h

    r8 r15  
    2727#define LINE        1 
    2828#define POLYGONE    2 
    29 #define TEXT        4 
     29#define TEXT        3 
    3030 
    3131/* 
  • trunk/textpath.c

    r11 r15  
    1919#include <math.h> 
    2020#include <cairo.h> 
     21#include <stdio.h> 
    2122#include <stdlib.h> 
    2223 
     
    132133} 
    133134 
    134 void textPath(cairo_t *cr, char *text, cfgDraw *draw) { 
     135void textPath(cairo_t *cr, char *text) { 
    135136    int i, n; 
    136137    double *lengths, x, y; 
     
    142143    lengths = pathLength(path); 
    143144 
    144     cairo_select_font_face (cr, "Sans", CAIRO_FONT_SLANT_NORMAL, 
    145                                         CAIRO_FONT_WEIGHT_NORMAL); 
    146     cairo_set_source_rgb (cr, (double)draw->color[0]/(double)255, 
    147                               (double)draw->color[1]/(double)255, 
    148                               (double)draw->color[2]/(double)255); 
    149     cairo_set_font_size (cr, draw->width); 
    150  
    151145    cairo_text_extents (cr, text, &extents); 
    152146 
    153     n = (int) (lengths[path->num_data]/extents.width/3); 
     147    n = (int) (lengths[path->num_data]/extents.width/6); 
    154148    if (n == 0 && lengths[path->num_data] > extents.width) 
    155149        n = 1; 
    156  
     150     
    157151    cairo_new_path (cr); 
    158152 
  • trunk/textpath.h

    r10 r15  
    2525typedef void (*trans_point_func_t) (cairo_path_t *path, double *lengths, double *x, double *y); 
    2626 
    27 void textPath(cairo_t *cr, char *text, cfgDraw *draw); 
     27void textPath(cairo_t *cr, char *text); 
    2828 
    2929#endif /* TEXTPATH_H */ 
Note: See TracChangeset for help on using the changeset viewer.