From: <and...@us...> - 2008-11-19 15:34:11
|
Revision: 8998 http://plplot.svn.sourceforge.net/plplot/?rev=8998&view=rev Author: andrewross Date: 2008-11-19 15:34:01 +0000 (Wed, 19 Nov 2008) Log Message: ----------- Change postscript driver from using "fill" to "fill and stroke" when filling in regions. This solves the problem with postscript viewers which use anti-aliasing. The solution is analogous to that used in the pscairo driver. Modified Paths: -------------- trunk/drivers/ps.c Modified: trunk/drivers/ps.c =================================================================== --- trunk/drivers/ps.c 2008-11-19 14:32:18 UTC (rev 8997) +++ trunk/drivers/ps.c 2008-11-19 15:34:01 UTC (rev 8998) @@ -340,7 +340,11 @@ fprintf(OF, "/A {0.5 0 360 arc} def\n"); fprintf(OF, "/S {stroke} def\n"); fprintf(OF, "/Z {stroke newpath} def\n"); - fprintf(OF, "/F {fill} def\n"); + /* Modify to use fill and stroke for better output with + * anti-aliasing */ + /*fprintf(OF, "/F {fill} def\n");*/ + fprintf(OF, "/F {closepath gsave fill grestore stroke} def "); + fprintf(OF, "/N {newpath} def"); fprintf(OF, "/C {setrgbcolor} def\n"); fprintf(OF, "/G {setgray} def\n"); fprintf(OF, "/W {setlinewidth} def\n"); @@ -643,7 +647,7 @@ /* First time through start with a x y moveto */ if (n == 0) { - sprintf(outbuf, "%d %d M", x, y); + sprintf(outbuf, "N %d %d M", x, y); dev->llx = MIN(dev->llx, x); dev->lly = MIN(dev->lly, y); dev->urx = MAX(dev->urx, x); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2009-12-08 00:00:44
|
Revision: 10706 http://plplot.svn.sourceforge.net/plplot/?rev=10706&view=rev Author: airwin Date: 2009-12-08 00:00:36 +0000 (Tue, 08 Dec 2009) Log Message: ----------- Style previous changes. Modified Paths: -------------- trunk/drivers/ps.c Modified: trunk/drivers/ps.c =================================================================== --- trunk/drivers/ps.c 2009-12-07 22:24:51 UTC (rev 10705) +++ trunk/drivers/ps.c 2009-12-08 00:00:36 UTC (rev 10706) @@ -738,9 +738,9 @@ void proc_str( PLStream *pls, EscText *args ) { - PLFLT *t = args->xform, tt[4]; /* Transform matrices */ + PLFLT *t = args->xform, tt[4]; /* Transform matrices */ PLFLT theta, shear, stride; /* Rotation angle and shear from the matrix */ - PLFLT ft_ht, offset; /* Font height and offset */ + PLFLT ft_ht, offset; /* Font height and offset */ PLFLT cs, sn, l1, l2; PSDev *dev = (PSDev *) pls->dev; char *font, esc; @@ -847,8 +847,8 @@ /* The transform matrix has only rotations and shears; extract them */ plRotationShear( t, &theta, &shear, &stride ); - cs = cos( theta ); - sn = sin( theta ); + cs = cos( theta ); + sn = sin( theta ); tt[0] = t[0] * cs + t[2] * sn; tt[1] = t[1] * cs + t[3] * sn; tt[2] = -t[0] * sn + t[2] * cs; @@ -874,16 +874,16 @@ offset = -ENLARGE * ft_ht / 2.; /* Determine the adjustment for page orientation */ - theta -= PI/2. * pls->diorot; - args->y += (PLINT) ( offset * cos( theta )); - args->x -= (PLINT) ( offset * sin( theta )); + theta -= PI / 2. * pls->diorot; + args->y += (PLINT) ( offset * cos( theta )); + args->x -= (PLINT) ( offset * sin( theta )); /* ps driver is rotated by default */ plRotPhy( ORIENTATION, dev->xmin, dev->ymin, dev->xmax, dev->ymax, &( args->x ), &( args->y )); /* Correct for the fact ps driver uses landscape by default */ - theta += PI/2.; + theta += PI / 2.; /* Output */ /* Set clipping */ @@ -910,7 +910,7 @@ fprintf( OF, " %d %d M\n", args->x, args->y ); /* Save the current position and set the string rotation */ - fprintf( OF, "gsave %.3f R\n", TRMFLT( theta*180./PI )); + fprintf( OF, "gsave %.3f R\n", TRMFLT( theta * 180. / PI )); /* Purge escape sequences from string, so that postscript can find it's * length. The string length is computed with the current font, and can @@ -1038,8 +1038,8 @@ * 0.6 * character height. Add on an extra 1.5 * character height * for safety. */ - cs = cos( theta ); - sn = sin( theta ); + cs = cos( theta ); + sn = sin( theta ); l1 = -i * args->just; l2 = i * ( 1. - args->just ); /* Factor of 0.6 is an empirical fudge to convert character This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2010-04-20 17:45:22
|
Revision: 10927 http://plplot.svn.sourceforge.net/plplot/?rev=10927&view=rev Author: airwin Date: 2010-04-20 17:45:12 +0000 (Tue, 20 Apr 2010) Log Message: ----------- Uncomment pldebug calls that were commented by me long ago in excessive efficiency zeal (since pldebug does little unless the -debug option has been specified). Also, correct one pldebug argument from cur_str[j] ==> cur_str[s-1]. Modified Paths: -------------- trunk/drivers/ps.c Modified: trunk/drivers/ps.c =================================================================== --- trunk/drivers/ps.c 2010-04-19 16:23:26 UTC (rev 10926) +++ trunk/drivers/ps.c 2010-04-20 17:45:12 UTC (rev 10927) @@ -782,7 +782,7 @@ "internal PLplot error" ); return; } - /*pldebug("proc_str", "fci = 0x%x, font name = %s\n", fci, font);*/ + pldebug("proc_str", "fci = 0x%x, font name = %s\n", fci, font); if ( !strcmp( font, "Symbol" ) ) { nlookup = number_of_entries_in_unicode_to_symbol_table; @@ -811,7 +811,7 @@ plabort( "proc_str: string-supplied FCI inconsistent with Type1Lookup;" ); return; } - /*pldebug("proc_str", "string-supplied FCI = 0x%x, font name = %s\n", cur_text[j], fonts[f]);*/ + pldebug("proc_str", "string-supplied FCI = 0x%x, font name = %s\n", cur_text[j], fonts[f]); if ( !strcmp( fonts[f++], "Symbol" ) ) { lookup = unicode_to_symbol_lookup_table; @@ -830,8 +830,8 @@ else if ( s + 1 < PROC_STR_STRING_LENGTH ) { cur_str[s++] = plunicode2type1( cur_text[j], lookup, nlookup ); - /*pldebug("proc_str", "unicode = 0x%x, type 1 code = %d\n", - * cur_text[j], cur_str[j]);*/ + pldebug("proc_str", "unicode = 0x%x, type 1 code = %d\n", + cur_text[j], cur_str[s-1]); } } cur_str[s] = '\0'; @@ -964,7 +964,7 @@ return; } font = fonts[f++]; - /*pldebug("proc_str", "string-specified fci = 0x%x, font name = %s\n", fci, font);*/ + pldebug("proc_str", "string-specified fci = 0x%x, font name = %s\n", fci, font); continue; } else switch ( *cur_strp++ ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2010-04-20 20:37:58
|
Revision: 10928 http://plplot.svn.sourceforge.net/plplot/?rev=10928&view=rev Author: airwin Date: 2010-04-20 20:37:51 +0000 (Tue, 20 Apr 2010) Log Message: ----------- Normally PL_TEST_TYPE1 is #undef(ined), but if you edit this file to #define PL_TEST_TYPE1, then bypass the unicode to Type1 index translation altogether so that unicode indices from 0-255 are interpreted directly as Type1 font indices. This option allows a look at all accessible Typel glyphs without any obfuscation by unicode to Type1 index translation. As far as I know this functionality is only useful for test_type1.py. Style previous changes to ps.c. Modified Paths: -------------- trunk/drivers/ps.c Modified: trunk/drivers/ps.c =================================================================== --- trunk/drivers/ps.c 2010-04-20 17:45:12 UTC (rev 10927) +++ trunk/drivers/ps.c 2010-04-20 20:37:51 UTC (rev 10928) @@ -782,7 +782,7 @@ "internal PLplot error" ); return; } - pldebug("proc_str", "fci = 0x%x, font name = %s\n", fci, font); + pldebug( "proc_str", "fci = 0x%x, font name = %s\n", fci, font ); if ( !strcmp( font, "Symbol" ) ) { nlookup = number_of_entries_in_unicode_to_symbol_table; @@ -811,7 +811,7 @@ plabort( "proc_str: string-supplied FCI inconsistent with Type1Lookup;" ); return; } - pldebug("proc_str", "string-supplied FCI = 0x%x, font name = %s\n", cur_text[j], fonts[f]); + pldebug( "proc_str", "string-supplied FCI = 0x%x, font name = %s\n", cur_text[j], fonts[f] ); if ( !strcmp( fonts[f++], "Symbol" ) ) { lookup = unicode_to_symbol_lookup_table; @@ -829,9 +829,19 @@ } else if ( s + 1 < PROC_STR_STRING_LENGTH ) { +#undef PL_TEST_TYPE1 +#ifdef PL_TEST_TYPE1 + // Use this test case only to conveniently view type 1 font + // possibilities (as in test_type1.py example). + if ( 0 <= cur_text[j] && cur_text[j] < 256 ) + cur_str[s++] = cur_text[j]; + else + cur_str[s++] = 32; +#else cur_str[s++] = plunicode2type1( cur_text[j], lookup, nlookup ); - pldebug("proc_str", "unicode = 0x%x, type 1 code = %d\n", - cur_text[j], cur_str[s-1]); +#endif + pldebug( "proc_str", "unicode = 0x%x, type 1 code = %d\n", + cur_text[j], cur_str[s - 1] ); } } cur_str[s] = '\0'; @@ -964,7 +974,7 @@ return; } font = fonts[f++]; - pldebug("proc_str", "string-specified fci = 0x%x, font name = %s\n", fci, font); + pldebug( "proc_str", "string-specified fci = 0x%x, font name = %s\n", fci, font ); continue; } else switch ( *cur_strp++ ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2010-04-29 18:25:50
|
Revision: 10952 http://plplot.svn.sourceforge.net/plplot/?rev=10952&view=rev Author: airwin Date: 2010-04-29 18:25:44 +0000 (Thu, 29 Apr 2010) Log Message: ----------- If standard font lookup fails for this Type 1 font device, then switch to Type 1 symbol font and vice versa. But if that second lookup also fails, then accept a blank result and move on. This fix appears to give good results for examples 3, 6, 7, and 23. For the examples 6 and 7 tests where hrshsym has an effect, I used -drvopt hrshsym=0 (which avoids Hershey fonts for plpoin and plsym). I also used the -DHERSHEY_FALLBACK=OFF cmake option which replaces Hershey glyphs that do not have a recognized unicode equivalent with a blank. Thus, in all cases Type 1 fonts were used for these tests rather than Hershey fonts. This commit should finally complete the Type1 font (ps and pdf) device driver work. Modified Paths: -------------- trunk/drivers/ps.c Modified: trunk/drivers/ps.c =================================================================== --- trunk/drivers/ps.c 2010-04-29 17:54:53 UTC (rev 10951) +++ trunk/drivers/ps.c 2010-04-29 18:25:44 UTC (rev 10952) @@ -763,10 +763,10 @@ /* unicode only! so test for it. */ if ( args->unicode_array_len > 0 ) { - int j, s, f, last_chance = 0; + int j, s, f; char *fonts[PROC_STR_STRING_LENGTH]; const PLUNICODE *cur_text; - PLUNICODE fci; + PLUNICODE fci, fci_save; /* translate from unicode into type 1 font index. */ /* * Choose the font family, style, variant, and weight using @@ -775,10 +775,10 @@ plgesc( &esc ); plgfci( &fci ); + fci_save = fci; font = get_font( dev, fci ); cur_text = args->unicode_array; - f = s = j = 0; - while ( j < args->unicode_array_len ) + for ( f = s = j = 0; j < args->unicode_array_len; j++ ) { if ( cur_text[j] & PL_FCI_MARK ) { @@ -788,13 +788,14 @@ */ if ( ( f < PROC_STR_STRING_LENGTH ) && ( s + 3 < PROC_STR_STRING_LENGTH ) ) { - fonts[f++] = get_font( dev, cur_text[j] ); + fci_save = cur_text[j]; + fonts[f++] = get_font( dev, fci_save ); cur_str[s++] = esc; cur_str[s++] = 'f'; cur_str[s++] = 'f'; } } - else if ( s + 1 < PROC_STR_STRING_LENGTH ) + else if ( s + 4 < PROC_STR_STRING_LENGTH ) { #undef PL_TEST_TYPE1 #ifdef PL_TEST_TYPE1 @@ -813,12 +814,42 @@ else font = get_font( dev, fci ); #else - cur_str[s++] = plunicode2type1( cur_text[j], dev->lookup, dev->nlookup ); + cur_str[s] = plunicode2type1( cur_text[j], dev->lookup, dev->nlookup ); + if ( cur_text[j] != ' ' && cur_str[s] == ' ' ) + { + // failed lookup. + if ( !dev->if_symbol_font ) + { + // failed standard font lookup. Use symbol + // font instead which will return a blank if + // that fails as well. + fonts[f++] = get_font( dev, 0 ); + cur_str[s++] = esc; + cur_str[s++] = 'f'; + cur_str[s++] = 'f'; + cur_str[s++] = plunicode2type1( cur_text[j], dev->lookup, dev->nlookup ); + } + else + { + // failed symbol font lookup. Use last standard + // font instead which will return a blank if + // that fails as well. + fonts[f++] = get_font( dev, fci_save ); + cur_str[s++] = esc; + cur_str[s++] = 'f'; + cur_str[s++] = 'f'; + cur_str[s++] = plunicode2type1( cur_text[j], dev->lookup, dev->nlookup ); + } + } + else + { + // lookup succeeded. + s++; + } #endif pldebug( "proc_str", "unicode = 0x%x, type 1 code = %d\n", cur_text[j], cur_str[s - 1] ); } - j++; } cur_str[s] = '\0'; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2011-07-06 05:49:04
|
Revision: 11797 http://plplot.svn.sourceforge.net/plplot/?rev=11797&view=rev Author: airwin Date: 2011-07-06 05:48:58 +0000 (Wed, 06 Jul 2011) Log Message: ----------- Use plP_script_scale method to replace idiosyncratic method of determining superscript/subscript font sizes and offsets. The test_superscript_subscript.py results are much improved by this change. Modified Paths: -------------- trunk/drivers/ps.c Modified: trunk/drivers/ps.c =================================================================== --- trunk/drivers/ps.c 2011-07-06 04:50:37 UTC (rev 11796) +++ trunk/drivers/ps.c 2011-07-06 05:48:58 UTC (rev 11797) @@ -736,6 +736,14 @@ } +// 0.8 should mimic the offset of first superscript/subscript level +// implemented in plstr (plsym.c) for Hershey fonts. However, when +// comparing with -dev xwin and -dev xcairo results changing this +// factor to 0.6 appears to offset the centers of the letters +// appropriately while 0.8 gives much poorer agreement with the +// other devices. +# define RISE_FACTOR 0.6 + //-------------------------------------------------------------------------- // proc_str() // @@ -773,6 +781,8 @@ char *fonts[PROC_STR_STRING_LENGTH]; const PLUNICODE *cur_text; PLUNICODE fci, fci_save; + PLFLT old_sscale, sscale, old_soffset, soffset, dup; + PLINT level = 0; // translate from unicode into type 1 font index. // // Choose the font family, style, variant, and weight using @@ -993,22 +1003,30 @@ else switch ( *cur_strp++ ) { - case 'd': + case 'd': //subscript case 'D': - if ( up > 0. ) - scale *= 1.25; // Subscript scaling parameter - else - scale *= 0.8; // Subscript scaling parameter - up -= font_factor * ENLARGE * ft_ht / 2.; + plP_script_scale( FALSE, &level, + &old_sscale, &sscale, &old_soffset, &soffset ); + scale = sscale; + // The correction for the difference in magnitude + // between the baseline and middle coordinate systems + // for subscripts should be + // -0.5*(base font size - superscript/subscript font size). + dup = -0.5 * ( 1.0 - sscale ); + up = -font_factor * ENLARGE * ft_ht * ( RISE_FACTOR * soffset + dup ); break; - case 'u': + case 'u': //superscript case 'U': - if ( up < 0. ) - scale *= 1.25; // Subscript scaling parameter - else - scale *= 0.8; // Subscript scaling parameter - up += font_factor * ENLARGE * ft_ht / 2.; + plP_script_scale( TRUE, &level, + &old_sscale, &sscale, &old_soffset, &soffset ); + scale = sscale; + // The correction for the difference in magnitude + // between the baseline and middle coordinate systems + // for superscripts should be + // 0.5*(base font size - superscript/subscript font size). + dup = 0.5 * ( 1.0 - sscale ); + up = font_factor * ENLARGE * ft_ht * ( RISE_FACTOR * soffset + dup ); break; // ignore the next sequences This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2011-09-12 11:20:21
|
Revision: 11917 http://plplot.svn.sourceforge.net/plplot/?rev=11917&view=rev Author: andrewross Date: 2011-09-12 11:20:15 +0000 (Mon, 12 Sep 2011) Log Message: ----------- Set default values for pls->xoffset and pls->yoffset in postscript driver. This restores the old default behaviour, while still allowing the offsets to be set with plspage. Modified Paths: -------------- trunk/drivers/ps.c Modified: trunk/drivers/ps.c =================================================================== --- trunk/drivers/ps.c 2011-09-07 19:31:04 UTC (rev 11916) +++ trunk/drivers/ps.c 2011-09-12 11:20:15 UTC (rev 11917) @@ -167,6 +167,8 @@ { pls->xlength = 540; pls->ylength = 720; + pls->xoffset = 32; + pls->yoffset = 32; } if ( pls->xdpi <= 0 ) pls->xdpi = 72.; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |