[GRASS-dev] ps.map: simple pattern code
E. Jorge Tizado
ejtizado at ono.com
Mon Feb 9 13:48:12 EST 2009
Hi,
A simple code (to efficiency and avoid mistakes) are:
File: eps.c
-----------
- replace
int pat_save(FILE * fp, char *epsf, char *name)
by
int pat_store(FILE *fp, int code, char *epsf,
double pwidth, double sc,
int R, int G, int B)
{
char buf[1024];
FILE *epsfp;
double llx, lly, urx, ury;
if ((epsfp = fopen(epsf, "r")) == NULL)
return (0);
eps_bbox(epsf, &llx, &lly, &urx, &ury);
fprintf(fp, "/PATTERN%d\n", code);
fprintf(PS.fp, "<< /PatternType 1\n /PaintType 1\n /TilingType 1\n");
fprintf(PS.fp, " /BBox [%f %f %f %f]\n", llx*sc, lly*sc, urx*sc, ury*sc);
fprintf(PS.fp, " /XStep %f\n /YStep %f\n", (urx-llx)*sc, (ury-lly)*sc);
fprintf(PS.fp, " /PaintProc\n");
fprintf(PS.fp, " { begin\n");
fprintf(PS.fp, " %.4f %.4f scale\n", sc, sc);
fprintf(PS.fp, " %.4f %.4f %.4f C\n", R/255., G/255., B/255.);
fprintf(PS.fp, " %.8f W\n", pwidth);
while (fgets(buf, 1024, epsfp) != NULL)
{
if (strncmp(buf, "%!PS-Adobe", 10) == 0 ||
strncmp(buf, "%%BoundingBox", 13) == 0)
continue;
fprintf(fp, " %s", buf);
}
fprintf(PS.fp, " end }\n");
fprintf(PS.fp, ">> store\n");
fclose(epsfp);
return (1);
}
File: vareas.c
--------------
replace code by
if (vector.layer[vec].pat != NULL) { /* use pattern */
pat_store(PS.fp, vec, vector.layer[vec].pat,
vector.layer[vec].pwidth, vector.layer[vec].scale,
vector.layer[vec].fcolor.r,
vector.layer[vec].fcolor.g,
vector.layer[vec].fcolor.b); /* define pattern, TODO check if exist */
/* use pattern by number, now */
fprintf(PS.fp, "/Pattern setcolorspace ");
fprintf(PS.fp, "PATTERN%d matrix makepattern setcolor\n", vec);
File: vlegend.c
---------------
replace code by
if (vector.layer[i].pat != NULL) {
/* use pattern by number, now */
fprintf(PS.fp, "/Pattern setcolorspace ");
fprintf(PS.fp, "PATTERN%d matrix makepattern setcolor\n", i);
}
--
E. Jorge Tizado
More information about the grass-dev
mailing list